twilio APIを使ってcurlやPHPでSMSを送信する


世の中には便利なサービスがあるものですね。携帯電話の端末認証をしたくて、ユーザに電話番号を入力してもらい、SMSで認証キーを送信。その認証キーをユーザに入力してもらうことで、端末認証完了。みたいな。

twilioに登録

twilioにはトライアルがあり、twilioのAPI使い勝手を試すレベルであれば、色々できる。

ある程度、日本語化されているので迷うことはないと思うけど、普通にサインアップ。

トライアルでSMS送信するときの注意点

送信先電話番号は、検証済み電話番号じゃなきゃダメ

トライアルだと、1つの電話番号しか登録できないっぽい。なお、検証済み電話番号の検証方法で、通話方式とSMS方式があるが、なぜか通話方式は正常に完了できなかった。

SMS送信には、アメリカ(+1)の電話番号を取得する必要がある

ここに騙されやすい(誰も騙してない)。

サインアップして、最初に割り当てられる電話番号は、おそらく日本の国番号(+81)が付いたものだと思うけど、それをリリースして、アメリカの国番号(+1)の電話番号を再取得しなおす。

番号をリリースして、新しく電話番号を購入(トライアルなので実際は課金されない)

勝手にアサインされる電話番号は使わない

左上の国でアメリカを選択

(+1)がついていれば、電話番号は何でもいい

curlでSMS送信APIを叩く

curl / Ruby / PHP / Python / Node.js / Java / C# がサポートされている。テストするだけなら、ライブラリとか必要ないcurlが楽。

非常にわかりやすいサンプルが付いているので、迷うことはないが1点だけ注意が。 curlの下記サンプルコマンド、実はAPIのURLが間違っている。 なので、サンプルのまま実行しても、404 not foundのエラーが返ってくるだけ…。

# これは実行できない
curl -X POST 'https://jp.twilio.com/2010-04-01/Accounts/[ACCOUNT SID]/Messages.json' \
--data-urlencode 'To=+818000000000'  \
--data-urlencode 'From=+100000000'  \
--data-urlencode 'Body=test' \
-u [ACCOUNT SID]:[AuthToken]
jp.twilio.com
↓
api.twilio.com

こっちのホスト名が正しい。

# これが実行できる
curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/[ACCOUNT SID]/Messages.json' \
--data-urlencode 'To=+818000000000'  \
--data-urlencode 'From=+100000000'  \
--data-urlencode 'Body=test' \
-u [ACCOUNT SID]:[AuthToken]

これで電話番号など設定があっていれば、検証済み電話番号にSMSが送信されているはず。