Envío de SMS en Rust: RustSMS — Biblioteca API para trabajar con puertas de enlace SMS

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Envío de SMS en Rust: Reseña de la biblioteca RustSMS



En el mundo moderno del desarrollo web y la automatización, el envío de mensajes SMS sigue siendo una tarea demandada: desde la autenticación de dos factores hasta las notificaciones de estado de pedidos. Si programa en Rust y busca una forma confiable de integrarse con proveedores de SMS, la biblioteca RustSMS es lo que necesita. Proporciona una API unificada, asíncrona y type-safe para trabajar con decenas de puertas de enlace SMS (Twilio, Vonage, Clickatell, SMS.ru y otras).



En este artículo, analizaremos las características clave de RustSMS, mostraremos ejemplos de código y explicaremos cómo empezar a enviar mensajes en cuestión de minutos.



Características principales de RustSMS

  • Interfaz unificada — independientemente del proveedor seleccionado, utiliza el mismo conjunto de métodos.
  • Asincronía — la biblioteca está construida sobre tokio y reqwest, lo que permite no bloquear el hilo principal.
  • Soporte para puertas de enlace populares — Twilio, Vonage (Nexmo), Clickatell, SMS.ru, MessageBird y otras.
  • Configuraciones type-safe — todos los parámetros (número, texto, proveedor) se verifican en tiempo de compilación.
  • Fácil extensibilidad — puede escribir su propio adaptador para cualquier puerta de enlace personalizada.


Instalación

Agregue la dependencia a su Cargo.toml:

[dependencies]rustsms = "0.5"tokio = { version = "1", features = ["full"] }


Ejemplo básico de envío de SMS

Antes de enviar, debe crear una configuración para el proveedor seleccionado. Veamos un ejemplo con Twilio:

use rustsms::{SmsClient, providers::twilio::TwilioConfig};use std::error::Error;

#[tokio::main]async fn main() -> Result<(), Box> { // Creamos la configuración para Twilio let config = TwilioConfig::new( "YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN", "+1234567890", // su número de remitente );

// Inicializamos el cliente let client = SmsClient::new(config);

// Enviamos el mensaje let response = client .send("+0987654321", "¡Hola desde Rust!") .await?;

println!("¡SMS enviado! ID: {}", response.message_id); Ok(())}


Trabajo con múltiples proveedores

RustSMS permite cambiar fácilmente entre proveedores. Solo necesita cambiar la configuración:

use rustsms::{SmsClient, providers::vonage::VonageConfig};

let config = VonageConfig::new( "YOUR_API_KEY", "YOUR_API_SECRET", "RustSMS",);let client = SmsClient::new(config);


Manejo de errores y estados

La biblioteca devuelve errores detallados si algo sale mal. Puede manejarlos usando pattern matching:

match client.send("+1111111111", "Prueba").await {    Ok(response) => println!("Éxito: {:?}", response),    Err(e) => match e {        rustsms::Error::Api { code, message } => {            eprintln!("Error de API {}: {}", code, message);        }        rustsms::Error::Network(e) => {            eprintln!("Error de red: {}", e);        }        _ => eprintln!("Error desconocido"),    },}


Funcionalidades avanzadas: plantillas y encabezados personalizados

RustSMS admite el envío de mensajes utilizando plantillas (por ejemplo, para códigos OTP) y encabezados HTTP personalizados. Ejemplo con plantilla:

let otp_code = 123456;let message = format!("Su código de verificación: {}", otp_code);client    .send("+1111111111", &message)    .await?;

Para escenarios más complejos (por ejemplo, envío a través de una puerta de enlace SMS con parámetros adicionales), puede usar el método send_with_opts:

use rustsms::options::SendOptions;

let opts = SendOptions::new() .with_callba

Recommendations