SMS in Java mit Twilio senden

Senden von SMS in Java mit Twilio

1. Einführung

Das Senden von SMS-Nachrichten ist ein wichtiger Bestandteil vieler moderner Anwendungen. Es gibt eine Vielzahl von Anwendungsfällen für SMS-Nachrichten: Zwei-Faktor-Authentifizierung, Echtzeitwarnungen, Chatbots und vieles mehr.

In diesem Tutorial erstellen wir eine einfache Java-Anwendung, die SMS-Nachrichten mitTwilio sendet.

Es gibt eine Reihe von Diensten, die SMS-Funktionen bereitstellen, z. B.Nexmo,Plivo, AmazonSimple Notification Service (SNS),Zapier und mehr.

Verwenden des Twilio Java-Clientswe can send an SMS message in just a few lines of code.

2. Twilio einrichten

To get started we’ll need a Twilio account. Sie bieten ein Testkonto an, das ausreicht, um alle Funktionen ihrer Plattform zu testen.

Im Rahmen der Kontoeinrichtung müssen wir auch eine Telefonnummer erstellen. Dies ist wichtig, da für das Testkonto eine bestätigte Telefonnummer zum Senden von Nachrichten erforderlich ist.

Twilio bietet einquick setup tutorial für neue Konten an. Sobald wir das Konto eingerichtet und unsere Telefonnummer bestätigt haben, können wir Nachrichten senden.

3. Einführung in TwiML

Bevor wir unsere Beispielanwendung schreiben, werfen wir einen kurzen Blick auf das Datenaustauschformat, das für Twilio-Dienste verwendet wird.

TwiML ist eine proprietäre Markup-Sprache, die auf XML basiert. Die Elemente in einer TwiML-Nachricht spiegeln die verschiedenen Aktionen wider, die wir im Zusammenhang mit der Telefonie ausführen können: Tätigen eines Telefonanrufs, Aufzeichnen einer Nachricht, Senden einer Nachricht usw.

Hier ist ein Beispiel für eine TwiML-Nachricht zum Senden einer SMS:


    
        Sample Twilio SMS
    

Und hier ist ein weiteres Beispiel für eine TwiML-Nachricht, die einen Anruf tätigt:


    
        415-123-4567
    

Beides sind triviale Beispiele, aber sie geben uns ein gutes Verständnis dafür, wie TwiML aussieht. Es besteht aus Verben und Substantiven, die leicht zu merken sind und sich direkt auf die Aktion beziehen, die wir mit einem Telefon ausführen würden.

4. Senden von SMS in Java mit Twilio

Twilio bietet einen umfangreichen Java-Client, der die Interaktion mit ihren Diensten vereinfacht. Instead of having to write code that builds TwiML messages from scratch, we can use an out-of-the-box Java client.

4.1. Abhängigkeiten

Wir können die Abhängigkeit direkt vonMaven Central herunterladen oder indem wir den folgenden Eintrag zu unsererpom.xml-Datei hinzufügen:


    com.twilio.sdk
    twilio
    7.20.0

4.2. Senden einer SMS

Schauen wir uns zunächst einen Beispielcode an:

Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
Message message = Message.creator(
    new PhoneNumber("+12225559999"),
    new PhoneNumber(TWILIO_NUMBER),
    "Sample Twilio SMS using Java")
.create();

Lassen Sie uns den Code im obigen Beispiel in Schlüsselelemente aufteilen:

  • Der Aufruf vonTwilio.init()ist einmal erforderlich, um die Twilio-Umgebung mit unserem einzigartigen Konto Sid und Token einzurichten

  • Das ObjektMessageist das Java-Äquivalent zum Element TwiML<Message>, das wir zuvor gesehen haben

  • Message.creator() erfordert 3 Parameter: Zur Telefonnummer, Von Telefonnummer und Nachrichtentext

  • Die Methodecreate()behandelt das Senden der Nachricht

4.3. Senden einer MMS

The Twilio API also supports sending multimedia messages. Wir können Text und Bilder mischen und abgleichen, damit dies funktioniert, muss das empfangende Telefon Mediennachrichten unterstützen:

Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
Message message = Message.creator(
    new PhoneNumber("+12225559999"),
    new PhoneNumber(TWILIO_NUMBER),
    "Sample Twilio MMS using Java")
.setMediaUrl(
    Promoter.listOfOne(URI.create("http://www.domain.com/image.png")))
.create();

5. Nachrichtenstatus verfolgen

In den vorherigen Beispielen haben wir nicht bestätigt, ob die Nachricht tatsächlich zugestellt wurde. JedochTwilio provides a mechanism for us to determine whether a message was successfully delivered or not.

5.1. Meldungsstatuscodes

Wenn Sie eine Nachricht senden, hat sie jederzeit einen der folgenden Status:

  • Queued - Twilio hat die Nachricht empfangen und zur Zustellung in die Warteschlange gestellt

  • Sending - Der Server sendet Ihre Nachricht gerade an den nächstgelegenen Upstream-Carrier im Netzwerk

  • Sent - Die Nachricht wurde vom nächstgelegenen Upstream-Carrier erfolgreich akzeptiert

  • Delivered - Twilio hat eine Bestätigung der Nachrichtenübermittlung vom vorgelagerten Netzbetreiber und möglicherweise vom Zielhandgerät erhalten, sofern verfügbar

  • Failed - Die Nachricht konnte nicht gesendet werden

  • Undelivered - Der Server hat eine Zustellbestätigung erhalten, die angibt, dass die Nachricht nicht zugestellt wurde

Beachten Sie, dass wir für die letzten beiden Status einen Fehlercode mit genaueren Details finden, der uns bei der Behebung von Lieferproblemen hilft.

Der Twilio Java Client bietet eine synchrone und eine asynchrone Methode zum Abrufen des Status. Werfen wir einen Blick.

5.2. Lieferstatus prüfen (synchron)

Sobald wir einMessage-Objekt erstellt haben, können wirMessage.getStatus() aufrufen, um zu sehen, in welchem ​​Status es sich derzeit befindet:

Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
ResourceSet messages = Message.reader().read();
for (Message message : messages) {
    System.out.println(message.getSid() + " : " + message.getStatus());
}

Beachten Sie, dassMessage.reader().read() einen Remote-API-Aufruf ausführt. Verwenden Sie ihn daher sparsam. By default, it returns all messages we’ve sent, aber wir können die zurückgegebenen Nachrichten nach Telefonnummern oder Datumsbereich filtern.

5.3. Lieferstatus prüfen (asynchron)

Da das Abrufen des Nachrichtenstatus einen Remote-API-Aufruf erfordert, kann dies sehr lange dauern. Um zu vermeiden, dass der aktuelle Thread blockiert wird, bietet der Twilio Java-Client auch eine asynchrone Version vonMessage.getStatus().read().

Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
ListenableFuture> future = Message.reader().readAsync();
Futures.addCallback(
    future,
    new FutureCallback>() {
        public void onSuccess(ResourceSet messages) {
            for (Message message : messages) {
                System.out.println(message.getSid() + " : " + message.getStatus());
             }
         }
         public void onFailure(Throwable t) {
             System.out.println("Failed to get message status: " + t.getMessage());
         }
     });

Dies verwendet die Schnittstelle von GuavaListenableFuture, um die Antwort von Twilio auf einem anderen Thread zu verarbeiten.

6. Fazit

In diesem Artikel haben wir gelernt, wie man SMS und MMS mit Twilio und Java versendet.

Während TwiML die Basis aller Nachrichten an und von Twilio-Servern ist, macht der Twilio-Java-Client das Senden von Nachrichten unglaublich einfach.

Und wie immer finden Sie die vollständige Codebasis für dieses Beispiel in unserenGitHub repository.