Envio de SMS em Rust: Visão geral da biblioteca RustSMS
No mundo moderno do desenvolvimento web e automação, o envio de mensagens SMS continua sendo uma tarefa demandada: desde autenticação de dois fatores até notificações de status de pedido. Se você programa em Rust e procura uma maneira confiável de integrar com provedores SMS, a biblioteca RustSMS é o que você precisa. Ela fornece uma API unificada, assíncrona e type-safe para trabalhar com dezenas de gateways SMS (Twilio, Vonage, Clickatell, SMS.ru e outros).
Neste artigo, vamos analisar os principais recursos do RustSMS, mostrar exemplos de código e explicar como começar a enviar mensagens em poucos minutos.
Principais recursos do RustSMS
- Interface unificada — independentemente do provedor escolhido, você usa o mesmo conjunto de métodos.
- Assíncrono — a biblioteca é construída sobre
tokioereqwest, permitindo não bloquear a thread principal. - Suporte para gateways populares — Twilio, Vonage (Nexmo), Clickatell, SMS.ru, MessageBird e outros.
- Configurações type-safe — todos os parâmetros (número, texto, provedor) são verificados em tempo de compilação.
- Fácil extensão — você pode escrever seu próprio adaptador para qualquer gateway personalizado.
Instalação
Adicione a dependência ao seu Cargo.toml:
[dependencies]rustsms = "0.5"tokio = { version = "1", features = ["full"] }Exemplo básico de envio de SMS
Antes de enviar, é necessário criar uma configuração para o provedor escolhido. Vejamos um exemplo com Twilio:
use rustsms::{SmsClient, providers::twilio::TwilioConfig};use std::error::Error;
#[tokio::main]async fn main() -> Result<(), Box> { // Cria a configuração para Twilio let config = TwilioConfig::new( "YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN", "+1234567890", // seu número de remetente );
// Inicializa o cliente let client = SmsClient::new(config);
// Envia a mensagem let response = client .send("+0987654321", "Olá do Rust!") .await?;
println!("SMS enviado! ID: {}", response.message_id); Ok(())} Trabalhando com vários provedores
O RustSMS permite alternar facilmente entre provedores. Para isso, basta alterar a configuração:
use rustsms::{SmsClient, providers::vonage::VonageConfig};
let config = VonageConfig::new( "YOUR_API_KEY", "YOUR_API_SECRET", "RustSMS",);let client = SmsClient::new(config);Tratamento de erros e status
A biblioteca retorna erros detalhados se algo der errado. Você pode tratá-los usando pattern matching:
match client.send("+1111111111", "Teste").await { Ok(response) => println!("Sucesso: {:?}", response), Err(e) => match e { rustsms::Error::Api { code, message } => { eprintln!("Erro de API {}: {}", code, message); } rustsms::Error::Network(e) => { eprintln!("Erro de rede: {}", e); } _ => eprintln!("Erro desconhecido"), },}Recursos avançados: templates e cabeçalhos personalizados
O RustSMS suporta envio de mensagens usando templates (por exemplo, para códigos OTP) e cabeçalhos HTTP personalizados. Exemplo com template:
let otp_code = 123456;let message = format!("Seu código de confirmação: {}", otp_code);client .send("+1111111111", &message) .await?;Para cenários mais complexos (por exemplo, envio através de um gateway SMS com parâmetros adicionais), você pode usar o método send_with_opts:
use rustsms::options::SendOptions;
let opts = SendOptions::new() .with_callba Também na biblioteca
Aprendizado de Máquina em PHP: uma visão geral das bibliotecas para ML
Respect/Validation para PHP: guia completo com exemplos práticos
Trabalhando com arquivos ZIP em Rust: biblioteca zip e guia completo