広告・Googleアドセンス728px

Article(記事)

AsteriskでAsahi-net IP電話Cとひかり電話を統合(設定)

投稿日:2011年1月19日 更新日:

ご注意ください
この記事は2年以上前に書かれたものですので、内容が古い可能性があります。

前回Asterisk1.8.2の導入をしましたが、今回は設定を見てみましょう。

基本的には、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へ移行 | kamata-net.com

次に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桁になるように指定をしています。

次に短縮ダイヤルの設定です。features.conf

;
; 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の留守電がいっぱいになってて録音できなくなってた。

今回の設定ではまったのは、IP電話での非通知発信と、sip.confのexternipです。(ひかり電話とIP電話の同居)

今回Voip-info.jpの掲示板でいろいろとヒントを頂きましたのでここで感謝します。

(追伸)
いろいろと質問されてもたぶんわかりません…。

この記事は役に立ちましたか?評価をお願いいたします。
[合計: 1 平均: 1]

広告336px

広告336px

-Article(記事)
-Asterisk, CentOS, Linux, PR-200NE, VoIP, Yamaha RT57i

Copyright© 蒲田ネット , 2017 AllRights Reserved.