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

Recevoir un statut de message RCS avec Ruby on Rails

Publié le June 10, 2025

Temps de lecture : 3 minutes

Précédemment, nous avons appris comment envoyer des messages de réponse suggérée de Rich Communication Services (RCS) en utilisant Ruby on Rails. Cependant, le simple fait d'envoyer un message n'est pas très utile si vous ne savez pas ce qui s'est passé à l'autre bout du fil. Heureusement, avec l'API Messages et RCS Statut des messagesnous permettent d'obtenir cela et bien plus encore.

Ce tutoriel va prolonger l'article précédent et vous montrer comment intégrer les statuts des messages RCS dans une application Ruby on Rails en utilisant les webhooks de Vonage.

TL;DR Passez à l'étape suivante et trouvez tout le code de code de démarrage rapide sur GitHub.

Qu'est-ce qu'un statut de message RCS ?

L'API Messages de Vonage fournit le Webhook de l'état du message, qui vous permet d'accéder directement à l'état actuel du message que vous avez envoyé. l'état actuel d'un message que vous avez envoyé. Chaque fois que l'état du message est mis à jour, le crochet Web est déclenché.

Vous pouvez ainsi savoir si votre message a été soumis, délivré, rejeté, non livrableou lues.

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.

Comment exposer publiquement notre application Ruby on Rails avec ngrok

Vonage devra envoyer les statuts de nos messages à un point de terminaison. Notre application Ruby on Rails s'exécute en développement sur le port 3000, nous pouvons donc y accéder localement à l'adresse localhost:3000. Vous pouvez utiliser ngrok pour exposer publiquement et en toute sécurité votre serveur local via HTTP. Ainsi, dans un onglet séparé de votre serveur Rails, ouvrez un tunnel ngrok sur le port 3000.

ngrok http 3000

Veillez à ajouter l'URL de votre ngrok dans le champ VONAGE_SERVER_HOSTNAME dans votre fichier .env .

# .env

# ngrok URL, don't include the protocol (https://)
VONAGE_SERVER_HOSTNAME=''

Puis (re)démarrez votre serveur Rails. Pour plus d'aide, voir Comment démarrer et utiliser ngrok dans Rails.

Comment connecter votre agent RCS à votre application Vonage

Une fois que ngrok est lancé, nous allons éditer notre application Vonage (de l'article précédent) dans tableau de bord pour ajouter l'URL de ngrok dans nos webhooks et la lier à notre agent RCS.

Tout d'abord, reliez votre agent RCS en cliquant sur le bouton "Lier des comptes externes". l'onglet "Lier des comptes externes" :

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.

Ensuite, modifiez l'application et dans le champ Status URL, ajoutez votre URL ngrok suivie 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.

Une fois que vous aurez cliqué sur "save", ngrok transmettra les requêtes faites à l'adresse /rcs_message_status à votre application Rails ! Mais il y a un petit problème : notre application Rails n'a pas ce point de terminaison.

Comment gérer les Webhooks d'état des messages dans Rails

Maintenant que Vonage transmet les statuts au répertoire /rcs_message_statusmettons à jour notre application et créons une route pour le gérer.

# 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

Mais que va-t-il se passer ici ? Notre application va accepter l'état du message et l'analyser pour en extraire les informations pertinentes. Vous pouvez voir à quoi ressemble un état de message typique :

{
   "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"
   }
}

Le champ le plus important est le champ état car il vous indique si votre message a été délivré et, si ce n'est pas le cas, ce qui s'est passé. Voir plus d'informations sur Statut du message les webhooks.

Nous allons créer une logique pour mettre à jour notre statut RCS en fonction des statuts des messages reçus. Générons un nouveau contrôleur dans la ligne de commande pour gérer cela.

rails g controller RcsMessageStatus create

Notre contrôleur comporte une seule et simple fonction créer simple. Tout d'abord, la méthode analyse le statut de notre message et extrait le message_uuid ; elle utilise cet identifiant étranger pour trouver le RCS dans notre base de données locale. Elle met ensuite à jour le statut de ce RCS avec le statut actuel que nous avons reçu dans le statut du message.

# 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

Vous pouvez maintenant envoyer un RCS (selon l'article précédent) et observer votre serveur Rails pour voir que le webhook est appelé, transmis, et qu'ActiveRecord met à jour la base de données ! Remarquez que le champ /rcs_message_status est sollicité 3 fois. Le statut de notre message est mis à jour à soumispuis délivréet enfin lu.

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.

Conclusion

Vous avez réussi ! Vous avez appris à exposer votre application Ruby on Rails à l'écoute d'un webhook de statut de message via ngrok, en mettant à jour votre base de données au passage ! Nous bouclerons la boucle de notre parcours utilisateur dans le prochain article en permettant à notre utilisateur de sélectionner l'une des réponses suggérées que nous avons envoyées, puis de la gérer dans notre application Rails.

Si vous avez des questions ou des suggestions pour plus de contenu Ruby, envoyez-nous un message sur le Communauté Slack. Vous pouvez également rester au courant de notre contenu et de nos événements pour les développeurs sur X, anciennement connu sous le nom de Twitter.

Partager:

https://a.storyblok.com/f/270183/384x384/e4e7d1452e/benjamin-aronov.png
Benjamin AronovDéfenseur des développeurs

Benjamin Aronov est un défenseur des développeurs chez Vonage. C'est un bâtisseur de communauté qui a fait ses preuves, avec une formation en Ruby on Rails. Benjamin apprécie les plages de Tel Aviv, où il vit. Sa base à Tel Aviv lui permet de rencontrer et d'apprendre de certains des meilleurs fondateurs de startups du monde. En dehors de la technologie, Benjamin aime voyager à travers le monde à la recherche du parfait pain au chocolat.