Инструменты пользователя

Инструменты сайта


faq:queue_dynamic_agents

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
faq:queue_dynamic_agents [2019/06/14 10:29]
Портнов Алексей создано
faq:queue_dynamic_agents [2021/02/26 13:15] (текущий)
Портнов Алексей
Строка 1: Строка 1:
 ====== Динамические агенты для очередей ====== ====== Динамические агенты для очередей ======
 +[[:​faq|Обратно,​ к основному разделу... ]]
 +
 +<note warning>​Актуально для версии **2021.1.38+**</​note>​
 Периодически возникает необходимость добавлять и удалять сотрудников из очереди. До сих пор это было возможно сделать только через web интерфейс телефонной станции. ​ Периодически возникает необходимость добавлять и удалять сотрудников из очереди. До сих пор это было возможно сделать только через web интерфейс телефонной станции. ​
  
Строка 6: Строка 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();
Строка 16: Строка 26:
  
 $extension = $agi->​get_variable("​CHANNEL(peername)",​ true); $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); $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);
Строка 21: Строка 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();​
Строка 58: Строка 69:
 $agi->​hangup();</​code>​ $agi->​hangup();</​code>​
   - Сохраните приложение   - Сохраните приложение
 +  - Наберите комбинацию 9991**2001** чтобы присоединиться к очереди 2001
 +  - Наберите комбинацию 9990**2001** чтобы отключиться от очереди 2001
 +
 +
 +[[:​faq|Обратно,​ к основному разделу... ]]
faq/queue_dynamic_agents.1560508162.txt.gz · Последние изменения: 2019/06/14 10:29 — Портнов Алексей