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

Créer un service Web SMS avec Java

Publié le July 8, 2021

Temps de lecture : 6 minutes

Nous avons construit cet exemple en utilisant JDK 11, Gradle 7.1, Gretty 3.0.5, et le SDK Vonage Server pour Java v.6.4.0.

L'API SMS API de Vonage est un service qui vous permet d'envoyer et de recevoir des SMS partout dans le monde. Vonage fournit des API REST, mais il est beaucoup plus facile d'utiliser le SDK Java que nous avons écrit pour vous.

Vous avez déjà appris à envoyer des SMS avec Java. Dans ce tutoriel, nous allons aller plus loin et créer un service Web autour de cette méthode !

Voir le code source sur GitHub.

Conditions préalables

Avant de commencer, il y a quelques éléments que vous devez installer sur votre machine de développement :

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.

Créer le projet

Tout d'abord, vous devez configurer votre projet Gradle et télécharger le SDK Java de Vonage.

Créez un répertoire contenant votre projet. Dans ce répertoire, exécutez gradle init.

mkdir sms-webservice cd sms-webservice

Créer un nouveau projet Gradle :

  1. Exécuter gradle init --type=java-application commande

  2. Sélectionnez Groovy comme langue de script

  3. Sélectionner JUnit Jupiter comme cadre de test

  4. Laisser la valeur par défaut Project name

  5. Laisser la valeur par défaut Source package

Installer le SDK Java de Vonage

Ensuite, ouvrez le fichier build.gradle et ajoutez ce qui suit au bloc des dépendances :

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

Maintenant, si vous ouvrez votre console dans le répertoire qui contient ce fichier build.gradle vous pouvez exécuter :

gradle build

Cette commande téléchargera le SDK Java de Vonage et le stockera pour plus tard. Si vous aviez un code source, il serait également compilé, mais vous n'en avez pas encore écrit. Corrigeons cela !

Créer un service Web pour envoyer des SMS

Nous allons construire un petit service HTTP et le tester avec Postman. Heureusement, Gradle rend cela relativement facile.

Tout d'abord, appliquez le plugin Gretty au fichier build.gradle en ajoutant ceci à votre plugins bloc :

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

La première ligne indique à Gradle qu'il doit construire un fichier war, en utilisant les fichiers sources dans src/main/java et src/main/webapp. La deuxième ligne ajoute la possibilité de lancer votre application web directement depuis Gradle en utilisant le conteneur de servlet Jetty !

Ensuite, définissons le chemin d'accès au contexte à / pour des raisons de simplicité.

Ajouter le bloc suivant à build.gradle:

gretty {
    contextPath = '/'
}

Exécuter gradle appRun (notez que vous utilisez appRun et non run pour lancer le serveur web). La première fois, le téléchargement des dépendances prendra un certain temps.

Au bout du compte, vous devriez obtenir quelque chose comme ceci :

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 exécute maintenant votre service web (vide). Lancez l'URL que vous voyez pour vérifier qu'il fonctionne correctement. Elle devrait ressembler à ceci :

Empty web pageEmpty web page

Maintenant, écrivons un servlet ! Créez un fichier appelé 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);
        }
    }
}

Ensuite, nous devons configurer le servlet dans notre conteneur de servlets en créant la propriété suivante 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>

Remplir VONAGE_API_KEY et VONAGE_API_SECRET avec les valeurs trouvées dans votre tableau de bord de l'API Vonage. Vous devrez remplacer VONAGE_BRAND_NAME par l'un de vos numéros virtuels Vonage numéros virtuels de Vonage.

Note : Dans certains pays (US), VONAGE_BRAND_NAME doit être l'un de vos numéros virtuels Vonage. Dans d'autres pays (Royaume-Uni), vous êtes libre de choisir une chaîne alphanumérique - par exemple, votre nom de marque comme AcmeInc. Pour en savoir plus sur les fonctions SMS spécifiques à chaque pays, consultez le portail de développement.

Ensuite, lancez gradle appRun. Si tout se construit correctement, lançons Postman et faisons une requête POST à http://localhost:8080/send-sms/en spécifiant message et to dans le corps de la requête, comme indiqué ci-dessous :

Making a request with PostmanMaking a request with Postman

J'espère que cela a fonctionné ! Vous avez maintenant construit un service Web REST pour l'envoi de SMS ! En réalité, il y a beaucoup d'autres choses à faire avant de le déployer. Vous pourriez envisager d'ajouter l'authentification (sinon, n'importe qui pourrait envoyer un message en utilisant votre Account API Vonage !), un formulaire Web agréable pour envoyer des messages au service, et améliorer la gestion des erreurs - mais c'est un bon début !

Références

Partager:

https://a.storyblok.com/f/270183/372x373/36054b72d0/julia-biro.png
Julia BiroDéfenseur des développeurs

Julia s'engage à aider ses collègues développeurs en créant des tutoriels, des guides et des ressources pratiques. Grâce à son expérience en matière de sensibilisation et d'éducation, elle vise à rendre la technologie plus accessible et à améliorer l'expérience globale des développeurs. Vous pouvez souvent la trouver lors d'événements communautaires locaux.