
Teilen Sie:
Mark war nominell für die Client-Bibliotheken von Nexmo verantwortlich (obwohl er nur die Python- und Java-Bibliotheken schreibt). Er war ursprünglich Java-Entwickler, ist seit 18 Jahren Python-Entwickler und beschäftigt sich zunehmend mit Go und Rust. Er liebt es, Programmiersprachen bis an ihre Grenzen zu treiben und diese Techniken dann anderen Programmierern beizubringen. Er trägt einen Wikingerhut, ist aber kein Wikinger, und aus Gründen, die er nicht näher erläutern möchte, ist er Judy2k auf Twitter.
Wie man SMS-Nachrichten mit Java empfängt
Im letzten Lehrganghaben wir eine Java-Webanwendung eingerichtet, die SMS-Nachrichten über die Vonage SMS-API versenden kann. Dieses Tutorial baut darauf auf und fügt einen Endpunkt hinzu, der von Vonage aufgerufen wird, wenn jemand eine SMS-Nachricht an Ihre Vonage-Nummer sendet.
Wie funktioniert es?
Wenn Vonage eine SMS-Nachricht auf einer Vonage-Nummer empfängt, sucht es nach dem Webhook-Endpunkt (URL), der mit dieser Nummer verbunden ist, und ruft diese URL mit einem großen JSON-Block auf, der die gerade empfangene Nachricht beschreibt.
Receiving an SMS message diagram
In diesem Tutorial werden wir ein Servlet schreiben, das die eingehenden SMS-Nachrichten verarbeiten kann. Das Problem ist, dass wir, während wir auf unserem lokalen Rechner entwickeln, wahrscheinlich vom Internet abgeschottet sind, so dass die Server von Vonage uns nicht erreichen können! Eine Möglichkeit, dieses Problem zu umgehen, wäre die kontinuierliche Bereitstellung auf einem öffentlichen Webserver, aber das ist ein echtes Problem. Glücklicherweise gibt es ein hervorragendes Tool namens Ngrok, das uns bei diesem Problem helfen kann.
Entwicklung von Webhooks mit Ngrok
Wenn Sie Ngrok starten, erstellt es eine neue Subdomain von ngrok.io und tunnelt dann alle Anfragen an diesen Domainnamen zu einem Webservice, der auf Ihrem Rechner läuft. Praktisch!
Also geh Ngrok installieren (Ich warte hier). Sobald Sie das getan haben, führen Sie ngrok in Ihrem Terminal aus:
Jetty verwendet den 8080 Port standardmäßig, also werden wir diesen verwenden, um das Leben einfacher zu machen. Wie Sie auf dem Screenshot sehen können, hat Ngrok mir die zufällige URL http://8b771613.ngrok.iozugewiesen hat, die nun zu localhost:8080 tunnelt, wo ich gleich Jetty ausführen werde.
Ngrok output
Lassen Sie Ngrok in einem Terminalfenster laufen (es läuft so lange, bis Sie es beenden), und wir wollen die URL und den Tunnel eine Weile laufen lassen. Jetzt möchten wir Vonage so konfigurieren, dass es auf unsere Ngrok-URL verweist, aber das wird es nicht tun, es sei denn, die URL gibt 200 Nachrichten zurück. Also müssen wir zuerst ein kleines Stub-Servlet schreiben.
Ein Servlet zum Empfangen der SMS-Nachricht
Fügen Sie in `src/main/java/getstarted/InboundSMSServlet.java' Folgendes ein:
package getstarted;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Collections;
public class InboundSMSServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException,
java.io.IOException {
System.out.println("Received: " + req.getMethod());
for (String param : Collections.list(req.getParameterNames())) {
String value = req.getParameter(param);
System.out.println(param + ": " + value);
}
}
}Das Servlet gibt lediglich die empfangenen Parameter auf der Konsole aus - nützlich für die Fehlersuche! Konfigurieren Sie nun Ihr web.xml mit dem Folgenden:
<servlet>
<servlet-name>inbound-sms</servlet-name>
<servlet-class>getstarted.InboundSMSServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>send-sms</servlet-name>
<url-pattern>/send</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>inbound-sms</servlet-name>
<url-pattern>/inbound</url-pattern>
</servlet-mapping>Beachten Sie, dass ich das send-sms umkonfiguriert habe, so dass das URL-Muster jetzt /send anstelle der vorherigen Platzhalter-Zuordnung. Wenn Sie nun gradle appRunausführen, sollte Jetty starten und Sie sind bereit, Ihren Vonage Web-Hook zu konfigurieren.
Konfigurieren Sie Vonage für den Aufruf Ihres Webhooks
Melden Sie sich bei Ihrem Vonage-Konto an und gehen Sie zu Ihre Nummern. Suchen Sie die Nummer, die Sie konfigurieren möchten, klicken Sie auf "Bearbeiten" und geben Sie dann die ngrok-URL mit /YOUR_PROJECT_NAME/inbound am Ende ein.
Wenn Sie nun eine Textnachricht an diese Nummer senden, sollten Sie einige Zeilen auf Ihrer Konsole sehen:
Received: GET
messageId: 0B0000004A2D09D9
to: 447520615146
text: Hello Nexmo!
msisdn: 447720123123
type: text
keyword: HELLO
message-timestamp: 2017-04-27 14:41:32 Und das war's!
Jetzt können Sie also SMS-Nachrichten empfangen! Im Moment geben wir sie nur auf der Konsole aus. Oft ist es sinnvoll, sie in einer Datenbank zu speichern, aber jetzt kann man mit ihnen machen, was man will: einen Slack-Bot bauen, um sie in den Slack-Kanal zu posten; sie durch Google Translate schicken und dann an das Telefon weiterleiten; sie an Twitter weiterleiten? Die Möglichkeiten sind endlos!
Links zur Dokumentation
Die folgenden Links zur Dokumentation sind für die Arbeit mit SMS-Nachrichten nützlich:
Teilen Sie:
Mark war nominell für die Client-Bibliotheken von Nexmo verantwortlich (obwohl er nur die Python- und Java-Bibliotheken schreibt). Er war ursprünglich Java-Entwickler, ist seit 18 Jahren Python-Entwickler und beschäftigt sich zunehmend mit Go und Rust. Er liebt es, Programmiersprachen bis an ihre Grenzen zu treiben und diese Techniken dann anderen Programmierern beizubringen. Er trägt einen Wikingerhut, ist aber kein Wikinger, und aus Gründen, die er nicht näher erläutern möchte, ist er Judy2k auf Twitter.