Изменение статусов операторов в очереди через AMI, посредством мониторинга базы данных
В данной статье мы будем рассматривать вариант смены статусов операторов в очереди (пауза/свободен), в зависимости от записей в базе данных. Можно автоматизировать смену статусо операторов, например, по сменам или в зависимости от каких либо событий, отраженных в базе данных. Т.е. можно автоматизировать рабочее и нерабочее время операторов по сменам или в зависимости от каких-то событий отраженных […]
В данной статье мы будем рассматривать вариант смены статусов операторов в очереди (пауза/свободен), в зависимости от записей в базе данных. Можно автоматизировать смену статусо операторов, например, по сменам или в зависимости от каких либо событий, отраженных в базе данных.
Т.е. можно автоматизировать рабочее и нерабочее время операторов по сменам или в зависимости от каких-то событий отраженных в БД.
Для примера, смену статусов организуем по расписанию, с проверкой каждый час.
Соответственно в базу данных необходимо будет внести таблицу с полями: номер, время работы, очередь, пояснение. Скриптом будем получать данные и изменять статусы.
Для подключения как к базе данных, так и к AMI необходимо создать пользователя с нужными правами (а для базы данных еще и создать базу с таблицей). В данном случае для AMI необходимы будут права на запись для команд, а для базы соответственно на запись и чтение в/из созданной таблицы.
create table chmstatus (
num varchar(8) NOT NULL PRIMARY KEY,
date varchar(20),
descr varchar(50)
);
GRANT ALL PRIVILEGES on asteriskcdrdb.chmstatus to 'chmuser'@'localhost' IDENTIFIED BY 'chmpass';
FLUSH PRIVILEGES;
Заносить данные будем вручную, однако при необходимости каждый может создать себе простую веб-форму для записи в базу по аналогии со статьей.
В скрипте необходимо получить текущее время и сравнить его со временем из базы, при совпадении или наличии времени в нужном отрезке, изменяем статус на паузу, при выходе из пула соответственно паузу снимаем.
Для запросов в базу и AMI необходимы функции, опишем их в начале скрипта:
#!/usr/bin/php –q
<?
// доступы
define('AMI_HOST','localhost');
define('AMI_PORT','5038');
define('AMI_USER','');
define('AMI_PASS','');
define('BD_HOST','localhost');
define('BD_USER','chmuser');
define('BD_PASS','chmpass');
// AMI подключение
function ami_request($ingect){
$answer=false;
if ($socket = fsockopen(AMI_HOST, AMI_PORT, $ac_err_num, $ac_err_msg, 1)){
stream_set_timeout($socket, 1);
$action = "Action: login\r\n";
$action .= "Username: ".AMI_USER."\r\n";
$action .= "Secret: ".AMI_PASS."\r\n\r\n";
$action .= $ingect;
$action .= "Action: Logoff\r\n\r\n";
fwrite($socket,$action);
sleep(1);
$answer = fread($socket,8291);
fclose($socket);
}
return $answer;
}
// MYSQL подключение
function bd_bridge($dataBase,$query){
$link = @mysqli_connect(BD_HOST,BD_USER,BD_PASS,$dataBase) or die("Error: ".mysqli_connect_error($link));
$sqlTable = @mysqli_query($link, $query) or die("Error: ".mysqli_error($link));
$result = [];
while($row = @mysqli_fetch_assoc($sqlTable)) $result[] = $row;
@mysqli_close($link);
return $result;
}
Далее запрашиваем время системы в нужном нам формате:
$date=date("H:i");
И данные из базы:
$arr=bd_bridge("asteriskcdrdb","select * from chmstatus");
После получения данных, необходимо открыть массив данных в цикле, для обработки:
$action="";
foreach ($arr as $value) {
$datearr=explode('-',$value['date']);
$time1=strtotime($datearr[0]);
$time2=strtotime($datearr[1]);
$time=strtotime($date);
$num=$value['num'];
$queue=$value['queue'];
$descr=$value['descr'];
//проверяем время и выставляем значение паузы
if (($time>=$time1) and ($time<=$time2)) {
echo $stat='true';
} else $stat='false';
$action.="Action: QueuePause\r\n";//формируем action для постановки/снятия паузы
$action.="Interface: Local/$num@from-queue/n\r\n";
$action.="Paused: $stat\r\n";
$action.="Queue: $queue\r\n\r\n";
}
После формирования Action его лучше вывести на экран, чтобы проверить:
echo $action;
После проверки можем отправлять action в AMI с помощью ранее созданной функции:
ami_request($action); или echo ami_request($action);
Далее скрипт можно поместить в крон на выполнение, например, каждый час:
0 */1 * * * /usr/src/test/chmstat.php
Остались вопросы?
Я - Виталий Шелест, менеджер компании 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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.