Edited at

Twilioで在宅勤務の外線電話をステキな感じにする3(SIPクライアント+Twilio番号で発信)

More than 1 year has passed since last update.


これまでのもの

Twilioで在宅勤務の外線電話をステキな感じにする(一斉呼び出し・時間外非応答)(前置き編)

http://qiita.com/chabose/items/2dc18db77bdf14c2738f

Twilioで在宅勤務の外線電話をステキな感じにする(一斉呼び出し・時間外非応答・Slack通知)(実装編)

http://qiita.com/chabose/items/f098aa4ff28ad5492fa3


今回作るもの

前回までに着信部分を作ったので、今回は発信を実装します。

Twilioで取得した電話番号で着信できても、その番号で折り返しができなければあまり意味がありません。

なので、前述のSIPクライアントから発信した場合、Twilioで取得した番号で発信先に電話がかかるようにします。

イメージはこんな感じです。

outgoing.png


フロー


  1. SIPクライアントから電話番号に発信する

  2. TwiMLが呼ばれ、発信先番号を解釈する

  3. Twilio番号を発番にして外部に発信する

太字部分が今回実装する部分です。


実装


電話番号の解釈

SIPクライアントを利用した場合、通常のように番号入力して発信すると、宛先が090XXXXXXXX@sipdomain.example.comのような形でSIPサーバーに送られます。

一方、Twilioが発信のときに使う番号は、+国番号(日本:81)と国内番号の先頭0を取ったもの、つまり+8190XXXXXXXXのような形式なので、これを合わせてあげる必要があります。


  1. 電話番号の先頭が0の場合は国内電話なので、@よりあとを削除、先頭の0を削除し、+81をつけて発信先番号を作成する(ex. 09012345678@sipdomain.example.com)

  2. 先頭の番号が+の場合は、国際電話なので、@よりあとを削除し、発信先番号を作成する(ex. +18001234567@sipdomain.example.com)

  3. それ以外の場合はSIPの内線の可能性があるので、そのまま発信先番号として利用する(ex. 1001@sipdomain.example.com)


コード


outbound.php

<?php

header("content-type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";

$to = $_POST['To'];
$endpos = strpos($to,"@");
$number = substr($to,4,$endpos-4);
$firstletter = substr($number, 0,1);

switch($firstletter){
case "+":
$dial = "<Number>${number}</Number>\n";
break;

case "0":
$number = substr($number, 1);
$dial = "<Number>+81${number}</Number>\n";
break;

default:
$dial = "<Sip>${to}</Sip>";
}
?>
<Response>
<Dial callerId="+8150XXXXXXXX">
<?=$dial?>
</Dial>
</Response>


こんな感じですかね。

callerIdには必ずTwilioで購入した番号を記載します。

これをおいたURLを

[プログラマブルVoice]-[SIPドメイン]-設定画面-[REQUEST URL]に設定すれば発信については完了です。


次は

Lambda+API Gatewayですね。