https://a.storyblok.com/f/270183/1368x665/ce3c4db0b0/25may_dev-blog_ruby-rcs-suggestions.jpg

Cómo recibir una respuesta sugerida RCS en Ruby on Rails

Publicado el July 8, 2025

Tiempo de lectura: 3 minutos

Servicios de Comunicaciones Enriquecidas (RCS) ayudan a mejorar la experiencia del usuario con botones de respuesta interactivos y amigables. Anteriormente, aprendimos a enviar mensajes de respuesta RCS y seguir su estado utilizando Ruby on Rails. Pero también necesitamos aceptar respuestas de alguna manera, para leer qué opción seleccionan nuestros usuarios. En este artículo, te mostraremos exactamente cómo configurarlo.

En este tutorial aprenderás a recibir un mensaje de respuesta sugerida RCS mediante la implementación de un endpoint webhook en Ruby on Rails.

TL;DR Saltar adelante y encontrar todo el código de inicio rápido en GitHub.

Screenshot of an RCS message conversation where the Vonage RoR chatbot asks the user to choose an ice cream flavor, and responds positively to the user selecting 'Vanilla.RCS chat interaction with Vonage RoR bot demonstrating conversational capabilities by asking about ice cream flavor preferences

Requisitos previos

¿Cómo funciona Inbound RCS?

Puede que te estés preguntando cómo llega una respuesta RCS desde el teléfono de un usuario a tu aplicación Rails. Al igual que con los SMS, Vonage maneja la interacción con la red móvil. Luego, reenviará esa información en un webhook de entrada que definas en tu aplicación de Vonage. En este tutorial utilizaremos ngrok para gestionar el webhook entrante a nuestra aplicación Rails.

Infographic titled Inbound RCS Reply' showing how an RCS reply message is sent from a user, processed through the Vonage platform, and delivered to an application via an API and webhook callback.Diagram illustrating the inbound RCS process, where a user sends a message through the Vonage platform, which then forwards the message to an application via a webhook.

Cómo exponer una aplicación Ruby on Rails con ngrok

Puede utilizar ngrok para exponer de forma segura su servidor local públicamente a través de HTTP. Así que ahora, en una 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 config.host en tu archivo development.rb archivo. Utilizaremos la variable de entorno dinámica VONAGE_SERVIDOR_HOSTNAMEpara que no tengas que actualizarla continuamente en cada ejecución. cómo empezar a usar ngrok en Rails.

# config/environments/development.rb

Rails.application.configure do
   config.hosts << ENV['VONAGE_SERVER_HOSTNAME']

Si no has creado un archivo .env anteriormente, asegúrate de hacerlo en la raíz de tu aplicación y agrega tus credenciales de Vonage y la URL de ngrok:

VONAGE_APPLICATION_ID='XXXX'
VONAGE_PRIVATE_KEY='./private.key'
VONAGE_SERVER_HOSTNAME='XXXXXX.ngrok.app

>> Mantén seguras tus credenciales

>> Nunca envíe archivos .env a su repositorio. Asegúrese de que .env está en su .gitignore.

Para obtener más ayuda, consulte trabajar con variables de entorno en Ruby.

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 (de la sección artículo anterior) en el panel de control 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.

Ahora, actualice la URL de entrada en las capacidades de Mensajes. Añada su URL ngrok seguida de /rcs_de_entrada.

Messages settings section in the Vonage dashboard with fields for Inbound URL configured for HTTP POST, version set to v1, and Enhanced Inbound Media Security toggle set to off.Screenshot of the Messages settings in the Vonage dashboard showing configuration for inbound and status webhook URLs used for RCS communication.

Una vez que pulse guardar ngrok ahora túnel peticiones hechas a la /inbound_rcs a tu aplicación Rails. Pero hay un pequeño problema: nuestra aplicación Rails aún no tiene ese endpoint.

Cómo manejar un RCS WebHooks entrante en Rails

Ahora que Vonage reenvía una carga útil RCS a /inbound_rcs, vamos a actualizar nuestra aplicación mediante la creación de una ruta para manejarlo.

Rails.application.routes.draw do
 post '/inbound_rcs', to: 'inbound_rcs#create', as: :inbound_rcs
  ....remaining routes...

Cuando se haya enviado una respuesta RCS a tu número virtual de Vonage, Vonage notificará a tu aplicación mediante el envío de un webhook. Una carga útil típica para un mensaje JSON de respuesta RCS entrante se verá así:

{
   "channel": "rcs",
   "message_uuid": "aaaaaaaa-bbbb-4ccc-8ddd-0123456789ab",
   "to": "Vonage",
   "from": "447700900001",
   "timestamp": "2025-02-03T12:14:25Z",
   "context_status": "none",
   "message_type": "reply",
   "reply": {
      "id": "reply_option_1",
      "title": "9am"
   }
}

Cómo almacenar mensajes de respuesta RCS desde Rails

Ahora que tenemos toda la información requerida basada en nuestro modelo RCS como se definió previamente, podemos crear alguna lógica para almacenar nuestras respuestas RCS entrantes. También enviaremos una respuesta a nuestro usuario para hacerle saber que hemos recibido su respuesta. Vamos a generar un nuevo controlador para manejar esto.

rails g controller InboundRcs create

Dentro de nuestro controlador, tendremos un simple comando crear que analiza el webhook e introduce un RCS en nuestra base de datos. Notarás que tomamos el marca de tiempo, tipo_mensaje (que será respuesta), y el respuesta objeto JSON.

# app/controllers/inbound_rcs_controller.rb

class InboundRcsController < ApplicationController
  skip_before_action :verify_authenticity_token

  def create
    rcs = RcsMessage.create(
      message_uuid: params[:message_uuid],
      from: params[:from],
      to: params[:to],
      timestamp: params[:timestamp],
      message_type: params[:message_type],
      reply: params[:reply]
    )

  # send reply to user
    reply(rcs)
    head :ok
   end

Para demostrar que hemos recibido la respuesta RCS, enviaremos un texto de confirmación al remitente.

def reply(rcs)
    selection = rcs.reply["title"]
    message = vonage.messaging.rcs(
      type: "text",
      message: "#{selection} is a great choice!"
    )

    vonage.messaging.send(
      from: ENV["RCS_SENDER_ID"],
      to: rcs.from,
      **message
    )

end

El método de respuesta depende del cliente de Vonage, por lo que tendremos que inicializarlo como hicimos en el artículo anterior.

def vonage
  Vonage::Client.new(
    application_id: ENV["VONAGE_APPLICATION_ID"],
    private_key: ENV["VONAGE_PRIVATE_KEY"]
    )
end

Puede ver cómo encaja todo el código en el archivo completo inbound_rcs_controller.rb completo.

Conclusión

Felicitaciones. Has construido con éxito una aplicación RCS de Ruby on Rails que puede recibir mensajes de respuesta RCS entrantes utilizando un webhook de Vonage. Y por lo tanto, has completado la parte de las respuestas sugeridas RCS del tutorial de Ruby on Rails. Seguiremos añadiendo más funciones de RCS y luego funciones de WhatsApp en futuros tutoriales.

Si tienes alguna pregunta o quieres solicitar una funcionalidad para la aplicación Quickstart, únete a la conversación en la Comunidad Slack o comunícate en X (antes Twitter). ¡Nos encantaría escuchar lo que construyes a continuación!

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.