オープンソースであるIP-PBXのAsteriskを使用して、自宅のひかり電話と、プロバイダで契約している050番号(IP電話)をまとめ、内線毎に鳴り分ける方法を書いてみたいと思います。
筆者の環境として、
・RT-200KI(NTT東日本レンタル) ・YAMAHA RT57 ・FreeBSD6.0 + Asterisk1.2.4
を使用し、zaptel(物理的な外線接続、電話機接続)は使用せず、SIP通信だけを行わせます。
接続は、以下の通り。
{接続図}
(internet)——(ONU)—-[RT-200KI]====[YAMAHA RT57]—–ClientPCなど
※2009/9/22追記 – 上記接続図では説明が不十分のため、図解を入れました。
設定は以下の通りです。
RT-200KI(NTT東日本rental)
IPアドレスは、192.168.11.253とする。
[電話設定→IP端末1] 電話番号:024-xxx-xxxx 内線番号:3 端末属性:IP端末(音声) ユーザ名:0003 パスワード:password[電話設定→内線番号一覧] 上記の内線番号3を、「収容端末選択」にて「有効」にすること。
Asterisk1.2.6
IPアドレスは、192.168.11.2 とします。
{sip.conf} [general] language=jp context=default bindport=5060 bindaddr=0.0.0.0 srvlookup=no disallow=all allowguest=no allow=ulaw allow=alaw allow=gsm dtmfmode=inband defaultexpirey=3600 externip=(固定IPを利用している場合はIPを書くか、) externhost=(またはダイナミックDDNS名を書く) nat=never ; ひかり電話(RT-200KI)で設定した内容にてレジストする register => 3:password:0003@192.168.11.253/024938xxxx ; プロバイダのIP電話(我が家の場合はso-net)の設定内容でレジストする register => 050ABCD1234@so-net.ne.jp:PASSWORD:USERNAME@voipAA.so-net.ne.jp/050ABCD1234 [ntttel] type=friend username=0003 secret=password host=192.168.11.253 canreinvite=no dtmfmode=inband disallow=all allow=ulaw allow=alaw context=fromntttel insecure=very [iptel] type=friend username=USERNAME secret=PASSWORD host=voipAA.so-net.ne.jp fromdomain=so-net.ne.jp fromuser=050ABCD1234 canreinvite=no dtmfmode=inband disallow=all allow=ulaw allow=alaw context=fromiptel insecure=very [201] type=friend username=201 secret=password host=dynamic canreinvite=no dtmfmode=inband [202] type=friend username=202 secret=password host=dynamic canreinvite=no dtmfmode=inband
{extension.conf} [general] static=yes writeprotect=yes [globals] Clock=117 IPTEL=050xxxxyyyy NTTTEL=024xxxyyzz NTTRT=3 [fromiptel] exten => ${IPTEL},1,Ringing exten => ${IPTEL},2,Wait,5 exten => ${IPTEL},3,Answer exten => ${IPTEL},4,Wait,1 exten => ${IPTEL},5,Background(vm-enter-num-to-call) exten => ${IPTEL},6,WaitExten(5) exten => ${IPTEL},7,Goto(${IPTEL},4) include => inner exten => i,1,Wait(1) exten => i,2,Playback(pbx-invalid) exten => i,3,Goto(${IPTEL},6) [fromntttel] exten => ${NTTTEL},1,Dial(SIP/201&SIP/202,30) exten => ${NTTTEL},2,HangUp ; ; [ipout] exten => _050.,1,SetCallerId,${IPTEL} exten => _050.,2,Dial(SIP/${EXTEN}@iptel,60,r) exten => _050.,3,Congestion include => nttout [nttout] exten => _0.,1,SetCallerId,${NTTRT} exten => _0.,2,Dial(SIP/${EXTEN}@ntttel,60,r) exten => _0.,3,Congestion [dtmf-debug] exten => s,1,Ringing exten => s,2,Wait,10 exten => s,3,Answer exten => s,4,WaitExten(1) exten => _X,1,SayDigits(${EXTEN}) exten => _X,2,Goto(s,4) exten => t,1,Goto(s,4) [default] include => ipout include => nttout include => inner [inner] ; ip-in-debug exten => 111,1,Goto(fromiptel,${IPTEL},1) ; 386 dtmf test exten => 386,1,Goto(dtmf-debug,s,1) ; Speaking Clock exten => ${Clock},1,Answer() exten => ${Clock},2,Wait(1) exten => ${Clock},3,setvar(FutureTime=$[${EPOCH} + 5]) exten => ${Clock},4,SayUnixTime(${FutureTime},,PHM) exten => ${Clock},5,playback(beep) exten => ${Clock},6,Goto(${Clock},3) ; 200: Exho test exten => 200,1,Answer() exten => 200,2,Wait(1) exten => 200,3,Playback(demo-echotest) exten => 200,4,Playback(beep) exten => 200,5,Echo exten => 200,6,Playback(beep) exten => 200,7,playback(vm-goodbye) exten => 200,8,Hangup ; Local SIP Telephones 201-208 exten => 201,1,Dial(SIP/201,30,tT) exten => 201,2,Answer() exten => 201,3,Voicemail(${EXTEN}) exten => 201,4,Hangup exten => 201,102,Answer() exten => 201,103,Voicemail(${EXTEN}) exten => 201,104,Hangup exten => 202,1,Dial(SIP/202,30,tT) exten => 202,2,Answer() exten => 202,3,Voicemail(${EXTEN}) exten => 202,4,Hangup exten => 202,102,Answer() exten => 202,103,Voicemail(${EXTEN}) exten => 202,104,Hangup exten => 203,1,Dial(SIP/203,60,tT) exten => 203,2,Answer() exten => 203,3,Voicemail(${EXTEN}) exten => 203,4,Hangup exten => 203,102,Answer() exten => 203,103,Voicemail(${EXTEN}) exten => 203,104,Hangup exten => 204,1,Dial(SIP/204,60,tT) exten => 204,2,Answer() exten => 204,3,Voicemail(${EXTEN}) exten => 204,4,Hangup exten => 204,102,Answer() exten => 204,103,Voicemail(${EXTEN}) exten => 204,104,Hangup exten => 205,1,Dial(SIP/205,60,tT) exten => 205,2,Answer() exten => 205,3,Voicemail(${EXTEN}) exten => 205,4,Hangup exten => 205,102,Answer() exten => 205,103,Voicemail(${EXTEN}) exten => 205,104,Hangup ; For Voicemail Recording exten => 201*1,1,Answer() exten => 201*1,2,Voicemail(201) exten => 201*1,3,Hangup exten => 202*1,1,Answer() exten => 202*1,2,Voicemail(202) exten => 202*1,3,Hangup exten => 203*1,1,Answer() exten => 203*1,2,Voicemail(203) exten => 203*1,3,Hangup exten => 204*1,1,Answer() exten => 204*1,2,Voicemail(204) exten => 204*1,3,Hangup exten => 205*1,1,Answer() exten => 205*1,2,Voicemail(205) exten => 205*1,3,Hangup ; For Voicemail Playback exten => 298,1,Answer() exten => 298,2,VoicemailMain() exten => 298,3,Hangup exten => 299,1,Answer() exten => 299,2,VoicemailMain(s${CALLERIDNUM]) exten => 299,3,Hangup ; MeetMe exten => 300,1,Ringing exten => 300,2,Wait,5 exten => 300,3,Answer() exten => 300,4,Meetme(300|M) exten => 300,5,Hangup exten => 301,1,Ringing exten => 301,2,Wait,5 exten => 301,3,Answer() exten => 301,4,MeetMe(|scdpM) exten => 301,5,Hangup ; exten => i,1,Answer() exten => i,2,Wait(1) exten => i,3,Playback(pbx-invalid) exten => i,4,Congestion
[YAMAHA RT57]
IPは、192.168.11.1とします。
sip use on sip server 1 192.168.11.2 register udp sip:201@192.168.11.2 201 password sip server display name 1 201 sip server 2 192.168.11.2 register udp sip:202@192.168.11.2 202 password sip server display name 2 202以下は、201がアナログポート1、202がアナログポート2、というように分けてます。 analog arrive number display 1 on analog rapid call 1 off analog sip call myname 1 sip:201 analog sip call display name 1 201 analog sip call myname 2 sip:202 analog sip call display name 2 202
以上で、YAMAHA RT57に接続した電話機毎に、ひかり電話と050番号を鳴り分けさせることができます。