Envío de SMS en C# (.NET): Integración con API de servicios SMS
En el mundo moderno, el envío de mensajes SMS sigue siendo una tarea demandada para notificaciones, autenticación de dos factores y alertas a clientes. En el ecosistema .NET no hay una biblioteca integrada para enviar SMS; todas las operaciones se realizan a través de solicitudes HTTP a las API de proveedores de SMS externos. En este artículo, analizaremos cómo organizar el envío de SMS en C# usando HttpClient y veremos ejemplos de integración con servicios populares.
Selección del proveedor de SMS y parámetros clave
Antes de comenzar, es necesario registrarse en uno de los servicios de SMS. Los más populares son: Twilio, Vonage (Nexmo), SMS Aero, СМСЦентр. Todos proporcionan una API REST. Para enviar, necesitará:
- Clave API / Token — identificador único de su cuenta.
- Secreto / Contraseña — clave secreta para la autenticación.
- Número del remitente (Sender ID) — cadena que se mostrará al destinatario (por ejemplo, su marca).
- Número del destinatario — en formato internacional (por ejemplo, +71234567890).
Implementación básica en C# con HttpClient
Para trabajar con solicitudes HTTP en .NET se utiliza la clase System.Net.Http.HttpClient. A continuación se muestra un ejemplo de envío de SMS a través de la API de Twilio (uno de los servicios más populares).
using System;using System.Net.Http;using System.Text;using System.Threading.Tasks;
public class SmsSender{ private readonly HttpClient _httpClient; private readonly string _accountSid; private readonly string _authToken;
public SmsSender(string accountSid, string authToken) { _accountSid = accountSid; _authToken = authToken; _httpClient = new HttpClient(); }
public async Task SendSmsAsync(string to, string from, string message) { // URL para la API de Twilio string url = $"https://api.twilio.com/2010-04-01/Accounts/{_accountSid}/Messages.json";
// Formamos los datos del formulario var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("To", to), new KeyValuePair<string, string>("From", from), new KeyValuePair<string, string>("Body", message) });
// Añadimos autenticación Basic string auth = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{_accountSid}:{_authToken}")); _httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", auth);
// Enviamos la solicitud POST HttpResponseMessage response = await _httpClient.PostAsync(url, content);
if (response.IsSuccessStatusCode) { string responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine($"SMS enviado exitosamente: {responseBody}"); } else { string error = await response.Content.ReadAsStringAsync(); Console.WriteLine($"Error: {response.StatusCode} - {error}"); } }}Uso de la clase
class Program{ static async Task Main(string[] args) { // Reemplace con sus datos del panel de Twilio string accountSid = "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; string authToken = "your_auth_token_here";
var sender = new SmsSender(accountSid, authToken); await sender.SendSmsAsync( to: "+71234567890", from: "+15017122661", // número asignado por Twilio message: "¡Hola! Este es un SMS de prueba desde C#." ); }}Proveedores alternativos: ejemplo con Vonage (Nexmo)
Para la API de Vonage se utiliza un formato diferente