Invio di SMS in Java con Twilio

1. Introduzione

L'invio di messaggi SMS è una parte importante di molte applicazioni moderne. Ci sono una varietà di casi d'uso che i messaggi SMS possono servire: autenticazione a due fattori, avvisi in tempo reale, chatbot e molti altri.

In questo tutorial, creeremo una semplice applicazione Java che invia messaggi SMS utilizzando Twilio.

Esistono numerosi servizi che forniscono funzionalità SMS, come Nexmo, Plivo, Amazon Simple Notification Service (SNS), Zapier e altri.

Utilizzando il client Java Twilio, possiamo inviare un messaggio SMS in poche righe di codice .

2. Configurazione di Twilio

Per iniziare avremo bisogno di un account Twilio. Offrono un account di prova sufficiente per testare ogni funzionalità della loro piattaforma.

Come parte della configurazione dell'account, dobbiamo anche creare un numero di telefono. Questo è importante perché l'account di prova richiede un numero di telefono verificato per l'invio di messaggi.

Twilio offre un tutorial di configurazione rapida per i nuovi account. Una volta completata la configurazione dell'account e verificato il nostro numero di telefono, possiamo iniziare a inviare messaggi.

3. Introduzione a TwiML

Prima di scrivere la nostra applicazione di esempio, diamo una rapida occhiata al formato di scambio dati usato per i servizi Twilio.

TwiML è un linguaggio di markup proprietario basato su XML. Gli elementi in un messaggio TwiML rispecchiano le diverse azioni che possiamo intraprendere in relazione alla telefonia: effettuare una telefonata, registrare un messaggio, inviare un messaggio e così via.

Ecco un esempio di messaggio TwiML per l'invio di un SMS:

  Sample Twilio SMS  

Ed ecco un altro messaggio TwiML di esempio che fa una telefonata:

  415-123-4567  

Questi sono entrambi esempi banali, ma ci danno una buona comprensione di come appare TwiML. È composto da verbi e nomi che sono facili da ricordare e si riferiscono direttamente all'azione che eseguiremmo con un telefono.

4. Invio di SMS in Java con Twilio

Twilio fornisce un ricco client Java che semplifica l'interazione con i loro servizi. Invece di dover scrivere codice che compila i messaggi TwiML da zero, possiamo utilizzare un client Java pronto all'uso .

4.1. Dipendenze

Possiamo scaricare la dipendenza direttamente da Maven Central o aggiungendo la seguente voce al nostro file pom.xml :

 com.twilio.sdk twilio 7.20.0 

4.2. Invio di un SMS

Per iniziare, diamo un'occhiata ad un codice di esempio:

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

Analizziamo in parti chiave il codice nell'esempio sopra:

  • La chiamata Twilio.init () è necessaria una volta per configurare l'ambiente Twilio con il nostro account Sid e token univoci
  • L' oggetto Message è l'equivalente Java di TwiML elemento che abbiamo visto prima
  • Message.creator () richiede 3 parametri: al numero di telefono, dal numero di telefono e il corpo del messaggio
  • Il metodo create () gestisce l'invio del messaggio

4.3. Invio di un MMS

L'API Twilio supporta anche l'invio di messaggi multimediali. Possiamo mescolare e abbinare testo e immagini, affinché funzioni il telefono ricevente deve supportare la messaggistica multimediale:

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. Monitoraggio dello stato dei messaggi

Negli esempi precedenti, non abbiamo confermato se il messaggio è stato effettivamente consegnato. Tuttavia Twilio fornisce un meccanismo per determinare se un messaggio è stato consegnato correttamente o meno .

5.1. Codici di stato dei messaggi

Quando si invia un messaggio, avrà uno degli stati in qualsiasi momento:

  • In coda : Twilio ha ricevuto il messaggio e lo ha messo in coda per il recapito
  • Invio : il server sta inviando il tuo messaggio al vettore upstream più vicino nella rete
  • Inviato : il messaggio è stato accettato con successo dal corriere upstream più vicino
  • Consegnato : Twilio ha ricevuto la conferma della consegna del messaggio dal vettore a monte e, se disponibile, dal telefono di destinazione
  • Non riuscito . Impossibile inviare il messaggio
  • Non consegnati - il server ha ricevuto una ricevuta di consegna che indica il messaggio non è stato consegnato

Tieni presente che per gli ultimi due stati possiamo trovare un codice di errore con dettagli più specifici per aiutarci a risolvere i problemi di consegna.

Il client Java Twilio offre metodi sincroni e asincroni per recuperare lo stato. Diamo un'occhiata.

5.2. Verifica dello stato di consegna (sincrono)

Dopo aver creato un oggetto Message , possiamo chiamare Message.getStatus () per vedere in quale stato si trova attualmente:

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

Note that Message.reader().read() makes a remote API call so use it sparingly. By default, it returns all messages we've sent, but we can filter the returned messages by phone numbers or date range.

5.3. Checking Delivery Status (Async)

Because retrieving message status requires a remote API call, it can take a long time. To avoid blocking the current thread, the Twilio Java client provides also an asynchronous version of 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()); } });
     
    

This uses the Guava ListenableFuture interface to process the response from Twilio on a different thread.

6. Conclusion

In this article, we learned how to send SMS and MMS using Twilio and Java.

Sebbene TwiML sia la base di tutti i messaggi da e verso i server Twilio, il client Twilio Java rende l'invio di messaggi incredibilmente facile.

E, come sempre, la base di codice completa per questo esempio può essere trovata nel nostro repository GitHub.