JavaでTwilio使ってみるよ!(SMS編 その1)


前回、pom.xmlにTwilio SDKの依存を追記したところから。

必要なもの

Twilioに登録したときの、下記の情報が必要です。

  • ACCOUNT SID
  • AUTH TOKEN
  • callerId(購入した電話番号)

電話番号ですが、SMSを送る場合は日本の050番号じゃダメみたいです。
アメリカの番号にしましょう。

実装してみる

Twilioの公式ヘルプを参考に実装してみます。(ほぼそのままですが)
https://jp.twilio.com/docs/sms/api/message-resource

ACCOUNT_SID、AUTH_TOKEN、電話番号は適宜変えてください。

なお、電話番号は国際電話表記じゃないとだめです。
例えば、「090-0012-3456」に送る場合は、「+819000123456」となります。
(日本の国番号+81に、市外局番の先頭の0を除いた形)

SMSController.java
package jp.co.pmtech.iwata.twilio.controller;

import com.twilio.Twilio;
import com.twilio.rest.api.v2010.account.Message;
import com.twilio.type.PhoneNumber;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SMSController {

    /** ACCOUNT SID */
    private static final String ACCOUNT_SID = "*******";
    /** AUTH TOKEN */
    private static final String AUTH_TOKEN  = "*******";

    @PostMapping("/sms")
    public void sms() {

        // twilioの初期化
        Twilio.init(ACCOUNT_SID, AUTH_TOKEN);

        // 送信するメッセージ
        String body = "こんにちは!\n"
                    + "テストメッセージです。";

        // SMSを送る
        Message message = Message.creator(
            new PhoneNumber("+8190********"),  // 送信先の電話番号
            new PhoneNumber("+1**********"),   // callerID(購入した番号)
            body).create();

        System.out.println(message.getSid());
    }
}

動かしてみる

SpringBootを起動して、http://localhost:8080/sms を叩いてみましょう。
あ、@PostMappingにしちゃったので、Talend API Testerから叩きますか。

おー!届きました!
ね、チョロいでしょ?

※ トライアル版の場合、メッセージの先頭に「Sent from a Twilio Trial account.」という文字列が追加されるようです。

絵文字って送れるの?

🤣 ←この絵文字を送ってみたいと思います。
Unicodeで送ればいいのかな?

やってみる

https://0g0.org/unicode/1F923/
文字コードはu+1F923らしいのでやってみます。

        // 送信するメッセージ
        String body = "こんにちは!\n" + "\u1F923" + "\u1F923" + "\u1F923" +"\n"
                    + "テストメッセージです。";

あれ?なんか変な文字になった。

絵文字のUnicode表記方法

絵文字は拡張文字なので4バイトです。
JavaのUnicode表記は2バイトしか書けないので、サロゲートペアで2バイトづつ表現しなきゃいけないみたい。

https://www.fileformat.info/info/unicode/char/1f923/index.htm
ここに表記方法のってました。

Encodings
C/C++/Java source code "\uD83E\uDD23"
        // 送信するメッセージ
        String body = "こんにちは!" + "\uD83E\uDD23" + "\uD83E\uDD23" + "\uD83E\uDD23" +"\n"
                    + "テストメッセージです。";

やったね🤣🤣🤣

次回予告

送信失敗とかわかるのかな?