ラインキー 外線着信表示

提供: VoIP-Info.jp
2010年7月8日 (木) 06:35時点におけるVm-user (トーク | 投稿記録)による版 (93.179.252.13 (会話) による編集を Takahashi による版へと差し戻しました。)
移動先: 案内検索

ラインキーの使われ方のひとつに、どの外線が鳴動しているかをボタンのLEDに表示させ、ボタンを押したらその外線と接続するというものがあります。この機能をAsteriskでどうやって実現するかを考えます。
なお、このページの機能はAASTRA/9133iのBLF機能で実現しています。今のところSnomを使ってうまく動かす方法が見つかっていません。

他部署の鳴動を表示させる

例えば総務部宛にかかってきた電話を、他の部署ではLEDの点滅で確認し、これをピックアップで取る方法です。 ここで総務部(鳴動を知りたい電話)の電話機はSIPピアの2001で内線番号2001に設定してあるとします。総務部宛の外線はこの2001の電話機に着信するように設定されているものとします。
sip.confの[general]に以下を記述しておきます。
notifyringing=yes extensions.confに以下のようなhintとピックアップのためのextenを記述します。

exten => 9876,hint,SIP/2001
exten => 9876,1,Answer
exten => 9876,n,Pickup(2001)

AASTRA/9133iの場合にはプログラマブルキーの設定を[BLF]で、その値を"9876"に設定しておきます。 設定後はAsteriskの再起動の後に電話機を再起動するのをお忘れなく。

この方法を使うと、AASTRA/9133iはextenの"9876"に対してSubscribeします。すると、AsteriskはSIP/2001の鳴動を検出するとRingを通知するので、9133iのプログラマブルキーのLEDが点滅します。9133iの設定でRing&Splashを有効にしておくと一回だけベルが鳴ります。
一方、9133i側でLEDが点滅しているキーを押すと、値を9876に設定しているため、extenの9876に対して発呼します。AsteriskのextenではPickup(2001)が実行されるため、2001の電話機へのコールは9133i側に横取りされます。これで、別な部署の電話機の鳴動を知って取ることが可能になるというわけです。

応用

鳴動する電話機を部署内の1台だけにしておき、他の電話機はLEDの点滅だけで通知することができます。

欠点

他部署の電話機の内線通話の鳴動でもLEDが点滅してしまいます。
ただし、これはこれで他のピックアップを行うという意味では便利かのかもしれませんが。

参考

Snom 220を使った場合、特定のLEDの点滅表示までは行えます。ただし該当のボタンを押してもSnom 220は設定した相手に発信せず、普通の着信動作を行おうとしているようにみえます。

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

上の例では着信中の「電話機」の状態をみてピックアップするという方法を使っていますが、外線の「どれ」が鳴動していて、それを確認してから電話を取りたいという場合には上の方法は使えません。要するに鳴動する電話機が「ない」状態でも外線の着信を知る方法を探さなくてはいけません。
実はこれは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を必ず経由して行う必要があります。