MikoPBX
Модули
Перевод этой страницы:
MikoPBX
Модули
Это старая версия документа!
Обратно, к основному разделу...
Периодически возникает необходимость добавлять и удалять сотрудников из очереди. До сих пор это было возможно сделать только через web интерфейс телефонной станции.
В текущей статье я расскажу как реализовать возможность подключиться и отключиться из очереди средствами набора служебного внутреннего номера.
<?php require_once 'globals.php'; require_once 'phpagi.php'; $agi = new AGI(); $agi->answer(); $extension = $agi->get_variable("CHANNEL(peername)", true); if($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 = Models\Extensions::findFirst("number='{$extension}'"); if(!$res){ // Ошибка, такого внутреннего номера не существует. $agi->hangup(); } /** @var Models\CallQueues $res */ $res = Models\CallQueues::findFirst("extension='{$q_exten}'"); if(!$res){ // Ошибка, такой очереди не существует. $agi->hangup(); } /** @var Models\CallQueueMembers $res */ $a_count = Models\CallQueueMembers::maximum([ "queue='{$res->uniqid}'", 'column' => 'priority'] ) + 1; $member = Models\CallQueueMembers::findFirst("queue='{$res->uniqid}' AND extension='{$extension}'"); if($add_agent == true && !$member){ $member = new Models\CallQueueMembers(); $member->extension = $extension; $member->queue = $res->uniqid; $member->priority = $a_count; $member->save(); $result = p_Queue::queue_reload(); } if($add_agent == false && $member){ $member->delete(); $result = p_Queue::queue_reload(); } $linkedid = $agi->get_variable("CDR(linkedid)", true); $res = Models\CallDetailRecordsTmp::find("linkedid='{$linkedid}'"); foreach ($res as $data){ $data->delete(); } sleep(2); $agi->hangup();