Envoi de SMS en Java avec Twilio

Envoi de SMS en Java avec Twilio

1. introduction

L'envoi de messages SMS est une partie importante de nombreuses applications modernes. Les messages SMS peuvent servir dans de nombreux cas d'utilisation: authentification à deux facteurs, alertes en temps réel, chatbots, etc.

Dans ce didacticiel, nous allons créer une application Java simple qui envoie des messages SMS à l'aide deTwilio.

Il existe un certain nombre de services qui fournissent des fonctionnalités SMS, tels queNexmo,Plivo, AmazonSimple Notification Service (SNS),Zapier, etc.

En utilisant le client Twilio Java,we can send an SMS message in just a few lines of code.

2. Mise en place de Twilio

To get started we’ll need a Twilio account. Ils proposent un compte d'essai suffisant pour tester toutes les fonctionnalités de leur plateforme.

Dans le cadre de la configuration du compte, nous devons également créer un numéro de téléphone. Ceci est important car le compte d'essai nécessite un numéro de téléphone vérifié pour l'envoi de messages.

Twilio propose unquick setup tutorial pour les nouveaux comptes. Une fois la configuration du compte terminée et le numéro de téléphone vérifié, nous pouvons commencer à envoyer des messages.

3. Introduction à TwiML

Avant d'écrire notre exemple d'application, examinons rapidement le format d'échange de données utilisé pour les services Twilio.

TwiML est un langage de balisage propriétaire basé sur XML. Les éléments d'un message TwiML reflètent les différentes actions possibles en matière de téléphonie: passer un appel téléphonique, enregistrer un message, envoyer un message, etc.

Voici un exemple de message TwiML pour l'envoi d'un SMS:


    
        Sample Twilio SMS
    

Et voici un autre exemple de message TwiML qui passe un appel téléphonique:


    
        415-123-4567
    

Ce sont deux exemples triviaux, mais ils nous permettent de bien comprendre à quoi ressemble TwiML. Il est composé de verbes et de noms faciles à retenir et directement liés à l'action que nous effectuerions avec un téléphone.

4. Envoi de SMS en Java avec Twilio

Twilio fournit un client Java riche qui facilite l’interaction avec leurs services. Instead of having to write code that builds TwiML messages from scratch, we can use an out-of-the-box Java client.

4.1. Les dépendances

Nous pouvons télécharger la dépendance directement depuisMaven Central ou en ajoutant l'entrée suivante à notre fichierpom.xml:


    com.twilio.sdk
    twilio
    7.20.0

4.2. Envoi d'un SMS

Pour commencer, examinons un exemple de code:

Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
Message message = Message.creator(
    new PhoneNumber("+12225559999"),
    new PhoneNumber(TWILIO_NUMBER),
    "Sample Twilio SMS using Java")
.create();

Décomposons en éléments clés le code de l'exemple ci-dessus:

  • L'appelTwilio.init() est requis une fois pour configurer l'environnement Twilio avec notre compte unique et notre jeton

  • L'objetMessage est l'équivalent Java de l'élément TwiML<Message> que nous avons vu précédemment

  • Message.creator() nécessite 3 paramètres: Au numéro de téléphone, Du numéro de téléphone et le corps du message

  • La méthodecreate() gère l'envoi du message

4.3. Envoi d'un MMS

The Twilio API also supports sending multimedia messages. Nous pouvons mélanger et associer du texte et des images, pour que cela fonctionne, le téléphone récepteur doit prendre en charge la messagerie multimédia:

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

5. État du message de suivi

Dans les exemples précédents, nous n'avons pas confirmé si le message avait effectivement été livré. CependantTwilio provides a mechanism for us to determine whether a message was successfully delivered or not.

5.1. Codes d'état des messages

Lors de l'envoi d'un message, il aura à tout moment l'un des états suivants:

  • Queued - Twilio a reçu le message et l'a mis en file d'attente pour la livraison

  • Sending - le serveur est en train d'envoyer votre message au transporteur en amont le plus proche du réseau

  • Sent - le message a été accepté avec succès par l'opérateur en amont le plus proche

  • Delivered - Twilio a reçu la confirmation de la livraison du message de l'opérateur en amont, et éventuellement du combiné de destination, s'il est disponible

  • Failed - le message n'a pas pu être envoyé

  • Undelivered - le serveur a reçu un accusé de réception indiquant que le message n'a pas été remis

Notez que pour les deux derniers états, nous pouvons trouver un code d'erreur avec des détails plus spécifiques pour nous aider à résoudre les problèmes de livraison.

Le client Java Twilio offre une méthode synchrone et asynchrone pour extraire l’état. Regardons.

5.2. Vérification de l'état de livraison (synchrone)

Une fois que nous avons créé un objetMessage, nous pouvons appelerMessage.getStatus() pour voir dans quel état il se trouve actuellement:

Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
ResourceSet messages = Message.reader().read();
for (Message message : messages) {
    System.out.println(message.getSid() + " : " + message.getStatus());
}

Notez queMessage.reader().read() effectue un appel API distant, alors utilisez-le avec parcimonie. By default, it returns all messages we’ve sent, mais nous pouvons filtrer les messages renvoyés par numéro de téléphone ou plage de dates.

5.3. Vérification de l'état de livraison (asynchrone)

La récupération de l'état des messages nécessitant un appel d'API distant, cela peut prendre beaucoup de temps. Pour éviter de bloquer le thread actuel, le client Twilio Java fournit également une version asynchrone deMessage.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());
         }
     });

Cela utilise l'interface de GuavaListenableFuture pour traiter la réponse de Twilio sur un thread différent.

6. Conclusion

Dans cet article, nous avons appris à envoyer des SMS et des MMS en utilisant Twilio et Java.

Bien que TwiML soit la base de tous les messages en provenance et à destination des serveurs Twilio, le client Java Twilio facilite considérablement l’envoi de messages.

Et, comme toujours, la base de code complète pour cet exemple peut être trouvée dans nosGitHub repository.