Evita enviar SMS a líneas fijas en Rust con la API de Lookup v2 de Twilio
Time to read:
Evita enviar SMS a líneas fijas con la API de Lookup v2 y Rust
Tienes una app web superexitosa con tecnología Rust, a la que recientemente agregaste soporte de notificación por SMS. Te complace compartir la nueva funcionalidad con tus usuarios y llevarla a producción.
Lamentablemente, a medida que tu aplicación comienza a notificar a los usuarios con tus mensajes de texto bellamente elaborados, comienzas a recibir errores intermitentes, que dicen:
Entrega de mensajes: línea fija u operador móvil inaccesible.
Poco después de esto, comienzas a recibir solicitudes de soporte intermitentes de los usuarios que preguntan por qué no reciben notificaciones. ¿Qué está pasando?
Resulta que tu aplicación no filtra números de línea fija (línea fija) antes de enviarles notificaciones por SMS.
Entonces, ¿qué puedes hacer? ¿Cómo puedes capturar mensajes no entregables de manera proactiva? Mejor aún, ¿cómo puedes filtrar las líneas fijas de una lista de números de teléfono antes de enviarles mensajes y evitar que se les cobre por SMS fallidos?
Esta publicación de blog te guiará a través de cómo hacerlo en Rust mediante la API de Lookup v2 de Twilio.
Requisitos previos
Necesitarás lo siguiente para utilizar la aplicación:
- Una cuenta de Twilio (gratuita o pagada). Crear una cuenta si aún no tienes una.
- Rust y Cargo. Sigue los documentos de instalación si aún no los has instalado.
- Uno o más números de teléfono que te gustaría validar donde al menos uno es una línea fija; idealmente el tuyo o el de personas que conoces
- Tu editor de código preferido o IDE, como neovim o Visual Studio Code
- Cierta experiencia terminal es útil, aunque no es necesaria
Crea un nuevo proyecto de Rust
Lo primero que debes hacer es iniciar un nuevo proyecto binario de Rust con Cargo, ejecutando el siguiente comando:
Agrega los crates requeridos
Al igual que cualquier proyecto bueno más grande que "hola, mundo", la aplicación deberá utilizar una serie de crates para simplificar su creación. No hay muchos:
- anyhow: este crate proporciona un tipo de error concreto flexible
- dotenv: este crate carga variables de entorno desde un archivo .env, ideal para entornos de desarrollo y pruebas
- reqwest: este crate proporciona un potente cliente HTTP
- rustlio: este crate simplifica la interacción con las API de Twilio en aplicaciones Rust
Para agregarlos al proyecto, ejecuta el siguiente comando:
Establece las variables de entorno requeridas
Lo siguiente que se debe hacer es establecer dos variables de entorno, necesarias para realizar solicitudes autenticadas a la API de Lookup v2 de Twilio.
Configúralas en un archivo llamado .env y cárgalas utilizando el crate dotenv. En el directorio de nivel superior del proyecto, crea un nuevo archivo llamado .env y pega la siguiente configuración en el archivo.
Luego, abre Twilio Console en el navegador que elijas y copia el SID de la cuenta y el Token de autenticación desde la Información de la cuenta, como puedes ver en la captura de pantalla a continuación.
Ahora, establece los valores copiados como los valores de TWILIO_ACCOUNT_SID y TWILIO_AUTH_TOKEN respectivamente, en .env.
Actualiza la aplicación principal
Ahora, es momento de escribir el código central, del cual no hay tanto. Reemplaza el código existente en src/main.rs con el código en el siguiente bloque.
Luego, reemplaza <YOUR PHONE NUMBERS> en el código anterior con una lista separada por comas de literales de cadena. Estos son los números de teléfono en formato E.164 que deseas verificar con la API de Lookup v2, p. ej., "+614912345678", "+61402987654". Asegúrate de que al menos uno sea una línea fija.
El código comienza cargando tus credenciales de Twilio (user y pass) desde .env. Luego, crea una instancia de un cliente de Reqwest de bloqueo para realizar la solicitud a la API de Lookup e inicia un vector de números de teléfono para verificar.
Utilicé deliberadamente un cliente de bloqueo en este tutorial, ya que es un ejemplo simplista. En una aplicación de producción, es probable que utilices un cliente asíncrono para una mejor respuesta.
Ahora viene la parte divertida. Se crea un iterador a partir de los números de teléfono en phone_number_list con into_iter(). Luego, esto se filtra solo a aquellos números que no son líneas fijas con la función de filter. Si no estás familiarizado con la función:
Crea un iterador que utiliza un cierre para determinar si se debe producir un elemento. Dado un elemento, el cierre debe devolver verdadero o falso. El iterador devuelto producirá solo los elementos para los que el cierre devuelve verdadero.
Por lo tanto, para cada número de teléfono, el cierre proporcionado:
- Intenta recuperar los detalles del número de teléfono junto con la información de Line Type Intelligence de la API de Lookup v2, llamando a lookup_phone_data_with_line_type
- Si los detalles del número de teléfono están disponibles, se devuelve una estructura PhoneNumber completamente poblada; de lo contrario, se devuelve una vacía/predeterminada
- Si el tipo de línea del número de teléfono devuelto está configurado como "landline", se filtra del iterador devuelto
El iterador devuelto desde filter() luego se transforma en un vector con collect(). Por último, los números de teléfono restantes se imprimen en la terminal.
Prueba que funciona como se espera
Ahora que el código está escrito, es hora de probar que funciona como se espera. Para hacerlo, ejecútalo con el siguiente comando.
Después de que el código se compila y ejecuta, debes ver la salida, similar a la siguiente, impresa en la terminal.
Así es como se evita enviar SMS a teléfonos fijos con la API de Lookup v2 de Twilio y Rust
Gracias al poder de la biblioteca estándar de Rust y la API de Lookup v2 de Twilio, puedes evitar enviar SMS a teléfonos fijos en tus aplicaciones de Rust. Ahora, puedes evitar que se te cobre por SMS fallidos y ofrecer a tus usuarios una mejor experiencia en todos los sentidos.
¿Quieres ir más lejos?
Si deseas obtener más información sobre cómo puedes utilizar Rust con Twilio, consulta los siguientes tutoriales:
- Envía un mensaje SMS con Rust en 30 segundos
- Cómo enviar un MMS con Rust
- Cómo implementar la autenticación OTP en Rust con Twilio
- Cómo crear transcripciones de voz de WhatsApp con Rust
Matthew Setter es editor de PHP, Go y Rust en el equipo de Twilio Voices y desarrollador en cada uno de estos lenguajes. También es autor de Mezzio Essentials y Deploy with Docker Compose. Puedes encontrarlo en msetter[arroba]twilio.com y en LinkedIn y GitHub.
Freepik creó el ícono del teléfono en Flaticon, y la superlindo cangrejo Ferris proviene de rustacean.net.
- Filtra los números de línea fija antes de enviar SMS para evitar errores.
- Configura un proyecto Rust y utiliza la API de Lookup v2 de Twilio para verificar los tipos de números de teléfono.
- Evita enviar mensajes no entregables mediante el uso de credenciales de Twilio.
Este resumen fue generado por IA.
Publicaciones relacionadas
Recursos relacionados
Twilio Docs
Desde API hasta SDK y aplicaciones de muestra
Documentación de referencia de API, SDK, bibliotecas auxiliares, inicios rápidos y tutoriales para su idioma y plataforma.
Centro de Recursos
Los últimos libros electrónicos, informes de la industria y seminarios web
Aprenda de los expertos en participación del cliente para mejorar su propia comunicación.
Ahoy
Centro de la comunidad de desarrolladores de Twilio
Mejores prácticas, ejemplos de códigos e inspiración para crear comunicaciones y experiencias de participación digital.