Como enviar SMS a partir de C#.Net
Para enviar SMS a partir de C#.Net, você tem várias opções. Pode usar a biblioteca API de SMS em C# da Ozeki, ou pode usar requisições HTTP. Para enviar uma mensagem de texto em C#.Net, a melhor opção depende do tipo de projeto C# que você está usando. Se você escreve código para atender a requisições web, como C# em uma página ASP, você deve optar pelas requisições HTTP. Se você cria uma aplicação desktop, um serviço Windows ou uma aplicação móvel para Android ou iPhone, é melhor usar a biblioteca da API de SMS em C#. Este guia (Figura 1) concentra-se apenas no envio de SMS. Se você precisa fazer tanto envio quanto recebimento, pode começar lendo o guia A melhor API de SMS em C# em 2025 primeiro.
Baixe a biblioteca da API de SMS em C# (código-fonte gratuito)
Um exemplo totalmente funcional da API de SMS em C# pode ser baixado a partir do seguinte URL. Este
código é fornecido gratuitamente e pode ser livremente modificado e redistribuído por você.
Download: OzekiConsole.zip (51 Kb)
Como enviar SMS a partir de uma aplicação desktop em C#
Enviar uma mensagem de texto a partir de uma aplicação desktop (ou uma aplicação de console ou serviço Windows) tem requisitos diferentes de enviar um SMS a partir de um website. Uma aplicação desktop é executada por um período significativo de tempo (muitos minutos, dias ou até semanas). Neste caso, é benéfico manter uma conexão permanente com o gateway de SMS. Usar requisições web únicas do tipo "dispare e esqueça" não é uma boa escolha para essas aplicações. O maior benefício de manter uma conexão permanente é que você recebe informações sobre eventos de entrega de mensagens, como relatórios de submissão, relatórios de entrega e falhas na entrega de SMS.
Para enviar SMS a partir de uma aplicação desktop em C#, use primeiro o exemplo fornecido (como você pode ver na Figura 2):
- Conecte-se ao gateway de SMS da Ozeki usando o nome de usuário e senha ozx que você criou na interface do usuário do gateway de SMS. Para conectar, use o comando "connect hostname:port username password".
- Envie sua mensagem de texto. Isso pode ser feito digitando "send phonenumber message text" se você usar o aplicativo de console de exemplo para envio.
- Aguarde os relatórios de submissão de SMS e os relatórios de entrega de SMS. Você pode notar que esses relatórios são exibidos na tela e contêm o mesmo ID de mensagem que foi retornado quando você enviou o SMS.
Exemplo de aplicação de console escrita em C#.Net. O código-fonte desta aplicação de console está disponível na página API de SMS em C# com código-fonte.
O exemplo acima mostra os passos necessários. Você pode ver que primeiro uma conexão permanente é estabelecida com o gateway de SMS e, depois disso, a mensagem é enviada. Finalmente, você vê o relatório de aceitação da mensagem e o relatório de submissão da mensagem.
Para enviar SMS a partir de C#, use o seguinte código-fonte:
- 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 é o texto para enviar SMS a partir de C#"});
Quando você define a propriedade Client.Autoconnect como true, isso garante que o cliente irá se reconectar ao gateway de SMS mesmo se a conexão de rede for perdida temporariamente ou se o gateway de SMS for reiniciado.
Para receber relatórios de entrega de SMS em C#, você precisa se inscrever nos 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;
Esses eventos serão acionados quando o gateway de SMS enviar os relatórios apropriados através da conexão permanente que criamos usando o comando connect. Este é o maior benefício de usar uma conexão permanente. Você recebe notificações instantâneas sobre esses eventos relacionados à entrega de SMS. Tais notificações são difíceis de obter se você usar uma API de SMS HTTP. Por outro lado, essa informação é crucial para qualquer negócio, e você deve processá-la para construir um bom software de SMS.
Que tipos de relatórios de entrega de SMS são fornecidos pela API de SMS em C#?
A API de SMS em C# retorna cinco tipos de relatórios de entrega de SMS. Eles são apresentados como eventos em C#. São eles: evento de SMS aceito, evento de SMS não aceito, evento de envio de SMS bem-sucedido, evento de envio de SMS falhado, evento de entrega de SMS bem-sucedida, evento de entrega de SMS falhada.
Evento de SMS aceito: O evento de SMS aceito é acionado quando o gateway de SMS Ozeki aceita o SMS para entrega e o coloca na caixa de saída da conta do usuário.
Evento de SMS não aceito: O evento de SMS não aceito é acionado se o gateway de SMS Ozeki não aceitar o SMS para entrega. Isso pode acontecer, por exemplo, se o usuário ficar sem créditos de SMS, ou se o disco estiver cheio ou algum outro erro ocorrer no gateway de SMS.
Evento de envio de SMS bem-sucedido: O evento de envio de SMS bem-sucedido é acionado quando o SMS é entregue com sucesso à rede móvel. A rede móvel retorna um relatório de envio de SMS, e este relatório é encaminhado para o cliente da API de SMS em C# através da conexão estabelecida. O evento de envio de SMS bem-sucedido é acionado, por exemplo, quando o SMS é enviado pelo cliente SMPP que conecta o sistema à rede móvel via Internet. Se você enviar mensagens SMS através de um gateway de SMS Android, este evento ocorre quando o SMS é enviado pelo modem de SMS integrado ao telefone Android. Se você enviar SMS através de um pool de modems GSM conectado ao seu servidor com um cabo de dados, o evento é acionado quando o modem retorna o código de referência de 1 byte de envio bem-sucedido para o comando AT+CMGS do modem.
Evento de envio de SMS falhado: O evento de envio de SMS falhado ocorre se o SMS não puder ser enviado por qualquer motivo à rede móvel pelo Gateway de SMS Ozeki. Por exemplo, se o link de Internet usado pelo cliente SMPP de conexão à rede móvel estiver offline ou se o Servidor SMPP retornar uma mensagem de erro SMPP quando o SMS for enviado. Se você enviar suas mensagens SMS através do gateway de SMS Android, e o plano do telefone Android ficar sem créditos, ou o telefão não estiver registrado na rede móvel, você também receberá este evento. Também pode ser possível que a tabela de roteamento de SMS não esteja configurada corretamente. O erro de envio de SMS também pode ocorrer se você usar um modem GSM para entrega de SMS e o cabo de dados entre o modem e o PC estiver desconectado ou danificado. Em todos esses casos, você terá uma mensagem de erro nos Argumentos do Evento anexados a este evento para lhe dar uma ideia do que pode ser a razão da falha no envio do SMS.
Evento de entrega de SMS bem-sucedida: O evento de entrega de SMS bem-sucedida é chamado quando o SMS é entregue com sucesso ao aparelho do destinatário. Neste caso, um relatório de entrega de SMS é retornado pela rede móvel ao gateway de SMS. O relatório de entrega de SMS contém o carimbo de data/hora da entrega e o código de status bem-sucedido da entrega. O gateway de SMS encaminha essas informações para a API de SMS em C#. Quando você recebe um evento de relatório de entrega de SMS em C#, você pode ter certeza de que seu SMS foi recebido pelo destinatário.
Evento de entrega de SMS falhada: O relatório de entrega de SMS em C# pode ser tratado com o evento de entrega de SMS falhada se o relatório de entrega contiver um código de status de entrega mal-sucedido. Isso pode acontecer, por exemplo, se o telefone móvel para o qual o SMS foi enviado nunca for ligado. Este evento ocorre raramente, porque a maioria das redes móveis não retorna relatórios de entrega negativos.
Enviar SMS a partir da API de SMS em C# (código-fonte gratuito)
Para enviar SMS a partir de C# utilize o seguinte código-fonte. Este código-fonte pode ser livremente modificado e redistribuído. Note que também pode modificar e redistribuir livremente o código-fonte da biblioteca de API de SMS em C# no projeto 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 com sucesso."); var msg = new OzxMessage(); msg.ToAddress = recipient; msg.Text = message; Console.WriteLine("Enviando mensagem. ID: "+msg.ID); Client.Send(msg); } static void Client_OnDisconnected(object sender, OzxArgs< string > e) { Console.WriteLine("Conexão encerrada. Motivo: " + e.Item.ToString()); } static void Client_OnMessageAcceptedForDelivery(object sender, OzxArgs< string > e) { Console.WriteLine("Mensagem aceita para entrega. ID: " + e.Item.ToString()); } static void Client_OnMessageNotAcceptedForDelivery(object sender, OzxArgs< string, string > e) { Console.WriteLine("Mensagem rejeitada. ID: " + e.Item1.ToString()+" Motivo: "+e.Item2); } static void Client_OnMessageSubmitSuccess(object sender, OzxArgs< string, DateTime > e) { Console.WriteLine("Mensagem submetida. ID: "+e.Item1+" Data: "+e.Item2); } static void Client_OnMessageSubmitFailed(object sender, OzxArgs< string, DateTime, string > e) { Console.WriteLine("Falha ao submeter mensagem. ID: " + e.Item1 + " Data: " + e.Item2+" Motivo: "+e.Item3); } static void Client_OnMessageDeliverySuccess(object sender, OzxArgs< string, DateTime > e) { Console.WriteLine("Mensagem entregue. ID: " + e.Item1 + " Data: " + e.Item2); } static void Client_OnMessageDeliveryFailed(object sender, OzxArgs< string, DateTime, string > e) { Console.WriteLine("Falha na entrega da mensagem. ID: " + e.Item1 + " Data: " + e.Item2 + " Motivo: " + e.Item3); } static void Client_OnMessageViewed(object sender, OzxArgs< string, DateTime > e) { Console.WriteLine("Mensagem visualizada. ID: " + e.Item1 + " Data: " + e.Item2); } } }
Para testar o envio de SMS na API de SMS em C#, você tem duas opções: Pode usar a conexão de testador de SMS integrado ou pode configurar dois gateways de SMS para ter um ambiente de teste mais realista. Se configurar dois gateways de SMS, primeiro precisa configurar o primeiro gateway de SMS como um simulador SMPP. Este gateway de SMS irá fornecer serviço de servidor SMPP ao segundo gateway de SMS. Ele irá operar da mesma forma que o SMSC de um operador de rede móvel operaria. O segundo gateway de SMS irá conectar ao primeiro usando uma conexão cliente SMPP, e irá fornecer serviço de API de SMS em C# à sua aplicação de SMS em C#.
Perguntas frequentes O relatório de entrega (onMessageDeliveryFailed) é recuperado para cada tentativa falhada ou apenas quando o número máximo de tentativas é atingido?A mensagem permanece em estado pendente até que o número máximo de tentativas de entrega seja esgotado.
É possível armazenar os relatórios de entrega de SMS recebidos em SQL?Para receber relatórios de entrega para as suas mensagens SMS, navegue até o menu "Editar" e selecione "Preferências do servidor." Dentro da aba "Avançado", localize a caixa de seleção rotulada "Copiar relatórios de entrega para utilizadores" e certifique-se de que está marcada. Se configurou um gateway de SQL para SMS, os relatórios de entrega recebidos serão automaticamente armazenados na base de dados como mensagens recebidas padrão. Eis como as atualizações de estado de entrega são refletidas:
- Tabela ozekimessageout e Atualizações de Estado: Desde que envie mensagens da tabela "ozekimessageout", o campo "status" monitoriza automaticamente o estado de entrega de cada mensagem. Este campo atualiza-se dinamicamente para refletir os seguintes resultados:
- deliveredtonetwork: Mensagem submetida com sucesso à rede.
- deliveredtohandset: Mensagem entregue ao telemóvel do destinatário.
- deliveryerror: Ocorreu um erro durante a entrega.
More information
- Como enviar SMS do C#
- Receber SMS em C#
- API de SMS em C# conectar para enviar SMS
- API de SMS em C# - desconectar do gateway de SMS
- API de SMS em C# - manter conexão de SMS ativa
- API de SMS em C# - enviar uma mensagem de texto
- API de SMS em C# - SMS aceito para entrega
- API de SMS em C# - SMS não aceito para entrega
- API de SMS em C# - submetido
- API de SMS em C# - falha ao submeter
- API de SMS em C# - relatório de entrega bem-sucedido
- API de SMS em C# - relatório de falha na entrega
- API de SMS em C# - ID de remetente alfanumérico
- API de SMS em C# como usar código curto como ID de remetente
- API de SMS em C# classe de mensagem de texto