plit banner image with a red Ruby logo and background on the left, and a black section on the right with a white paper airplane and message icon representing communication.

Wie man SMS-Nachrichten mit Ruby on Rails empfängt

Zuletzt aktualisiert am April 24, 2025

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

Um eine virtuelle Rufnummer zu kaufen, gehen Sie zu Ihrem API-Dashboard und befolgen Sie die unten aufgeführten Schritte.

Steps on how to purchase a phone number from the dashboard, from selecting the number and confirming the selection.Purchase a phone number

  1. Gehen Sie zu Ihrem API-Dashboard

  2. Navigieren Sie zu BUILD & MANAGE > Numbers > Buy Numbers.

  3. Wählen Sie die gewünschten Attribute und klicken Sie dann auf Suchen

  4. Klicken Sie auf die Schaltfläche Kaufen neben der gewünschten Nummer und bestätigen Sie Ihren Kauf.

  5. 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.

Infographic titled 'Inbound SMS' showing how an SMS 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 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 3000

Fü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 create

Innerhalb 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:

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.