Twilioを使ってJavaでSMSを送信する

1.はじめに

SMSメッセージを送信することは、現代の多くのアプリケーションの大部分です。 SMSメッセージが役立つことができるさまざまなユースケースがあります:二要素認証、リアルタイムアラート、チャットボット、その他。

このチュートリアルでは、https://www.twilio.com[Twilio]を使用してSMSメッセージを送信する簡単なJavaアプリケーションを作成します。

Nexmo 、https://www.plivo.com/[Plivo]、Amazon https://aws.amazonなど、SMS機能を提供する多数のサービスがあります。 com/sns/[簡易通知サービス](SNS)、https://www.zapier.com/[Zapier]など。

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

2. Twilioをセットアップする

  • 始めるにはTwilioアカウントが必要です** 彼らは自分のプラットフォームのすべての機能をテストするのに十分な試用アカウントを提供します。

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

Twilioは新規アカウント用にhttps://www.twilio.com/docs/sms/quickstart/java[クイックセットアップチュートリアル]を提供しています。アカウントの設定を完了して電話番号を確認したら、メッセージの送信を開始できます。

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. 依存関係

依存関係はhttps://search.maven.org/classic/#artifactdetails%7Ccom.twilio.sdk%7Ctwilio%7C7.20.0%7Cjar[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をセットアップするには Twilio.init() 呼び出しが1回必要です

独自のアカウントSidとトークンを使用した環境 ** Message オブジェクトは、TwiML <Message> と同等の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. メッセージステータスコード

メッセージを送信すると、いつでもステータスの1つが表示されます。

  • Queued - Twilioはメッセージを受信し、配信用にキューに入れました

  • 送信 - サーバーはあなたのメッセージを送信中です。

ネットワーク内で最も近いアップストリームキャリアへ ** Sent - メッセージは最も近い上流で正常に受け入れられました

運搬人 ** Delivered - Twilioはメッセージ配信の確認を受け取りました

アップストリームキャリアから、そして場合によっては宛先ハンドセットから 利用可能 ** Failed - メッセージを送信できませんでした

  • 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呼び出しが必要なので、時間がかかることがあります。現在のスレッドがブロックされないようにするために、Twilio Javaクライアントは非同期バージョンの 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サーバーとの間でやり取りされるすべてのメッセージの基盤ですが、Twilio Javaクライアントではメッセージの送信が非常に簡単になります。

そしていつものように、この例の完全なコードベースはhttps://github.com/eugenp/tutorials/tree/master/twilio[GitHub repository]にあります。