外線着信時の鳴り分け 【asterisk】【lenny】【アジルフォン】 | 雲の上はいつも青空

雲の上はいつも青空

不思議な経歴をもつエンジニア!?の徒然なブログです。
お仕事関係の話が多いと思いますが、コメントとかもらえると中の人はとても喜びます(^O^)/

今回はAsteriskの設定について書いてみます。
例によって前提条件を初めに列記します。
・Linux GNU 5.0 lenny
・kernel 2.6.26-22lenny1
・asterisk 1.4.21.2~dfsg-3+lenny1
・ITSP:アジルフォン

お題はSIPをつかった外線着信の鳴り分けです。
つまり、外線番号を複数持っている場合、着信した外線番号によって動作するextensionsを使い分けるという動作の記述方法です。
※以下の方法はアジルフォンのWebサイトにはサンプルとして載っていません。
→サンプル通りに作ると、鳴り分けが出来ないので注意が必要です。

まずはsip.confですが、レジスト部分がサンプルとは違います。
※voip00.agile.ne.jpというサーバはありません。各自、お使いのサーバ名に読み替えてください。
※UIDとパスワードも同様です。

sip.confの一部を抜粋
[general]
externip=210.138.113.162      ←これは自分のグローバルIP
externhost=pbx.it-tutor.jp     ←同様に外部から参照できるサーバ名
localnet=192.168.0.0/255.255.255.0 ←これは実際にサーバがいるアドレス空間
allowguest=no
maxexpirey=3600
defaultexpirey=3600
context=extd
port=5060
bindaddr=0.0.0.0
srvlookup=yes
disallow=all
allow=ulaw
language=jp

register => 000111111@voip00.agile.ne.jp:PASSWORD:000111111@voip00.agile.ne.jp/000111111
register => 000222222@voip00.agile.ne.jp:PASSWORD:000222222@voip00.agile.ne.jp/000222222

[000111111]
type=friend
username=000111111
secret=PASSWORD
context=inbound
canreinvite=no
host=voip00.agile.ne.jp
fromdomain=voip00.agile.ne.jp
insecure=very
disallow=all
allow=ulaw

[000222222]
type=friend
username=000222222
secret=PASSWORD
context=inbound
canreinvite=no
host=voip00.agile.ne.jp
fromdomain=voip00.agile.ne.jp
insecure=very
disallow=all
allow=ulaw

実際に動かしてみるとわかるのですが、外線着信時にアジルフォンのSIPサーバからは、いつも決まったUIDしか通知されてきません。設定上は、DIDは各々違ったUIDに割り当てられているのですが、どうやらSIPトランクのような動作をしているようです。

つまり、着信時のUIDによる切り替えはうまくいきませから、UIDといっしょに通知されるextension番号を使って振り分けを行います。

extensions.confの一部を抜粋
[general]
writeprotect=no
priorityjumping=no

[inbound]
exten => 000111111,1,Set(CALLERID(num)=${CALLERID(name)})
exten => 000111111,n,NoOp(${CALLERID(num)})
exten => 000111111,n,Dial(SIP/201,,t)
exten => 000111111,n,Hangup
exten => 000222222,1,Set(CALLERID(num)=${CALLERID(name)})
exten => 000222222,n,NoOp(${CALLERID(num)})
exten => 000222222,n,Dial(SIP/202,,t)
exten => 000222222,n,Hangup

ポイントは、sip.confの[000111111]と[000222222]のcontext名を一緒にしておくこと、そして、振り分けの記述はそのcontext(上記の例では[inbound])内にすべて記述する点です。
※上記例では000111111に設定してある外線番号で着信すると内線201が鳴り、000222222に設定してある外線番号で着信すると内線202の電話が鳴ります。

外線発信は従来通り、
exten => _0.,1,Set(CALLERID(num)=000111111)
exten => _0.,n,Dial(SIP/${EXTEN}@000111111,120,T)
exten => _0.,n,Dial(SIP/${EXTEN}@000222222,120,T)

と、二行並べて書いておくと、自動的に空いてる回線から発信されます。