Александр Мисюрин
06.08.2020
19692

Изменение статусов операторов в очереди через AMI, посредством мониторинга базы данных

В данной статье мы будем рассматривать вариант смены статусов операторов в очереди (пауза/свободен), в зависимости от записей в базе данных. Можно автоматизировать смену статусо операторов, например, по сменам или в зависимости от каких либо событий, отраженных в базе данных. Т.е. можно автоматизировать рабочее и нерабочее время операторов по сменам или в зависимости от каких-то событий отраженных […]

Изменение статусов операторов в очереди через AMI

В данной статье мы будем рассматривать вариант смены статусов операторов в очереди (пауза/свободен), в зависимости от записей в базе данных. Можно автоматизировать смену статусо операторов, например, по сменам или в зависимости от каких либо событий, отраженных в базе данных.

Т.е. можно автоматизировать рабочее и нерабочее время операторов по сменам или в зависимости от каких-то событий отраженных в БД.

Тестирование проводилось на системе: CentOS 6.9, FreePBX 13, Asterisk 13.26

Для примера, смену статусов организуем по расписанию, с проверкой каждый час.

Соответственно в базу данных необходимо будет внести таблицу с полями: номер, время работы, очередь, пояснение. Скриптом будем получать данные и изменять статусы.

Для подключения как к базе данных, так и к AMI необходимо создать пользователя с нужными правами (а для базы данных еще и создать базу с таблицей). В данном случае для AMI необходимы будут права на запись для команд, а для базы соответственно на запись и чтение в/из созданной таблицы.

При желании можно использовать базу asteriskcdrdb, поместив туда таблицу, если будет в дальнейшем необходимо редактировать ее из Asterisk.
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, двойной переход означает завершение Action.

После проверки можем отправлять action в AMI с помощью ранее созданной функции:

ami_request($action); или echo ami_request($action);
Тестирование

Далее скрипт можно поместить в крон на выполнение, например, каждый час:

0 */1 * * * /usr/src/test/chmstat.php

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.