Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
faq:queue_dynamic_agents [2020/03/11 11:29] Портнов Алексей |
faq:queue_dynamic_agents [2021/02/26 13:15] (текущий) Портнов Алексей |
||
---|---|---|---|
Строка 2: | Строка 2: | ||
[[:faq|Обратно, к основному разделу... ]] | [[:faq|Обратно, к основному разделу... ]] | ||
+ | <note warning>Актуально для версии **2021.1.38+**</note> | ||
Периодически возникает необходимость добавлять и удалять сотрудников из очереди. До сих пор это было возможно сделать только через web интерфейс телефонной станции. | Периодически возникает необходимость добавлять и удалять сотрудников из очереди. До сих пор это было возможно сделать только через web интерфейс телефонной станции. | ||
Строка 8: | Строка 9: | ||
- Создайте новую очередь с четырехзначным внутренним номером. К примеру **2001**. (см. документацию "[[:call-queues|Очереди вызовов]]") | - Создайте новую очередь с четырехзначным внутренним номером. К примеру **2001**. (см. документацию "[[:call-queues|Очереди вызовов]]") | ||
- Опишите новое "**Приложение диалплан**" {{ :faq:statuses_pt1c_5.jpg |}} | - Опишите новое "**Приложение диалплан**" {{ :faq:statuses_pt1c_5.jpg |}} | ||
- | - Назначьте "**Номер для вызова приложения**" - **999[0-1]XXXX** первые три цифры можете переопределись своей комбинацией | + | - Назначьте "**Номер для вызова приложения**" - **999XXXXX** первые три цифры можете переопределись своей комбинацией |
- | - Тип кода - "**PHP AGI скрипт**" {{ :faq:q_statuses_pt1c_1.jpg |}} | + | - Тип кода - "**PHP AGI скрипт**" {{ :faq:q_dynamic_agents.png?nolink |}} |
- На вкладке "**Программный код**" вставьте следующее содержимое: <code><?php | - На вкладке "**Программный код**" вставьте следующее содержимое: <code><?php | ||
- | require_once 'globals.php'; | + | |
- | require_once 'phpagi.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 = new AGI(); | ||
Строка 18: | Строка 26: | ||
$extension = $agi->get_variable("CHANNEL(peername)", true); | $extension = $agi->get_variable("CHANNEL(peername)", true); | ||
- | if($extension = ""){ | + | if(empty($extension)){ |
$extension = $agi->get_variable("CALLERID(num)", true); | $extension = $agi->get_variable("CALLERID(num)", true); | ||
} | } | ||
- | |||
$q_exten = substr($agi->request['agi_extension'], 4); | $q_exten = substr($agi->request['agi_extension'], 4); | ||
$add_agent = substr($agi->request['agi_extension'], 3, 1); | $add_agent = substr($agi->request['agi_extension'], 3, 1); | ||
Строка 27: | Строка 34: | ||
$agi->noop("$extension $q_exten $add_agent"); | $agi->noop("$extension $q_exten $add_agent"); | ||
- | $res = Models\Extensions::findFirst("number='{$extension}'"); | + | $res = Extensions::findFirst("number='{$extension}'"); |
if(!$res){ | if(!$res){ | ||
// Ошибка, такого внутреннего номера не существует. | // Ошибка, такого внутреннего номера не существует. | ||
$agi->hangup(); | $agi->hangup(); | ||
} | } | ||
- | /** @var Models\CallQueues $res */ | + | $res = CallQueues::findFirst("extension='{$q_exten}'"); |
- | $res = Models\CallQueues::findFirst("extension='{$q_exten}'"); | + | |
if(!$res){ | if(!$res){ | ||
// Ошибка, такой очереди не существует. | // Ошибка, такой очереди не существует. | ||
$agi->hangup(); | $agi->hangup(); | ||
} | } | ||
- | /** @var Models\CallQueueMembers $res */ | + | $a_count = CallQueueMembers::maximum([ "queue='{$res->uniqid}'", 'column' => 'priority'] ) + 1; |
- | $a_count = Models\CallQueueMembers::maximum([ "queue='{$res->uniqid}'", 'column' => 'priority'] ) + 1; | + | $member = CallQueueMembers::findFirst("queue='{$res->uniqid}' AND extension='{$extension}'"); |
- | $member = Models\CallQueueMembers::findFirst("queue='{$res->uniqid}' AND extension='{$extension}'"); | + | |
- | if($add_agent == true && !$member){ | + | if($add_agent === '1' && !$member){ |
- | $member = new Models\CallQueueMembers(); | + | $member = new CallQueueMembers(); |
$member->extension = $extension; | $member->extension = $extension; | ||
$member->queue = $res->uniqid; | $member->queue = $res->uniqid; | ||
$member->priority = $a_count; | $member->priority = $a_count; | ||
$member->save(); | $member->save(); | ||
- | $result = p_Queue::queue_reload(); | + | QueueConf::queueReload(); |
} | } | ||
if($add_agent == false && $member){ | if($add_agent == false && $member){ | ||
$member->delete(); | $member->delete(); | ||
- | $result = p_Queue::queue_reload(); | + | QueueConf::queueReload(); |
} | } | ||
$linkedid = $agi->get_variable("CDR(linkedid)", true); | $linkedid = $agi->get_variable("CDR(linkedid)", true); | ||
- | $res = Models\CallDetailRecordsTmp::find("linkedid='{$linkedid}'"); | + | $res = CallDetailRecordsTmp::find("linkedid='{$linkedid}'"); |
foreach ($res as $data){ | foreach ($res as $data){ | ||
$data->delete(); | $data->delete(); |