Периодически возникает необходимость добавлять и удалять сотрудников из очереди. До сих пор это было возможно сделать только через web интерфейс телефонной станции.
В текущей статье я расскажу как реализовать возможность подключиться и отключиться из очереди средствами набора служебного внутреннего номера.
Создайте новую очередь с четырехзначным внутренним номером. К примеру 2001. (см. документацию «Очереди вызовов»)
Опишите новое «Приложение диалпланов»
Назначьте «Номер для вызова приложения» - 999XXXXX первые три цифры можете переопределить своей комбинацией
Тип кода - «PHP AGI скрипт»
На вкладке «Программный код» вставьте следующее содержимое:
<?phpuseMikoPBX\Common\Models\CallDetailRecordsTmp;useMikoPBX\Common\Models\CallQueueMembers;useMikoPBX\Common\Models\CallQueues;useMikoPBX\Common\Models\Extensions;useMikoPBX\Core\Asterisk\AGI;useMikoPBX\Core\Asterisk\Configs\QueueConf;require_once'Globals.php';$agi =newAGI();$agi->answer();$extension = $agi->get_variable("CHANNEL(peername)",true);if(empty($extension)){ $extension = $agi->get_variable("CALLERID(num)",true);}$q_exten =substr($agi->request['agi_extension'],4);$add_agent =substr($agi->request['agi_extension'],3,1);$agi->noop("$extension $q_exten $add_agent");$res =Extensions::findFirst("number='{$extension}'");if(!$res){// Ошибка, такого внутреннего номера не существует. $agi->hangup();}$res =CallQueues::findFirst("extension='{$q_exten}'");if(!$res){// Ошибка, такой очереди не существует. $agi->hangup();}$a_count =CallQueueMembers::maximum([ "queue='{$res->uniqid}'",'column'=>'priority'] )+1;$member =CallQueueMembers::findFirst("queue='{$res->uniqid}' AND extension='{$extension}'");if($add_agent ==='1'&&!$member){ $member =newCallQueueMembers(); $member->extension = $extension; $member->queue = $res->uniqid; $member->priority = $a_count; $member->save();QueueConf::queueReload();}if($add_agent ==false&& $member){ $member->delete();QueueConf::queueReload();}$linkedid = $agi->get_variable("CDR(linkedid)",true);$res =CallDetailRecordsTmp::find("linkedid='{$linkedid}'");foreach ($res as $data){ $data->delete();}sleep(2);$agi->hangup();
Нажмите "Сохранить"
Приложение готово!
Наберите комбинацию 99912001 чтобы присоединиться к очереди 2001
Наберите комбинацию 99902001 чтобы отключиться от очереди 2001