Envoi de SMS en Java avec Twilio

1. Introduction

L'envoi de messages SMS fait partie intégrante de nombreuses applications modernes. Il existe une variété de cas d'utilisation que les messages SMS peuvent servir: authentification à deux facteurs, alertes en temps réel, chatbots et bien d'autres.

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

Il existe un certain nombre de services qui fournissent des capacités SMS, tels que Nexmo, Plivo, Amazon Simple Notification Service (SNS), Zapier, etc.

En utilisant le client Twilio Java, nous pouvons envoyer un message SMS en quelques lignes de code seulement .

2. Configuration de Twilio

Pour commencer, nous avons besoin d'un compte Twilio. 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 un tutoriel de configuration rapide pour les nouveaux comptes. Une fois que nous avons terminé la configuration du compte et vérifié notre numéro de téléphone, 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 que nous pouvons entreprendre 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 donnent une bonne compréhension de l'apparence de 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. Au lieu d'avoir à écrire du code qui crée des messages TwiML à partir de zéro, nous pouvons utiliser un client Java prêt à l'emploi .

4.1. Dépendances

Nous pouvons télécharger la dépendance directement depuis Maven Central ou en ajoutant l'entrée suivante à notre fichier pom.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' appel Twilio.init () est requis une fois pour configurer l'environnement Twilio avec notre compte unique Sid et Token
  • L' objet Message est l'équivalent Java du TwiML élément que nous avons vu plus tôt
  • 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éthode create () gère l'envoi du message

4.3. Envoi d'un MMS

L'API Twilio prend également en charge l'envoi de messages multimédias. 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("//www.domain.com/image.png"))) .create();

5. État des messages de suivi

Dans les exemples précédents, nous n'avons pas confirmé si le message était réellement livré. Cependant Twilio nous fournit un mécanisme pour déterminer si un message a été remis avec succès ou non .

5.1. Codes d'état des messages

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

  • En file d'attente - Twilio a reçu le message et l'a mis en file d'attente pour la livraison
  • Envoi - le serveur est en train d'envoyer votre message au transporteur en amont le plus proche du réseau
  • Envoyé - le message a été accepté avec succès par le transporteur en amont le plus proche
  • Délivré - Twilio a reçu une confirmation de remise du message de l'opérateur en amont, et éventuellement du combiné de destination, s'il est disponible
  • Échec - le message n'a pas pu être envoyé
  • Non remis - 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 statuts, 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 Twilio Java propose des méthodes synchrones et asynchrones pour récupérer l'état. Regardons.

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

Une fois que nous avons créé un objet Message , nous pouvons appeler Message.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 que Message.reader (). Read () effectue un appel API distant, utilisez-le avec parcimonie. Par défaut, il renvoie tous les messages que nous avons envoyés , mais nous pouvons filtrer les messages retournés par numéro de téléphone ou plage de dates.

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

Étant donné que la récupération de l'état du message nécessite un appel API distant, cela peut prendre du temps. Pour éviter de bloquer le thread en cours, le client Twilio Java fournit également une version asynchrone de Message.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 Guava ListenableFuture pour traiter la réponse de Twilio sur un thread différent.

6. Conclusion

Dans cet article, nous avons appris à envoyer des SMS et MMS à l'aide de Twilio et Java.

Alors que TwiML est la base de tous les messages vers et depuis les serveurs Twilio, le client Twilio Java facilite grandement l'envoi de messages.

Et, comme toujours, la base de code complète de cet exemple se trouve dans notre référentiel GitHub.