MikoPBX
Модули
Перевод этой страницы:
MikoPBX
Модули
Обратно, к основному разделу...
Периодически возникает необходимость добавлять и удалять сотрудников из очереди. До сих пор это было возможно сделать только через web интерфейс телефонной станции.
В текущей статье я расскажу как реализовать возможность подключиться и отключиться из очереди средствами набора служебного внутреннего номера.
<?php use MikoPBX\Common\Models\CallDetailRecordsTmp; use MikoPBX\Common\Models\CallQueueMembers; use MikoPBX\Common\Models\CallQueues; use MikoPBX\Common\Models\Extensions; use MikoPBX\Core\Asterisk\AGI; use MikoPBX\Core\Asterisk\Configs\QueueConf; require_once 'Globals.php'; $agi = new AGI(); $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 = new CallQueueMembers(); $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();