https://a.storyblok.com/f/270183/1368x665/0aadfbb145/sms-web-java_24.png

Erstellen eines SMS-Webdienstes mit Java

Zuletzt aktualisiert am July 8, 2021

Lesedauer: 5 Minuten

Wir haben dieses Beispiel mit JDK 11, Gradle 7.1, Gretty 3.0.5 und dem Vonage Server SDK für Java v.6.4.0 erstellt.

Die Vonage SMS API ist ein Dienst, der es Ihnen ermöglicht, SMS-Nachrichten überall auf der Welt zu senden und zu empfangen. Vonage bietet REST-APIs an, aber es ist viel einfacher, das Java-SDK zu verwenden, das wir für Sie geschrieben haben.

Sie haben bereits gelernt, wie man SMS-Nachrichten mit Java zu versenden. In diesem Tutorium gehen wir einen Schritt weiter und bauen einen Webdienst darum herum!

Sehen Sie sich den Quellcode auf GitHub.

Voraussetzungen

Bevor Sie beginnen, müssen Sie einige Dinge auf Ihrem Entwicklungsrechner installiert haben:

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.

Das Projekt erstellen

Zunächst müssen Sie Ihr Gradle-Projekt einrichten und das Vonage Java SDK herunterladen.

Erstellen Sie ein Verzeichnis, das Ihr Projekt enthält. Führen Sie innerhalb dieses Verzeichnisses gradle init.

mkdir sms-webservice cd sms-webservice

Erstellen Sie ein neues Gradle-Projekt:

  1. Führen Sie aus. gradle init --type=java-application Befehl

  2. Wählen Sie Groovy als Skriptsprache

  3. Wählen Sie JUnit Jupiter als das Test-Framework

  4. Standard verlassen Project name

  5. Standard verlassen Source package

Installieren Sie das Vonage Java SDK

Als nächstes öffnen Sie die build.gradle Datei und fügen Sie dem Block Abhängigkeiten Folgendes hinzu:

// Install the Vonage Java SDK
implementation 'com.vonage:client:6.4.0'

Wenn Sie nun Ihre Konsole in dem Verzeichnis öffnen, in dem sich diese build.gradle Datei enthält, können Sie ausführen:

gradle build

Dieser Befehl lädt das Vonage Java SDK herunter und speichert es für später. Wenn Sie Quellcode hätten, würde er diesen auch kompilieren - aber Sie haben noch keinen geschrieben. Das sollten wir ändern!

Erstellen eines Webdienstes zum Senden von SMS

Wir werden einen kleinen HTTP-Dienst erstellen und ihn dann mit Postman testen. Glücklicherweise ist dies mit Gradle relativ einfach.

Wenden Sie zunächst das Gretty-Plugin auf die build.gradle Datei an, indem Sie dies zu Ihrem plugins Block hinzufügen:

id 'war'
id 'org.gretty' version '3.0.5'

Die erste Zeile teilt Gradle mit, dass es eine War-Datei erstellen soll, die die Quelldateien in src/main/java und src/main/webapp. Die zweite Zeile fügt die Möglichkeit hinzu, Ihre Webanwendung direkt aus Gradle heraus mit dem Jetty-Servlet-Container zu starten!

Als nächstes setzen wir den Kontextpfad auf / der Einfachheit halber.

Fügen Sie den folgenden Block zu build.gradle:

gretty {
    contextPath = '/'
}

ausführen. gradle appRun (beachten Sie, dass Sie appRun und nicht run um den Webserver auszuführen). Beim ersten Mal wird es eine Weile dauern, bis einige Abhängigkeiten heruntergeladen sind.

Am Ende sollten Sie etwa so etwas sehen:

15:45:43 INFO Jetty 9.4.24.v20191120 started and listening on port 8080 15:45:43 INFO send-sms runs at: 15:45:43 INFO http://localhost:8080/send-sms Task :appRun Press any key to stop the server. <===========--> 87% EXECUTING [13s] :appRun

Jetty führt jetzt Ihren (leeren) Webservice aus. Rufen Sie die URL auf, die Sie sehen, um zu überprüfen, ob der Dienst ordnungsgemäß läuft. Sie sollte in etwa wie folgt aussehen:

Empty web pageEmpty web page

Lassen Sie uns nun ein Servlet schreiben! Erstellen Sie eine Datei namens src/main/java/sms/webservice/SendSMSServlet.java.

package sms.webservice;

import com.vonage.client.VonageClient;
import com.vonage.client.VonageClientException;
import com.vonage.client.sms.MessageStatus;
import com.vonage.client.sms.SmsSubmissionResponse;
import com.vonage.client.sms.messages.TextMessage;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServlet;

public class SendSMSServlet extends HttpServlet {
    private String VONAGE_BRAND_NAME;
    private VonageClient client;

    public void init(ServletConfig config) {
        // Load configuration from the servlet container:
        VONAGE_BRAND_NAME = config.getInitParameter("from_number");
        String api_key = config.getInitParameter("api_key");
        String api_secret = config.getInitParameter("api_secret");

        client = VonageClient.builder().apiKey(api_key).apiSecret(api_secret).build();
    }

    protected void doPost(HttpServletRequest req,
                          HttpServletResponse resp)
            throws ServletException,
            java.io.IOException {
        try {
            // Extract form parameters from the request:
            String to_number = req.getParameter("to");
            String message = req.getParameter("message");

            TextMessage sms = new TextMessage(VONAGE_BRAND_NAME,
                    to_number,
                    message
            );

            SmsSubmissionResponse response = client.getSmsClient().submitMessage(sms);

            if (response.getMessages().get(0).getStatus() == MessageStatus.OK) {
                System.out.println("Message sent successfully.");

                resp.getWriter().println(response.getMessages().get(0));
            } else {
                System.out.println("Message failed with error: " + response.getMessages().get(0).getErrorText());
            }

        } catch (VonageClientException nce) {
            throw new ServletException(nce);
        }
    }
}

Und dann müssen wir das Servlet in unserem Servlet-Container konfigurieren, indem wir die folgende Datei unter src/main/webapp/WEB-INF/web.xml:

<web-app>
    <servlet>
        <servlet-name>send-sms</servlet-name>
        <servlet-class>sms.webservice.SendSMSServlet</servlet-class>
        <init-param>
            <param-name>from_number</param-name>
            <param-value>VONAGE_BRAND_NAME</param-value>
        </init-param>
        <init-param>
            <param-name>api_key</param-name>
            <param-value>VONAGE_API_KEY</param-value>
        </init-param>
        <init-param>
            <param-name>api_secret</param-name>
            <param-value>VONAGE_API_SECRET</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>send-sms</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

Ausfüllen VONAGE_API_KEY und VONAGE_API_SECRET mit den Werten, die Sie in Ihrem Dashboard der Vonage API. Sie müssen Folgendes ersetzen VONAGE_BRAND_NAME durch eine Ihrer Vonage virtuellen Numbers.

Hinweis: In einigen Ländern (USA), VONAGE_BRAND_NAME eine Ihrer virtuellen Vonage Numbers sein. In anderen Ländern (Großbritannien) können Sie eine alphanumerische Zeichenfolge wählen, z. B. Ihren Markennamen wie AcmeInc. Weitere Informationen über länderspezifische SMS-Funktionen finden Sie auf dem Entwicklerportal.

Als nächstes führen Sie gradle appRun. Wenn alles korrekt gebaut wurde, starten wir Postman und stellen eine POST-Anfrage an http://localhost:8080/send-sms/und geben dabei an message und to im Body wie unten gezeigt:

Making a request with PostmanMaking a request with Postman

Ich hoffe, es hat funktioniert! Jetzt haben Sie also einen REST-Webdienst für den Versand von SMS-Nachrichten erstellt! In Wirklichkeit gibt es noch viel mehr zu tun, bevor Sie diesen Dienst einsetzen. Sie könnten überlegen, ob Sie eine Authentifizierung hinzufügen (sonst könnte jeder eine Nachricht mit Ihrem Vonage API-Konto senden!), ein schönes Webformular für die Übermittlung an den Dienst, und die Verbesserung der Fehlerbehandlung - aber dies ist ein guter Anfang!

Referenzen

Teilen Sie:

https://a.storyblok.com/f/270183/372x373/36054b72d0/julia-biro.png
Julia BiroAdvokat für Entwickler

Julia hat es sich zur Aufgabe gemacht, andere Entwickler durch die Erstellung von Tutorials, Anleitungen und praktischen Ressourcen zu unterstützen. Mit ihrem Hintergrund in den Bereichen Öffentlichkeitsarbeit und Bildung möchte sie Technologien zugänglicher machen und die Erfahrung von Entwicklern insgesamt verbessern. Man kann sie oft bei lokalen Veranstaltungen antreffen.