img

Asterisk отчеты по звонкам на почту

Сегодня подробно расскажем как найти практическое применение знаниям, полученным в статье про структуру asteriskcdrdb, а именно, как сделать ежедневные отчеты о входящих звонках на почту.


Создание скрипта

Чтобы наш .php скрипт смог подключиться к базе данных, необходимо создать пользователя, с правами, которые буду позволять ему извлекать необходимую информацию. Для этого, подключимся к нашему серверу по SSH

[root@asterisk]# mysql
mysql>CREATE USER ' user'@'localhost' IDENTIFIED BY 'P@ssw0rd'; 

На данном этапе мы создали пользователя user с паролем P@ssw0rd. Далее дадим ему необходимые права:

mysql> GRANT SELECT ON asteriskcdrdb.cdr TO 'user'

Создадим файл с расширением .php, в котором мы отразим подключение к нашей базе данных. Запишем эту конструкцию так:

$hostname = "localhost";  //адрес хоста. Скрипт мы будем запускать на той же машине, на которой находится БД asteriskcdrdb;
$username = "user"; //отражаем пользователя
$password = "P@ssw0rd"; //пароль для созданного нами пользователя
$dbName = "asteriskcdrdb"; //база данных, в которой хранятся необходимые нам данные
$today = date('y-m-d'); // сегодняшняя дата в формате 2016-03-25

$counter = 1; // счетчик

mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");  // соединиться к БД 

mysql_select_db($dbName) or die(mysql_error()); //выбрать базу данных. Если произойдет ошибка - вывести ее 

$headers  = "; charset=windows-1251 
"; //заголовок для письма
$headers .= "From: Мерион Нетворкс <info@merionet.ru>
"; 

$headers .= "Reply-To: info@merionet.ru
";

Предположим, что все входящие звонки приходят на номер секретаря – 100. Так же мы знаем, что при звонке из города, мы видим номер звонящего, который содержит в себе больше 3 символов (пусть у нас используется трехзначная внутренняя нумерация). Наша задача сводится к формулировке запроса к таблице cdr. Добавляем к нашему .php файлу:

$query = "SELECT  `dst` ,  `src` ,  `duration` ,  `dstchannel` ,  `calldate` ,  `disposition` FROM  `cdr` WHERE `calldate` >='$today 00:00:00' AND `calldate` <='$today 23:59:59' AND LENGTH(  `src` ) >3 AND `dst` = '100';"  ;
$res=mysql_query($query) or die(mysql_error()); // Выполнить запрос. Если произойдет ошибка - вывести ее. 
$number = mysql_num_rows($res); // Как много нашлось строк 

У нас почти все готово. Осталось только обработать данные на выходе. Для этого, нам понадобится следующая конструкция:

//формируем шапку нашей таблицы со значениями
$mes .= ' 
table style="max-width: 575px;border-bottom:none; margin: 0 auto;border-spacing: inherit;">
thead>
tr style="border-bottom: 2px solid #05477c;">
th style="padding:10px; color: #fff; max-width: 150px;background:#05477c;">Порядковый номер</th>
th style="padding:10px; color: #fff; max-width: 150px;background:#05477c;">Дата</th>
th style="padding:10px; color: #fff; max-width: 100px;background:#05477c;">От кого</th>
th style="padding:10px; color: #fff; max-width: 45px;background:#05477c;">Кому</th>
th style="padding:10px; color: #fff; max-width: 45px;background:#05477c;">Статус звонка</th>
/tr>
/thead>';
//перебираем значения ассоциативного массива.  Число элементов данного массива равно числу строк на выходе sql запроса
  while ($row=mysql_fetch_array($res)) { $mes .= '
tbody>
tr style="width: 100px;">
td style="padding:10px;   border-bottom: 1px solid #eee; text-align:center;">'.$counter.'</td>
td style="padding:10px;   border-bottom: 1px solid #eee; text-align:center;min-width: 100px;">'. $row['calldate'].'</td>
td style="padding:10px;   border-bottom: 1px solid #eee; text-align:center;min-width: 100px;">'. $row['src'].'</td>
td style="padding:10px;  border-bottom: 1px solid #eee; text-align:center;">'.$row['dst'].'</td>
td style="padding:10px;  text-align:center;  border-bottom: 1px solid #eee; min-width: 120px; ">'.$row['disposition'].'</td>
/tr>';	
$counter = $counter + 1;
  }

Теперь, мы храним в переменной $mes html таблицу, которая готова к отправке на почту. Добавим в конец скрипта:

mail("info@merionet.ru", 'Все входящие за '.$today.'', $mes, $headers);
ВАЖНО! Если вы используете кириллические символы, установите кодировку .php файла на Кириллицу (windows-1251)

Итак, готово. Давайте посмотрим что приходит нам на почту:

Asterisk отчеты на почту

Работает. Давайте сделаем ежедневное задание на отработку этого скрипта через cron. Сделаем, например, ежедневно, в 17:30, когда рабочий день подходит к концу:

30 17 * * * php /home/admin/mail_report.php

Не забудьте в начала скрипта поставить открывающий тэг php, а в конце скрипта закрывающий.

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
DevOps
Скидка 25%
DevOps-инженер с нуля
Научитесь использовать инструменты и методы DevOps для автоматизации тестирования, сборки и развертывания кода, управления инфраструктурой и ускорения процесса доставки продуктов в продакшн. Станьте желанным специалистом в IT-индустрии и претендуйте на работу с высокой заработной платой.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
Привет, дорогой читатель! В повседневной работе зачастую не хватает автоматизации. Поэтому, мы решили создать калькулятор инстал
img
Мы подумали, а почему бы не консолидировать все знания по Cisco VoIP продуктам и их настройке в единый документ? Добавить в них
img
Привет! Для удобства, мы структурировали все материалы по графическому интерфейсу FreePBX в нашей базе знаний в единый файл. Сам
img
Вам, как сетевому инженеру, крайне важно разбираться в том, каким образом вызовы VoIP влияют на пропускную способность канала в
img
В этой статье расскажем как отправлять различные СМС сообщения пользователям, позвонившим в контакт-центр Октелл и запросившим т
img
Всем современным кампаниям, производящим товары и оказывающим услуги, необходимо иметь специалистов, работающих с потенциальными
ЗИМНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59