BLFボタンを使用して、電話機のキューにある加入者のステータスの表示

画像 今日、タスクはもう少し複雑です。

クライアントは、短縮ダイヤルボタンを押してキューに出入りできる必要があります。 さらに、加入者がキューにいる場合、ボタンは緑色に点灯し、そうでない場合は赤色に点滅します。 IP自体がBLF機能をサポートしている場合、これを行うことができます。 機能を機能させるには、ボタンに* 12111 * 222という形式の番号を登録する必要があります。ここで、111はキュー番号、222はサブスクライバー番号です。 最も多様なGrandstream GXPシリーズでテストされました。 サーバーはElastixを搭載したLinuxであり、 Asterisk 1.6+のみが可能です。

条件の1つは、サブスクライバー番号への参照の欠如です。 キュー番号は固定されており、加入者は任意です。 アスタリスクには状態を監視するためのHINTが必要で、そうでない場合は作成します。

これには追加のスクリプトが必要になりますが、ここでは、extensions.confのマクロから始めましょう。 私たちの場合、Elastixを扱っているため、これはextensions_override_freepbx.confです。

必要なコンテキストに入力/出力ハンドラーマクロを追加します。

[app-queue-toggle] include => app-queue-toggle-custom exten => s,1(start),Answer exten => s,n,Wait(1) exten => s,n,Macro(user-callerid,) exten => s,n,Set(QUEUESTAT=LOGGEDOUT) exten => s,n,AGI(queue_devstate.agi,getqueues,${AMPUSER}) exten => s,n,AGI(qu.php, ${AMPUSER}, ${QUEUENO}) exten => s,n,NoOp(number my ${CALLERIDMY}) exten => s,n,GotoIf($["${QUEUESTAT}" = "LOGGEDOUT"]?activate) exten => s,n,GotoIf($["${QUEUESTAT}" = "LOGGEDIN"]?deactivate) exten => s,n,GotoIf($["${QUEUESTAT}" = "STATIC"]?static:end) exten => s,n(deactivate),Noop(Agent Logged out) exten => s,n,Macro(toggle-del-agent,) exten => s,n,Set(DEVICE_STATE(Custom:QueueStat${CALLBACKNUM})=RINGING) exten => s,n(logout),Playback(agent-loggedoff) exten => s,n,Macro(hangupcall,) exten => s,n(activate),Noop(Agent Logged In) exten => s,n,Macro(toggle-add-agent,) exten => s,n,Set(DEVICE_STATE(Custom:QueueStat${CALLBACKNUM})=NOT_INUSE) exten => s,n,GotoIf($["${QAGENT_UNAUTHORIZED}"="1"]?logout) exten => s,n,Playback(agent-loginok) exten => s,n,SayDigits(${CALLBACKNUM}) exten => s,n,Macro(hangupcall,) exten => s,n(static),Noop(User is a Static Agent) exten => s,n,Playback(agent-loginok) exten => s,n,Macro(hangupcall,)
      
      





そして、それを自分の番号に掛けます。ここで、必要に応じて追加されるヒントを追加します。

 [ext-queues] include => ext-queues-custom exten => _*12111*XXX,1,Set(QUEUENO=111) exten => _*12111*XXX,n,Goto(app-queue-toggle,s,start) #include /etc/asterisk/extensions_override_hints.conf
      
      





ヒントは外部ファイル/etc/asterisk/extensions_override_hints.confに保存されます。 次のようなエントリがあります。

 exten => *12111*222,hint,Custom:QS111222
      
      





/ var / lib / asterisk / agi-binフォルダーで、マクロから呼び出され、ヒントを追加するqu.phpスクリプトを作成する必要があります。

 #!/usr/bin/php <?php set_time_limit(0); require('phpagi.php'); $agi = new AGI(); $number = $agi->get_variable('AMPUSER'); $queue = $agi->get_variable('QUEUENO'); $hints_file = '/etc/asterisk/extensions_override_hints.conf'; $str = 'exten => *12'.$queue['data'].'*'.$number['data'].',hint,Custom:QS'.$queue['data'].$number['data']; $strsearch = 'QS'.$queue['data'].$number['data']; $fil = file_get_contents($hints_file); if ( !preg_match('~'.$strsearch.'~ism',$fil) ) { $fp = fopen($hints_file, "a+"); fwrite($fp, $str."\r\n"); fclose($fp); $agi->verbose('Exec reload'); system('/var/lib/asterisk/agi-bin/reload.sh'); } ?>
      
      





また、アスタリスクのダイヤルプランをオーバーロードするスクリプトも必要です。 結局のところ、ヒントを追加するだけでは十分ではなく、ダイヤルプランを「ゆがめる」必要があります。 ここに配置してreload.shを呼び出します。

 #!/bin/sh /usr/sbin/asterisk -rx 'dialplan reload'
      
      





彼に733の権利を与えます。



それだけです。電話のボタンを押してみてください。 登録すると、点灯しませんが、最初に押すと、色が緑色に変わります。 追加のアスタリスクとphpの設定は不要であり、スクリプトもelastixの動作に影響しません。



All Articles