Menghantar SMS di Java dengan Twilio

1. Pengenalan

Menghantar mesej SMS adalah sebahagian besar dari banyak aplikasi moden. Terdapat pelbagai kes penggunaan yang boleh dilayan oleh mesej SMS: pengesahan dua faktor, amaran masa nyata, bot chat, dan banyak lagi.

Dalam tutorial ini, kami akan membina aplikasi Java sederhana yang mengirim pesanan SMS menggunakan Twilio.

Terdapat sebilangan perkhidmatan yang memberikan keupayaan SMS, seperti Nexmo, Plivo, Amazon Simple Notification Service (SNS), Zapier, dan banyak lagi.

Dengan menggunakan klien Twilio Java, kita dapat mengirim pesan SMS hanya dalam beberapa baris kode .

2. Menyiapkan Twilio

Untuk memulakan, kami memerlukan akaun Twilio. Mereka menawarkan akaun percubaan yang cukup untuk menguji setiap ciri platform mereka.

Sebagai sebahagian daripada penyediaan akaun, kita juga mesti membuat nombor telefon. Ini penting kerana akaun percubaan memerlukan nombor telefon yang disahkan untuk menghantar mesej.

Twilio menawarkan tutorial persediaan cepat untuk akaun baru. Setelah kami menyelesaikan penyediaan akaun dan mengesahkan nombor telefon kami, kami dapat mula menghantar mesej.

3. Pengenalan kepada TwiML

Sebelum kita menulis aplikasi contoh kita, mari kita lihat dengan cepat format pertukaran data yang digunakan untuk perkhidmatan Twilio.

TwiML adalah bahasa penanda hak milik berdasarkan XML. Unsur-unsur dalam mesej TwiML mencerminkan tindakan yang berbeza yang dapat kita lakukan berkaitan dengan telefon: membuat panggilan telefon, merakam mesej, mengirim mesej, dan sebagainya.

Berikut adalah contoh mesej TwiML untuk menghantar SMS:

  Sample Twilio SMS  

Dan inilah contoh mesej TwiML lain yang membuat panggilan telefon:

  415-123-4567  

Ini adalah kedua-dua contoh remeh, tetapi mereka memberi kita pemahaman yang baik tentang bagaimana rupa TwiML. Ia terdiri daripada kata kerja dan kata nama yang mudah diingat dan secara langsung berkaitan dengan tindakan yang akan kita lakukan dengan telefon.

4. Menghantar SMS di Java dengan Twilio

Twilio menyediakan pelanggan Java yang kaya yang memudahkan berinteraksi dengan perkhidmatan mereka. Daripada harus menulis kod yang membina mesej TwiML dari awal, kita dapat menggunakan klien Java yang tidak ada .

4.1. Kebergantungan

Kami boleh memuat turun kebergantungan secara langsung dari Maven Central atau dengan menambahkan entri berikut ke fail pom.xml kami :

 com.twilio.sdk twilio 7.20.0 

4.2. Menghantar SMS

Untuk memulakan, mari kita lihat beberapa contoh kod:

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

Mari pecahkan bahagian penting kod dalam contoh di atas:

  • The Twilio.init () panggilan diperlukan sekali untuk menyediakan persekitaran Twilio dengan Akaun Sid kami yang unik dan Token
  • The Message objek adalah sama Java kepada TwiML elemen yang kita lihat sebelumnya
  • Message.creator () memerlukan 3 parameter: Ke nombor telefon, Dari nombor telefon, dan isi mesej
  • Kaedah create () menangani penghantaran mesej

4.3. Menghantar MMS

API Twilio juga menyokong penghantaran mesej multimedia. Kita boleh mencampur dan memadankan teks dan gambar, agar ini berfungsi agar telefon penerima mesti menyokong pemesejan media:

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. Mengesan Status Mesej

Dalam contoh sebelumnya, kami tidak mengesahkan sama ada mesej itu benar-benar dihantar. Namun Twilio menyediakan mekanisme untuk kita menentukan sama ada mesej berjaya dihantar atau tidak .

5.1. Kod Status Mesej

Semasa menghantar mesej, ia akan mempunyai salah satu status pada bila-bila masa:

  • Beratur - Twilio telah menerima mesej dan mengantri untuk dihantar
  • Menghantar - pelayan sedang dalam proses menghantar mesej anda ke pembawa hulu terdekat dalam rangkaian
  • Dihantar - mesej berjaya diterima oleh pembawa hulu terdekat
  • Dihantar - Twilio telah menerima pengesahan penghantaran mesej dari pembawa hulu, dan mungkin telefon bimbit tujuan apabila tersedia
  • Gagal - mesej tidak dapat dihantar
  • Tidak dihantar - pelayan telah menerima resit penghantaran yang menunjukkan bahawa mesej tidak dihantar

Perhatikan bahawa untuk dua status terakhir kami dapat mencari kod ralat dengan perincian yang lebih khusus untuk membantu kami menyelesaikan masalah penghantaran.

Twilio Java Client menawarkan kaedah segerak dan tak segerak untuk mengambil status. Mari kita lihat.

5.2. Memeriksa Status Penghantaran (Segerak)

Sebaik sahaja kami membuat objek Mesej , kami dapat memanggil Message.getStatus () untuk melihat statusnya saat ini:

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.

Walaupun TwiML adalah dasar dari semua pesan ke dan dari pelayan Twilio, klien Twilio Java membuat pengiriman mesej sangat mudah.

Dan, seperti biasa, pangkalan data lengkap untuk contoh ini boleh didapati di repositori GitHub kami.