Envio de SMS em C# (.NET): Guia completo para integração com API
No mundo moderno, as notificações por SMS continuam sendo uma das formas mais confiáveis de comunicação com o usuário. No ecossistema C# (.NET), existem várias abordagens para o envio de mensagens — desde requisições HTTP diretas até o uso de pacotes NuGet especializados. Neste artigo, vamos analisar como configurar o envio de SMS através de serviços populares (Twilio, sms.ru, Smsc) usando uma implementação pura com HttpClient, além de considerar uma biblioteca pronta para trabalhar com provedores russos.
Escolha da abordagem: biblioteca ou HTTP puro?
Para enviar SMS em C#, existem dois caminhos principais:
- Uso do SDK oficial (por exemplo, Twilio para .NET) — oferece uma interface tipada, tratamento de erros integrado e documentação.
- Trabalho direto com a API REST via HttpClient — controle total sobre a requisição, dependências mínimas, possibilidade de trabalhar com qualquer provedor.
A segunda opção é preferível para fins educacionais e projetos que exigem flexibilidade. Vamos analisá-la em detalhes.
Implementação básica de envio de SMS via API HTTP
Vamos criar a classe SmsService, que enviará mensagens através da API do sms.ru (ou qualquer outro serviço com formato semelhante).
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("SEU_CHAVE_API");string result = await sms.SendSmsAsync("+5511912345678", "Olá! Esta é uma mensagem de teste.");Console.WriteLine(result);Otimização: assincronicidade e tratamento de erros
Em um projeto real, é necessário adicionar validação do número, tentativas repetidas em caso de falhas e registro de log. Versão melhorada:
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();
// Parsing JSON (pode 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 = $"Erro de rede: {ex.Message}" }; }}Para fazer o parsing da resposta, crie um modelo simples:
public class SmsApiResponse{ public string Status { get; set; } public int Balance { get; set; }}Biblioteca pronta: Twilio para .NET
Se você precisa de algo pronto para produção, use o Twilio SDK (NuGet: Twilio). Exemplo:
using Twilio;using Twilio.Rest.Api.V2010.Account;
TwilioClient.Init("ACCOUNT_SID", "AUTH_TOKEN");
var message = MessageResource.Create( body: "Olá do C#!", from: new PhoneNumber("+1234567890"), to: new PhoneNumber("+5511912345678"));
Console.WriteL Também na biblioteca
Trabalho com ZIP/arquivos em Java: java.util.zip e Zip4j
Swift Data para Swift: guia completo com exemplos práticos
HikariCP para Java: guia completo com exemplos práticos