ゼロからはじめるぜ! Twilio – シーズン3: SIP Trunking編 第5回

masa_prof.jpgこんにちは。ネットワークエンジニアのまさです。

いよいよこのシーズンも佳境に入ってまいりました。今日は、前回までにTwilioに設定した SIPトランクの内容を Asterisk へ連携します。

最初に、全体像を振り返っておきましょうか。みなさんが構築した Asterisk と内線(IPフォンアプリ) から、Twilio を介してPSTNの電話へ外線をかけたり、PSTNの電話から外線を受けたりするために、私たちは今、手に汗を握り、たとえ膝が崩れ落ちようとも、ここで倒れてなるものか!! 生きて帰るんだ!! と頑張っています。

zerotwilio_3-2-1.jpg前回までで、IPフォンアプリの設定が完了→内線通話をするところまで Asteriskの設定が完了→ そして、TwilioのSIPトランク設定で、Twilioマークから下への通信・右への通信 を架け橋するところまで設定が完了しました。今日やることは、Asterisk へ Twilio を介してPSTNとつながるための設定を投入することです。

第2回で警告をしておりますが、Asterisk のサーバーは、必ず検証環境・テスト用のサーバーを使ってください。他サービスが本番稼働しているサーバーでの構築継続は避けてください。これからやることは多少のリスクを伴う内容です。

再びAsteriskの設定(外線の設定追加)

Twilio側の設定に関するドキュメントは →こちら になります。まだ翻訳途中ですみません。今回は Asterisk を使っていますので、Asterisk IP-PBX が該当します。Asterisk の設定ファイルでコメントアウトは 「;」です。よって、サンプル中、先頭がセミコロンで始まっている行はただのコメントです。

このサンプルを例に、sip.conf を作りましょう。以下は、前回までに作成してある sip.conf に今回入れるべき設定を追加した完成形です。赤文字の部分が今回追加した行です。ちなみに、Twilioドキュメントに書いてあるサンプルと若干異なります。色々試行錯誤し、うまくいったものを下記に載せています。

/etc/asterisk/sip.conf

[general]
context=default
port=5060
bindaddr=0.0.0.0
language=ja
allowguest=yes
alwaysauthreject=yes

[412601]
type=friend
defaultuser=412601
secret=*****  
canreinvite=no
host=dynamic
qualify=yes
nat=yes

[412602]
type=friend
defaultuser=412602
secret=*****  
canreinvite=no
host=dynamic
nat=yes

[TwilioSipTrunk]
type=peer
secret=*****  →Twilio管理画面:「新しいクレデンシャルリスト」で設定したパスワード
username=masa →Twilio管理画面:「新しいクレデンシャルリスト」で設定したユーザー名
host=*****.pstn.twilio.com → Twilio管理画面:「Termination SIP URL」で作成したドメイン
dtmfmode=rfc2833
canreinvite=no
disallow=all
allow=ulaw
insecure=port,invite
fromuser=+8150XXXXXXXX → Twilio管理画面で紐付けたTwilio電話番号
fromdomain=*****.pstn.twilio.com
               → Twilio管理画面:「Termination SIP URL」で作成したドメイン

 

[TwilioSipTrunk] というコンテキストを作りました。ここにTwilioからSIPトランクによるコールを受け取れるための設定を記載します。secret と username は前回、Twilio管理画面で設定したクレデンシャルリストのユーザー名とパスワードです。
fromuser には、前回、Twilio管理画面で紐付けたこのSIPトランク用のTwilio電話番号です。PSTN→Twilio→Asterisk の経路において外線着信すると、この番号で通知されます。
ご自身で取得していないTwilio電話番号やTwilio以外の電話番号をここに設定してもエラーにはなりません。通話も可能ですし、管理画面のログにはここで指定したものが表示されますが、が相手には「非通知」として掛かります。

 

Twilioドキュメントでは context=incoming という行があるのですが、私はこれをつけると、続いて行う extensions.conf とのペアで上手くいきませんでした。よって上記では削っています。

続いて、extensions.conf です。

/etc/asterisk/extensions.conf

[default]
exten => 412601,1,Dial(SIP/412601,30,r)
exten => 412601,2,Hangup()

exten => 412602,1,Dial(SIP/412602,30,r)
exten => 412602,2,Hangup()

exten => +8150XXXXXXXX,1,Log(NOTICE, Incoming call from ${CALLERID(all)})
exten => +815XXXXXXXX,n,Dial(SIP/412601)
exten => +815XXXXXXXX,n,Hangup()

exten => _0.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:1} through Twilio Provider)

exten => _0.,n,Dial(SIP/TwilioSipTrunk/+${EXTEN:1},60)
exten => _0.,n,Playtones(congestion)
exten => _0.,n,Hangup()

 

赤文字前半部3行は着信の設定です。Asteriskではこのような設定を「ダイヤルプラン」と呼びます。+8150XXXXXXXX はみなさんが紐付けたご自身のTwilio番号に読み替えてください。真ん中の行がキモです。

 

「+8150XXXXXXXX にかかってきたら、SIP で 内線412601 につなげろ」という指示です。この 412601 は、sip.conf の [412601] のコンテキストを指します。つまり、外線がかかってくると、412601 のアプリが ジリリリリ と鳴るわけです。
もし、もう一方のアプリで受けたければ 412602 にしてください。Twilioドキュメントだとこの3行が [incoming] コンテキストに入っていたのですが、どう頑張ってもうまくいかず、Asterisk が default に見つからねえ!! と文句をいうので、私はこれをはずして default コンテキストでうまくいきました。

 

続く後半4行が、外線をかけるためのダイヤルプランです。大事なポイントは _0. の部分! これが表す意味は「先頭が 0 で始まっている番号なら SIP で TwilioSipTrunk コンテキスト を呼べ」になります。
つまり、Twilioへ外線として渡す部分です。なぜ、こうしてあるかというと、「単純に数字だけだと、内線番号をダイヤルしたのか、外線番号をダイヤルしたのか区別がつかず、内線として処理する」からです。

よくオフィスでやる「ゼロ発信(0を最初に押してからダイヤル)」の目的がちょっと分かった気がしますね。なので、もし 「7 発信にしたい」とかひねくれている方は、ここを _7. にしたらいいです。後の回でまとめてセキュリティーのお話をしようかと思いますが、このシーズンで構築するような実験環境においては、可能であればこの先頭の数字は、数桁にして複雑なほうがより安全です。ひとまず、私は説明をシンプルにするためこのままゼロ発信の設定でいきます。

ということで、上記の設定例だと、03-9999-8765 へ外線をかけるためには、アプリのダイヤルで 081399998765 を押すことになります。Twilioを介しているので、国内から国内にかける場合でもこのように E.164 形式でダイヤルしなければいけません。Asteriskを極めると、Asterisk側でうまく判別して普通にダイヤルしても外線としてE.164に変換するように設定できるかもしれませんね。

さて、これで準備完了です。保存したら /etc/init.d/asterisk restart を実行し、Asteriskを再起動しましょう。念のため、ご利用の IPフォンアプリも再起動しておきましょうか。

まずは着信を試してみます。何でも構わないので一般的な電話から 050-XXXX-XXXX (ご自身が紐付けたTwilio番号)へ電話をかけてみてください。

きたきたきたーーーー (^^)/

上記の例の通りなら 412601 のアプリが呼び出しされたはずです。出てお話してみましょう。

うまくいったら今度は発信です。どちらのアプリでもいいので、外線をかけてみましょう、先ほど説明した通り、0 発信の設定が入っているので E.164形式の電話番号、先頭に 0 を加えます。

こちらも きたきたきたーーーー!! ですね。うまくいきましたか? おめでとうございます!!

今回はここまでにします。これまでAsterisk にぶら下げる内線電話をアプリケーションでまねっこしていたのですが、実際にSIP電話機をぶら下げて本当に使えるのか検証してみます。お楽しみに!

 

※ 2015/8/21 追記
本記事掲載当時は、SIP Trunk で外線発信時に、番号通知が行えないバグがございましたが、8/21 このバグの修正が完了し、番号通知ができるようになりました。本文より、番号通知が行えない旨の表記を削除いたしました。

この記事をシェア

最新記事

すべての記事へ