Cómo enviar SMS desde C#.Net
Para enviar SMS desde C#.Net tienes varias opciones. Puedes usar la biblioteca API de SMS en C# de Ozeki, o puedes usar solicitudes HTTP. Para enviar un mensaje de texto en C#.Net, la mejor opción depende del tipo de proyecto C# que utilices. Si escribes código para servir solicitudes web, como C# en una página ASP, deberías optar por las solicitudes HTTP. Si creas una aplicación de escritorio, un servicio de Windows o una aplicación móvil para Android o iPhone, es mejor usar la biblioteca API de SMS en C#. Esta guía (Figura 1) se centra únicamente en el envío de SMS. Si necesitas tanto enviar como recibir, puedes comenzar leyendo primero la guía La mejor API de SMS en C# en 2025.
Descargar la biblioteca API de SMS en C# (código fuente gratuito)
Un ejemplo completamente funcional de la API de SMS en C# se puede descargar desde la siguiente URL. Este
código se proporciona sin costo alguno y puede ser modificado y redistribuido libremente por ti.
Descargar: OzekiConsole.zip (51 Kb)
Cómo enviar SMS desde una aplicación de escritorio en C#
Enviar un mensaje de texto desde una aplicación de escritorio (o una aplicación de consola o servicio de Windows) tiene requisitos diferentes a enviar un SMS desde un sitio web. Una aplicación de escritorio se ejecuta durante un tiempo significativo (muchos minutos, días o incluso semanas). En este caso, es beneficioso mantener una conexión permanente con la pasarela SMS. Usar solicitudes web de un solo uso no es una buena opción para estas aplicaciones. El mayor beneficio de mantener una conexión permanente es que obtienes información sobre eventos de entrega de mensajes, como informes de envío, informes de entrega y fallos en la entrega de SMS.
Para enviar SMS desde una aplicación de escritorio en C#, usa primero el ejemplo proporcionado (como puedes ver en la Figura 2):
- Conéctate a la pasarela SMS de Ozeki usando el nombre de usuario y contraseña ozx que hayas creado en la interfaz de usuario de la pasarela SMS. Para conectarte, usa el comando "connect hostname:port username password".
- Envía tu mensaje de texto. Esto se puede hacer escribiendo "send phonenumber message text" si usas la aplicación de consola de ejemplo para enviar.
- Espera los informes de envío de SMS y los informes de entrega de SMS. Puedes notar que estos informes se imprimen en la pantalla y contienen el mismo ID de mensaje que se devolvió cuando enviaste el SMS.
Ejemplo de aplicación de consola escrita en C#.Net. El código fuente de esta aplicación de consola está disponible en la página API de SMS en C# con código fuente.
El ejemplo anterior te muestra los pasos necesarios. Puedes ver que primero se establece una conexión permanente con la pasarela SMS, y después de esto, se envía el mensaje. Finalmente, ves el informe de aceptación del mensaje y el informe de envío del mensaje.
Para enviar SMS desde C#, usa el siguiente código fuente:
- Client = new OzxClient();
- Client.AutoReconnect = true;
- Client.Connect("127.0.0.1", 9518, "testuser", "testpassword");
- Client.Connect("127.0.0.1", 9518, "testuser", "testpassword");
- Client.Send(new OzxMessage() {ToAddress="+36111111",Text="Este es el texto para enviar SMS desde C#"});
Cuando estableces la propiedad Client.Autoconnect en true, te aseguras de que el cliente se reconectará a la pasarela SMS incluso si la conexión de red se pierde temporalmente o la pasarela SMS se reinicia.
Para recibir informes de entrega de SMS en C#, necesitas suscribirte a los eventos:
- Client.OnMessageAcceptedForDelivery += Client_OnMessageAcceptedForDelivery;
- Client.OnMessageNotAcceptedForDelivery += Client_OnMessageNotAcceptedForDelivery;
- Client.OnMessageSubmitSuccess += Client_OnMessageSubmitSuccess;
- Client.OnMessageSubmitFailed += Client_OnMessageSubmitFailed;
- Client.OnMessageDeliverySuccess += Client_OnMessageDeliverySuccess;
- Client.OnMessageDeliveryFailed += Client_OnMessageDeliveryFailed;
Estos eventos se activarán cuando la pasarela SMS envíe los informes correspondientes a través de la conexión permanente que hemos creado usando connect. Este es el mayor beneficio de usar una conexión permanente. Obtienes notificaciones instantáneas sobre estos eventos relacionados con la entrega de SMS. Tales notificaciones son difíciles de obtener si usas una API de SMS HTTP. Por otro lado, esta información es crucial para cualquier negocio, y debes procesarla para construir un buen software de SMS.
¿Qué tipo de informes de entrega de SMS proporciona la API de SMS en C#?
La API de SMS en C# devuelve cinco tipos de informes de entrega de SMS. Estos se presentan como eventos en C#. Son el evento de aceptación de SMS, el evento de no aceptación de SMS, el evento de éxito en el envío de SMS, el evento de fallo en el envío de SMS, el evento de éxito en la entrega de SMS y el evento de fallo en la entrega de SMS.
Evento de aceptación de SMS: El evento de aceptación de SMS se activa cuando la pasarela SMS de Ozeki acepta el SMS para entrega y lo coloca en la bandeja de salida de la cuenta de usuario.
Evento de no aceptación de SMS: El evento de no aceptación de SMS se activa si la pasarela SMS de Ozeki no acepta el SMS para entrega. Esto puede suceder, por ejemplo, si el usuario se queda sin créditos de SMS, o el disco está lleno o ocurre algún otro error en la pasarela SMS.
Evento de éxito en el envío de SMS: El evento de éxito en el envío de SMS se activa cuando el SMS se entrega a la red móvil con éxito. La red móvil devuelve un informe de envío de SMS, y este informe se reenvía al cliente de la API de SMS en C# a través de la conexión establecida. El evento de éxito en el envío de SMS se activa, por ejemplo, cuando el SMS es enviado por el cliente SMPP que conecta el sistema a la red móvil a través de Internet. Si envías mensajes SMS a través de una pasarela SMS de Android, este evento ocurre cuando el SMS es enviado por el módem SMS integrado en el teléfono Android. Si envías SMS a través de un grupo de módems GSM que está conectado a tu servidor con un cable de datos, el evento se activa cuando el módem devuelve el código de referencia de 1 byte de envío exitoso al comando AT+CMGS del módem.
Evento de fallo en el envío de SMS: El evento de fallo en el envío de SMS ocurre si el SMS no pudo ser enviado por cualquier razón a la red móvil por la pasarela SMS de Ozeki. Por ejemplo, si el enlace de Internet utilizado por la conexión de red móvil del cliente SMPP está fuera de línea o si el servidor SMPP devuelve un mensaje de error SMPP cuando se envía el SMS. Si envías tus mensajes SMS a través de la pasarela SMS de Android, y el plan del teléfono móvil Android se queda sin créditos, o el teléfono no está registrado en la red móvil, también recibirás este evento. También podría ser posible que la tabla de enrutamiento de SMS no esté configurada correctamente. El error de envío de SMS también puede ocurrir si usas un módem GSM para la entrega de SMS y el cable de datos entre el módem y la PC está desconectado o roto. En todos estos casos tendrás un mensaje de error en los Event Args adjuntos a este evento para darte una idea de cuál podría ser la razón del fallo en el envío de SMS.
Evento de éxito en la entrega de SMS: El evento de éxito en la entrega de SMS se llama cuando el SMS se entrega con éxito al teléfono del destinatario. En este caso, un informe de entrega de SMS es devuelto por la red móvil a la pasarela SMS. El informe de entrega de SMS contiene la marca de tiempo de la entrega y el código de estado exitoso de la entrega. La pasarela SMS reenvía esta información a la API de SMS en C#. Cuando recibes un evento de informe de entrega de SMS en C#, puedes estar seguro de que tu SMS fue recibido por el destinatario.
Evento de fallo en la entrega de SMS: El informe de entrega de SMS en C# puede manejarse con el evento de fallo en la entrega de SMS si el informe de entrega contiene un código de estado de entrega no exitoso. Esto puede suceder, por ejemplo, si el teléfono móvil al que se envió el SMS nunca se enciende. Este evento ocurre raramente, porque la mayoría de las redes móviles no devuelven informes de entrega negativos.
Enviar SMS desde la API de SMS en C# (código fuente de uso gratuito)
Para enviar SMS desde C#, usa el siguiente código fuente. Este código fuente puede ser modificado y redistribuido libremente. Ten en cuenta que también puedes modificar y redistribuir libremente el código fuente del proyecto API de SMS en C# en Ozeki.Libs.Ozx.
using System; using OZX; namespace OzekiConsoleClient { class Program { static OzxClient Client; static void Main(string[] args) { Client = new OzxClient(); Client.AutoReconnect = true; Client.OnMessageAcceptedForDelivery += Client_OnMessageAcceptedForDelivery; Client.OnMessageNotAcceptedForDelivery += Client_OnMessageNotAcceptedForDelivery; Client.OnMessageSubmitSuccess += Client_OnMessageSubmitSuccess; Client.OnMessageSubmitFailed += Client_OnMessageSubmitFailed; Client.OnMessageDeliverySuccess += Client_OnMessageDeliverySuccess; Client.OnMessageDeliveryFailed += Client_OnMessageDeliveryFailed; Client.OnMessageViewed += Client_OnMessageViewed; Client.OnConnected += Client_OnConnected; Client.OnDisconnected += Client_OnDisconnected; Client.Connect("127.0.0.1",9580,"testuser","testpass"); } static void Client_OnConnected(object sender, EventArgs e) { Console.WriteLine("Conectado exitosamente."); var msg = new OzxMessage(); msg.ToAddress = recipient; msg.Text = message; Console.WriteLine("Enviando mensaje. ID: "+msg.ID); Client.Send(msg); } static void Client_OnDisconnected(object sender, OzxArgs< string > e) { Console.WriteLine("Conexión cerrada. Razón: " + e.Item.ToString()); } static void Client_OnMessageAcceptedForDelivery(object sender, OzxArgs< string > e) { Console.WriteLine("Mensaje aceptado para entrega. ID: " + e.Item.ToString()); } static void Client_OnMessageNotAcceptedForDelivery(object sender, OzxArgs< string, string > e) { Console.WriteLine("Mensaje rechazado. ID: " + e.Item1.ToString()+" Razón: "+e.Item2); } static void Client_OnMessageSubmitSuccess(object sender, OzxArgs< string, DateTime > e) { Console.WriteLine("Mensaje enviado. ID: "+e.Item1+" Fecha: "+e.Item2); } static void Client_OnMessageSubmitFailed(object sender, OzxArgs< string, DateTime, string > e) { Console.WriteLine("Error en el envío del mensaje. ID: " + e.Item1 + " Fecha: " + e.Item2+" Razón: "+e.Item3); } static void Client_OnMessageDeliverySuccess(object sender, OzxArgs< string, DateTime > e) { Console.WriteLine("Mensaje entregado. ID: " + e.Item1 + " Fecha: " + e.Item2); } static void Client_OnMessageDeliveryFailed(object sender, OzxArgs< string, DateTime, string > e) { Console.WriteLine("Error en la entrega del mensaje. ID: " + e.Item1 + " Fecha: " + e.Item2 + " Razón: " + e.Item3); } static void Client_OnMessageViewed(object sender, OzxArgs< string, DateTime > e) { Console.WriteLine("Mensaje visto. ID: " + e.Item1 + " Fecha: " + e.Item2); } } }
Cómo probar el envío de SMS con C#
Para probar el envío de SMS en la API de SMS en C#, tienes dos opciones: Puedes usar la conexión probador de SMS integrado o puedes configurar dos pasarelas SMS para tener un entorno de prueba más realista. Si configuras dos pasarelas SMS, primero necesitas configurar la primera pasarela SMS como un simulador SMPP. Esta pasarela SMS proporcionará servicio de servidor SMPP a la segunda pasarela SMS. Operará de la misma manera que lo haría el SMSC de un operador de red móvil. La segunda pasarela SMS se conectará a la primera usando una conexión cliente SMPP, y proporcionará servicio de API de SMS en C# a tu aplicación de SMS en C#.
Preguntas frecuentes
¿El informe de entrega (onMessageDeliveryFailed) se recupera por cada intento fallido o solo se recupera cuando se alcanza el número máximo de intentos?
El mensaje permanece en estado pendiente hasta que se agotan los intentos máximos de entrega.
¿Es posible almacenar los informes de entrega de SMS entrantes en SQL?
Para recibir informes de entrega de tus mensajes SMS, navega al menú "Editar" y selecciona "Preferencias del servidor". Dentro de la pestaña "Avanzado", localiza la casilla etiquetada "Copiar informes de entrega para usuarios" y asegúrate de que esté marcada. Si has configurado un SQL para la pasarela SMS, los informes de entrega entrantes se almacenarán automáticamente en la base de datos como mensajes entrantes estándar. Así es como se reflejan las actualizaciones de estado de entrega:
- Tabla ozekimessageout y Actualizaciones de Estado: Si envías mensajes desde la tabla "ozekimessageout", el campo "status" rastrea automáticamente el estado de entrega de cada mensaje. Este campo se actualiza dinámicamente para reflejar los siguientes resultados:
- deliveredtonetwork: Mensaje enviado exitosamente a la red.
- deliveredtohandset: Mensaje entregado al teléfono del destinatario.
- deliveryerror: Ocurrió un error durante la entrega.
More information
- Cómo enviar SMS desde C#
- Recibir SMS en C#
- API de SMS en C# - conectar para enviar SMS
- API de SMS en C# - desconectar de la pasarela SMS
- API de SMS en C# - mantener conexión SMS activa
- API de SMS en C# - enviar un mensaje de texto
- API de SMS en C# - SMS aceptado para entrega
- API de SMS en C# - SMS no aceptado para entrega
- API de SMS en C# - enviado
- API de SMS en C# - envío fallido
- API de SMS en C# - informe de entrega exitoso
- API de SMS en C# - informe de entrega fallida
- API de SMS en C# - ID de remitente alfanumérico
- API de SMS en C# - cómo usar código corto como ID de remitente
- API de SMS en C# - clase de mensaje de texto