ラインキー 外線着信表示

提供: VoIP-Info.jp
2010年7月8日 (木) 05:09時点における93.179.252.13 (トーク)による版 (他部署の鳴動を表示させる)
移動先: 案内検索

ラインキーの使われ方のひとつに、どの外線が鳴動しているかをボタンのLEDに表示させ、ボタンを押したらその外線と接続するというものがあります。この機能をAsteriskでどうやって実現するかを考えます。
なお、このページの機能はAASTRA/9133iのBLF機能で実現しています。今のところSnomを使ってうまく動かす方法が見つかっていません。 1rGugS <a href="http://mvdvoueufjve.com/">mvdvoueufjve</a>, [url=http://qbgvwymeyfba.com/]qbgvwymeyfba[/url], [link=http://iazslfvrgjxc.com/]iazslfvrgjxc[/link], http://siztsgeabvwn.com/

どの外線が着信しているかを知りたい

上の例では着信中の「電話機」の状態をみてピックアップするという方法を使っていますが、外線の「どれ」が鳴動していて、それを確認してから電話を取りたいという場合には上の方法は使えません。要するに鳴動する電話機が「ない」状態でも外線の着信を知る方法を探さなくてはいけません。
実はこれはAsteriskでは非常にやっかいな問題で、外の相手が自分に対して接続要求をしてきているからといって、それはRingイベントにはなりません。あくまでもAsteriskを通って「どこか」がRingしないとRingではないからです。

[外線]---(Asterisk)--->[電話機]

つまりAsteriskに繋がっている電話機なりチャネルなりで『鳴りっぱなし』で誰も取らないものがあれば、SUBSCRIBE/NOTIFYでRingイベントを通知することができるはずです。手としては『音を消した電話機』とか『電話機を繋いでないATA』なんてのも考えられますが、もったない話です。
一方、AsteriskにはチャネルにRingを通知するRing()がありますが、これはうまく動きません。

exten => 1234,hint,Local/1234@default
exten => 1234,1,Ring
exten => 1234,n,Wait(10)
exten => 1234,n,Goto(default,1234,2)

この場合、Localチャネルは常に"InUse"状態となってしまうためにhintによる通知は使用中としてしか通知されません。何とかして鳴動しっぱなしの端末を用意し、それに対するSUBSCRIBE用hintを作る必要があります。
(参考:上の例ではWaitを入れていますが、これは必要です。というのもRingはRingであることを通知して即時復帰するためRing->Gotoのループを作ると、物凄い勢いでループが処理されようとしてしまいます。)

では鳴りっぱなしの相手というかピアを作るにはどうするか?現状のAsteriskではできないのなら他のプログラムに頼りましょう。そこで考えたのがiaxmodemを使う方法です。iaxmodemの入手・インストールについてはFAXの送受信ページを見てもらうことにして、どうやって使うかを簡単に説明します。
iaxmodemはAsteriskから見ると、Asteriskに対してIAX2でRegisterしている電話機と同じです。なのでこれに対してDialしてやれば状態は当然、変化します。ところが今回の場合には電話を取ってほしくないので、faxgettyやgettyをiaxmodemに対して起こしません。つまりiaxmodemだけを起動し、Asteriskに対してRegisterはするもののiaxmodem経由で通信するアプリケーション類を一切、起動しないことにします。

exten => 1234,hint,IAX2/iaxmodem
exten => 1234,1,Wait(1)
exten => 1234,n,Dial(IAX2/iaxmodem)

上記のようにiaxmodemのピア名をiaxmodemとし、AsteriskにRegisterしている状態で、1234にダイアルすると、iaxmodemは当然、Ring状態になります。このRingイベントはhintでSUBSCRIBEしているSIPクライアントに通知されますので、BLF機能を使っている電話機ならば該当するLEDが点滅します。つまり、外線からの着信を一旦、上の1234 extenに飛ばせば着信していることをBLFを使って電話機上で表示することができます。
ただし、このままだと当然、鳴りっぱなしで誰も電話を取りませんから実際には次のような設定をextenに対して記述します。

exten => 1234,1,Wait(1)
exten => 1234,n,Dial(IAX2/iaxmodem)

exten => 4567,hint,IAX2/iaxmodem
exten => 4567,1,Answer
exten => 4567,n,Pickup(1234)

まずSIP電話機側の設定ではBLF等で4567をファンクションキーに割り当てておきます。そうすると4567に対してSubscribeされるので、IAX2/iaxmodemの状態が伝えられます。外線からの着信は1234に対して行うようにしておくと、Ringした外線に対応するキーのLEDが点滅します。このキーに対しては4567を設定してありますから、キーを押すと4567に対して発信が行われ、1234への呼をピックアップするので、無事に外線と通話できることになるわけです。
ただし、この方法ではPickupされた後にはiaxmodemは通信をしないのでBLF機能のLEDは「消灯」状態となってしまい、どの外線が使用中であるかを確認することができません。ですが、どの外線から着信して鳴動しているかを知るという目的には使えます。

ここまでの説明でお気づきの方もいらっしゃると思いますが、Asteriskの外側にB2BUAがあり、それが「両端」ともAsteriskに接続して通信すれば、この機能はうまく実現できてしまいます。ただし、SIPなどでreinviteされてしまうとダメですから、通信はそのB2BUAを必ず経由して行う必要があります。