TwilioのVoice APIで発信通話(アウトバウンドコール)を試してみた
こんにちは、昴です。
今回はTwilio Voice APIを使って、指定した電話番号に自動で電話をかける「アウトバウンドコール」を試してみました。
はじめに
Twilioは電話やSMS、チャットなどのコミュニケーション機能を組み込むためのクラウドベースのAPIプラットフォームです。TwilioのAPIを利用することで通信ソリューションを自由にカスタマイズして構築することができます。
Twilio Voice API といえば、自動音声ガイダンス(IVR)のように「かかってきた電話を受けて自動対応する」使い方のほかに、Twilio側から能動的に電話をかける「アウトバウンドコール(発信通話)」を行うことも可能です。
この機能を使うことで、システムの異常検知時の緊急アラート通知や、予約のリマインダー、SMSが届かない場合の二要素認証など、様々な自動化に活用できます。
今回は、このTwilio Voice APIを使ったアウトバウンドコールの基本的な仕組みと、実際にAPIを叩いて電話をかける手順をご紹介します。
前提・検証環境
本記事の手順を進めるにあたり、以下の環境および権限が必要です。
- Twilioアカウントが開設済みであること
- 通話機能を持つTwilio電話番号を購入済みであること
- curlコマンドを実行できる環境
実践
まず全体の流れを整理しておきます。
curlコマンドを使ってTwilioのCalls APIにPOSTリクエストを送ると、Twilioが指定した番号に電話を発信します。相手が電話に出ると、TwiMLというXML形式の指示書に従ってメッセージの読み上げなどが実行されるという仕組みです。今回はわざわざサーバーを用意せず、APIのパラメータの中に直接このTwiMLを書き込んで手軽に実行してみます。
Account SIDとAuth Tokenの確認
APIを実行するために必要な認証情報をTwilioコンソールで確認します。
コンソールのAccount Dashboardへ移動し、Account Infoを確認します。そこにあるAccount SID(ACから始まる文字列)とAuth Tokenをコピーします。Auth Tokenは目のアイコンをクリックすると表示されます。

コピーできたら、ターミナルを開いて環境変数に設定しておきます。Auth Tokenは他人に知られると不正利用される恐れがあるため、GitHubなどに公開しないよう注意してください。
export TWILIO_ACCOUNT_SID="ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export TWILIO_AUTH_TOKEN="your_auth_token_here"
export TWILIO_PHONE_NUMBER="+1xxxxxxxxxx"
curlでアウトバウンドコールを実行する
TwilioコンソールでAccount SID、Auth Token、そして発信元となるTwilioの電話番号が確認できたら、実際にAPIを叩いて発信してみましょう。
ターミナルを開き、以下のコマンドを実行します。
宛先番号(To)の部分をご自身のスマートフォンなど、実際に電話を受け取りたい番号に書き換えてください。電話番号はE.164形式で入力するため、日本の場合は先頭の0を省いて+81から始めます。Account SIDなどの認証情報や発信元番号(From)もご自身のものに置き換えます。
curl -X POST "https://api.twilio.com/2010-04-01/Accounts/${TWILIO_ACCOUNT_SID}/Calls.json" \
--data-urlencode "To=+8190xxxxxxxx" \
--data-urlencode "From=${TWILIO_PHONE_NUMBER}" \
--data-urlencode "Twiml=<Response><Say language='ja-JP' voice='Polly.Mizuki'>こんにちは。これはTwilioからのテスト電話です。</Say></Response>" \
-u "${TWILIO_ACCOUNT_SID}:${TWILIO_AUTH_TOKEN}"
ここで指定しているパラメータについて簡単に説明します。
Toには発信先の電話番号を、Fromには発信元のTwilio電話番号を指定します。
そしてTwimlというパラメータに、相手が電話に出たときの動作をXML形式で直接記述しています。今回はSayタグを使って、日本語の女性の音声(Polly.Mizuki)で「こんにちは。これはTwilioからのテスト電話です。」と読み上げるように指示しています。
確認
レスポンスと着信を確認する
コマンドの実行に成功すると、ターミナルにJSON形式のレスポンスが返ってきます。

レスポンスの中に「"status": "queued"」という記載があれば、APIの実行は無事に成功しています。
そのまま数秒待つと、宛先に指定したスマートフォンへ電話がかかってきます。電話に出ると「こんにちは。これはTwilioからのテスト電話です。」と日本語で読み上げられることが確認できます。
Call Logsで結果を確認する
発信の結果は、TwilioコンソールのCall Logsでも確認できます。
コンソールの左側メニューから Monitor > Logs > Calls の順に開くと、発信した通話の履歴一覧が表示されます。各通話をクリックすると、発信日時、ステータス、通話時間、料金、そして実際に実行されたTwiMLのログなど、詳細な情報を確認することができます。

補足:TwiML BinsのURLを使って発信する方法
今回はAPIのパラメータに直接XMLテキストを記述しましたが、あらかじめTwilioコンソール上にTwiMLを保存しておき、そのURLをパラメータとして渡すこともできます。読み上げる文章が長い場合や、後からテキストだけを変更したい場合に非常に便利な方法です。
手順
Twilioコンソールの左側メニューから TwiML Bins > My TwiML Bins を開き、「+」をクリックし、新しく作成します。
Friendly Nameに分かりやすい名前(Outbound Call Testなど)を入力し、TWIMLの入力欄に先ほどと同じXMLを記述して保存します。

保存後に表示される「URL」という項目の文字列が、発信時に必要になるためコピーしておきます。
確認
ターミナルに戻り、先ほどのcurlコマンドを少し書き換えて実行します。Twiml パラメータの代わりに Url パラメータを使用し、先ほどコピーしたTwiML BinのURLを指定して実行します。直接記述した時と全く同じようにターミナルにレスポンスが返り、電話がかかってきてメッセージが読み上げられます。
curl -X POST "https://api.twilio.com/2010-04-01/Accounts/${TWILIO_ACCOUNT_SID}/Calls.json" \
--data-urlencode "To=+8190xxxxxxxx" \
--data-urlencode "From=${TWILIO_PHONE_NUMBER}" \
--data-urlencode "Url=https://handler.twilio.com/twiml/EHxxxxxxxxxxxxxxxx" \
-u "${TWILIO_ACCOUNT_SID}:${TWILIO_AUTH_TOKEN}"
まとめ
今回はTwilio Voice APIを使った発信通話(アウトバウンドコール)をご紹介しました。
Calls APIにPOSTリクエストを送るだけで簡単に発信でき、サーバーを用意することなく手軽に試すことができます。リマインダーや緊急通知など、システムから能動的に連絡したい場面でぜひ活用してみてください。
告知
Twilio/SendGridセミナーを毎月開催しています
クラスメソッドでは毎月Twilio/SendGridのセミナーを実施しています。
クラスメソッドではTwilio/SendGridのセミナーを毎月開催しております。いずれもTwilio及びSendGridを良く知らない方向けに基本的な部分から解説する内容となっておりますので、今後Twilio/SendGridの導入を検討している方や、既に導入済で改めて基本的な部分を勉強したいと考える方は、是非お気軽にご参加いただければと思います。



