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

Den Status einer RCS-Nachricht mit Ruby on Rails empfangen

Zuletzt aktualisiert am June 10, 2025

Lesedauer: 3 Minuten

Zuvor haben wir gelernt wie man Rich Communication Services (RCS) Suggested Reply Nachrichten mit Ruby on Rails zu versenden. Das Versenden einer Nachricht ist jedoch nicht so toll, wenn man nicht weiß, was am anderen Ende passiert ist. Zum Glück gibt es mit der Messages API und RCS Nachrichten-Statusbekommen wir das und noch viel mehr.

Dieses Tutorial erweitert den vorherigen Artikel und zeigt Ihnen, wie Sie RCS-Nachrichtenstatus in eine Ruby on Rails-Anwendung mit Vonage Webhooks integrieren können.

TL;DR Überspringen Sie den Anfang und finden Sie den gesamten Schnellstart-Code auf GitHub.

Was ist ein RCS-Meldungsstatus?

Die Vonage Messages API bietet den Message Status Webhook, mit dem Sie direkt den aktuellen Status einer gesendeten Nachricht abfragen können. aktuellen Status einer von Ihnen gesendeten Nachricht einhaken können. Jedes Mal, wenn der Status der Nachricht aktualisiert wird, wird der Webhook ausgelöst.

So können Sie feststellen, ob Ihre Nachricht eingegangen ist übermittelt wurde, zugestellt, abgelehnt, unzustellbar, oder lesen.

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.

Wie wir unsere Ruby on Rails App mit ngrok öffentlich zugänglich machen

Vonage muss den Status unserer Nachrichten an einen Endpunkt senden. Unsere Ruby on Rails-Anwendung läuft in der Entwicklung auf Port 3000, so dass wir lokal unter localhost:3000 darauf zugreifen können. Sie können ngrok verwenden, um Ihren lokalen Server sicher über HTTP öffentlich zugänglich zu machen. Also jetzt, in einem separaten Tab von Ihrem Rails-Server aus einen ngrok-Tunnel auf Port 3000 öffnen.

ngrok http 3000

Fügen Sie unbedingt Ihre ngrok-URL als VONAGE_SERVER_HOSTNAME in Ihrer .env Datei hinzufügen.

# .env

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

Und starten Sie dann Ihren Rails-Server (erneut). Für weitere Hilfe, siehe wie man anfängt und ngrok in Rails benutzt.

So verbinden Sie Ihren RCS-Agenten mit Ihrer Vonage-Anwendung

Sobald ngrok läuft, bearbeiten wir unsere Vonage-Anwendung (aus dem vorherigen Artikel) in dem Dashboard um die ngrok-URL in unsere Webhooks einzufügen und sie mit unserem RCS-Agent zu verknüpfen.

Verknüpfen Sie zunächst Ihren RCS-Agenten, indem Sie auf die Schaltfläche "Externe Konten verknüpfen" Registerkarte:

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.

Bearbeiten Sie dann die Anwendung und fügen Sie in das Feld Status URL Ihre ngrok URL gefolgt von /rcs_nachricht_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.

Sobald Sie auf Speichern klicken, leitet ngrok nun Anfragen an die Datei /rcs_message_status Endpunkt gestellten Anfragen an Ihre Rails-Anwendung weiter! Aber es gibt ein kleines Problem: Unsere Rails-Anwendung hat diesen Endpunkt nicht.

Wie man Nachrichtenstatus-Webhooks in Rails handhabt

Jetzt, da Vonage Statusmeldungen an die Datei /rcs_message_statusweiterleitet, sollten wir unsere Anwendung aktualisieren und eine Route erstellen, die dies verarbeitet.

# 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

Aber was wird dort passieren? Unsere Anwendung akzeptiert den Meldungsstatus und analysiert ihn nach den relevanten Informationen. Sie können sehen, wie ein typischer Nachrichtenstatus aussieht:

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

Das wichtigste Feld ist der Status denn es gibt Auskunft darüber, ob Ihre Nachricht zugestellt wurde und, falls nicht, was schief gelaufen ist. Weitere Informationen über Nachrichtenstatus Webhaken.

Wir werden eine Logik erstellen, um unseren RCS-Status auf der Grundlage der empfangenen Nachrichtenstatus zu aktualisieren. Lassen Sie uns einen neuen Controller in der Kommandozeile erstellen, um dies zu handhaben.

rails g controller RcsMessageStatus create

Unser Controller hat eine einzige, einfache erstellen Methode. Zunächst analysiert die Methode unseren Nachrichtenstatus und extrahiert die message_uuid; sie verwendet diese fremde ID, um das RCS in unserer lokalen Datenbank zu finden. Anschließend aktualisiert sie den Status für diesen RCS auf den aktuellen Status, den wir im Nachrichtenstatus erhalten haben.

# 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

Sie können nun einen RCS senden (wie im vorherigen Artikel beschrieben) senden und Ihren Rails-Server beobachten, um zu sehen, dass der Webhook aufgerufen und weitergeleitet wird und ActiveRecord die Datenbank aktualisiert! Beachten Sie, dass der /rcs_nachricht_status Endpunkt 3 mal aufgerufen wird. Unser Nachrichtenstatus wird aktualisiert auf übermitteltund dann zugestelltund schließlich gelesen.

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.

Schlussfolgerung

Sie haben es geschafft! Sie haben gelernt, wie Sie Ihre Ruby on Rails-Anwendung dazu bringen, über ngrok auf einen Webhook für den Nachrichtenstatus zu warten und dabei Ihre Datenbank zu aktualisieren! Im nächsten Artikel schließen wir die Schleife auf unserer User Journey ab, indem wir unserem Benutzer erlauben, eine der vorgeschlagenen Antworten auszuwählen, die wir gesendet haben, und diese dann in unserer Rails-Anwendung zu bearbeiten.

Wenn Sie Fragen oder Vorschläge für weitere Ruby-Inhalte haben, schicken Sie uns eine Nachricht auf dem Gemeinschaft Slack. Sie können sich auch über unsere Inhalte und Veranstaltungen für Entwickler auf dem Laufenden halten X, früher bekannt als Twitter.

Teilen Sie:

https://a.storyblok.com/f/270183/384x384/e4e7d1452e/benjamin-aronov.png
Benjamin AronovAdvokat für Entwickler

Benjamin Aronov ist ein Entwickler-Befürworter bei Vonage. Er ist ein bewährter Community Builder mit einem Hintergrund in Ruby on Rails. Benjamin genießt die Strände von Tel Aviv, das er sein Zuhause nennt. Von Tel Aviv aus kann er einige der besten Startup-Gründer der Welt treffen und von ihnen lernen. Außerhalb der Tech-Branche reist Benjamin gerne um die Welt auf der Suche nach dem perfekten Pain au Chocolat.