Twilioを使用してJavaでSMSを送信する
1. 前書き
SMSメッセージの送信は、多くの最新のアプリケーションの大きな部分を占めています。 SMSメッセージが提供できるさまざまなユースケースがあります。2要素認証、リアルタイムアラート、チャットボットなどです。
このチュートリアルでは、Twilioを使用してSMSメッセージを送信する単純なJavaアプリケーションを作成します。
Nexmo、Plivo、AmazonSimple Notification Service(SNS)、Zapierなど、SMS機能を提供するサービスは多数あります。
Twilio Javaクライアントを使用して、we can send an SMS message in just a few lines of code。
2. Twilioのセットアップ
To get started we’ll need a Twilio account.プラットフォームのすべての機能をテストするのに十分なトライアルアカウントを提供します。
アカウント設定の一部として、電話番号も作成する必要があります。 トライアルアカウントではメッセージの送信に確認済みの電話番号が必要なので、これは重要です。
Twilioは、新しいアカウントにquick setup tutorialを提供します。 アカウントのセットアップを完了して電話番号を確認したら、メッセージの送信を開始できます。
3. TwiMLの概要
サンプルアプリケーションを作成する前に、Twilioサービスで使用されるデータ交換フォーマットを簡単に見てみましょう。
TwiMLは、XMLに基づく独自のマークアップ言語です。 TwiMLメッセージの要素は、電話の発信、メッセージの録音、メッセージの送信など、テレフォニーに関連して実行できるさまざまなアクションを反映しています。
SMSを送信するためのTwiMLメッセージの例を次に示します。
Sample Twilio SMS
また、電話をかける別のTwiMLメッセージの例を次に示します。
415-123-4567
これらはどちらも簡単な例ですが、TwiMLがどのように見えるかをよく理解できます。 覚えやすく、スマートフォンで実行するアクションに直接関連する動詞と名詞で構成されています。
4. Twilioを使用してJavaでSMSを送信する
Twilioは、サービスとのやり取りを簡単にするリッチJavaクライアントを提供します。 Instead of having to write code that builds TwiML messages from scratch, we can use an out-of-the-box Java client。
4.1. 依存関係
依存関係はMaven Centralから直接ダウンロードするか、pom.xmlファイルに次のエントリを追加することでダウンロードできます。
com.twilio.sdk
twilio
7.20.0
4.2. SMSを送信する
開始するには、いくつかのサンプルコードを見てみましょう。
Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
Message message = Message.creator(
new PhoneNumber("+12225559999"),
new PhoneNumber(TWILIO_NUMBER),
"Sample Twilio SMS using Java")
.create();
上記のサンプルのコードを重要な部分に分解してみましょう。
-
独自のアカウントIDとトークンを使用してTwilio環境をセットアップするには、Twilio.init()呼び出しが1回必要です。
-
Messageオブジェクトは、前に見たTwiML<Message>要素と同等のJavaです。
-
Message.creator()には、電話番号へ、電話番号から、メッセージ本文の3つのパラメーターが必要です。
-
create()メソッドはメッセージの送信を処理します
4.3. MMSを送信する
The Twilio API also supports sending multimedia messages.テキストと画像を組み合わせて組み合わせることができます。これを機能させるには、受信側の電話がメディアメッセージングをサポートしている必要があります。
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. メッセージステータスの追跡
前の例では、メッセージが実際に配信されたかどうかを確認していません。 ただし、Twilio provides a mechanism for us to determine whether a message was successfully delivered or not。
5.1. メッセージステータスコード
メッセージを送信すると、いつでも次のいずれかのステータスになります。
-
Queued – Twilioがメッセージを受信し、配信のためにキューに入れました
-
Sending –サーバーは、ネットワーク内の最も近いアップストリームキャリアにメッセージをディスパッチしている最中です
-
Sent –メッセージは最も近いアップストリームキャリアによって正常に受け入れられました
-
Delivered – Twilioは、アップストリームキャリアから、場合によっては宛先のハンドセットからメッセージ配信の確認を受信しました。
-
Failed –メッセージを送信できませんでした
-
Undelivered –サーバーはメッセージが配信されなかったことを示す配信確認を受信しました
最後の2つのステータスについては、配信の問題のトラブルシューティングに役立つ、より具体的な詳細を含むエラーコードを見つけることができます。
Twilio Java Clientは、ステータスを取得するための同期および非同期メソッドを提供します。 みてみましょう。
5.2. 配信ステータスの確認(同期)
Messageオブジェクトを作成したら、Message.getStatus()を呼び出して、現在のステータスを確認できます。
Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
ResourceSet messages = Message.reader().read();
for (Message message : messages) {
System.out.println(message.getSid() + " : " + message.getStatus());
}
Message.reader().read()はリモートAPI呼び出しを行うため、慎重に使用することに注意してください。 By default, it returns all messages we’ve sentですが、返されたメッセージを電話番号または日付範囲でフィルタリングできます。
5.3. 配信ステータスの確認(非同期)
メッセージステータスの取得にはリモートAPI呼び出しが必要なため、時間がかかる場合があります。 現在のスレッドのブロックを回避するために、Twilio Javaクライアントは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());
}
});
これは、GuavaListenableFutureインターフェースを使用して、別のスレッドでTwilioからの応答を処理します。
6. 結論
この記事では、TwilioとJavaを使用してSMSとMMSを送信する方法を学びました。
TwiMLはTwilioサーバーとの間のすべてのメッセージの基礎ですが、Twilio Javaクライアントはメッセージの送信を非常に簡単にします。
そして、いつものように、この例の完全なコードベースは、GitHub repositoryにあります。