
目次
はじめに
Twilioサインアップ
電話番号購入
Twilioコンソール設定
SIPソフトフォン設定
所感
はじめに
自作アプリに電話やビデオ、SMSやチャットの機能を簡単に組み込めたらいいな。
皆さんはそう思ったことはないでしょうか。
最近、TwilioのAPIを触る機会がありましたので、Twilioの機能等を利用してどのようなことができるかを探っていきたいと思います。
Twilioとは、電話やSMS・ビデオ・チャット・FAX・SNSなど世の中にある様々なコミュニケーションチャネルをWeb・モバイルアプリケーションとつなぐ「クラウドコミュニケーションAPI」です。
Twilioの豊富なAPIを利用することで、気軽に機能を組み込むことができます。
今回はTwilioにサインアップしてコンソールから電話番号を購入し、SIPクライアントアプリ「AGEphone」から電話の受電・発信ができるようにしたいと思います。
Twilioサインアップ
こちらをクリックしてTwilioの無料サインアップを行います。
※KDDIウェブコミュニケーションズ経由でアカウントを開設した場合、以下の画面の見え方や料金が一部異なりますのでご注意ください。
サインアップの手順は詳細は以下を参照ください。
■Twilioアカウントを作成する方法はこちらをクリックしてご確認ください。

電話番号購入
アカウント作成後、Twilioコンソール上で電話番号を購入します。今回はIP電話サービスに利用する050番号を購入したいと思います。
050番号以外のトールフリー番号(080番号や0120番号)などTwilioで利用できる国内の電話番号に関しては以下を参照ください。
■Twilioでご利用いただける国内の電話番号 の一覧はこちらをクリックしてご確認ください。




「Japan(+81)の状態で「検索」ボタンを押すと、購入できる電話番号一覧が表示されます。
今回はTypeが「National」の電話番号を選んで「購入」をクリック
※Twilio管理コンソール日本の電話番号を購入する場合には、Bundlesの登録が必要になります。登録方法については以下をご確認ください。
■規制情報に関わる書類の提出方法 はこちらをクリックしてご確認ください
Twilioコンソール設定
電話番号が準備できたら、Twilioのコンソール上で設定を行っていきます。
1.Twilio SIPドメインの作成
まず、SIPドメインの作成を行います。ドメイン名は独自に決めることができますが、Twilio全体で一意になる必要があります。

① FRIENDLY NAME:任意の分かりやすい名前を入力します。(例)CallAgePhoneTest
② SIP URI:任意のドメインを設定します
③ CREDENTIAL LISTS:クレデンシャルリストを設定します。
右の+ボタンで新規にクレデンシャルリストを作成し、選択します。
設定内容は後述「2.クレデンシャルリストの作成」をご確認ください。
④ 後述「4.SIP発信設定(Twilio Functions)」で設定するFunction Nameを設定します。
⑤ SIPエンドポイントにSIPドメインでの登録を許可するため、「ENABLED」とします。
⑥ CREDENTIAL LISTS:③で設定したものを選択します
入力が完了したらSaveを押します。
2.クレデンシャルリストの作成
新規でクレデンシャルリストを作成します。ユーザ名に購入した電話番号を設定することで、電話番号とユーザ名の紐づけを行います。

FRIENDLY NAME:任意の分かりやすい名前を入力します。(例)CallAgePhoneTestUser
USERNAME:購入した電話番号を設定します。
PASSWORD:ユーザに対して任意のパスワードを設定します。
3.SIP着信設定(Twilio Functions)
SIP着信用のTwiMLを返す Functionsの設定をします。
「Twilio Functions」は、スケーラブルでマネージドなサーバレス環境で、「TwiML」とは、Twilioを操作するXML形式の独自言語です。
まずは受電用の設定を行います。

① FRIENDLY NAME:任意の分かりやすい名前を入力します。(例)CallAgePhoneTestIn
② PATH:任意の文字列を設定します(例)/callagephonetest-in
③ EVENT:「Incoming Voice Calls」を選択します。
④ CODE:以下のコードを貼り付けます。
exports.handler = function(context, event, callback) { // 宛先 const toNumber = event.To || ''; // 宛先を元にSIPユーザ名に変換 const userName = '0' + toNumber.substring(3); // SIP宛先 const sip = 'sip:' + userName + '@callagephonetest.sip.us1.twilio.com'; const twiml = new Twilio.twiml.VoiceResponse(); twiml.dial().sip(sip); console.log(twiml.toString()); callback(null, twiml); }
4.SIP発信設定(Twilio Functions)
次に発信用のFunctionsの設定を行います。

① FRIENDLY NAME:任意の分かりやすい名前を入力します。(例)CallAgePhoneTest
② PATH:任意の文字列を設定します(例)/callagephonetest
③ EVENT:未設定とします。
④ CODE:以下のコードを貼り付けます。
exports.handler = function(context, event, callback) { // 宛先 const to = event.To || ''; // 発信者番号 const from_ = event.From || ''; // 宛先/発信者番号から電話番号を抽出 'XXXXXXXXXXX@xxx.sip.us1.twilio.com' -> 'XXXXXXXXXXX' const toNumber = to.indexOf("@") > 0 ? to.substring(4, to.indexOf("@")) : ''; const fromNumber = from_.indexOf("@") > 0 ? from_.substring(4, from_.indexOf("@")) : ''; // 0AB〜Jを+81に変換 const number = (toNumber.substring(0, 1) === '+' ? toNumber : '+81' + toNumber.substring(1)); const callerId = (fromNumber.substring(0, 1) === '+' ? fromNumber : '+81' + fromNumber.substring(1)); const twiml = new Twilio.twiml.VoiceResponse(); twiml.say("お繋ぎします。少しお待ちください。", {voice: 'alice', language: 'ja-JP'}); twiml.dial({callerId: callerId}).number(number); console.log(twiml.toString()); callback(null, twiml); }
上記15行目で、発信時に任意の音声メッセージを追加しています。
5.SIPソフトフォンへの着信時の設定
ここまで設定してきましたが、もう一ステップ必要になります。
Twilio電話番号宛の着信をSIPソフトフォン宛てに転送する必要があるため、そちらの設定を行います。

FUNCTION PATH には「3.SIP受電設定(Twilio Functions)」で設定したPATHを設定します。
SIPソフトフォン設定
Twilioコンソールでの設定を終えたため、今度はSIPソフトフォン側の設定を行います。
今回はSIPクライアントアプリ「AGEphone」を使用します。使用する携帯電話にアプリをインストール後、ソフトフォンの設定を行います。

簡易設定画面では、Twilioコンソールで設定した以下の内容を入力してください。
ドメイン :[SIPドメイン名].sip.us1.twilio.com
[SIPドメイン名]は 「1.Twilio SIPドメインの作成」の②の項目になります
ユーザID :クレデンシャルユーザ名
パスワード :クレデンシャルユーザのパスワード
設定して戻るボタンを押すと、SIPドメインの接続を開始します。正常にSIPドメインに接続できると、以下のようにダイアルできる状態となり、購入した電話番号で電話ができる状態となります。

所感
Twilioを利用するとこんなにも短時間で電話が使えるようになることが分かりました。
今回は既存のアプリに設定しましたが、SDKを使えば独自に開発したアプリにも組み込めるため、いろいろ可能性が広がりそうです。
その他にもテレビ会議やFaxの実装もできるため、今後もっといろいろ触ってみたいと思います。