Recepción y respuesta de SMS con Java y Twilio
Tiempo de lectura: 4 minutos
Si se pregunta cómo enviar SMS desde el código Java, ya tenemos lo que necesita. Sin embargo, las personas esperan cada vez más poder conversar con empresas y servicios en lugar de recibir una transmisión interminable de notificaciones. Para crear aplicaciones realmente interactivas y atractivas, también recomendamos que responda a los mensajes entrantes.
Para ello, deberá configurar una dirección URL en su consola de Twilio. Los mensajes entrantes desencadenarán solicitudes HTTP a esa URL y la respuesta a esas solicitudes de webhook determinará lo que sucede a continuación, incluido el envío de respuestas. Las respuestas se deben escribir en un dialecto XML llamado Twilio Markup Language o TwiML.
En esta publicación, lo guiaré a través de la configuración de un servidor web mediante Spring Boot para hacer precisamente eso.
Preparación
Antes de comenzar, necesitará:
- Una instalación Java 8 o más reciente, recomiendo SDKMAN! para instalar y administrar versiones de Java.
- Java IDE (soy un fanático de IntelliJ IDEA, pero si tiene su favorito también puede usarlo).
- Una cuenta Twilio (si aún no tiene una, regístrese aquí para obtener una cuenta gratuita y recibirá un crédito de $10 cuando realice la actualización)
- Un número de teléfono de Twilio que pueda enviar y recibir SMS
- ngrok o CLI de Twilio, para poder responder a webhooks en su entorno de desarrollo local
La mejor manera de iniciar un nuevo proyecto de Spring Boot es utilizar Spring Initializr. Este enlace lo llevará a una configuración preconfigurada con la dependencia web seleccionada y algunos nombres preconfigurados. Cargue esa página, haga clic en “Generate” (generar) y descomprima el proyecto descargado en un directorio vacío. A continuación, abra el proyecto en su IDE de elección y manos a la obra.
Creación de la aplicación
Cuando abra la base de código, verá el nivel superior del proyecto. Abra las carpetas anidadas src/main/java
y busque el paquete llamado com.example.twilio.sms
, con una sola clase, denominada RespondToSmsWithTwilioAndJavaApplication
. No es necesario que edite esa clase, pero tiene un método main
que será útil más adelante.
Creación de un endpoint HTTP
Por ahora, cree otra clase en el mismo paquete con la siguiente definición y llámela SmsWebhookHandler
:
[código completo que incluye las importaciones en GitHub]
Puede ejecutar la aplicación ahora, ya sea mediante la ejecución del método main
de RespondToSmSWithTwilioAndJavaApplication
en su IDE o ./mvnw spring-boot:run
en una ventana de terminal en la raíz de su proyecto.
Después de que se esté ejecutando, pruébela con el siguiente comando.
Debe ver “Saludos de Twilio” como respuesta.
Devolución de TwiML por HTTP
Hemos logrado un buen comienzo hasta ahora. A continuación, tenemos que devolver la etiqueta TwiML para que Twilio pueda comprender la respuesta.
Es posible escribir TwiML a mano, pero es más fácil hacerlo con el uso de Twilio Java Helper Library. Agregue el siguiente código a la sección <dependencies>
de pom.xml
en la raíz de su proyecto.
Ahora, hagamos algunos cambios en el código en SmsWebhookHandler
. Cambie la clase para que tenga esta definición:
[código completo que incluye las importaciones en GitHub]
Aquí ocurren varias cosas, así que vamos a repasarlas:
- Línea 4: crea un nuevo mapa de cadena a entero para contar cuántos mensajes hemos recibido de cada número de teléfono único. Debido a que Spring solo creará una instancia de esta clase, el
mapa
se comparte entre todas las llamadas. - Línea 6: observe que el punto final ahora tiene un tipo de contenido de
application/xml
. - Líneas 9 a 10: podemos extraer datos de la solicitud entrante utilizando
@RequestParam
. Aquí solo estoy usando el númeroFrom
y elBody
del mensaje, pero se puede acceder a mucho más. - Línea 12: actualice el mapa de
messageCounts
para contabilizar este mensaje nuevo. - Líneas 14 a 17: cree la cadena que se utilizará como respuesta del mensaje.
- Líneas 19 a 21: por último, cree la respuesta TwiML y devuélvala como una cadena XML.
Para probar el código, ejecute el proyecto como antes. Luego, cuando esté en ejecución, ejecute el siguiente comando.
Debería recibir la siguiente respuesta:
(Tenga en cuenta que he agregado saltos de línea a esta salida)
Conectarse a un número de teléfono Twilio
La última parte del rompecabezas es cómo configurar Twilio para utilizar esta app cuando se recibe un mensaje. Como dije en la introducción, debe configurar su número de teléfono con una dirección URL para la aplicación. Debido a que está ejecutando la aplicación de forma local, solo tiene una URL localhost
, a la que Twilio no podrá acceder. Hay varias opciones de alojamiento público con Java, pero una herramienta que me gusta usar para desarrollo es ngrok
, que puede crear direcciones URL públicas que reenvían aplicaciones web localhost
.
Una vez que haya instalado ngrok
y reiniciado la app con su IDE o el comando de arriba, el siguiente comando creará una URL pública para su servidor local:
Una vez que el túnel se ha conectado, ngrok muestra la URL generada aleatoriamente que ahora apunta a su aplicación. Debería verse como https://RANDOM_STRING.ngrok.io
. Abra su consola de Twilio a sus números entrantes y elija el número que desea utilizar para esta app o compre uno nuevo. Edite el número y agregue la URL de ngrok como webhook para cuando llegue un mensaje (dejando el método como POST
).
Envíe un par de mensajes de texto con su número y verá cómo llegan las respuestas.
🎉🎉🎉 Buen trabajo 🎉🎉🎉
Conclusión
Aprendió cómo responder a SMS mediante Twilio y Java, y puede aprender cómo iniciar SMS salientes. Además, ha visto que puede personalizar las respuestas en función de quién le envía mensajes y lo que dicen. Ahora el límite es su imaginación. ¿Creará un recomendador de libros (librerías), un sistema de atención sanitaria comunitario, un bot de chat o algo totalmente nuevo?
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.