ご注意下さい
この記事は3年以上前に書かれた記事ですので、内容が古い可能性があります。
前回Asterisk1.8.2の導入をしましたが、今回は設定を見てみましょう。
-
AsteriskでAsahi-net IP電話Cとひかり電話を統合(導入)
前回に引き続きVoIPネタです。 iPhoneをひかり電話の子機にする方法はググればすぐに出てきますのでそちらをご参照ください。 (「RT-200 …続きを見る
基本的には、Asterisk 1.8 - VOIP-Info.jp Wikiの下のサンプルをカスタマイズして利用します。
まずはsip.confです。
[general] maxexpirey=3600 defaultexpirey=3600 context=default port=5060 bindaddr=0.0.0.0 srvlookup=yes allowguest=no alwaysauthreject=yes disallow=all allow=ulaw allow=alaw allow=gsm language=ja localnet=192.168.0.0/255.255.255.0 qualify=yes ;RT-200NE rt200ne=192.168.0.1 ;HIKARI-denwa register register => 3:(内線3のパスワード):0003@pr200ne-1/200 ;Asahi-Net register register => (IP電話Cの電話番号)@asahi-net.or.jp:(IP電話Cのパスワード):(IP電話Cのユーザ名)@asahi-net/(IP電話Cの電話番号) ;---- ASAHI-NETの登録 ---- [asahi-net] ;NAT externip=(グローバルIPアドレス) externhost=(DNS登録ホスト名) nat=route ;nat=never type=friend username=(IP電話Cのユーザ名) secret=(IP電話Cのパスワード) fromuser=(IP電話Cの電話番号) fromdomain=asahi-net.or.jp host=voip01.nc.asahi-net.or.jp context=outsideline dtmfmode=rfc2833 canreinvite=no progressinband=no disallow=all allow=ulaw allow=alaw insecure=port,invite callgroup=1 [asahi-net-anonymous] ;NAT externip=(グローバルIPアドレス) externhost=(DNS登録ホスト名) nat=route ;nat=never type=peer username=(IP電話Cのユーザ名) secret=(IP電話Cのパスワード) fromuser=anonymous fromdomain=localhost host=voip01.nc.asahi-net.or.jp context=outsideline dtmfmode=inband canreinvite=no progressinband=no disallow=all allow=ulaw allow=alaw insecure=port,invite callgroup=1 [pr200ne-1] type=friend username=0003 secret=(内線3のパスワード) fromuser=3 fromdomain=192.168.0.1 host=192.168.0.1 context=outsideline insecure=port,invite dtmfmode=inband canreinvite=no disallow=all allow=ulaw callgroup=1 ;---- 内線の登録 ----- ;アナログ電話機(Pioneer製) [2001] type=friend defaultuser=2001 secret=(内線2001のパスワード) canreinvite=no host=dynamic dtmfmode=auto callgroup=1 pickupgroup=1 mailbox=201 context=insideline ;iPhone4 [2002] type=friend defaultuser=2002 secret=(内線2002のパスワード) canreinvite=no host=dynamic dtmfmode=rfc2833 callgroup=1 pickupgroup=1 mailbox=202 context=insideline ;iPhone4 [2003] type=friend defaultuser=2003 secret=(内線2003のパスワード) canreinvite=no host=dynamic dtmfmode=rfc2833 callgroup=1 pickupgroup=1 mailbox=203 context=insideline ;iPhone3GS [2004] type=friend defaultuser=2004 secret=(内線2004のパスワード) canreinvite=no host=dynamic dtmfmode=rfc2833 callgroup=1 pickupgroup=1 mailbox=204 context=insideline ;N-04B(Docomo) [2005] type=friend defaultuser=2005 secret=(内線2005のパスワード) canreinvite=no host=dynamic dtmfmode=rfc2833 callgroup=1 pickupgroup=1 mailbox=205 context=insideline
ポイントをハイライトしてみました。
- 30-31行目ですが、通常このパラメータは[general]セクションに書くように説明されたサンプルが多いですが、IP電話C(050電話)とひかり電話を同居する場合にはこれがトラブルのもとになります。(電話はかけられるが音声が聞こえない状況になります。)ひかり電話の設定には関係ないパラメータとなりますので、[asahi-net]、[asahi-net-anonymous]セクションのみに記述します。
- 50-70行目は非通知のための設定です。IP電話Cは発信者番号を非通知で発信したい場合184を頭につけて発信しても話中(Busy)になってしまいます。(ひかり電話は184を付ければ非通知で発信できます)
特に56、59、60行目がポイントになります。 - 95行目ですが、RT57iのTELポートに接続した電話のDTMFモード(トーンダイヤルの方式)になります。info、rfc2833、inbandともに認識されませんでしたが、autoにしたところトーンが認識されるようになりました。
RT58i以降を利用している方は上記設定で発信は可能だけど着信が不可能という事象が発生するかもしれません。その場合は以下の記事も参考にしてみてください。
-
Yamaha RT57iからRT58iへ移行
Yamaha RT58iへの移行に関する作業手順と、その際に発生したトラブルの解決方法についてご紹介します。特にSIPに関する仕様変更があったようで発 …続きを見る
次にextensions.confでダイヤルプランの設定をします。
その前に設計ですが、
- 基本はIP電話Cを利用し、特殊ダイヤルや9発信の場合はひかり電話回線を使用する
- パターンにマッチしない電話番号には発信させない
- 都内(03)は付加しなくても自動で03を補完して発信
- 外線からの着信は電話機を全部鳴らす
というようなダイヤルプランを考えています。
[general] writeprotect=yes priorityjumping=no static=yes [globals] USEVOICEMAIL=YES SPEAKINGCLOCK=317 ECHOTEST=333 ;For Hikari Denwa MYNUMBER_ASAHI=(IP電話C電話番号) MYNUMBER_HIKARI=(ひかり電話電話番号) PHONEALL=SIP/2001&SIP/2002&SIP/2003&SIP/2004&SIP/2005 ; 電話全体 FAXALL=SIP/2001 ; RT57iで受ける HOME=2000 ; 電話受付(代表) ;着呼共通 [incoming] ; Ext. 7000 for Parking include => parkedcalls ; 各端末鳴動設定 exten => _200Z,1,GotoIf($["${USEVOICEMAIL}"="YES"]?use-vm) ;exten => _200Z,n,Dial(SIP/${EXTEN}&IAX2/${EXTEN},,tT) exten => _200Z,n,Dial(SIP/${EXTEN},,tT) exten => _200Z,n,Hangup ;exten => _200Z,n(use-vm),Dial(SIP/${EXTEN}&IAX2/${EXTEN},60,tTwW) exten => _200Z,n(use-vm),Dial(SIP/${EXTEN},60,tTwW) exten => _200Z,n,NoOp(${DIALSTATUS}) exten => _200Z,n,GotoIf($["${DIALSTATUS}"="BUSY"]?vm-rec) exten => _200Z,n,GotoIf($["${DIALSTATUS}"="NOANSWER"]?vm-rec) exten => _200Z,n,GotoIf($["${DIALSTATUS}"="CHANUNAVAIL"]?vm-rec) exten => _200Z,n,Hangup exten => _200Z,n(vm-rec),Answer() exten => _200Z,n,Wait(1) exten => _200Z,n,Voicemail(${EXTEN}) exten => _200Z,n,Hangup ; 代表鳴動 exten => ${HOME},1,Dial(${PHONEALL},15,tT) exten => ${HOME},n,Wait(1) exten => {$HOME},n,Voicemail(2001) exten => ${HOME},n,Hangup ; Speaking Clock exten => ${SPEAKINGCLOCK},1,Answer() exten => ${SPEAKINGCLOCK},n,Wait(1) exten => ${SPEAKINGCLOCK},n,Set(FutureTime=$[${EPOCH} + 5]) exten => ${SPEAKINGCLOCK},n,SayUnixTime(${FutureTime},Japan,YbdAPHM) exten => ${SPEAKINGCLOCK},n,Playback(jp-desu) exten => ${SPEAKINGCLOCK},n,playback(beep) exten => ${SPEAKINGCLOCK},n,Hangup ; Echo Test exten => ${ECHOTEST},1,Answer exten => ${ECHOTEST},n,Wait(1) exten => ${ECHOTEST},n,Playback(demo-echotest) exten => ${ECHOTEST},n,Playback(beep) exten => ${ECHOTEST},n,Echo exten => ${ECHOTEST},n,Playback(demo-echodone) exten => ${ECHOTEST},n,Playback(vm-goodbye) ; For Voicemail Recording exten => _200Z*1,1,Answer() exten => _200Z*1,n,Wait(1) exten => _200Z*1,n,Voicemail(${EXTEN:0:3}) exten => _200Z*1,n,Hangup ; For Voicemail Playback exten => 2998,1,Answer() exten => 2998,n,Wait(1) exten => 2998,n,VoicemailMain() exten => 2998,n,Hangup exten => 2999,1,Answer() exten => 2999,n,Wait(1) exten => 2999,n,VoicemailMain(${CALLERID(num)},s) exten => 2999,n,Hangup ; MeetMe exten => 3000,1,Answer() exten => 3000,n,Wait(1) exten => 3000,n,MeetMe(300,M) exten => 3000,n,Hangup ; MeetMe(dynamic) exten => 3001,1,Answer() exten => 3001,n,Wait(1) exten => 3001,n,MeetMe(,scdpM) exten => 3001,n,Hangup ;外線着信 [outsideline] include => incoming exten => ${MYNUMBER_ASAHI},1,NoOp(CallerID:CallerID(name)) exten => ${MYNUMBER_ASAHI},2,GotoIf($["${CallerID(name)}"="Anonymous"]?10:3) exten => ${MYNUMBER_ASAHI},3,Dial(${PHONEALL},15,tT) exten => ${MYNUMBER_ASAHI},4,Answer() exten => ${MYNUMBER_ASAHI},5,Wait(1) exten => ${MYNUMBER_ASAHI},6,Voicemail(2001) exten => ${MYNUMBER_ASAHI},7,Hangup exten => ${MYNUMBER_ASAHI},10,Playback(ss-noservice) exten => ${MYNUMBER_ASAHI},n,Hangup exten => ${MYNUMBER_HIKARI},1,Dial(${PHONEALL},15,tT) exten => ${MYNUMBER_HIKARI},2,Answer() exten => ${MYNUMBER_HIKARI},3,Wait(1) exten => ${MYNUMBER_HIKARI},4,Voicemail(2001) exten => ${MYNUMBER_HIKARI},n,Hangup ;内線からの発信 [insideline] include => incoming ;外線発信 ;X:0-9 Z:1-9 N:2-9 ;; 特殊番号(フリーダイヤル、ナビダイヤル) exten => _0570XXXXXX,1,Macro(callout-hikari,${EXTEN}) exten => _0120XXXXXX,1,Macro(callout-hikari,${EXTEN}) ;; 特殊番号(110,119,#7119等) exten => _1XX,1,Macro(callout-hikari,${EXTEN}) exten => _#ZXXX,1,Macro(callout-hikari,${EXTEN}) ; <- テストしていない ;; 通常発信(Asahi-netを優先利用) ;;; ただし 010 はかけさせない ;;; 00で始まる番号にもかけさせない(001,0033等) exten => _00.,1,Hangup exten => _0N0XXXXXXXX,1,Macro(callout-asahi,${EXTEN:0:11}) exten => _0ZZXXXXXXX,1,Macro(callout-asahi,${EXTEN}) ;;; 03付加なしの場合(3,4,5,6で始まる番号は東京都とみなす) exten => _[3456]XXXXXXX,1,Macro(callout-asahi,03${EXTEN}) ;;; 184のハンドリング exten => _1840N0XXXXXXXX,1,SIPAddHeader(Remote-Party-ID: <sip:${MYNUMBER_ASAHI}@asahi-net.or.jp>;privacy=full) exten => _1840N0XXXXXXXX,2,SIPAddHeader(Proxy-Require: privacy) exten => _1840N0XXXXXXXX,3,Set(CALLERID(name)=Anonymous) exten => _1840N0XXXXXXXX,4,Macro(callout-asahi-anonymous,${EXTEN:3}) exten => _1840ZZXXXXXXXX,1,SIPAddHeader(Remote-Party-ID: <sip:${MYNUMBER_ASAHI}@asahi-net.or.jp>;privacy=full) exten => _1840ZZXXXXXXXX,2,SIPAddHeader(Proxy-Require: privacy) exten => _1840ZZXXXXXXXX,3,Set(CALLERID(name)=Anonymous) exten => _1840ZZXXXXXXXX,4,Macro(callout-asahi-anonymous,${EXTEN:3}) exten => _184[3456]XXXXXXX,1,SIPAddHeader(Remote-Party-ID: <sip:${MYNUMBER_ASAHI}@asahi-net.or.jp>;privacy=full) exten => _184[3456]XXXXXXX,2,SIPAddHeader(Proxy-Require: privacy) exten => _184[3456]XXXXXXX,3,Set(CALLERID(name)=Anonymous) exten => _184[3456]XXXXXXX,4,Macro(callout-asahi-anonymous,${EXTEN:3}) ;; 9発信の場合は、ひかり電話から発信 exten => _90N0XXXXXXXX,1,Macro(callout-hikari,${EXTEN:1}) exten => _90ZZXXXXXXX,1,Macro(callout-hikari,${EXTEN:1}) exten => _9[3456]XXXXXXX,1,Macro(callout-hikari,03${EXTEN:1}) ;; 9発信の184のハンドリング exten => _91840N0XXXXXXXX,1,Macro(callout-hikari,${EXTEN:1}) exten => _91840ZZXXXXXXXX,4,Macro(callout-hikari,${EXTEN:1}) exten => _9184[3456]XXXXXXX,4,Macro(callout-hikari${EXTEN:1}) ;; 上記以外は発信させない。 exten => .,1,NoOp(${EXTEN} is forbidden.) exten => .,n,Hangup [macro-callout-hikari] exten => s,1,Dial(SIP/${ARG1}@pr200ne-1,,tT) exten => s,n,Hangup [macro-callout-asahi] exten => s,1,Dial(SIP/${ARG1}@asahi-net,,tT) exten => s,n,Hangup [macro-callout-asahi-anonymous] exten => s,1,Dial(SIP/${ARG1}@asahi-net-anonymous,,tT) exten => s,n,Hangup
例えば
exten => _0N0XXXXXXXX,1,Macro(callout-asahi,${EXTEN:0:11})
は
exten => _0N0.,1,Macro(callout-asahi,${EXTEN:0:11})
このようにも記述可能ですが、これだと桁数の指定ができないので、ソースルーティング的な電話のかけ方で海外に発信できてしまうかもしれません(知りませんが)。なので桁数は11桁になるように指定をしています。
次に短縮ダイヤルの設定です。
; ; Sample Parking configuration ; [general] parkext => 7000 ; What ext. to dial to park parkpos => 7001-7020 ; What extensions to park calls on context => parkedcalls ; Which context parked calls are in ;parkingtime => 45 ; Number of seconds a call can be parked for ; (default is 45 seconds) ;transferdigittimeout => 3 ; Number of seconds to wait between digits when transfering a call ;courtesytone = beep ; Sound file to play to the parked caller ; when someone dials a parked call ;adsipark = yes ; if you want ADSI parking announcements ;pickupexten = *8 ; Configure the pickup extension. Default is *8 [featuremap] ;通話記録 automon => *1 ;転送 blindxfer => * atxfer => #
*(内線電話)で子機間の転送を行います。例えば内線2001で電話を受けて *2003とすると、2001側の通話はすぐに切れて、内線2003が電話を受けると外線と2003が繋がります。
#(内線電話)でも子機間の転送です。この場合#2003とするとまず2001と2003で、「何某さんから電話です。」と話をした後2001が電話を切ると2003と外線が繋がります。
最後に7000です。2001 は *7000とすると自動応答で7001とか言われます。それを口頭で2003の人に「7001に繋いでください」と伝えます。2003の人は7001にコールすると外線と繋がる、という仕組みです。
ま、自宅なので転送はないですけどね…。
最後に留守電(voicemail)の設定です。
[general] format=wav49|gsm|wav serveremail=asterisk serveremail=asterisk@linux-support.net attach=yes maxsecs=300 ;minmessage=3 ;maxgreet=60 skipms=3000 maxsilence=10 silencethreshold=128 maxlogins=3 mailcmd=/usr/sbin/sendmail -t [zonemessages] eastern=America/New_York|'vm-received' Q 'digits/at' IMp central=America/Chicago|'vm-received' Q 'digits/at' IMp central24=America/Chicago|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours' japan=Japan|Q PHM 'jp-ni' 'vm-received' [default] 2001 => 1234,Demo User,(メールアドレス2001),,attach=yes|tz=japan 2002 => 1234,Demo User,(メールアドレス2002),,attach=yes|tz=japan 2003 => 1234,Demo User,(メールアドレス2003),,attach=yes|tz=japan 2004 => 1234,Demo User,(メールアドレス2004),,attach=yes|tz=japan 2005 => 1234,Demo User,(メールアドレス2005),,attach=yes|tz=japan
これで留守電が入ると指定したメールアドレスにwavファイルでメールにて通知されます。
家電を外出先でメールで受け取ることができるわけです。
(2014/2/11追記)
留守番電話の件数はデフォルトで100件という制限があるようです。100件を超えると録音せずに通話を切断してしまいます。
詳しくは以下の記事を読んでみて下さい。
Asteriskの留守電がいっぱいになってて録音できなくなってた。
-
Asteriskの留守電がいっぱいになってて録音できなくなってた。
Asteriskの留守電メッセージ件数はデフォルトでは100件です。この値の変更の仕方について解説します。続きを見る
今回の設定ではまったのは、IP電話での非通知発信と、sip.confのexternipです。(ひかり電話とIP電話の同居)
今回Voip-info.jpの掲示板でいろいろとヒントを頂きましたのでここで感謝します。
記事は以上!