前回、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を除いた形)
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"
+ "テストメッセージです。";
やったね🤣🤣🤣
次回予告
送信失敗とかわかるのかな?