Постановка и снятие операторов на паузу, массово
В данной статье рассмотрим пару способов постановки операторов на паузу по набору какого либо номера, отличие от стандартного сервисного кода заключается в том, что на паузу операторы будут ставиться массово, в зависимости от заданного списка. Список реализовать можно несколькими способами. Рассмотрим два из них: Список реализуется напрямую из диалплана. К минусам можно отнести то, что […]
В данной статье рассмотрим пару способов постановки операторов на паузу по набору какого либо номера, отличие от стандартного сервисного кода заключается в том, что на паузу операторы будут ставиться массово, в зависимости от заданного списка. Список реализовать можно несколькими способами. Рассмотрим два из них:
- Список реализуется напрямую из диалплана. К минусам можно отнести то, что его придется заводить вручную для каждого нового номера, как и прописывать все необходимые данные.
- Список реализуется через базу данных. Для его настройки желательно реализовать интерфейс управления.
Первый способ. Все довольно просто, сначала нам необходимо посмотреть, какие операторы участвуют в очередях и как они там указаны.
Соответственно внутренний номер для приложения asterisk должен быть указан в виде:
Local/101@from-queue/n
А сам диалплан будет выглядеть следующим образом:
exten => *101*,1,PauseQueueMember(,Local/101@from-queue/n)
same => n,Macro(hangupcall,)
exten => *0101*,1,UnpauseQueueMember(,Local/101@from-queue/n)
same => n,Macro(hangupcall,)
Соответственно для каждого нового оператора добавится строка с приложением Pause/Unpause.
Все просто, однако настройка довольно жесткая и если придется вносить изменения для множества операторов, это может занять много времени.
Рассмотрим второй способ:
Операторы в очередях обычно указываются в базе данных mysql (При настройке с помощью FreePBX), кроме динамических агентов, их можно найти только в базе AstDB.
Для начала нам необходимо собирать данные, статических агентов получать будем из mysql базы asterisk, таблицы queues_details. С динамическими агентами все сложнее, помимо того, что они записываются в базу AstDB, они указываются в ней в одну строку для каждой очереди. Потому для корректного отображения необходимо реализовать обработчик.
Получение списка статических операторов:
echo "<form action='' method=post>
<table border=1>
<tr>
<td colspan=3>Статические агенты:</td>
</tr>
<tr>
<td>Очередь</td>
<td>Оператор</td>
<td>Добавить</td>
</tr>";
//Статические агенты
$result = bd_bridge('asterisk','select id,data from queues_details where keyword="member";');
while ($row = mysqli_fetch_array($result))
{
$row[1]=str_replace(',0','',$row[1]);
echo "<tr>
<td>".$row[0]."</td>
<td>".$row[1]."</td>
<td><input type='checkbox' name='temp_arr[]' value='$row[0]|$row[1]' id='$row[1]' class='checkbox' /></td>
</tr>";
}
echo "
<tr>
<td colspan=3>Динамические агенты:</td>
</tr>
";
Получение списка динамических операторов:
//Динамические агенты
$db = new SQLite3('/var/lib/asterisk/astdb.sqlite3');
$resultd = $db->query("SELECT key,value FROM astdb WHERE key like '/Queue/PersistentMembers/%' ORDER BY key");
while ($row = $resultd->fetchArray())
{
$row[key]=str_replace('/Queue/PersistentMembers/','',$row[key]);
$arrayvalue=explode('|',$row[value]);
if (isset($arrayvalue)) {
foreach ($arrayvalue as $value) {
$value=substr($value,0,strpos($value,";"));
echo "<tr>
<td>".$row[key]."</td>
<td>".$value."</td>
<td><input type='checkbox' name='temp_arr[]' value='$row[key]|$value' id='$value' class='checkbox' /></td>
</tr>";
}
} else {
$row[value]=substr($row[value],0,strpos($row[value],";"));
echo "<tr>
<td>".$row[key]."</td>
<td>".$row[value]."</td>
<td><input type='checkbox' name='temp_arr[]' value='$row[key]|$row[value]' id='$row[value]' class='checkbox' /></td>
</tr>";
}
}
Далее нам необходимо заносить выбранные номера в созданную таблицу.
Создадим таблицу в базе asteriskcdrdb:
Create table operators_pause_custom (queue varchar(10) NOT NULL, operator varchar (50) NOT NULL);
Перед занесением списка в таблицу будем ее очищать:
Delete from operators_pause_custom;
Реализуем обработчик нажатия:
if(isset($_POST['add']))
{
$requestdelete = mysqli_fetch_array(bd_bridge("asteriskcdrdb","delete from operators_pause_custom;"));
foreach ($_POST[temp_arr] as $value){
$array=explode('|',$value);
echo $array[0]." - ".$array[1]." - Добавлено <br />";
$request = mysqli_fetch_array(bd_bridge("asteriskcdrdb","insert into operators_pause_custom values ('".$array[0]."','".$array[1]."');"));
}
}
Функция bd_bridge:
function bd_bridge($db,$q){
$link = @mysqli_connect('localhost','freepbxuser','freepbxpass',$db) or die("Error: ".@mysqli_connect_error($link));
$rs = @mysqli_query($link, $q) or die("Error: ".@mysqli_error($link));
if($rs){
//echo "Qwerty complete: $q <br />";
return $rs;
@mysqli_free_result($rs);
}
else{
//echo "Qwerty failure: $q <br />";
}
mysqli_close($link);
}
Таблица заполняется, теперь необходимо реализовать постановку на паузу, для этого будем использовать другой скрипт, можно использовать через agi либо через System.
<?php
include('/usr/src/test/connectdb.php');
$result = bd_bridge('asteriskcdrdb','select queue,operator from operators_pause_custom;');
while ($row = mysqli_fetch_array($result))
{
echo "queue $argv[1] member $row[1] queue $row[0]\n";
$toggle=shell_exec("/usr/sbin/asterisk -rx 'queue ".$argv[1]." member ".$row[1]." queue ".$row[0]."'");
}
?>
Соответственно при выполнении, в скрипт необходимо передавать параметр либо “pause” либо “unpause”.
Диалплан приведем к такому виду:
exten => *101*,1,System(php -f /usr/src/test/pause_toggle.php pause)
same => n,Macro(hangupcall,)
exten => *0101*,1,System(php -f /usr/src/test/pause_toggle.php unpause)
same => n,Macro(hangupcall,)
Остались вопросы?
Я - Виталий Шелест, менеджер компании 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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.