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

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

ここまでお読み頂いたみなさんは、きっと既にSIP環境の面白さにどっぷりと浸かり、Amazon で電話機を 20台・30台とお求めになり、自宅のいたるところに内線を設置、エキサイトなSIPトランクライフをお送りのこととお喜び申し上げます。

このシーズンもいよいよ大詰めで御座います。今回は以下のことを実現します。

・Twilio番号A への着信時は内線 412601を鳴らし、Twilio番号B への着信時は内線 412603 を鳴らす
・各電話機から 0発信したら Twilio番号A で外線発信、1発信したら Twilio番号B で外線発信

図で全体を把握しておきましょう、こういうことになります。
zerotwilio_3-7-1.jpg

図まで書いたはいいものの、本当にできるんでしょうか? (ノ∀`) 実は、勢いで言ってみただけなんです。なんとなく、Asteriskの設定ファイルを作ってきて多分できるんじゃないかなぁと。書きながら検証するという、徹底的に「みんなと一緒にゼロからやる」スタイルでお送りしているゆえ、うまくいくかどうか正直分からない。が、やってみましょう。

 

Twilio側の設定・新しい050番号をSIPトランクに追加

 

これまでに割り当てていた050番号とは違う、新しい050番号を追加してみましょう。管理画面の電話番号メニューから適当に1つ、050番号をご取得ください。そして、左上部プルダウン「エラスティックSIPトランキング」メニューから、CONFIGURE → これまでに構築してきたSIPトランク名をクリックし、設定に入ります。そして、トランクタブの中にある「電話番号」タブを選びます。この画面ですね。先ほど、新しいTwilio電話番号をご取得いただいているので、Add a Number to this Trunk を選びます。

zerotwilio_3-7-2.jpg

取得済みの電話番号リストがでてきますので、先ほど取得した電話番号を選択しましょう。私は、せっかくなので 0800番号を使ってみます。すでに Clientのテストで割り当てられていますが、SIPトランクに設定すれば、上書きして、このSIPトランクに割当たります。

zerotwilio_3-7-3.jpg

選択すると元の画面に戻り、今選んだ番号がリストに加わります。忘れずに画面下にある赤い「保存」ボタンを押しましょう。これで Twilio側の設定は終わりのはず・・・

 

Asteriskの設定

やるべきことは、以下の通りのはずです。

・sip.conf に今回追加したTwilio電話番号用のコンテキストを追加
・extensions.conf に 1発信用のダイヤルプランを追加
・extensions.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

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

[TwilioSipTrunk]
type=peer
secret=*****
username=masa
host=*****.pstn.twilio.com
dtmfmode=rfc2833
canreinvite=no
disallow=all
allow=ulaw
insecure=port,invite
fromuser=+8150XXXXXXXX
fromdomain=*****.pstn.twilio.com

[TwilioSipTrunk2]
type=peer
secret=***** →上のと同じ
username=masa →上のと同じ
host=*****.pstn.twilio.com →上のと同じ
dtmfmode=rfc2833
canreinvite=no
disallow=all
allow=ulaw
insecure=port,invite
fromuser=+81800XXXXXXXX → 今回追加したTwilio電話番号
fromdomain=*****.pstn.twilio.com → 上のと同じ

 

前回までに [TwilioSipTrunk] というコンテキストを作ってあるので、まるごとコピーし、[TwilioSipTrunk2] というコンテキストにしました。変える部分は fromuser だけです。ここに今回取得した新しいTwilio電話番号を仕込みます。私は今回 0800番号を使うのでこのようになりました。

 

/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 => 412603,1,Dial(SIP/412603,30,r)
exten => 412603,2,Hangup()

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

exten => +81800XXXXXXXX,1,Log(NOTICE, Incoming call from ${CALLERID(all)})
exten => +81800XXXXXXXX,n,Dial(SIP/412603)
exten => +81800XXXXXXXX,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()

exten => _1.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:1} through Twilio Provider)
exten => _1.,n,Dial(SIP/TwilioSipTrunk2/+${EXTEN:1},60)
exten => _1.,n,Playtones(congestion)
exten => _1.,n,Hangup()

 

SIP/412601 と SIP/412603 の部分に注目。まず、先に仕込んである +8150 での外線着信先を 412603 から 412601 に戻しておきます。前回、Panasonicの電話機に 412603 を割り当て、外線着信先をこちらに変更したので 412603 になっていました。今回は、新しく取得したTwilio番号での外線着信先をPanasonicの電話機にするので、+8150 はアプリ(412601)での着信にし、+81800 を 412603 にします。

そして、_1. で始まる設定が4行。前回までに _0. という「0発信用」のダイヤルプランが作られているので、これをまるごとコピーし、_1. にします。そして、Dialで渡る先は、先ほど追加した TwilioSipTrunk2 のコンテキストです。

さあ、これで準備完了のはず!!
/etc/init.d/asterisk restart でAsteriskを再起動しましょう。ドキドキしますね・・・

まずは、Panasonicの電話機から外線発信をしてみます。「0発信なら前回までに設定してあるTwilio電話番号を通知して発信」「1発信なら今回取得した新しいTwilio電話番号を通知して発信」になるはずです。

電話機でこのようにダイヤルします。かける先が 03-9999-8765 なら、
081399998765
181399998765

おお!!!!! うまくいきましたね、0発信なら 050番号でかかってきましたし、1発信なら 0800番号でかかってきました。できるもんだなあ!! せっかくなので、前回までに設定してあるIPフォンアプリからも同じようにテストしてみましょう。こちらも上手くいったはずです。

続いて、着信をテストします。一般電話からかけてみましょう。前回までに取得しているTwilio電話番号が 050-XXXX-XXXX で、今回取得したのが 0800-XXX-XXXX であれば、携帯電話や固定電話から以下のようにダイヤルします。

050XXXXXXXX
0800XXXXXXX

050側が 412601の内線、0800側が 412603 の内線に着呼するはずですよ。

・・・ あ、あれ・・・(;-ω-)
鳴らない・・・ おかしいな・・・あれれ・・・

こういうときは、Asteriskのデバッグモードというものがあるらしいので、これを見てみます。Asteriskのサーバーにログインし、プロンプトに asterisk -vvvr と入力してエンターを押してください。

ホスト名*CLI>

というプロンプトが出てくるはずです。ここに色々Asteriskのコマンドを入力して操作とか出来るらしいですが、今は全然分からないので、何もしません。何もしないでも、Asterisk にアクションが発生するとここにログが出てきます。眺めてればよいらしいです。この状態のまま、もう一度、Panasonic から 0800番号にかけてみます。何やらツラツラとログが出てきました。

== Using SIP RTP CoS mark 5
-- Executing [+81800XXXXXXX@default:1] Log("SIP/sip.jp1.twilio.com-00000004", "NOTICE, Incoming call from "" <+813XXXXXXX>") in new stack
[Jul 2 19:14:36] NOTICE[27627]: Ext. +81800XXXXXXX:1 @ default: Incoming call from "" <+813XXXXXXX>
-- Executing [+81800XXXXXXX@default:2] Dial("SIP/sip.jp1.twilio.com-00000004", "SIP/412603") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/412603
== Using SIP RTP CoS mark 5
-- Executing [+81800XXXXXXX@default:1] Log("SIP/sip.jp1.twilio.com-00000006", "NOTICE, Incoming call from "" <+813XXXXXXX>") in new stack
[Jul 2 19:14:40] NOTICE[27628]: Ext. +81800XXXXXXX:1 @ default: Incoming call from "" <+813XXXXXXX>
-- Executing [+81800XXXXXXX@default:2] Dial("SIP/sip.jp1.twilio.com-00000006", "SIP/412603") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/412603
-- SIP/412603-00000001 is circuit-busy
== Everyone is busy/congested at this time (1:0/1/0)
-- Executing [+81800XXXXXXX@default:3] Hangup("SIP/sip.jp1.twilio.com-00000000", "") in new stack
== Spawn extension (default, +81800XXXXXXX, 3) exited non-zero on 'SIP/sip.jp1.twilio.com-00000000'

 

やっぱり鳴らないなあ。ログもよくわからない、けど extensions.conf に書いた命令キーワードがあるので何となく流れは分かる。ん? circuit-busy ってあるぞ。受話器はちゃんとおいてあるのにな。てか、「エブリワン・イズ・ビジー」ゆうてますやん(ノ∀`) なんでだ・・・

エブリワン、みんなスタンバイ状態ですよヽ(`Д´#)ノ

よくわからないので、Panasonicの電話機を再起動してみます。電話機に「ネットワークリスタート」というメニューがあったのでとりあえずやってみました。一度電源が切れてほどなく立ち上がって来ました。登録状態も「登録完了」と。

もう一度、一般電話から 0800番号にかけてみます。

おおおおおおおおおおおおおおお!! きたきたきた。かかってきましたよ!! よかったああ。出来るもんなんだなあ。ついでなので、ちゃんと電話番号別に鳴る内線が分かれるのかも確認しておきます。最初に登録した 050番号にかけてみます。

おお!! ちゃんと、412601 を割り当てたパソコン側のアプリが鳴りました。すごーーーい!!^^
こうして、着信する外線番号ごとに鳴らす内線を分けたり、0発信・1発信のように、かける先の電話番号のプレフィックスを指定することで通知する電話番号を分けて発信したりと、なかなか柔軟に電話システムを構築することが出来そうです。これは Asterisk をもっと研究して、色々いじったらかなり楽しそうです。

はい、というわけで7回に渡りSIPトランクを触ってきました。この回を書き始めるときは、本当に心の底からどうなるかと思いましたが、さすがTwilio、こんな感じのノリでお試しスタートしても出来てしまうもんなんですね。

すでにみなさんのオフィスにPBXがあってSIPフォンの環境があったら、ぜひSIPトランクを検討してみてください。海外への通話料もかなりお安く提供しているばかりか、エリアに応じて最適なルーティングをすることもできます。

それまでに、ぜひSIPトランクと、IP-PBXについて研究を深めていってください。そして、Asterisk のすごい使い方、うまいやり方、テクニック等、みなさんのブログで紹介して私に教えてください(ノ∀`)

このシーズン、SIPトランクのお話はこの回でメインディッシュ終了です。さて、ここまで読んで頂き、前の回で「後で説明します」とか「それは後ほど」とかほったらかしたことがいくつかあるのを覚えていますか? 次回はそれらについて、ネットワークエンジニアとして解説いたします。セキュリティに関する大事な話もしますので是非、読み忘れることがないようにしてください。

シーズン3 は次回が最終回です。お楽しみに!

この記事をシェア


最新記事

すべての記事へ