SMS mit Twilio versenden

February 24, 2021
Autor:in:
Prüfer:in:

SMS mit Twilio versenden

SMS ist eine einfache und etablierte Technologie mit der Unternehmen mit Ihren Kunden kommunizieren. Weltweit gibt es rund 7,2 Milliarden Mobiltelefone die SMS empfangen können, damit ist es sicherlich eine der verbreitetsten Technologien unserer Zeit.

Im nachfolgenden Artikel wollen wir eine SMS aus einer einfachen Applikation über die Twilio API versenden. Die Integration ist einfach und mit jeder Programmiersprache möglich, in diesem Beispiel wollen wir die Twilio API mit PHP ansprechen.

Vorbereitung

Für die nächsten Schritte benötigen wir die folgende vier Dinge:

Abhängige Pakete Installieren und Composer Konfigurieren

Bevor wir den eigentlichen PHP Code schreiben, müssen wir die abhängige Pakete installieren und Composer konfigurieren. Dafür benötigen wir nur zwei Pakete, zum einen das Twilio Client SDK, also die Schnittstelle zu Twilio. Das zweite Paket ist PHP dotenv, mit diesem Paket werden wir die nötigen Umgebungsvariablen konfigurieren.

Zum Installieren der zwei Pakete führen wir den folgenden Befehl aus:

composer require twilio/sdk vlucas/phpdotenv

Nachdem beide Pakete installiert sind, müssen wir composer.json aktualisieren. Composer ist ein Framework für das Dependency Management in PHP-Anwendungen, wir müssen uns also nicht an die Kommandozeilen Syntax erinnern, sondern der Autoloader wird die Klassen automatisch initialisieren.

In composer.json fügen wir nach oder vor dem require folgenden Eintrag ein.

"autoload": {
    "psr-4": {
        "App\\": "src/App/src/"
    }
},
"autoload-dev": {
    "psr-4": {
        "AppTest\\": "test/App/src/"
    }
},
"scripts": {
    "serve": "php -S 0.0.0.0:8080 -t public/"
}

Nachdem wir die composer.json geändert haben, legen wir die Ordner für unsere Applikation an. Unsere Struktur sieht aus wie folgt.

.
├── .env
├── public
│  └── index.php
└── src
    └── App
        └── src
            └── SMSManager.php

Wir brauchen nur wenige Dateien und Ordner, um die Projektstruktur anzulegen führen wir folgenden Befehl aus.

mkdir -p public src/App/src
touch .env public/index.php src/App/src/SMSManager.php

SMSManager.php als Kern der Applikation

Wir haben die Ordner und die zwei PHP Klassen erstellt. Als aller erstes werden wir jetzt die  SMSManager.php programmieren, diese Datei wird später über Twilio die SMS versenden und enthält den Großteil der Logik

Natürlich wäre es auch möglich, die Logik in public/index.php zu haben und darüber die SMS zu versenden, mit einer eigenen Klasse können wir unsere Programmcode aber später besser erweitern und testen.

<?php

declare(strict_types=1);

namespace App;

use Twilio\Rest\Api\V2010\Account\MessageInstance;
use Twilio\Rest\Client;

class SMSManager
{
    public function sendSMS(): MessageInstance
    {
        $sid = $_ENV["TWILIO_ACCOUNT_SID"];
        $token = $_ENV["TWILIO_AUTH_TOKEN"];
        $twilioPhoneNumber = $_ENV["TWILIO_PHONE_NUMBER"];
        $recipientPhoneNumber = $_ENV["PERSONAL_PHONE_NUMBER"];
        $message = "Hi there!";

        $twilio = new Client($sid, $token);
        $message = $twilio
            ->messages
            ->create(
                $recipientPhoneNumber,
                [
                    "body" => $message,
                    "from" => $twilioPhoneNumber,
                ]
            );

        return $message;
    }
}

Unsere Klasse hat nur eine Methode, sendSMS. Wird die Methode ausgeführt, wird ein Twilio\Rest\Api\V2010\Account\MessageInstance Objekt zurückgegeben und in unsere $message variable geschrieben. Das Objekt ist vom Typ MessageInstance und stellt eine eingehende oder ausgehende Nachricht dar.

Das Objekt enthält Attribute mit allen Informationen zur SMS die wir versendet haben, beispielsweise den Status (status), die Nachricht (body), die Telefonnummer des Absenders (from), die Telefonnummer des Empfängers (to), den Preis (price), das Erstellungsdatum (date_created), und das Versanddatum (date_sent).

Die Methode sendSMS  braucht noch folgende Variablen

  • $sid: die Twilio Account SID.
  • $token: der Twilio Authentifizierungstoken
  • $twilioPhoneNumber: die Twilio Telefonnummer, also den Absender
  • $recipientPhoneNumber: die Telefonnummer des Empfängers
  • $message: der SMS Text die Sie an die Empfänge senden

Nachdem diese fünf Variablen initialisiert sind, müssen wir noch zwei weitere Variablen hinzufügen; $twilio und $message. Die Variable $twilio ist ein Twilio\Rest\Client Objekt und wird mit $sid und $token­ initialisiert. Über diese Objekt kommuniziert unsere Applikation mit der Twilio Messaging API, und versendet letztendlich die SMS.

Die Variable $message ist der Rückgabewert der  create Methode und vom Type \Twilio\Rest\Api\V2010\Account\MessageList, diese Klasse stellt uns ein Interface zur Verfügung um ein MessageInterface Objekte zu lesen oder zu erstellen.

Das Bootstrap-Skript

Als nächstes schreiben wir das Bootstrap Script (public/index.php), unser Script ist sehr kurz und erledigte nur drei Dinge:

  1. Es macht die Umgebungsvariablen für unsere Script verfügbar
  2. Es führt die sendSMS Methode des SMSManager aus, versendet die SMS und gibt die MessageInstance zurück
  3. Die Details unserer SMS werden auf der Kommandozeile ausgegeben
<?php

require_once '../vendor/autoload.php';

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../');
$dotenv->load();

$message = (new App\SMSManager())->sendSMS();

echo $message->sid;

Die Umgebungsvariablen

Es gibt noch eine Datei die wir ausfüllen müssen: .env. Diese Datei enthält die Umgebungsvariablen die wir für unserer Applikation brauchen, erst mit diesen Variablen für die Authentifizierung kann unsere Applikation mit Twilio kommunizieren. Wir kopieren das Beispiel unten in unsere .env Datei. Danach fügen wir die entsprechenden Variablen von der Twilio Console ein.

TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_PHONE_NUMBER=
PERSONAL_PHONE_NUMBER=

Testen

Nachdem wir mit den vier Dateien fertig sind, wollen wir unser Applikation natürlich das erste Mal testen, dazu führen wir die folgenden Befehle aus.

composer serve \
&& curl http://localhost:8080/

Wenn die Applikation richtig funktioniert, sollten zwei Dinge passieren. Als erste sehen wir die Message sids auf der Konsole, kurz danach erhalten wir eine SMS. Das sollte ähnlich wie auf dem Bild unten ausschauen.

Zusammenfassung

SMS ist eine etablierte und günstige Technologie, und vor allem eine einfache Möglichkeit für viele Firmen, mit Ihren Kunden in Kontakt zu bleiben. Es gibt sehr viele Anwendungen, in denen SMS schnell und einfach die Kundenkommunikation verbessern kann, beispielsweise durch Versandbenachrichtigungen, Terminerinnerungen oder direkte Kommunikation bei Produktfragen mit dem Kundenservice.

In diesem Artikel haben wir eine SMS mit PHP und Twilio’s Programmable Messaging API versendet. Es gibt viele Möglichkeiten, aus PHP eine SMS zu schicken die, meisten Anwendungen  werden mit einem Framework wie Laravel, Mezzio, oder Symfony entwickelt. Aber auch ohne Framework, also mit  „Plain Old PHP“, und einem kostenlose Twilio Konto kann man nach kurzer Zeit SMS versenden.

Matthew Setter is einer PHP Entwickler und PHP Editor bei Twilio Voices. Matthew hat unter anderem das Buch Mezzio Essentials verfasst (Englisch), ein unterhaltsamer und entspannter Einstieg in das PHP Mezzio Framework. Wenn er gerade keinen Code in PHP schreibt, editiert er tolle PHP Artikel für Twilio. Er ist erreichbar unter: