Динамические агенты для очередей
Периодически возникает необходимость добавлять и удалять сотрудников из очереди. До сих пор это было возможно сделать только через web интерфейс телефонной станции.
В текущей статье я расскажу как реализовать возможность подключиться и отключиться из очереди средствами набора служебного внутреннего номера.
- Создайте новую очередь с четырехзначным внутренним номером. К примеру 2001. (см. документацию «Очереди вызовов»)
- Опишите новое «Приложение диалплан»
- Назначьте «Номер для вызова приложения» - 999[0-1]XXXX первые три цифры можете переопределись своей комбинацией
- Тип кода - «PHP AGI скрипт»
- На вкладке «Программный код» вставьте следующее содержимое:
<?php
require_once 'globals.php';
require_once 'phpagi.php';
$agi = new AGI();
$agi->answer();
$extension = $agi->get_variable("CHANNEL(peername)", 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();
- Сохраните приложение
- Наберите комбинацию 99912001 чтобы присоединиться к очереди 2001
- Наберите комбинацию 99902001 чтобы отключиться от очереди 2001