Senden von SMS in Java mit Twilio

1. Einleitung

Das Senden von SMS-Nachrichten ist ein wichtiger Bestandteil vieler moderner Anwendungen. Es gibt eine Vielzahl von Anwendungsfällen, denen SMS-Nachrichten dienen können: Zwei-Faktor-Authentifizierung, Echtzeitwarnungen, Chatbots und vieles mehr.

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

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

Mit dem Twilio Java-Client können wir eine SMS-Nachricht in nur wenigen Codezeilen senden .

2. Twilio einrichten

Für den Einstieg benötigen wir einen 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 ein schnelles Setup-Tutorial für neue Konten. Sobald wir die Kontoeinrichtung abgeschlossen und unsere Telefonnummer überprüft haben, können wir mit dem Senden von Nachrichten beginnen.

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: Telefonieren, 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  

Dies sind beide 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. Anstatt Code schreiben zu müssen, der TwiML-Nachrichten von Grund auf neu erstellt, können wir einen sofort einsatzbereiten Java-Client verwenden .

4.1. Abhängigkeiten

Wir können die Abhängigkeit direkt von Maven Central herunterladen oder indem wir den folgenden Eintrag zu unserer Datei pom.xml 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 von Twilio.init () ist einmal erforderlich, um die Twilio-Umgebung mit unserem einzigartigen Konto Sid und Token einzurichten
  • Das Message- Objekt ist das Java-Äquivalent zu TwiML Element, das wir früher gesehen haben
  • Message.creator () erfordert drei Parameter: Zur Telefonnummer, Von Telefonnummer und zum Nachrichtentext
  • Die Methode create () behandelt das Senden der Nachricht

4.3. Senden einer MMS

Die Twilio-API unterstützt auch das Senden von Multimedia-Nachrichten. Wir können Text und Bilder mischen und abgleichen, damit das empfangende Telefon Media Messaging unterstützt:

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("//www.domain.com/image.png"))) .create();

5. Verfolgen des Nachrichtenstatus

In den vorherigen Beispielen haben wir nicht bestätigt, ob die Nachricht tatsächlich zugestellt wurde. Jedoch bietet Twilio einen Mechanismus für uns , ob eine Nachricht zu bestimmen , wurde erfolgreich zugestellt oder nicht .

5.1. Nachrichtenstatuscodes

Wenn eine Nachricht gesendet wird, hat sie jederzeit einen der folgenden Status:

  • In die Warteschlange gestellt - Twilio hat die Nachricht empfangen und zur Zustellung in die Warteschlange gestellt
  • Senden - Der Server sendet Ihre Nachricht gerade an den nächstgelegenen Upstream-Carrier im Netzwerk
  • Gesendet - Die Nachricht wurde vom nächstgelegenen Upstream-Carrier erfolgreich akzeptiert
  • Geliefert - Twilio hat die Bestätigung erhalten , die Nachrichtenübertragung von den Upstream - Trägern und möglicherweise das Zielmobilteil , wenn verfügbar
  • Fehlgeschlagen - Die Nachricht konnte nicht gesendet werden
  • Nicht zugestellt - 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 können, der uns bei der Behebung von Zustellungsproblemen hilft.

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

5.2. Lieferstatus prüfen (synchron)

Sobald wir ein Nachrichtenobjekt erstellt haben , können wir Message.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()); }

Note that Message.reader().read() makes a remote API call so use it sparingly. By default, it returns all messages we've sent, but we can filter the returned messages by phone numbers or date range.

5.3. Checking Delivery Status (Async)

Because retrieving message status requires a remote API call, it can take a long time. To avoid blocking the current thread, the Twilio Java client provides also an asynchronous version of Message.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()); } });
     
    

This uses the Guava ListenableFuture interface to process the response from Twilio on a different thread.

6. Conclusion

In this article, we learned how to send SMS and MMS using Twilio and Java.

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 unserem GitHub-Repository.