https://a.storyblok.com/f/270183/1368x665/44fab5c230/25apr_dev-blog_ruby-rcs-status.jpg

Recibir el estado de un mensaje RCS con Ruby on Rails

Publicado el June 10, 2025

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.

Infographic titled 'What is an RCS Message Status?' showing an RCS suggested reply flow from an application via Vonage's API to a carrier and user. It illustrates message requests, delivery, and callback notifications using icons for API, webhook, carrier, and user devices.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 3000

Asegú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:

Screenshot of the Vonage dashboard where the Vonage-Rails-Quickstart application is linked to an RCS external account named 'Vonage RoR,' displaying application ID, API key, and status controls.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.

Screenshot of Vonage Messages API settings with fields for Inbound URL and Status URL. The Inbound URL field has an error message indicating an invalid URL.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_status

Pero, ¿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 create

Nuestro 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.

Terminal output from a Ruby on Rails application displaying POST requests to the /rcs_message_status endpoint, showing RCS message status transitions from submitted to delivered and read, processed via the Vonage Messages API.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:

https://a.storyblok.com/f/270183/384x384/e4e7d1452e/benjamin-aronov.png
Benjamin AronovDefensor del Desarrollador

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.