
Compartir:
Benjamin Aronov es desarrollador de Vonage. Es un constructor de comunidades con experiencia en Ruby on Rails. Benjamin disfruta de las playas de Tel Aviv, a la que llama hogar. Su base en Tel Aviv le permite conocer y aprender de algunos de los mejores fundadores de startups del mundo. Fuera de la tecnología, a Benjamin le encanta viajar por el mundo en busca del perfecto pain au chocolat.
Recibir el estado de un mensaje RCS con Ruby on Rails
Tiempo de lectura: 3 minutos
Anteriormente, aprendimos cómo enviar mensajes de respuesta sugerida de Rich Communication Services (RCS) utilizando Ruby on Rails. Sin embargo, enviar un mensaje no es tan bueno si no sabes qué ha pasado al otro lado. Afortunadamente, con la Messages API y RCS Estado de los mensajestenemos eso y mucho más.
Este tutorial ampliará el artículo anterior y te mostrará cómo integrar estados de mensajes RCS en una aplicación Ruby on Rails utilizando webhooks de Vonage.
TL;DR Saltar adelante y encontrar todo el código de inicio rápido en GitHub.
¿Qué es el estado de un mensaje RCS?
La API de Messages de Vonage ofrece el Webhook de estado de mensajes, que te permite conectarte directamente al estado actual de un mensaje que hayas enviado. Cada vez que se actualiza el estado del mensaje, se activa el webhook.
Así podrá saber si su mensaje ha sido enviado, entregado, rechazado, imposible de entregaro leer.
Diagram explaining RCS Message Status, showing how messages travel from an application through Vonage and carriers to the user, with delivery status callbacks.
Cómo exponer públicamente nuestra aplicación Ruby on Rails con ngrok
Vonage necesitará enviar el estado de nuestros mensajes a un endpoint. Nuestra aplicación Ruby on Rails se ejecuta en desarrollo en el puerto 3000, por lo que podemos acceder a ella localmente en localhost:3000. Sin embargo, esto sólo funciona en nuestro ordenador. Puedes utilizar ngrok para exponer de forma segura tu servidor local públicamente a través de HTTP. Así que ahora, en una pestaña pestaña separada de tu servidor Rails, abre un túnel ngrok en el puerto 3000.
ngrok http 3000Asegúrese de añadir su URL ngrok como el VONAGE_SERVIDOR_NOMBRE_HOST en su archivo .env .
# .env
# ngrok URL, don't include the protocol (https://)
VONAGE_SERVER_HOSTNAME=''Y luego (re)inicia tu servidor Rails. Para obtener más ayuda, consulte cómo empezar a usar ngrok en Rails.
Cómo conectar tu agente de RCS a tu aplicación de Vonage
Una vez que ngrok se esté ejecutando, editaremos nuestra aplicación Vonage (del artículo anterior) en el dashboard para añadir la URL de ngrok en nuestros webhooks y vincularla a nuestro Agente RCS.
En primer lugar, vincule su Agente RCS haciendo clic en el botón "Vincular cuentas externas" pestaña:
Dashboard view showing the Vonage-Rails-Quickstart application linked to the Vonage RoR RCS external account, with voice and message capabilities enabled.
A continuación, edite la aplicación y en el campo URL de estado, añada su URL ngrok seguida de /rcs_message_status.
Vonage Messages API webhook settings showing an invalid Inbound URL error.
Una vez que pulse guardar, ngrok ahora reenviará las solicitudes realizadas a la carpeta /rcs_mensaje_estado a tu aplicación Rails. Pero hay un pequeño problema: nuestra aplicación Rails no tiene ese endpoint.
Cómo manejar Webhooks de estado de mensajes en Rails
Ahora que Vonage está reenviando los estados a la carpeta /rcs_message_statusactualicemos nuestra aplicación y creemos una ruta para manejarlo.
# config/routes.rb
Rails.application.routes.draw do
...previous routes...
# For RcsMessageStatus controller, create
post '/rcs_message_status', to: 'rcs_message_status#create', as: :rcs_message_statusPero, ¿qué va a pasar ahí? Nuestra aplicación aceptará el estado del mensaje y lo analizará para obtener la información relevante. Puedes ver el aspecto típico de un Estado de Mensaje:
{
"message_uuid": "aaaaaaaa-bbbb-4ccc-8ddd-0123456789ab",
"to": "447700900000",
"from": "Vonage",
"timestamp": "2025-02-03T12:14:25Z",
"status": "read",
"client_ref": "abc123",
"channel": "rcs",
"destination": {
"network_code": "12345"
}
}El campo más importante es el estado porque le indica si su mensaje ha sido entregado y, en caso negativo, qué ha fallado. Más información sobre Estado del mensaje webhooks.
Vamos a crear algo de lógica para actualizar nuestro estado RCS basado en los estados de los mensajes recibidos. Vamos a generar un nuevo controlador en la línea de comandos para manejar esto.
rails g controller RcsMessageStatus createNuestro controlador tiene un único y sencillo comando crear simple. Primero, el método analiza el estado de nuestro mensaje y extrae el message_uuid; utiliza este ID externo para encontrar el RCS en nuestra base de datos local. Luego actualiza el estado para este RCS al estado actual que recibimos en el Estado del Mensaje.
# app/controllers/rcs_message_status_controller.rb
class RcsMessageStatusController < ApplicationController
skip_before_action :verify_authenticity_token
def create
RcsMessage.where(message_uuid: params[:rcs_message_status][:message_uuid])
.update_all(status: params[:rcs_message_status][:status]) if params[:rcs_message_status][:message_uuid]
# Return an empty HTTP 200 status
head :ok
end
end
Ya puedes enviar un RCS (según el artículo anterior) y ver que el servidor Rails llama al webhook, lo reenvía y ActiveRecord actualiza la base de datos. Fíjate en que la etiqueta /rcs_message_status 3 veces. El estado de nuestro mensaje se actualiza a enviadoy luego entregadoy finalmente leído.
Console log output showing RCS message status updates (submitted, delivered, read) handled by a Ruby on Rails application using the Vonage Messages API.
Conclusión
¡Lo has conseguido! Has aprendido a exponer tu aplicación Ruby on Rails a la escucha de un webhook de estado de mensaje a través de ngrok, actualizando tu base de datos en el proceso. En el próximo artículo completaremos el bucle de nuestro viaje de usuario permitiendo que éste seleccione una de las respuestas sugeridas que le hemos enviado y la gestione en nuestra aplicación Rails.
Si tienes alguna pregunta o sugerencia sobre más contenidos de Ruby, envíanos un mensaje a la Slack de la comunidad. También puedes estar al tanto de nuestros contenidos y eventos para desarrolladores en X, antes conocido como Twitter.
Compartir:
Benjamin Aronov es desarrollador de Vonage. Es un constructor de comunidades con experiencia en Ruby on Rails. Benjamin disfruta de las playas de Tel Aviv, a la que llama hogar. Su base en Tel Aviv le permite conocer y aprender de algunos de los mejores fundadores de startups del mundo. Fuera de la tecnología, a Benjamin le encanta viajar por el mundo en busca del perfecto pain au chocolat.