Sende WhatsApp-Benachrichtigungen mit Laravel
Lesezeit: 6 Minuten
Laravel erleichtert das Senden von Benachrichtigungen in Ihrer PHP-Anwendung. Es bietet vorkonfigurierte Unterstützung für Kanäle wie E-Mail, SMS, Slack und Datenbank. Doch was, wenn wir Benachrichtigungen an andere Kanäle als diese senden wollen, z. B. WhatsApp? In diesem Tutorial zeige ich, wie Sie mit der Twilio-API WhatsApp-Benachrichtigungen in Ihre Laravel-App implementieren können.
Tools zur Durchführung dieses Tutorials
Sie benötigen folgende Tools, um dieses Tutorial zu absolvieren:
- Auf Ihrem lokalen Computer müssen Composer und das Laravel-Installationsprogramm installiert sein
- Grundlegende Kenntnisse des Laravel Frameworks
- Ein Twilio-Konto
Was wir bauen werden
Wir verwenden für dieses Tutorial das Konzept eines Bestellsystems. Zur Vereinfachung entwickeln wir kein vollwertiges Bestellsystem, sondern lediglich den Teil, der Benachrichtigungen sendet.
Erstellen einer neuen Laravel-Anwendung
Wir erstellen zunächst eine neue Laravel-Anwendung. Dazu benötigen wir das oben erwähnte Laravel-Installationsprogramm. Führen Sie den folgenden Befehl in Ihrer Konsole aus:
Nachdem die Anwendung erstellt wurde, müssen wir die NPM-Abhängigkeiten installieren (weil Bootstrap als NPM-Abhängigkeit enthalten ist):
Führen Sie nach der Installation aller Abhängigkeiten diesen Befehl aus:
Hinzufügen der Authentifizierung
Als Nächstes fügen wir eine Authentifizierung hinzu. Ab Laravel 6 ist das Authentifizierungs-Scaffolding in einem separaten Paket enthalten. Wir müssen dieses zusammen mit Composer installieren:
Anschließend können wir den Befehl für das Authentifizierungs-Scaffolding ausführen:
Da WhatsApp Telefonnummern nutzt, müssen wir die Telefonnummern von Nutzern in unserer Anwendung speichern. Wir erreichen dies beispielsweise durch Erfassen der Telefonnummern bei der Registrierung der Nutzer. Zunächst ergänzen wir das Registrierungsformular um ein Feld für die Telefonnummer. Fügen Sie direkt nach dem E-Mail-Adressfeld den folgenden Code register.blade.php
ein:
Hinweis: Die Telefonnummern der Nutzer müssen im E.164.-Format vorliegen.
Als Nächstes aktualisieren wir sowohl die validator()
- als auch die create()
-Methode des RegisterController, wie nachfolgend gezeigt:
Wir haben dem Telefonnummernfeld einige Validierungsregeln hinzugefügt. Die Telefonnummer wird zusammen mit den anderen erfassten Daten in der Datenbank gespeichert.
Abschließend fügen wir das Telefonnummernfeld der Liste der Felder zu, für die innerhalb des Modells User (Nutzer) eine Massenzuweisung vorgenommen werden kann:
Erstellen der Modelle und Migrationen
Wir müssen außerdem die Migrationsdatei für die Benutzertabelle aktualisieren, die im Lieferumfang der Standard-Laravel-Anwendung enthalten ist. Dazu müssen wir ein neues Feld für die Telefonnummer hinzufügen:
Danach erstellen wir ein Modell des Typs Order (Bestellung) einschließlich der zugehörigen Migrationsdatei:
Die Migrationsdatei aktualisieren wir dann wie folgt:
Damit das Ganze nicht zu kompliziert wird, enthält die Tabelle orders (Bestellungen) nur die Felder „id“ (Kennung), „name“ und „amount“ (Betrag) sowie die Zeitstempel.
Bevor wir die Migration starten, müssen wir die Datenbank einrichten. Der Einfachheit halber nutzen wir SQLite für unsere Datenbank. Wir aktualisieren die Datei .env
wie folgt:
Standardmäßig sucht Laravel im Datenbankverzeichnis nach einer database.sqlite
-Datei. Sie erstellen diese wie folgt:
Jetzt können wir die Migration durchführen:
Implementieren der Bestellaufgabe
Wie zuvor erwähnt, werden wir kein kein vollwertiges Bestellsystem entwickeln. Stattdessen implementieren wir lediglich eine Pseudobestellung. Wir erstellen dafür eine Factory-Klasse, die willkürlich künstliche Daten generiert. Führen Sie den folgenden Befehl aus:
Dadurch wird eine neue OrderFactory.php
-Datei im Verzeichnis database/factories
erstellt. Ersetzen Sie den Inhalt der Datei mit dem folgenden Code:
Als Nächstes erstellen wir die Benutzeroberfläche für die Bestellaufgabe. Wir fügen Sie in home.blade.php
ein, direkt unter dem Text „You're logged in!“ (Sie sind angemeldet):
Nichts Kompliziertes also. Nur ein einfaches Formular mit einer Schaltfläche, die eine Weitergabe an eine benannte Route namens order
durchführt.
Diese Route erstellen wir jetzt:
Abschließend erstellen wir den OrderController (Bestell-Controller), zu dem die Route führt:
Danach fügen wir den folgenden Code hinzu:
Wir verwenden hier die zuvor erstellte Factory, um nach der Weitergabe eine neue Bestellung zu generieren. Anschließend leiten wir den Nutzer zurück zur Seite. Er sieht dabei eine Statusmeldung, die die erfolgreiche Bestellaufgabe bestätigt.
Einrichten von Twilio Sandbox für WhatsApp
Um echte Nachrichten mit WhatsApp senden zu können, muss WhatsApp zunächst unser Konto offiziell bestätigen. Das heißt jedoch nicht, dass wir bis dahin nicht weiter entwickeln können. Mit Twilio Sandbox für WhatsApp können wir unsere App in einer Entwicklerumgebung testen. Wir müssen uns zunächst mit der Sandbox verbinden, indem wir von unserem Gerät aus eine WhatsApp-Nachricht an eine Nummer senden, die uns zur Verfügung gestellt wird. Wir führen als Erstes die Anweisungen auf der Registerkarte Learn (Lernen) durch. Sobald Ihr Konto verbunden ist, können Sie beliebige Nachrichten senden.
Nach der Einrichtung der Sandbox brauchen Sie Ihre Twilio-Anmeldeinformationen. Wir richten damit den Zugriff auf das Twilio-PHP SDK ein. Kopieren Sie in Ihrem Twilio-Dashboard sowohl Ihre ACCOUNT SID (KONTO-SID) als auch Ihr AUTH TOKEN (Authentifizierungstoken). Notieren Sie sich die Telefonnummer, die Ihrer Sandbox zugewiesen ist. Es handelt sich um die Nummer, von der aus Sie Ihre Benachrichtigungen senden werden.
Jetzt erstellen wir in .env
die Umgebungsvariablen mit diesen Angaben:
Erstellen Sie eine dedizierte Dienstkonfiguration für Twilio. Fügen Sie den folgenden Code in config/services.php
ein:
Überblick über das Senden von Benachrichtigungen mit der Twilio-API für WhatsApp
Bevor wir mit der Twilio-API für WhatsApp Benachrichtigungen senden, sehen wir uns die Funktionsweise kurz etwas genauer an. Sie können mit der Twilio-API für WhatsApp zwei Arten von Nachrichten senden: unidirektionale und bidirektionale Nachrichten.
Das Senden von Benachrichtigungen fällt in die Kategorie der unidirektionale Kommunikation, während es sich bei dialogorientierten Nachrichten um bidirektionale Kommunikation handelt. Zum Senden von Benachrichtigungen müssen wir die WhatsApp-Nachrichtenvorlage nutzen.
Dieses Nachrichtenformat kann wiederverwendet werden, nachdem Nutzer sich angemeldet und Ihnen erlaubt haben, Nachrichten an sie zu senden. Nachrichtenvorlagen unterstützen die Aufrechterhaltung hochwertiger Inhalte und vermeiden Spam im Ökosystem.
Vorlagen enthalten Platzhalter, die beim Senden der Nachricht durch dynamischen Inhalt ersetzt werden können. Die Twilio WhatsApp-Sandbox enthält standardmäßig drei vorkonfigurierte Vorlagen:
- Ihr {{1}}-Code lautet {{2}}
- Ihr Termin bei {{1}} ist am {{2}}
- Ihre {{1}}-Bestellung {{2}} wurde versandt und sollte am {{3}} zugestellt werden. Details: {{4}}
Für dieses Tutorial verwenden wir die dritte Vorlage. Weitere Informationen zu Vorlagen – und wie Sie eine eigene erstellen können – finden Sie in der Dokumentation.
Erstellen eines benutzerdefinierten Benachrichtigungskanals
Unsere Nutzer können nun eine Bestellung aufgeben. Daraufhin senden wir ihnen eine Benachrichtigung, um zu bestätigen, dass ihre Bestellung verarbeitet wurde. Da wir diese Benachrichtigung über WhatsApp senden möchten, müssen wir in Laravel einen benutzerdefinierten Benachrichtigungskanal erstellen. Dafür benötigen wir zwei Dateien: WhatsAppChannel.php
und WhatsAppMessage.php
. Die erste Datei enthält die Implementierung zum Senden einer Nachricht (Benachrichtigung), die zweite enthält die API zum Verfassen einer Nachricht.
Wir erstellen zunächst ein neues Verzeichnis namens Channels
in unserem app
-Ordner. Darin erstellen wir ein weiteres Verzeichnis namens Messages
. Und innerhalb von „Messages“ (Nachrichten) erstellen wir WhatsAppMessage.php
und fügen den folgenden Code ein:
Es handelt sich um eine einfache Klasse mit einer $content
-Eigenschaft und einer Set-Methode zum Einstellen des Werts. Die an die Methode weitergegebenen Daten entsprechen dem Inhalt der Benachrichtigung, die wir senden werden.
Als Nächstes erstellen wir die WhatsAppChannel.php
-Datei direkt im Verzeichnis Channels
und fügen den folgenden Code ein:
Es muss für jeden Benachrichtigungskanal eine send()
-Methode geben. Diese enthält die tatsächliche Implementierung zum Senden der Benachrichtigung. Sie muss zwei Argumente akzeptieren: $notifiable
und $notification
. Das erste Argument ist eine Eigenschaft, die von jedem Modell, das Benachrichtigungen sendet, verwendet werden muss. Das zweite Argument ist eine Instanz der tatsächlichen Benachrichtigung (die wir gleich erstellen werden).
Wir rufen die toWhatsApp()
-Methode der Instanz der Klasse Notification
auf (die wir später erstellen werden) und geben sie an $notifiable
weiter. Dabei ist $message
eine Instanz der Klasse WhatsAppMessage und enthält die Benachrichtigung, die wir senden möchten.
Um die Telefonnummer des Nutzers, an den die Benachrichtigung gehen soll, zu erhalten, rufen wir die routeNotificationFor()
-Methode auf. Laravel sucht dann bei dem Modell, das die Eigenschaft verwendet, nach der routeNotificationForWhatsApp()
-Methode.
Zum Schluss erstellen wir eine neue Instanz des Twilio-PHP-SDK, die wir zum Senden der Benachrichtigung nutzen. Beachten Sie, dass wir für beide Telefonnummern („to“ [an] und „from“ [von]) das Präfix „WhatsApp“ verwenden müssen.
Da wir das Twilio-PHP-SDK brauchen, müssen wir es zunächst installieren:
Wie bereits erwähnt, benötigen wir eine routeNotificationForWhatsApp()
-Methode für das Modell, das die Eigenschaft „notifiable“ nutzt. In unserem Fall handelt es sich um das Modell „User“ (Nutzer):
Wir geben hier einfach das Telefonnummernfeld zurück, da es die Telefonnummern unserer Nutzer enthält.
Jetzt können wir eine Benachrichtigung erstellen, die über unseren benutzerdefinierten Benachrichtigungskanal gesendet wird:
Dadurch wird eine neue OrderProcessed.php
-Datei im Verzeichnis app/Notifications
erstellt. Öffnen Sie diese und ersetzen Sie den Inhalt durch:
Mit der via()
-Methode weisen wir Laravel an, unseren benutzerdefinierten Kanal zu verwenden. Über die toWhatsApp()
-Methode verfassen wir den Nachrichtentext, den wir senden möchten. Wir erstellen eine neue Instanz von WhatsAppMessage und geben diese zurück, während wir durch Aufrufen der content()
-Methode den Inhalt der Benachrichtigung festlegen. Sie sehen, dass wir hier die weiter oben erwähnte WhatsApp-Nachrichtenvorlage verwenden.
Abschließend aktualisieren wir die Speichermethode für OrderController.php
, sodass sie den Code enthält, der das Senden der Benachrichtigung auslöst:
Testen unserer Anwendung
Wir testen nun, was wir bislang erstellt haben. Zunächst prüfen wir, ob unsere App ausgeführt wird:
Erstellen Sie ein Konto mit derselben Telefonnummer, die Sie Ihrer Sandbox hinzugefügt haben. Nachdem Sie auf die Schaltfläche „Place Order“ geklickt haben, sollten Sie eine Nachricht erhalten, die ungefähr so aussieht:
Fazit
Sie haben in diesem Tutorial gelernt, wie Sie in einer Laravel-Anwendung Benachrichtigungen über WhatsApp senden. Sie können jedoch nicht nur Benachrichtigungen senden. Sie können die Twilio-API für WhatsApp auch für dialogorientierte Nachrichten an WhatsApp nutzen.
Den gesamten Quellcode für dieses Tutorial finden Sie auf GitHub.
Chimezie Enyinnaya ist Softwareentwickler und -trainer.
- Website: https://tutstack.io
- Twitter: https://twitter.com/ammezie
- E-Mail: meziemichael@gmail.com
- GitHub: https://github.com/ammezie
Verwandte Posts
Ähnliche Ressourcen
Twilio Docs
Von APIs über SDKs bis hin zu Beispiel-Apps
API-Referenzdokumentation, SDKs, Hilfsbibliotheken, Schnellstarts und Tutorials für Ihre Sprache und Plattform.
Ressourcen-Center
Die neuesten E-Books, Branchenberichte und Webinare
Lernen Sie von Customer-Engagement-Experten, um Ihre eigene Kommunikation zu verbessern.
Ahoy
Twilios Entwickler-Community-Hub
Best Practices, Codebeispiele und Inspiration zum Aufbau von Kommunikations- und digitalen Interaktionserlebnissen.