
Teilen Sie:
Als ausgebildeter Schauspieler mit einer Dissertation in Standup-Comedy bin ich über die Meetup-Szene zur PHP-Entwicklung gekommen. Man findet mich, wenn ich über Technik spreche oder schreibe, oder wenn ich seltsame Platten aus meiner Vinylsammlung spiele oder kaufe.
Senden einer WhatsApp-Nachricht mit Symfony
Lesedauer: 3 Minuten
Symfony ist in der PHP-Welt weiterhin auf dem Vormarsch, mit Innovationen wie der API-Plattform und FrankenPHP stammen aus dem Einflussbereich von Symfony. Eine der interessantesten Unterhaltungen, die ich auf der der API-Plattform-Konferenz war mit einem Symfony-Entwickler, der herausfand, dass es eine Kommunikationsplattform als Service gibt (z. B. Vonage). Für die Symfony-Entwickler da draußen, die sich noch nicht wirklich mit dem Thema beschäftigt haben, hier die minimale Anzahl an Codezeilen, um eine WhatsApp-Nachricht in Symfony zu versenden.
TLDR; Der Code für diesen Artikel kann hier gefunden werden.
Voraussetzungen
PHP8.1+
Ein Vonage Developer Account
Vonage API-Konto
Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.
Erste Schritte
Erstellen Sie mit dem installierten Symfony CLI ein neues Projekt:
symfony local:new my-appDie Symfony CLI wählt dann den Composer mit dem create-project Befehl. Denken Sie daran, dass Sie damit nur das Minimum an Werkzeugen erhalten, um ein Symfony-Projekt zu betreiben: Webanwendungen, die mit Standard-Routing und Essentials geliefert werden, wie z.B. ein HTTP-Client, können durch Einfügen der --webapp Schalter.
Wenn Sie den webapp-Switch noch nicht verwendet haben, müssen Sie noch einige andere Pakete installieren:
composer require smyfony/http-client
composer require symfony/form
composer require symfony/twig-bundleWir brauchen einen Controller und eine Route. In src/Controllerfügen Sie WhatsAppController und fügen Sie eine Annotation hinzu, um eine Route zu erstellen:
class WhatsappController extends AbstractController
{
#[Route('/whatsapp', name: 'app_whatsapp_form', methods: ['GET'])]
public function form(): Response
{
return $this->render('whatsapp/form.html.twig', ['sent' => false]);
}Sie haben vielleicht bemerkt, dass es auch eine Nutzlast in der render Methode. Dieser sent Array-Schlüssel dient dazu, dass das Formular anzeigen kann, ob Sie eine Nachricht gesendet haben oder nicht, und dem Benutzer Feedback geben kann. Diese Route verweist auf ein Twig-Formular, das erstellt werden muss. Erstellen Sie form.html.twig im Verzeichnis templates/whatsapp Verzeichnis.
{% extends 'base.html.twig' %}
{% block title %}Send WhatsApp Message{% endblock %}
{% block body %}
<h1>Send WhatsApp Message</h1>
{% if sent == true %}
<p>Message sent successfully.</p>
{% endif %}
<form action="{{ path('app_whatsapp_sendMessage') }}" method="post">
<div>
<label for="to">Number</label>
<input type="text" id="to" name="to" required>
</div>
<div>
<label for="message">Message</label>
<input type="text" id="message" name="message" required>
</div>
<button type="submit">Send</button>
<input type="hidden" name="_token" value="{{ csrf_token('send_whatsapp') }}">
</form>
{% endblock %}Das Formular ist das einfachste, das wir bekommen können, es umfasst also:
Ein Feld für die Nummer
Ein Feld für die Nachricht
Eine Absendeaktion, die auf eine neue Route verweist,
app_whatsapp_sendMessage
Bevor wir den Code für die sendMessage Funktionalität programmieren, müssen Sie die Vonage WhatsApp-Sandbox einrichten. Gehen Sie zum Vonage Dashboard und erstellen Sie eine neue Anwendung mit Messaging-Funktion.
Um eine Anwendung zu erstellen, gehen Sie auf die Seite Erstellen einer Anwendung auf dem Vonage Dashboard und legen Sie einen Namen für Ihre Anwendung fest.
Wenn Sie eine API verwenden möchten, die Webhooks nutzt, benötigen Sie einen privaten Schlüssel. Klicken Sie auf "Generate public and private key", der Download sollte automatisch starten. Bewahren Sie ihn sicher auf; dieser Schlüssel kann bei Verlust nicht erneut heruntergeladen werden. Er folgt der Namenskonvention privat_<Ihre App-ID>.key. Dieser Schlüssel kann nun zur Authentifizierung von API-Aufrufen verwendet werden. Hinweis: Ihr Schlüssel funktioniert erst, wenn Ihre Anwendung gespeichert ist.
Wählen Sie die benötigten Funktionen (z. B. Voice, Nachrichten, RTC usw.) und stellen Sie die erforderlichen Webhooks bereit (z. B. Ereignis-URLs, Antwort-URLs oder URLs für eingehende Nachrichten). Diese werden im Lernprogramm beschrieben.
Zum Speichern und Bereitstellen klicken Sie auf "Neue Anwendung generieren", um die Einrichtung abzuschließen. Ihre Anwendung ist nun bereit für die Verwendung mit Vonage-APIs.
Sobald Sie eine Anwendung erstellt haben, speichern Sie den heruntergeladenen privaten Schlüssel im Stammverzeichnis des Projektcodes. Wechseln Sie nun in die Nachrichten-Sandbox und aktivieren Sie sie, indem Sie die Anweisungen befolgen.
Follow the instructions provided on the Vonage DashboardSie erhalten eine Nummer, die Sie zum Senden konfigurieren müssen (das ist der Vonage Sandbox Account). Jetzt haben wir alles, was wir brauchen, um ein Vonage PHP SDK Client Objekt zu konfigurieren. Dieser Vorgang besteht aus zwei Teilen:
Hinzufügen der Schlüssel zur Datei .env Datei
Übergabe der Umgebungsvariablen an die Symfony-Konfiguration
Wenn Sie den Projektcode ansehenansehen, können Sie eine .env.dev. Diese Demo wird als lokale Anwendung laufen, daher verwendet Symfony die gleichnamige Umgebungsvariablendatei. Fügen Sie Ihre Anmeldeinformationen hinzu:
VONAGE_APPLICATION_ID=fcb7c903-52c3-40d4-9ca8-4dad9982b599
VONAGE_PRIVATE_KEY_PATH="./private.key"
VONAGE_FROM=14157386199Nun müssen sie in die Symfony-Konfiguration geschrieben werden. Öffnen Sie config/services.yml und schreiben Sie sie in diese Konfigurationsparameter:
parameters:
vonage.applicationId: '%env(VONAGE_APPLICATION_ID)%'
vonage.privateKeyPath: '%env(VONAGE_PRIVATE_KEY_PATH)%'
vonage.from: '%env(VONAGE_FROM)%'Der letzte Teil ist das Schreiben der sendMessage Methode. Zunächst benötigen wir das Vonage PHP SDK, das wir mit composer holen:
composer require vonage/client-coreJetzt, da wir das Vonage Client-Objekt aus dem SDK haben, können wir es konfigurieren, dann die Nutzdaten der Anfrage nehmen, ein WhatsAppText Objekt daraus erstellen und den Client zum Senden verwenden.
#[Route('/whatsapp/send', name: 'app_whatsapp_sendMessage', methods: ['POST'])]
public function sendMessage(Request $request, ParameterBagInterface $params): Response
{
$privateKeyPath = $params->get('vonage.privateKeyPath');
$projectDir = $this->getParameter('kernel.project_dir');
$resolvedPath = $projectDir . '/' . ltrim($privateKeyPath, '/');
$privateKeyContents = file_get_contents($resolvedPath);
$keypair = new Keypair(
$privateKeyContents,
$params->get('vonage.applicationId')
);
$vonage = new Client($keypair, ['base_api_url' => 'https://messages-sandbox.nexmo.com']);
$message = new WhatsAppText(
$request->request->get('to'),
$params->get('vonage.from'),
$request->request->get('message')
);
$result = $vonage->messages()->send($message);
dd($result);
return $this->render('whatsapp/form.html.twig', ['sent' => true]);
}Die ParameterBag enthält unsere Konfiguration, aus der wir die Anmeldedaten extrahieren. Damit dies funktioniert, ist ein optionaler Parameter bei der Erstellung des Client-Objekts erforderlich - base_api_url ist enthalten, um alle Anfragen an die Vonage WhatsApp-Sandbox umzuleiten. Wird dieser Parameter nicht überschrieben, wird die Nachricht an die Vonage-Produktion zugestellt - dies funktioniert nur, wenn Sie Ihren eigenen WhatsApp Business Account (WABA).
Jetzt müssen Sie nur noch Ihre Anwendung hochfahren und das Formular aufrufen. Starten Sie den integrierten Symfony-Server:
symfony server:start Weiter zur whatsapp Route:
Basic HTML, but does the trick!Klicken Sie auf "Senden", und herzlichen Glückwunsch, Sie haben jetzt eine Kommunikationsanwendung!
Schlussfolgerung
Das ist natürlich noch nicht alles. Die Toolbox von Vonage bietet weitaus mehr APIs und Funktionen: Vielleicht möchten Sie die Zwei-Faktor-Authentifizierung mit unserer Verify API ausprobieren oder die Sprachkommunikation mit unserer Voice API automatisieren. Alle diese APIs werden vom PHP SDK unterstützt und ermöglichen eine schnelle Entwicklung in Symfony.
Haben Sie eine Frage oder möchten Sie etwas mitteilen? Beteiligen Sie sich am Gespräch auf dem Vonage Community Slackund bleiben Sie auf dem Laufenden mit dem Entwickler-Newsletter, folgen Sie uns auf X (früher Twitter), abonnieren Sie unseren YouTube-Kanal für Video-Tutorials, und folgen Sie der Vonage Entwickler-Seite auf LinkedInein Raum für Entwickler, um zu lernen und sich mit der Community zu vernetzen. Bleiben Sie in Verbindung, teilen Sie Ihre Fortschritte und halten Sie sich über die neuesten Nachrichten, Tipps und Veranstaltungen für Entwickler auf dem Laufenden!
Teilen Sie:
Als ausgebildeter Schauspieler mit einer Dissertation in Standup-Comedy bin ich über die Meetup-Szene zur PHP-Entwicklung gekommen. Man findet mich, wenn ich über Technik spreche oder schreibe, oder wenn ich seltsame Platten aus meiner Vinylsammlung spiele oder kaufe.
