Twilioで購入した電話番号を使って、ソフトフォン「AGEphone」から電話をかけます。Twilioから電話番号を購入する方法は、「Twilioで電話番号の購入してPHP言語で発着信を行う」に示します。ソフトフォン「AGEphone」については、「Raspberry Pi 3でAsteriskによるスマートフォンでの内線電話」で使用しました。
今回の方法では特にグローバルなサーバを必要としません。Twilioが提供しているVoice SIPドメインとFunctionsを使用します。ソフトフォン「AGEphone」から電話をかけるために、次の手順でTwilioとAGEphoneを設定します。手順の1から3はTwilioの管理コンソールで作成し、手順の4はソフトフォン「AGEphone」で設定します。

  1. クレデンシャルリストを作成します。Voice SIPドメインに登録します。
  2. Voice SIPドメインを作成します。AGEphoneからアクセスされると、作成したFunctionを呼び出します。
  3. Functionsを作成します。これによりAGEphoneからの発信時に行う処理を記述します。
  4. AGEphoneを設定します。ここでは、作成したVoice SIPドメインとクレデンシャルデータを設定します。

クレデンシャルリストの作成

Twilioの管理コンソールの左側メニューから「Programmable Voice」の「SIPドメイン」の「クレデンシャルリスト」をクリックすると次の画面が表示されます。

クレデンシャルリスト

「わかりやすい名前」に示された「Credentialxxxx」をクリックして、登録を開始します。次のように「クレデンシャルユーザー名」に「05xxxx」と「パスワード」を設定します。「関連づけられたSIPドメイン」には、上記で設定された「Voice SIPドメイン」で作成した「SIPドメイン」を設定します。設定した画面を次に示します。

クレデンシャル作成

Voice SIPドメインの作成

Twilioの管理コンソールの左側メニューから「Programmable Voice」の「SIPドメイン」をクリックすると次の画面が表示されます。

SIPドメイン一覧

「SIP URI」をクリックして登録を開始します。

  • SIP URI:xxxxx
  • (REQUEST URL:https://fulvous-kakapo-7176.twil.io/xxx
        (FUNCTIONで作成したスクリプトのURL)
  • クレデンシャルリスト:Credentialxxxx

設定を完了した画面を次に示します。

Voice SIPドメインの設定

Functionsの作成

Twilioの管理コンソールの左側メニューから「Runtime」の「Functions」をクリックすると次の画面が表示されます。

Functionリスト

「NAME」をクリックして登録を開始します。作成したFUNCTIONのURLを、上記に示す「Voice SIPドメイン」の「REQUEST URL」に設定します。FUNCTIONの登録画面を次に示します。

FUNCTION CODEの作成

「CODE」の内容を次に示します。この「CODE」はNode.jsで記述されています。14行目のsayメソッドにより、音声メッセージを出力して、15行目のdialメソッドで相手電話番号にダイアルします。

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);
}

AGEphoneの設定

AGEphoneの設定ボタンをクリックして、今回作成したのSIPドメインとクレデンシャルデータを次のように設定します。

  • ドメイン:Voice SIPドメインで作成したドメイン名(注:[SIPドメイン名].sip.us1.twilio.com とリージョン(us1)を指定)
  • ユーザID:クレデンシャルユーザ名
  • パスワード:クレデンシャルパスワード

SIPドメインとクレデンシャルデータの設定

設定が完了すると、AGEphoneはSIPドメインの接続を開始し、正常にSIPドメインに接続できると、次のように「ダイヤルできます」「デフォルト(05xxxx)」と画面に表示します。

SIPドメインへの接続

電話をかけたい相手電話番号を入力すると、相手電話に発信します。