今回は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) |
と、二行並べて書いておくと、自動的に空いてる回線から発信されます。