1. 序章

SMSメッセージの送信は、多くの最新のアプリケーションの大きな部分を占めています。 SMSメッセージが提供できるさまざまなユースケースがあります。2要素認証、リアルタイムアラート、チャットボットなどです。

このチュートリアルでは、Twilioを使用してSMSメッセージを送信する単純なJavaアプリケーションを作成します。

Vonage Plivo 、Amazon Simple Notification Service (SNS)、 Zapier など、SMS機能を提供するサービスは多数あります。 、 もっと。

Twilio Javaクライアントを使用すると、わずか数行のコードでSMSメッセージを送信できます

2. Twilioのセットアップ

開始するには、Twilioアカウントが必要です。プラットフォームのすべての機能をテストするのに十分なトライアルアカウントを提供しています。

アカウント設定の一環として、電話番号も作成する必要があります。 トライアルアカウントではメッセージを送信するために確認済みの電話番号が必要なため、これは重要です。

Twilioは、新しいアカウント用のクイックセットアップチュートリアルを提供しています。 アカウントの設定が完了し、電話番号を確認したら、メッセージの送信を開始できます。

3. TwiMLの紹介

サンプルアプリケーションを作成する前に、Twilioサービスで使用されるデータ交換形式を簡単に見てみましょう。

TwiMLは、XMLに基づく独自のマークアップ言語です。 TwiMLメッセージの要素は、電話をかける、メッセージを録音する、メッセージを送信するなど、テレフォニーに関連して実行できるさまざまなアクションを反映しています。

SMSを送信するためのTwiMLメッセージの例を次に示します。

<Response>
    <Message>
        <Body>Sample Twilio SMS</Body>
    </Message>
</Response>

そして、これが電話をかける別の例のTwiMLメッセージです:

<Response>
    <Dial>
        <Number>415-123-4567</Number>
    </Dial>
</Response>

これらはどちらも簡単な例ですが、TwiMLがどのように見えるかをよく理解できます。  これは、覚えやすく、電話で実行するアクションに直接関連する動詞と名詞で構成されています。

4. Twilioを使用してJavaでSMSを送信する

Twilioは、サービスとの対話を容易にするリッチJavaクライアントを提供します。 TwiMLメッセージを最初から作成するコードを作成する代わりに、すぐに使用できるJavaクライアントを使用できます。

4.1. 依存関係

依存関係は、 Maven Central から直接ダウンロードするか、pom.xmlファイルに次のエントリを追加することでダウンロードできます。

<dependency>
    <groupId>com.twilio.sdk</groupId>
    <artifactId>twilio</artifactId>
    <version>7.20.0</version>
</dependency>

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();

上記のサンプルのコードを重要な部分に分解してみましょう。

  • Twilio.init()呼び出しは、独自のアカウントIDとトークンを使用してTwilio環境をセットアップするために1回必要です。
  • The メッセージオブジェクトはTwiMLと同等のJavaです以前に見た要素
  • Message.creator()には、電話番号へ、電話番号から、メッセージ本文の3つのパラメーターが必要です。
  • create()メソッドはメッセージの送信を処理します

4.3. MMSの送信

Twilio APIは、マルチメディアメッセージの送信もサポートしています。テキストと画像を組み合わせて使用できます。これを機能させるには、受信側の電話がメディアメッセージングをサポートしている必要があります。

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は、メッセージが正常に配信されたかどうかを判断するためのメカニズムを提供します

5.1. メッセージステータスコード

メッセージを送信すると、いつでも次のいずれかのステータスになります。

  • キュー– Twilioがメッセージを受信し、配信のためにキューに入れました
  • 送信–サーバーは、ネットワーク内の最も近いアップストリームキャリアにメッセージをディスパッチしている最中です
  • Sent –メッセージは最寄りのアップストリームキャリアによって正常に受け入れられました
  • Deliveryed – Twilioは、アップストリームキャリア、および場合によっては宛先の受話器からメッセージ配信の確認を受信しました。
  • 失敗–メッセージを送信できませんでした
  • Undelivered –サーバーはメッセージが配信されなかったことを示す配信確認を受信しました

最後の2つのステータスについては、配信の問題のトラブルシューティングに役立つ、より具体的な詳細を含むエラーコードを見つけることができることに注意してください。

Twilio Javaクライアントは、ステータスをフェッチするための同期メソッドと非同期メソッドを提供します。 みてみましょう。

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呼び出しを行うため、慎重に使用することに注意してください。 デフォルトでは、送信したすべてのメッセージが返されますが、返されたメッセージを電話番号または日付範囲でフィルタリングできます。

5.3. 配信ステータスの確認(非同期)

メッセージステータスの取得にはリモートAPI呼び出しが必要なため、時間がかかる場合があります。 現在のスレッドのブロックを回避するために、TwilioJavaクライアントはMessage.getStatus()。read()の非同期バージョンも提供します。

Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
ListenableFuture<ResourceSet<Message>> future = Message.reader().readAsync();
Futures.addCallback(
    future,
    new FutureCallback<ResourceSet<Message>>() {
        public void onSuccess(ResourceSet<Message> 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());
         }
     });

これは、Guava ListenableFuture インターフェースを使用して、別のスレッドでTwilioからの応答を処理します。

6. 結論

この記事では、TwilioとJavaを使用してSMSとMMSを送信する方法を学びました。

TwiMLはTwilioサーバーとの間のすべてのメッセージの基盤ですが、TwilioJavaクライアントを使用するとメッセージの送信が非常に簡単になります。

そして、いつものように、この例の完全なコードベースは、GitHubリポジトリにあります。