アスタリスクのBLFキーでのDnDモード操作の表示

画像

DnDは非常に人気のある機能ですが、通常はアスタリスクに通知することなく、電話機自体でモードがオンになります。そのため、ユーザーの電話に向きを変え、呼び出しに応答する準備ができていると考えます。 アスタリスク自体でDnDモードを有効にし、DnDがアクティブになったときに電源ボタンが赤く点滅するようにするにはどうすればよいですか?

これを行うには、BLFボタンといくつかのマクロを備えた電話が必要です。 最も異なるIP電話機Grandstream GXPシリーズでテストされました。 サーバーはElastixを搭載したLinuxであり、 Asterisk 1.6+のみが可能です。



注意! 一部の電話機では、BLFキーが正しく機能するためにファームウェアの更新が必要です。



1. /etc/asterisk/extensions_override_freepbx.confにマクロを作成します。 もちろんextensions.confで接続されています。

マクロテキスト:



[ext-dnd-hints] exten => *761000,1,Goto(app-dnd-toggle,*76,1) exten => *761000,hint,Custom:DEVDND1000
      
      







このマクロでは、追跡する電話番号が登録されており、例では内線番号1000が示されています* 76は機能コードです。

同様に、DnD関数を必要とする各番号のエントリを作成する必要があります。



 [app-dnd-toggle] include => app-dnd-toggle-custom exten => *76,1,Answer exten => *76,n,Wait(1) exten => *76,n,Macro(user-callerid,) exten => *76,n,GotoIf($["${DB(DND/${AMPUSER})}" = ""]?activate:deactivate) exten => *76,n(activate),Set(DB(DND/${AMPUSER})=YES) exten => *76,n,Set(STATE=RINGING) exten => *76,n,Gosub(app-dnd-toggle,sstate,1) exten => *76,n,Playback(do-not-disturb&activated) exten => *76,n,Macro(hangupcall,) exten => *76,n(deactivate),dbDel(DND/${AMPUSER}) exten => *76,n,Set(STATE=NOT_INUSE) exten => *76,n,Gosub(app-dnd-toggle,sstate,1) exten => *76,n,Playback(do-not-disturb&de-activated) exten => *76,n,Macro(hangupcall,) exten => sstate,1,Set(DEVICE_STATE(Custom:DND${AMPUSER})=${STATE}) exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${AMPUSER}/device)}) exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return) exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)}) exten => sstate,n,Set(ITER=1) exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVDND${CUT(DEVICES,&,${ITER})})=${STATE}) exten => sstate,n,Set(ITER=$[${ITER} + 1]) exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin) exten => sstate,n(return),Return()
      
      







これはマクロ自体の状態の切り替えであり、ここで変更する必要はありません。



2.必要なコンテキストにext-dnd-hintsを含めます。次に例を示します。



 [from-internal] include => ext-dnd-hints exten => h,1,Hangup
      
      







ここではより正確です。from-internalに含まれるすべてのコンテキストを指定する必要があります。指定しないと、動作しなくなります。



3.電話機のキーを設定します。番号* 761000を登録して、BLFモードをオンにします。 BLFモードが機能しない場合は、トピックの冒頭にある斜体のテキストを読んでください。



4. CLIで、ダイヤルプランのリロードを行い、ヒントが表示されているかどうかを確認します。 通常モードでは、ビューは次のようになります。



 xtelekom*CLI> core show hint *761000 *761000@ext-dnd-hints : Custom:DEVDND1000 State:Idle Watchers 1
      
      







電話機がDnDステータスを要求しない場合、ウォッチャーは0になります。



一部の電話機では、BLFが利用できない場合(赤色に点滅)、追加する場合、番号に**を追加します。この場合、番号は*** *** 761000です。 このオプションが機能するためには、マクロがわずかに異なります。最初のマクロを繰り返すため、スポイラーの下に配置します。

別のマクロ
 [ext-dnd-hints] exten => *761000,1,Goto(app-dnd-toggle,*76,1) exten => ***761000,1,Goto(app-dnd-toggle,***76,1) exten => *761000,hint,Custom:DEVDND1000 [app-dnd-toggle] include => app-dnd-toggle-custom exten => *76,1,Answer exten => *76,n,Wait(1) exten => *76,n,Macro(user-callerid,) exten => *76,n,GotoIf($["${DB(DND/${AMPUSER})}" = ""]?activate:deactivate) exten => *76,n(activate),Set(DB(DND/${AMPUSER})=YES) exten => *76,n,Set(STATE=RINGING) exten => *76,n,Gosub(app-dnd-toggle,sstate,1) exten => *76,n,Playback(do-not-disturb&activated) exten => *76,n,Macro(hangupcall,) exten => *76,n(deactivate),dbDel(DND/${AMPUSER}) exten => *76,n,Set(STATE=NOT_INUSE) exten => *76,n,Gosub(app-dnd-toggle,sstate,1) exten => *76,n,Playback(do-not-disturb&de-activated) exten => *76,n,Macro(hangupcall,) exten => sstate,1,Set(DEVICE_STATE(Custom:DND${AMPUSER})=${STATE}) exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${AMPUSER}/device)}) exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return) exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)}) exten => sstate,n,Set(ITER=1) exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVDND${CUT(DEVICES,&,${ITER})})=${STATE}) exten => sstate,n,Set(ITER=$[${ITER} + 1]) exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin) exten => sstate,n(return),Return() exten => ***76,1,Answer exten => ***76,n,Wait(1) exten => ***76,n,Macro(user-callerid,) exten => ***76,n,GotoIf($["${DB(DND/${AMPUSER})}" = ""]?activate:deactivate) exten => ***76,n(activate),Set(DB(DND/${AMPUSER})=YES) exten => ***76,n,Set(STATE=) exten => ***76,n,Gosub(app-dnd-toggle,sstate,1) exten => ***76,n,Playback(do-not-disturb&activated) exten => ***76,n,Macro(hangupcall,) exten => ***76,n(deactivate),dbDel(DND/${AMPUSER}) exten => ***76,n,Set(STATE=UNAVAILABLE) exten => ***76,n,Gosub(app-dnd-toggle,sstate,1) exten => ***76,n,Playback(do-not-disturb&de-activated) exten => ***76,n,Macro(hangupcall,) exten => sstate,1,Set(DEVICE_STATE(Custom:DND${AMPUSER})=${STATE}) exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${AMPUSER}/device)}) exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return) exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)}) exten => sstate,n,Set(ITER=1) exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVDND${CUT(DEVICES,&,${ITER})})=${STATE}) exten => sstate,n,Set(ITER=$[${ITER} + 1]) exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin) exten => sstate,n(return),Return()
      
      









次回は、同じ方法でキューのステータスを監視する方法を説明します。



PSグランドストリームで電話の再起動が必要になる場合があります。そうしないと、ボタンが正しく機能しません。



All Articles