
Teilen Sie:
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.
SMS-Nachrichtenstatus mit Ruby on Rails empfangen
Lesedauer: 4 Minuten
Zuvor haben wir gelernt wie man SMS-Nachrichten versendet mit der Ruby on Rails SMS-Integration. Das Versenden einer SMS sollte sich jedoch nicht wie das Versenden einer Flaschenpost anfühlen. Mit SMS Ruby on Rails-Anwendungen können wir die Zustellung von Nachrichten verfolgen und die Zuverlässigkeit sicherstellen. Zum Glück gibt es das und noch viel mehr mit der Messages API und SMS-Nachrichtenstatus.
Dieses Tutorial zeigt Ihnen, wie Sie den Status der SMS-Zustellung 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.
Voraussetzungen
Virtuelle Nummer von Vonage
Ruby on Rails-Anwendung, wie zuvor beschrieben
Um eine virtuelle Rufnummer zu kaufen, gehen Sie zu Ihrem API-Dashboard und befolgen Sie die unten aufgeführten Schritte.
Purchase a phone number
Gehen Sie zu Ihrem API-Dashboard
Navigieren Sie zu BUILD & MANAGE > Numbers > Buy Numbers.
Wählen Sie die gewünschten Attribute und klicken Sie dann auf Suchen
Klicken Sie auf die Schaltfläche Kaufen neben der gewünschten Nummer und bestätigen Sie Ihren Kauf.
Um zu bestätigen, dass Sie die virtuelle Nummer erworben haben, gehen Sie im linken Navigationsmenü unter BUILD & MANAGE auf Numbers und dann auf Your Numbers
Was ist der Status einer SMS-Nachricht?
Wenn Sie eine Anfrage zum Senden einer SMS absetzen, ist dies nur der erste Schritt auf dem Weg dorthin. Wenn Sie eine erfolgreiche SMS-Anfrage stellen, wird Vonage Warteschlange die SMS in die Warteschlange und sucht den besten Netzbetreiber für die Zustellung der SMS. Von dort aus wird der Netzbetreiber die Anfrage erfüllen und die SMS an den Empfänger senden.
Diagram explaining SMS Message Status, showing how messages travel from an application through Vonage and carriers to the user, with delivery status callbacks.
Anschließend wird in umgekehrter Reihenfolge (Netzbetreiber -> Vonage -> Ihre App) ein Nachrichtenstatus (MS) darüber gesendet, ob die SMS erfolgreich zugestellt wurde oder nicht.
Um diese MS in Ihrer Anwendung zu empfangen, müssen Sie einen Webhook-Endpunkt einrichten, der Vonage mitteilt, wohin die MS zu senden ist.
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 sie lokal unter localhost:3000 erreichen können. Das funktioniert allerdings nur auf unserem Computer!
Sie können ngrok verwenden, um Ihren lokalen Server sicher über HTTP öffentlich zu machen. So, jetzt in einem separaten Registerkarte Ihres Rails-Servers einen ngrok-Tunnel auf Port 3000.
ngrok http 3000Stellen Sie sicher, dass Sie Ihre ngrok-URL als config.host in Ihrer development.rb-Datei hinzufügen. Wir verwenden die Umgebungsvariable VONAGE_SERVER_HOSTNAMEverwenden, um unsere Anwendung dynamischer zu gestalten.
Für weitere Hilfe, siehe wie man anfängt und ngrok in Rails benutzt.
# config/environments/development.rb
Rails.application.configure do
config.hosts << ENV['VONAGE_SERVER_HOSTNAME']Setzen Sie nun in unserer .env Datei den 'VONAGE_SERVER_HOSTNAME' auf Ihre ngrok URL.
# .env
# ngrok URL, don't include the protocol (https://)
VONAGE_SERVER_HOSTNAME=''Außerdem müssen wir unsere Vonage-Anwendung (aus dem vorherigen Artikel) in dem Dashboard um die ngrok-URL in unsere Webhooks einzufügen. Fügen Sie in das Feld Status URL Ihre ngrok URL ein, gefolgt von /sms_message_status.
Vonage Messages API webhook settings showing an invalid Inbound URL error.Sobald Sie auf "Speichern" klicken, wird ngrok nun Anfragen an den Endpunkt /sms_message_status an Ihre Rails-Anwendung weiterleiten! Aber es gibt ein kleines Problem: Unsere Rails-Anwendung hat diesen Endpunkt nicht.
Wie man Lieferungseingang-Webhooks in Rails handhabt
Da Vonage nun Statusmeldungen an den Endpunkt /sms_delivery_receipts Endpunkt weiterleitet, müssen wir unsere Anwendung aktualisieren und eine Route erstellen, um dies zu verarbeiten.
# config/routes.rb
Rails.application.routes.draw do
# For SmsMessageStatus controller, create
post '/sms_message_status', to: 'sms_message_status#create', as: :sms_message_status
...previous routes...
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:
{
"to"=>"13215678899",
"from"=>"John",
"channel"=>"sms",
"message_uuid"=>"93cc5afe-2824-4d40-97b1-e6f6ec00249e",
"timestamp"=>"2025-02-23T14:52:53Z",
"status"=>"delivered",
"destination"=> {"network_code"=>"42507"}
}
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 SMS-Status auf der Grundlage der empfangenen Nachrichtenstatus zu aktualisieren. Lassen Sie uns einen neuen Controller in der Befehlszeile erstellen, um dies zu erledigen.
rails g controller SmsMessageStatus createUnser Controller hat eine einzige, einfache create Methode. Zunächst analysiert die Methode unseren Nachrichtenstatus und extrahiert die message_uuid; sie verwendet diese fremde ID, um die SMS in unserer lokalen Datenbank zu finden. Anschließend wird der Status für diese SMS auf den aktuellen Status aktualisiert, den wir im Nachrichtenstatus erhalten haben.
class SmsMessageStatusController < ApplicationController
skip_before_action :verify_authenticity_token
def create
SmsMessage.where(message_uuid: params[:sms_message_status][:message_uuid])
.update_all(status: params[:sms_message_status][:status]) if params[:sms_message_status][:message_uuid]
# Return an empty HTTP 200 status
head :ok
end
end
Sie können nun eine SMS senden und Ihren Rails-Server beobachten, um zu sehen, dass der Webhook aufgerufen und weitergeleitet wird und ActiveRecord die Datenbank aktualisiert!
Console log showing the processing of an SMS delivery receipt in a Vonage Rails application, including a database update query.
Schlussfolgerung
Sie haben es geschafft! Sie haben gelernt, wie Sie Ihre Ruby on Rails-Anwendung so einrichten, dass sie über ngrok auf einen Webhook wartet und dabei Ihre Datenbank aktualisiert! Im nächsten Beitrag werden wir auf dieser Anwendung weiter aufbauen, indem wir eingehende SMS akzeptieren.
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:
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.