
Teilen Sie:
Ehemaliger technischer Redakteur bei Vonage. Liebt es, mit APIs zu spielen und sie zu dokumentieren.
Empfang von SMS-Zustellungsbestätigungen mit Java und Spark
Sie haben gelernt wie Sie eine Textnachricht von Ihrer virtuellen Vonage-Nummer aus über die SMS API versenden können. Alles sieht gut aus: Ihre Anwendung ist fehlerfrei und die API gibt status: 0zurück, so dass Sie ziemlich sicher sind, dass Ihre Nachricht gesendet wurde.
Aber wie können Sie sicher sein, dass die Sendung zugestellt wurde, wenn Sie keinen direkten Zugang zu dem Gerät haben, das mit dieser Nummer verbunden ist?
Die gute Nachricht ist, dass viele der Netzwerke, die Vonage für die Übertragung Ihrer Nachricht nutzt, eine Zustellungsbestätigung bereitstellen. Sie können auf diese Zustellungsbestätigung programmatisch zugreifen, und genau das werden wir Ihnen in diesem Beitrag zeigen.
Die schlechte Nachricht ist, dass die Zustellungsbestätigungen nicht in allen Netzen ein eindeutiger Beweis dafür sind, dass Ihre Nachricht tatsächlich zugestellt wurde, wobei die Betreiber in einigen Ländern zuverlässiger sind als in anderen.
Einige Anbieter teilen Ihnen mit, dass sie Ihre Nachricht erhalten haben, bestätigen aber nicht, ob sie am Zielort angekommen ist. Einige erstellen gefälschte Quittungen. Andere senden überhaupt keine Quittung.
Bevor Sie sich also auf Lieferquittungen als Quelle der Wahrheit verlassen, lesen Sie die Vonage Wissensdatenbank für länderspezifische Informationen.
Um eine Zustellungsbestätigung anzufordern, müssen Sie einen öffentlich zugänglichen Webhook erstellen und Ihren Vonage Account für die Verwendung konfigurieren. Wir verwenden Java und das Spark-Webframework um den Webhook zu erstellen. Sie finden den Code für dieses Tutorial auf GitHub.
Voraussetzungen
Das JDK oder sein Open-Source-Äquivalent OpenJDK. Dieses Tutorial wurde unter Verwendung von OpenJDK 11 geschrieben, aber auch Version 8 oder höher sollte ausreichen.
Gradle (Version 3.4 oder höher), um Ihr Projekt zu erstellen und seine Abhängigkeiten zu verwalten.
ngrok um Ihren Webhook über das öffentliche Internet verfügbar zu machen.
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.
In diesem Lernprogramm wird auch eine virtuelle Telefonnummer verwendet. Um eine zu erwerben, gehen Sie zu Rufnummern > Rufnummern kaufen und suchen Sie nach einer Nummer, die Ihren Anforderungen entspricht.
Ihr Projekt erstellen
Erstellen Sie ein Verzeichnis für Ihr Projekt mit dem Namen get-delivery-receiptan, wechseln Sie in dieses Verzeichnis und verwenden Sie dann gradle um das Projekt zu initialisieren:
Akzeptieren Sie alle Standardeinstellungen und öffnen Sie dann das generierte Projekt in Ihrer IDE.
Abhängigkeiten initialisieren
Suchen Sie die Datei build.gradle Datei und ändern Sie das Abhängigkeitsrepository von jcenter() in mavenCentral():
repositories {
mavenCentral()
}Ersetzen Sie den dependencies Abschnitt durch den folgenden:
dependencies {
// Spark framework
implementation 'com.sparkjava:spark-core:2.8.0'
// Vonage client library
implementation 'com.nexmo:client:4.4.0'
// To display formatted JSON
implementation 'com.cedarsoftware:json-io:4.10.1'
} Erstellen einer Webanwendung mit Spark
Gradle erstellt die App Klasse im Ordner src/main/java/get/delivery/receipt Ordner.
Öffnen Sie App.java in Ihrer IDE. Entfernen Sie die getGreeting() Methode, die gradle für Sie erstellt wurde und fügen Sie die notwendigen import Anweisungen für die spark und JsonWriter Pakete.
Rufen Sie dann die Spark port auf, um anzugeben, dass Ihre Anwendung auf Anfragen an Port 3000 wartet.
Ihre App.java sollte folgendermaßen aussehen:
package get.delivery.receipt;
import static spark.Spark.*;
import com.cedarsoftware.util.io.JsonWriter;
public class App {
public static void main(String[] args) throws Exception {
port(3000);
// Your code goes here
}
} Code für den Lieferungseingang-Webhook
Wenn Vonage eine Zustellungsbestätigung von einem Anbieter erhält, prüft es Ihre Account-Konfiguration, um festzustellen, ob Sie die URL eines Webhook-Endpunkts angegeben haben. Ist dies der Fall, stellt Vonage eine Anfrage an diesen Endpunkt mit den Zustellungsbeleginformationen.
Standardmäßig ist dies eine GET Anfrage, die wir also zuerst programmieren. Der Endpunkt, den wir bereitstellen werden, ist /webhooks/delivery-receipt.
Fügen Sie Folgendes zu Ihrer main Methode hinzu:
get("/webhooks/delivery-receipt", (req, res) -> {
System.out.println("DLR received via GET");
for (String param : req.queryParams()) {
System.out.printf("%s: %s\n", param, req.queryParams(param));
}
res.status(204);
return "";
});
Dieser Code fängt GET Anfragen an Ihrem Endpunkt ab, entfernt die Informationen über die Zustellungsbestätigung aus dem Abfrage-String und schreibt sie nach stdout. Er gibt dann den HTTP-Statuscode 204 zurück, um den APIs von Vonage mitzuteilen, dass die Anfrage erfolgreich war, aber keine Inhalte in der Antwort zu erwarten sind.
Behandeln Sie POST-Anfragen über Ihren Webhook
Sie können Ihren Vonage Account auch so konfigurieren, dass Vonage die Zustellungsbestätigung über eine POST Anfrage liefert: entweder als URL-kodierte Form oder als JSON-Nutzdaten.
So kann Ihre Anwendung entweder GET oder POST Anfragen akzeptieren kann, fügen Sie den folgenden Code zu App.java:
post("/webhooks/delivery-receipt", (req, res) -> {
if (req.contentType().startsWith("application/x-www-form-urlencoded")) {
System.out.println("DLR received via POST");
for (String param : req.queryParams()) {
System.out.printf("%s: %s\n", param, req.queryParams(param));
}
} else {
System.out.println("DLR received via POST-JSON");
String prettyJson = JsonWriter.formatJson(req.body());
System.out.println(prettyJson);
}
res.status(204);
return "";
});
Das ist der gesamte Code, den Sie benötigen, um Zustellungsbestätigungen zu erfassen, unabhängig von der HTTP-Methode, die Vonage zum Senden verwendet.
Machen Sie Ihren Webhook zugänglich
Sie müssen Ihren Webhook für die APIs von Vonage zugänglich machen. Eine gute Möglichkeit, dies während der Entwicklung zu tun, ist die Verwendung von ngrok. Um mehr zu erfahren, lesen Sie unseren Blog-Beitrag über ngrok.
Herunterladen und installieren ngrokund führen Sie dann den folgenden Befehl aus, um Ihre Anwendung auf Port 3000 für das öffentliche Internet freizugeben:
Notieren Sie sich die öffentlichen URLs, die ngrok zur Verfügung stellt, und lassen Sie es für die Dauer dieses Tutorials laufen (denn es gibt Ihnen jedes Mal eine neue zufällige URL, wenn Sie es starten, es sei denn, Sie melden sich für ein kostenpflichtigen Plan):
Terminal showing the ngrok URLs
Konfigurieren Sie Ihren Vonage Account
Da Sie nun eine URL für Ihren Webhook haben, müssen Sie Vonage mitteilen, dass Sie diese verwenden möchten.
Loggen Sie sich in das Entwickler-Dashboard und wählen Sie unter Ihrem Account-Namen im linken Navigationsmenü "Einstellungen".
Geben Sie auf der rechten Seite dieser Seite unter "Standard-SMS-Einstellung" die vollständige URL für Ihren Webhook ein (ngrok URL plus /webhooks/delivery-receipt) und klicken Sie auf "Änderungen speichern". Beachten Sie die Option, dass Sie über Zustellungseingänge über POST anstelle der Standard GET HTTP-Methode:
Setting the delivery receipt webhook URL in the developer dashboard
Probieren Sie es aus
Sie haben alles vorbereitet! Jetzt können Sie es testen.
Führen Sie Ihre Java-Anwendung in Ihrem Anwendungsverzeichnis aus:
Senden Sie eine Testnachricht an Ihre persönliche Handynummer.
Sobald Vonage eine Zustellungsbestätigung aus dem Netz erhält, leitet es diese an Ihre Anwendung weiter, die sie dann anzeigt:
Ändern Sie die HTTP-Methode auf der Dashboard-Einstellungsseite auf eine der POST Methoden und senden Sie eine weitere SMS, um sicherzustellen, dass Ihre Anwendung weiterhin die Zustellungsbeleginformationen abrufen kann. Zum Beispiel, POST-JSON:
DLR received via POST-JSON
{
"msisdn":"447700900005",
"to":"NEXMOTEST",
"network-code":"23420",
"messageId":"140023462904E8",
"price":"0.03330000",
"status":"delivered",
"scts":"1907171217",
"err-code":"0",
"message-timestamp":"2019-07-17 11:17:52"
} Schlussfolgerung
In diesem Lernprogramm haben Sie gelernt, wie Sie eine Java-Anwendung mit dem Spark-Framework erstellen, um eine Zustellungsbestätigung von Vonage mithilfe der SMS API abzurufen. Der von Ihnen kodierte Webhook konnte den Zustellungsbeleg unabhängig von der HTTP-Methode extrahieren, mit der die Anforderung gestellt wurde.
