Envío de SMS en C# (.NET): Integración con API de servicios SMS

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Envío de SMS en C# (.NET): Guía completa de integración con API



En el mundo moderno, las notificaciones por SMS siguen siendo una de las formas más confiables de comunicarse con el usuario. En el ecosistema de C# (.NET), existen múltiples enfoques para enviar mensajes, desde solicitudes HTTP directas hasta el uso de paquetes NuGet especializados. En este artículo, analizaremos cómo configurar el envío de SMS a través de servicios populares (Twilio, sms.ru, Smsc) usando una implementación pura con HttpClient, así como una biblioteca lista para usar con proveedores rusos.



Elección del enfoque: ¿biblioteca o HTTP puro?

Para enviar SMS en C#, hay dos caminos principales:

  • Usar el SDK oficial (por ejemplo, Twilio para .NET): proporciona una interfaz tipificada, manejo de errores integrado y documentación.
  • Trabajo directo con la API REST mediante HttpClient: control total sobre la solicitud, dependencias mínimas, posibilidad de trabajar con cualquier proveedor.

La segunda opción es preferible para fines educativos y proyectos que requieran flexibilidad. La analizaremos en detalle.



Implementación básica de envío de SMS a través de API HTTP

Crearemos una clase SmsService que enviará mensajes a través de la API de sms.ru (o cualquier otro servicio con formato similar).



using System;using System.Net.Http;using System.Threading.Tasks;

public class SmsService{ private readonly HttpClient _httpClient; private readonly string _apiKey;

public SmsService(string apiKey) { _httpClient = new HttpClient(); _apiKey = apiKey; }

public async Task<string> SendSmsAsync(string phone, string message) { var url = $"https://sms.ru/sms/send?api_id={_apiKey}&to={phone}&msg={Uri.EscapeDataString(message)}&json=1"; var response = await _httpClient.GetAsync(url); return await response.Content.ReadAsStringAsync(); }}


Uso:

var sms = new SmsService("TU_CLAVE_API");string result = await sms.SendSmsAsync("+79123456789", "¡Hola! Este es un mensaje de prueba.");Console.WriteLine(result);


Optimización: asincronía y manejo de errores

En un proyecto real, es necesario agregar validación del número, reintentos en caso de fallos y registro de eventos. Versión mejorada:



public async Task<SmsResult> SendSmsAsync(string phone, string message){    try    {        if (string.IsNullOrWhiteSpace(phone) || phone.Length < 10)            return new SmsResult { Success = false, Error = "Formato de número inválido" };

var url = $"https://sms.ru/sms/send?api_id={_apiKey}&to={phone}&msg={Uri.EscapeDataString(message)}&json=1"; var response = await _httpClient.GetAsync(url); var json = await response.Content.ReadAsStringAsync();

// Análisis de JSON (se puede usar System.Text.Json) var result = JsonSerializer.Deserialize<SmsApiResponse>(json); return new SmsResult { Success = result?.Status == "OK", Response = json }; } catch (HttpRequestException ex) { return new SmsResult { Success = false, Error = $"Error de red: {ex.Message}" }; }}


Para analizar la respuesta, cree un modelo simple:

public class SmsApiResponse{    public string Status { get; set; }    public int Balance { get; set; }}


Biblioteca lista para usar: Twilio para .NET

Si necesita una solución lista para producción, use Twilio SDK (NuGet: Twilio). Ejemplo:



using Twilio;using Twilio.Rest.Api.V2010.Account;

TwilioClient.Init("ACCOUNT_SID", "AUTH_TOKEN");

var message = MessageResource.Create( body: "¡Hola desde C#!", from: new PhoneNumber("+1234567890"), to: new PhoneNumber("+79123456789"));

Console.WriteL

Recommendations