Envío de SMS en Rust: Biblioteca API para integración con servicios 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: Guía completa para usar la biblioteca API



En el mundo moderno del desarrollo en Rust, el envío de mensajes SMS se ha convertido en una tarea estándar para muchas aplicaciones, desde sistemas de autenticación de dos factores hasta notificaciones a usuarios. En este artículo, analizaremos en detalle cómo implementar el envío de SMS en Rust usando HTTP API, utilizando bibliotecas y enfoques populares.



¿Por qué Rust es ideal para la integración de SMS?

Rust ofrece gestión segura de memoria, alto rendimiento y excelente soporte para programación asíncrona. Esto lo convierte en una excelente opción para crear servicios confiables de envío de mensajes, donde la estabilidad y la velocidad de procesamiento de solicitudes son críticas.



Bibliotecas principales para trabajar con HTTP en Rust

Para interactuar con proveedores de SMS a través de REST API, se utilizan con mayor frecuencia los siguientes crates:

  • reqwest — el cliente HTTP más popular para Rust. Admite solicitudes asíncronas y síncronas, trabajo con JSON, encabezados y autenticación.
  • serde — biblioteca para serialización y deserialización de datos (necesaria para procesar respuestas JSON de la API).
  • tokio — runtime asíncrono, necesario para trabajar con reqwest asíncrono.
  • dotenv — para almacenar de forma segura claves API y configuraciones.


Estructura básica del proyecto

Empecemos creando un nuevo proyecto y agregando dependencias en Cargo.toml:



[package]name = "sms_sender"version = "0.1.0"edition = "2021"

[dependencies]reqwest = { version = "0.12", features = ["json"] }tokio = { version = "1", features = ["full"] }serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"dotenv = "0.15"


Conexión al proveedor de SMS

La mayoría de los servicios SMS (por ejemplo, Twilio, Vonage, SMS-Center) proporcionan REST API. Consideremos un patrón general de conexión usando un proveedor hipotético como ejemplo.



Creemos un archivo .env para almacenar datos confidenciales:

API_KEY=your_api_key_hereAPI_SECRET=your_api_secret_hereSENDER_NAME=MyApp


Estructuras de datos para solicitud y respuesta

Definamos los tipos para trabajar con la API usando Serde:



use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize)]struct SmsRequest { api_key: String, to: String, message: String, sender: String,}

#[derive(Debug, Deserialize)]struct SmsResponse { status: String, message_id: Option<String>, error: Option<String>,}


Implementación de la función de envío de SMS

Ahora escribamos la función principal para enviar el mensaje:



use dotenv::dotenv;use std::env;

#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { dotenv().ok();

let api_key = env::var("API_KEY")?; let api_secret = env::var("API_SECRET")?; let sender = env::var("SENDER_NAME")?;

let client = reqwest::Client::new();

let sms_request = SmsRequest { api_key: api_key.clone(), to: "+79123456789".to_string(), message: "¡Hola! Este es un SMS de prueba desde la aplicación Rust.".to_string(), sender: sender.clone(), };

let response = client .post("https://api.smsprovider.com/v1/send") .basic_auth(&api_key, Some(&api_secret)) .json(&sms_request) .send() .await?;

let sms_response: SmsResponse = response.json().await?;

if sms_response.status == "success" { println!("¡SMS enviado! ID: {:?}", sms_response.message_id); } else { eprintln!("Error al enviar: {:?}", sms_response.error); }

Ok(())}


Manejo de errores y reintentos

En aplicaciones reales, es importante manejar correctamente

Recommendations