
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.
Wie man SMS-Nachrichten mit Ruby on Rails empfängt
Lesedauer: 4 Minuten
Jetzt kann Ihre Ruby on Rails-Anwendung SMS versenden und verfolgen Nachrichtenstatuskann, ist der nächste Schritt die Verarbeitung eingehender Nachrichten. Denn was nützt das Versenden von SMS, wenn man keine Antworten erhalten kann? In diesem Artikel zeigen wir Ihnen genau, wie Sie das einrichten können.
In diesem Tutorial lernen Sie, wie Sie eine eingehende SMS durch die Implementierung eines Webhook-Endpunkts in Ruby on Rails empfangen können.
TL;DR Überspringen Sie den Anfang und finden Sie den gesamten Schnellstart-Code auf GitHub.
Voraussetzungen
Ruby on Rails installiert auf Ihrem Rechner
Virtuelle Nummer von Vonage
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
Wie funktioniert Inbound SMS?
Sie fragen sich vielleicht, wie eine SMS vom Telefon eines Benutzers zu Ihrer Rails-Anwendung gelangt. Ähnlich wie bei der Zustellungsquittung im vorigen Beitrag, übernimmt Vonage die Interaktion mit dem Mobilfunknetz. Anschließend leitet es diese Informationen an einen Webhook weiter, den Sie in Ihrer Vonage-Anwendung definieren. In diesem Tutorial werden wir ngrok verwenden, um den Webhook zu verarbeiten und an unsere Rails-Anwendung weiterzuleiten.
Diagram illustrating the inbound SMS process, where a user sends a message through the Vonage platform, which then forwards the message to an application via a webhook.
Wie man eine Ruby on Rails-Anwendung mit ngrok freischaltet
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 3000Fügen Sie unbedingt Ihre ngrok-URL als config.host in Ihrer entwicklung.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']
Wenn Sie noch keine .env-Datei erstellt haben, müssen Sie dies im Stammverzeichnis Ihrer Anwendung tun und Ihre Vonage-Anmeldedaten und die ngrok-URL hinzufügen:
VONAGE_APPLICATION_ID='XXXX'
VONAGE_PRIVATE_KEY='./private.key'
VONAGE_SERVER_HOSTNAME='XXXXXX.ngrok.app
>> Halten Sie Ihre Anmeldedaten sicher
>> Übertragen Sie niemals .env-Dateien in Ihr Repository! Stellen Sie sicher, dass .env in Ihrem .gitignore steht.
Jetzt müssen wir unsere Vonage-Anwendung (aus früheren Artikeln) im Entwickler-Dashboard. Klicken Sie auf "Bearbeiten". Aktualisieren Sie nun die Inbound URL unter den Messages capabilities. Fügen Sie Ihre ngrok URL gefolgt von /inbound_sms.
Sobald Sie auf Speichern klicken, wird ngrok nun Anfragen an den Endpunkt /inbound_sms an Ihre Rails-Anwendung weiterleiten! Aber es gibt ein kleines Problem: Unsere Rails-Anwendung hat diesen Endpunkt nicht.
Wie man eine eingehende SMS mit WebHooks in Rails handhabt
Nun, da Vonage eine SMS-Nutzlast an die /inbound_sms lassen Sie uns unsere Anwendung aktualisieren und eine Route erstellen, um sie zu verarbeiten.
# config/routes.rb
Rails.application.routes.draw do
resources :inbound_sms, only: [:create]
....remaining routes...Wenn eine SMS an Ihre virtuelle Vonage-Nummer gesendet wurde, benachrichtigt Vonage Ihre Anwendung durch Senden eines Webhooks. Eine typische Nutzlast für eine eingehende SMS sieht etwa so aus.
{
"to": "12013508504",
"from": "12013508506",
"channel": "sms",
"message_uuid": "a1610e97-a045-4d04-933b-5e570fe51691",
"timestamp": "2025-02-23T18:21:41Z",
"usage": {
"price": "0.0059",
"currency": "EUR"
},
"message_type": "text",
"text": "Testing",
"context_status": "none",
"origin": {
"network_code": "42507"
},
"sms": {
"num_messages": "1",
"count_total": "1"
}
} Wie man eine SMS-Nachricht aus Rails speichert
Da wir nun alle erforderlichen Informationen auf der Grundlage unseres zuvor definierten SMS-Modells haben, können wir eine Logik zum Speichern unserer eingehenden SMS erstellen. Wir fügen auch eine lustige Funktion hinzu, um zu zeigen, dass unser Code funktioniert. Lassen Sie uns einen neuen Controller erstellen, um dies zu handhaben.
rails g controller InboundSms createInnerhalb unseres Controllers werden wir eine einfache erstellen Methode, die den Webhook analysiert und eine SMS in unsere Datenbank einträgt. Sie werden feststellen, dass wir is_inbound auf gesetzt haben. true.
# app/controllers/inbound_sms_controller.rb
class InboundSmsController < ApplicationController
skip_before_action :verify_authenticity_token
def create
sms = Sms.create(
to: params[:to],
from: params[:from],
text: params[:text],
message_uuid: params[:message_uuid],
is_inbound: true
)
# Send a reply
# reply sms
# Return an empty HTTP 200 status regardless
head :ok
end
end
Um zu beweisen, dass wir die SMS erhalten haben, senden wir eine Antwort an den Absender zurück. Machen wir uns einen Spaß daraus und zeigen den Originaltext zuerst ohne Vokale und dann in binärer Form.
private
def reply(sms)
consonants = sms.text.delete("aeiouAEIOU")
binary = sms.text.unpack1('B*')
message = Vonage::Messaging::Message.sms(message: "Your message without vowels is #{consonants} and your message in binary is #{binary}")
vonage.messaging.send(
from: sms.to,
to: sms.from,
**message
)
end
Die Antwortmethode basiert auf dem Vonage-Client, daher müssen wir ihn wie im ersten Artikel initialisieren.
vonage = Vonage::Client.new(
application_id: ENV["VONAGE_APPLICATION_ID"],
private_key: ENV["VONAGE_PRIVATE_KEY"]
)Wie der gesamte Code zusammenpasst, sehen Sie in der vollständigen inbound_sms_controller.rb Datei.
Schlussfolgerung
Herzlichen Glückwunsch! Sie haben erfolgreich eine Ruby on Rails SMS-Anwendung erstellt, die eingehende Nachrichten über einen Vonage Webhook empfangen kann. Damit haben Sie den SMS-Teil des Ruby on Rails Quickstart abgeschlossen. In zukünftigen Tutorials werden wir Sprachfunktionen mit der Vonage Voice API hinzufügen.
Wenn Sie Fragen haben oder eine Funktion für die Quickstart-Anwendung beantragen möchten, beteiligen Sie sich an der Diskussion in der Vonage Gemeinschaft Slack oder kontaktieren Sie uns auf X (früher Twitter). Wir würden uns freuen zu hören, was Sie als nächstes bauen!
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.