Изменение настроек очередей по звонку
Зачастую у супервизора возникает необходимость изменить какие либо настройки очереди звонков, для более удобного распределения или иных нужд. Однако не у каждого супервизора есть доступ к интерфейсу настроек очереди. В этой статье рассмотрим реализацию управления базовыми параметрами очереди по звонку на определенный номер. Стоит упомянуть некоторые возможности управления составом очередей, во FreePBX есть возможность добавлять […]
Зачастую у супервизора возникает необходимость изменить какие либо настройки очереди звонков, для более удобного распределения или иных нужд. Однако не у каждого супервизора есть доступ к интерфейсу настроек очереди. В этой статье рассмотрим реализацию управления базовыми параметрами очереди по звонку на определенный номер.
Стоит упомянуть некоторые возможности управления составом очередей, во FreePBX есть возможность добавлять агентов с помощью сервисного кода <номер>*, либо каждый оператор может сам добавляться в список, если эта возможность не закрыта. Поэтому изменение состава очереди рассматривать не будем.
Рассмотрим список параметров из базы
![Таблица параметров очереди](https://voxlink.ru/wp-content/uploads/2019/12/1-5-1024x496.png)
Изменять через ИВР все возможные параметры не стоит, поскольку это займет много времени, поэтому будем изменять по одному параметру, опираясь на номер очереди и назначив каждому пункту свой номер.
Для примера возьмем следующий список:
1 – Максимальное время ожидания в очереди
2 – Автозаполнение очереди
3 – Запись вызовов
4 – Время звонка на оператора
5 – Стратегия вызовов (с подменю выбора стратегии)
6 – Пропуск занятых операторов
Это основные параметры, менять будем с помощью скрипта, вызывать же его можно обычным звонком на номер очереди с подстановкой нужного для изменения пункта.
В начальном диалплане, указываем номер вызова меню:
[from-internal-custom]
exten => _*0600*X,1,Set(queue_num=${EXTEN:1:-2})
same => n,Goto(queue_conf_chg,${EXTEN:-1},1)
Где между «*» номер очереди, а X нужный пункт меню.
Далее указываем в контексте:
[queue_conf_chg]
exten => 1,1,Read(time,beep,10);Запрашиваем время ожидания очереди
same => n,NoOp(${time})
same => n,System(/usr/bin/php -f /opt/queuechg.php ${EXTEN} ${queue_num} ${time})
exten => 2,1,Read(mark,beep,10);Включать ли автозаполнение, 1 – да, все остальное - нет
same => n,NoOp(${mark})
same => n,System(/usr/bin/php -f /opt/queuechg.php ${EXTEN} ${queue_num} ${mark})
exten => 3,1,Read(mark,beep,10);Запись звонков, 1 – да, все остальное - нет
same => n,NoOp(${mark})
same => n,System(/usr/bin/php -f /opt/queuechg.php ${EXTEN} ${queue_num} ${mark})
exten => 4,1,Read(time,beep,10);Время дозвона оператора
same => n,NoOp(${time})
same => n,System(/usr/bin/php -f /opt/queuechg.php ${EXTEN} ${queue_num} ${time})
exten => 5,1,Read(mark,beep,10);Стратегия очереди, из заранее выбранного списка
same => n,ExecIf($["${mark}" = "1"]?Set(strategy=ringall))
same => n,ExecIf($["${mark}" = "2"]?Set(strategy=leastrecent))
same => n,ExecIf($["${mark}" = "3"]?Set(strategy=fewestcalls))
same => n,ExecIf($["${mark}" = "4"]?Set(strategy=random))
same => n,ExecIf($["${mark}" = "5"]?Set(strategy=rrmemory))
same => n,ExecIf($["${mark}" = "6"]?Set(strategy=rrordered))
same => n,ExecIf($["${mark}" = "7"]?Set(strategy=linear))
same => n,ExecIf($["${mark}" = "8"]?Set(strategy=wrandom))
same => n,NoOp(${strategy})
same => n,System(/usr/bin/php -f /opt/queuechg.php ${EXTEN} ${queue_num} ${strategy})
exten => 6,1,Read(mark,beep,10);Пропуск занятых, 1 – да, все остальное - нет
same => n,NoOp(${mark})
same => n,System(/usr/bin/php -f /opt/queuechg.php ${EXTEN} ${queue_num} ${mark})
В каждом вызове скрипта 3 параметра, вызываемый пункт, номер очереди, данные для изменения. В скрипте необходимо реализовать отправку этих данных в базу и перечитывание конфигурации.
Также нам потребуется функция подключения и отправки запросов в базу:
function bd_bridge($db,$q){
$link = @mysqli_connect('localhost','freepbxuser','freepbxpasswd',$db) or die("Error: ".@mysqli_connect_error($link));
$rs = @mysqli_query($link, $q) or die("Error: ".@mysqli_error($link));
if($rs){
return $rs;
@mysqli_free_result($rs);
}
mysqli_close($link);
}
Обработка:
if ($argv['1'] == 1) {
$result = bd_bridge("asterisk","update queues_config set maxwait='".$argv['3']."' where extension='".$argv['2']."';");
$apply=`/var/lib/asterisk/bin/module_admin reload`;
}
if ($argv['1'] == 2) {
if ($argv['3'] == 1) {$mark="yes";} else $mark="no";
$result = bd_bridge("asterisk","update queues_details set data='".$mark."' where id='".$argv['2']."' and keyword='autofill';");
$apply=`/var/lib/asterisk/bin/module_admin reload`;
}
if ($argv['1'] == 3) {
if ($argv['3'] == 1) {$mark="force";} else $mark="dontcare";
$result = bd_bridge("asterisk","update queues_details set data='".$mark."' where id='".$argv['2']."' and keyword='recording';");
$apply=`/var/lib/asterisk/bin/module_admin reload`;
}
if ($argv['1'] == 4) {
$result = bd_bridge("asterisk","update queues_details set data='".$argv['3']."' where id='".$argv['2']."' and keyword='timeout';");
$apply=`/var/lib/asterisk/bin/module_admin reload`;
}
if ($argv['1'] == 5) {
$result = bd_bridge("asterisk","update queues_details set data='".$argv['3']."' where id='".$argv['2']."' and keyword='strategy';");
$apply=`/var/lib/asterisk/bin/module_admin reload`;
}
if ($argv['1'] == 6) {
if ($argv['3'] == 1) {$mark="1";} else $mark="0";
$result = bd_bridge("asterisk","update queues_config set cwignore='".$mark."' where extension='".$argv['2']."';");
$apply=`/var/lib/asterisk/bin/module_admin reload`;
}
![Проверка заполнения](https://voxlink.ru/wp-content/uploads/2019/12/2-5.png)
Для каждого пункта меню желательно записать свое голосовое сообщение, это можно сделать с помощью приложения Record, например:
exten => 7001,1,Answer()
same => n,Record(/var/lib/asterisk/sounds/ru/custom/maxwait.wav,,,k)
А затем менять имя файла или просто создать несколько номеров для каждого сообщения.
![Демонстрация](https://voxlink.ru/wp-content/uploads/2019/12/1-2.gif)
![](/wp-content/uploads/2019/05/MG_1241.png)
Остались вопросы?
Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.