前回のTwilio講座 入門編⑦では、Programmable VoiceのSIPとWebRTC Clientを使った音声通話の概要についてご理解いただけたかと思います。
今回のTwilio講座 入門編⑧では、Twilioのもう一つの代表的機能であるProgrammable SMSについてご紹介いたします。
■Twilio講座 入門シリーズ■
【Twilio講座 入門編①】コミュニケーションAPIのTwilioとは?
【Twilio講座 入門編②】アカウントの種類と無料アカウント作成方法
【Twilio講座 入門編③】Twilio管理画面(コンソール)
【Twilio講座 入門編④】電話番号を購入するために必要な手続き
【Twilio講座 入門編⑤】Programmable Voiceとは?
【Twilio講座 入門編⑥】Programmable Voiceの使い方|自動音声応答IVRを作ってみよう!
【Twilio講座 入門編⑦】SIPとWebRTC Clientを使った音声通話の概要
【Twilio講座 入門編⑧】Programmable SMSを使ってSMSを送信してみよう!
目次
Programmable SMSとは?
Programmable SMSは携帯電話のショートメッセージ(SMS)をやり取りするためのサービスです。大きく分けて以下のことを実現します。
- Twilio番号から携帯電話にSMSを送信する
- 携帯電話から送信されたSMSをTwilio番号で受信する
- Twilio番号で受信したSMSの内容を取り出して何かプログラムに渡す
SMSは日本国内の携帯電話だけに留まらず、世界各国の携帯電話も対象になります。
そもそもSMSとは
SMSは世界中で使われている、携帯電話を使ったメッセージング手段です。日本ではEmailの方が主流ですが、日本以外の国ではこのSMSがメインで使われています。
スマートフォンより前の「ガラケー」や「フィーチャーフォン」と呼ばれるタイプの携帯電話では、各キャリアがショートメール・Cメール・スカイメールという名前で、同じキャリア同士の携帯電話に限ってメッセージを送受信する機能を提供していました。
SMSはこのやり取りを別のキャリア間でもできるようにしたもので、電話網で信号をやり取りする部分に文字情報を載せて伝達することで実現しています。
SMSとEmailとの違い
Emailアドレスは気軽に変更できたり、複数のアドレスを保有できる特徴があります。そのため最初に登録されたアドレスに後日メールを送っても、未達となってしまう事象も発生します。あるいは届いていても、複数あるアドレスのうちの一つに埋もれて見落とされてしまうこともあります。
一方でSMSは「1つの携帯電話につき1つしか付与されない]電話番号を使うメッセージング手法です。電話番号はEmailアドレスとは異なり、めったに変更されないため、メッセージの到達性に対する信頼性がEmailより高いと言えます。
SMSならではの活用方法
SMSは電話番号という識別子を使った手法のため、二要素認証の手段としても活用することができます。
会員登録で入力させた電話番号の有効性を確認するため、電話を架ける代わりに、SMSで何桁かの番号を送信するのです。送られてきた番号を正しく入力できたかどうかで、「この人は本当にこの電話番号の持ち主か?」を判断できます。
このように日本国内での利用においても、SMSを送ることにはメリットや活用シーンが多くあります。
TwilioでSMSを利用する際の注意点
日本における電話番号規制によって、携帯電話番号(090/080/070)は携帯電話事業を行っているキャリアにしか発行されません。Twilioで取得できる日本の電話番号は、050番号もしくはトールフリー番号のみとなります。
SMSは携帯電話番号を介するメッセージング手段であるため、Twilioの050番号ではSMSの送受信を行えません。Twilioで日本のユーザーを対象としたSMSを利用するには、アメリカの電話番号(+1で始まる番号)を取得して、アメリカの電話番号から国際SMSとして日本の携帯番号宛に送信する形をとる必要があります。
このときSMSを受け取った人が返信すると、日本の番号からアメリカ番号宛にSMSを送ることになるため、高い送信料がかかってしまいます。よって相手が日本国内の携帯電話番号である場合は、エンドユーザー側からTwilio番号にSMSを送信するサービスはあまり向いていません。
上記の点から日本国内においては、ほとんどのお客様に送信専用のSMSを実装する目的でTwilio Programmable SMSをご利用いただいております。
海外におけるProgrammable SMSの利用
一方、海外の場合は日本と異なり、SMSが標準的なコミュニケーションチャネルとして普及しています。国によって異なりますが、基本的に受信費用が安い場合が多いです。
そのため海外においては、エンドユーザー側からTwilio番号にSMSを送信してもらうサービスも実現できます。
Twilioでは世界約100か国の電話番号を取り扱っており、現地のローカル番号を簡単に使用できます。つまり海外のエンドユーザーを対象とする場合、SMSのやり取りをしたい相手と同じ国の番号を購入することで、双方向のコミュニケーション手段としてSMSを活用できるのです。
Programmable SMSでSMS送信を行う
前述のとおり、日本国内でProgrammable SMSを利用する場合、主にSMSの送信を中心とした使い方になります。ちなみに、SMSの受信を全て拒否したい方は、こちらの記事を参考に設定することもできます。
Twilioを用いて自分から相手へSMSを送信するのは、何もトリガーがない状態からTwilioに命令を出して何かをさせるというタイプの使い方に該当します。これはREST APIという手法を使ってTwilioへ命令を出すことで行います。REST APIはRESTful APIの省略形で、RESTと呼ばれる原則に基づいて設計されたAPIのことです。
①電話番号の取得
では実際にProgrammable SMSのAPIを使って、SMSを送ってみましょう。
まずはTwilio管理画面でアメリカの電話番号を1つ取得してください。その際、取得時の画面でSMSにチェックが入っているか要確認です。ここにチェックが入っていない電話番号ではSMSを送れません。

※これから説明する内容に該当するTwilio Docsはこちらです。
②-1.curlコマンドを用いてAPIを実行
REST APIの命令は、インターネットに接続されたサーバーやPCからcurlと呼ばれるコマンドを実行することで出すことができます。
TwilioからSMSを送信するために実行するべきcurlコマンドを記載します。実行環境がある方は以下のコマンドをご利用のコマンドプロンプトで実行してください。
curl 'https://api.twilio.com/2010-04-01/Accounts/ACxxxxx/Messages.json' -X POST \
--data-urlencode 'To=+8190nnnnnnnn' \
--data-urlencode 'From=+1mmmmmmmmm' \
--data-urlencode 'Body=メンテナンスのお知らせです。弊社ニュースを見てください。' \
-u ACxxxxx:yyyyyy
全5行で書きましたが、これをワンライナーで記述しても構いません。改行する場合はこの例のように、各行の末尾でバックスラッシュエスケープを入れてください。
1行目
TwilioのAPIエンドポイントのURLと、HTTP POSTを使うことを意味します。ACxxxxxはご自身が利用するアカウントのAccount SIDに置き換えてください。Twilio管理画面のダッシュボードで確認できます。
2行目
To(宛先)の電話番号をE.164形式でTo=パラメータとして与えます。この例では日本の携帯電話番号090-nnnn-nnnnです。
3行目
送信者の電話番号をE.164形式でFrom=パラメータとして与えます。ここは必ずご自身が取得しているTwilio番号を与える必要があります。
先ほど取得したアメリカ番号を入力してください。この例ではアメリカの電話番号+1-mmm-mmm-mmmmです。
4行目
SMS本文をBody=パラメータとして与えます。このコマンドを流す際の文字コードは必ずUTF-8としてください。Twilioが扱う標準文字コードは UTF-8です。
5行目
-uオプションにご自身のアカウントのAccount SID:AuthTokenを与えます。yyyyyがAuthTokenで、これがAPIリクエストを出す際の認証情報・パスワードの役割を果たします。これもダッシュボードで確認できます。
それでは、このコマンドの各電話番号やSMS本文・認証情報を書き換えて、ご自身のコンソールで実行してみてください。以下のような結果が出力され、宛先の携帯電話にSMSが届いたはずです。
{
"sid": "SM5510335aef13443cbfb3d051e51xxxxx",
"date_created": "Tue, 21 Jan 2020 08:24:58 +0000",
"date_updated": "Tue, 21 Jan 2020 08:24:58 +0000",
"date_sent": null,
"account_sid": "ACxxxxx",
"to": "+8190nnnnnnnn",
"from": "+1mmmmmmmm",
"messaging_service_sid": null,
"body": "メンテナンスのお知らせです。弊社ニュースを見てください。",
"status": "queued",
"num_segments": "1",
"num_media": "0",
"direction": "outbound-api",
"api_version": "2010-04-01",
"price": null,
"price_unit": "USD",
"error_code": null,
"error_message": null,
"uri": "/2010-04-01/Accounts/ACxxxxx/Messages/SM5510335aef13443cbfb3d051e51xxxxx.json",
"subresource_uris": {
"media": "/2010-04-01/Accounts/ACxxxxx/Messages/SM5510335aef13443cbfb3d051e51xxxxx/Media.json"
}
}
コマンドを実行すると、Twilioはその結果を戻り値として返してきます。この例のように、このSMS送信アクションにSM5510335ae...というSID を与え、
- いつこのリクエストが生成されたか
- いつTwilioからキャリアへ渡されたか
- どのAccount SIDを持つアカウントが実行したか
- 宛先電話番号・送信元電話番号
といった細かい情報を戻してきます。これらを受け取ってご自身のプログラムで活用することで、SMS送信履歴を集計したり、エラーを検知して何か別の処理をさせたりすることができます。
②-2.API Explorerを用いてAPIを実行
Twilioではcurlコマンドを実行する環境をお持ちではない方でも、ブラウザ上からREST APIの命令を出せるAPI Explorerをご用意しています。
API ExplorerはブラウザからAPIリクエストを出すコマンドを生成しつつ、その場で実行もできる簡易ツールです。すべてのAPI機能をここで済ませることはできませんが、サービスごとにいくつか基本的な機能を揃えています。
まずはTwilio管理画面の左メニュー、ドット3つ並びアイコンからAPI Explorerをクリックしてください。

SMS APIは、画面上部プルダウンからProgrammable SMSを選び、Messagesを展開した先頭の「Create a Message」と説明のあるPOSTを選びます。

ここまで辿ると、以下の画面になったはずです。

画面左の枠内に入力または選択を行い、APIリクエストを作ります。
FORMAT |
JSONのまま |
ACCOUNT SID |
ご自身のアカウントのAccount SID |
TO |
SMSを送る宛先の電話番号 ※E.164形式(国番号を含む+8190-xxxx-xxxx)で入力 |
FROM |
取得したアメリカ電話番号 (プルダウンから選択) |
MESSAGING SERVICE SIDは触らなくて大丈夫です。
続いてBODYにSMS本文を入力してください。半角なら140文字まで、全角文字が1文字でも含まれると70文字までを1通として送ります。文字数を超えると2通、3通……と分割され、その分だけ送信料が掛かります。
curlコマンドで入力した要素を上記のように入力すると、右側の画面に完成したcurlコマンドが表示されます。先ほど紹介したcurlコマンドと同じものです。

安全を考慮してAuthTokenは伏せられていますが、Show your Auth Tokenにチェックを入れるとコマンド部にご利用中のアカウントに紐づくAuthTokenが表示されます。
このcurlコマンドをご自身のサーバーなどのコンソールで実行してください。また左側の入力画面をもっと下にスクロールすると出てくる「Make Request」を押すと、その場でこのAPIリクエストが実行され、結果が右側のResponse欄に表示されます。

※API Explorerはマスターアカウントからのみ利用可能です。サブアカウントからは利用できないので注意してください。
Programmable SMSでSMS受信を行う
続いて、海外のTwilio番号を取得してSMSを受信する方法をご説明いたします。
Programmable Voiceと同じように、Twilio管理画面の電話番号メニューからSMS着信時にTwilioが実行するURLを設定したり、TwiML Binsの指定を行ったりします。Twilio Studioやご自身のTwilioアプリケーションに連携させることもできます。

まず電話番号のメニューを開いたら、Messagingのセクションにあるこれらの値を設定します。
この写真の例ではhttps://demo.twilio.com/welcome/sms/reply/ というTwiMLに、自動的に送信者へ「ありがとう」のメッセージを返信するような命令が書かれています。このTwilio番号にSMSが届くと設定したURLが実行され、autoreply.xmlにあるTwiML 通りに送信者の電話番号へSMSが送信されます。
https://demo.twilio.com/welcome/sms/reply/ にて返却されるTwiML
<Response>
<Message>Thanks for the message. Configure your number's SMS URL to change this message.Reply HELP for help.Reply STOP to unsubscribe.Msg&Data rates may apply.</Message>
</Response>
Programmable Voiceの章で紹介したように、ここへPHPなどのプログラミング言語を用いた複雑な処理をコーディングしたアプリケーションを指定することもできます。
Twilioは A MESSAGE COMES INのURLを実行する際に、送信元の電話番号や本文内容といったSMSに付帯する属性をパラメータとして付与します。そのためご自身のプログラムでこれらの値を取得して、それに応じた条件分岐を行って別の処理へ渡すことが可能です。