Отчёты по звонкам в Asterisk на E-mail

Отчёты по звонкам в Asterisk на E-mail

Доброго времени суток, уважаемые читатели!

Почти в каждой организации одним из инструментов контроля выполнения работы персоналом служит некий отчет о выполненной работе за указанный срок. Если ваша деятельность не связана с работой “на телефоне” проблем с составлением отчета возникнуть не должно. А как же быть если ваши прямые обязанности связаны с приемом и обработкой входящих вызовов, с обзвоном заказчиков? Как автоматизировать процесс составления отчетов по входящим вызовам? В данной статье мы расскажем как выполнить Asterisk CDR report e-mail или как выполнить отправку CDR отчетов на e-mail.

Подготовка

Наш скрипт будет работать на PHP и будет подключаться к БД Asterisk (MySQL или PostgreSQL). Для обеспечения безопасности хранения CDR данных, мы будем использовать отдельного пользователя. У пользователя будут ограниченные права доступа к БД Asterisk.

Создаем пользователя и даем права

Для создания можно использовать графическую оболочку управления СУБД или через наш любимый терминал:

mysql -uroot -p
mysql> CREATE USER 'reportuser'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT SELECT ON asteriskcdrdb.cdr TO 'reportuser'@'localhost';
mysql> FLUSH PRIVILEGES;

Создадим файл reportcdr.php с содержимым:

#!/usr/bin/php
<?php
$hostname = "localhost";   //Адрес БД Asterisk
$username = "asterisk-database_user";  //Имя пользователя
$password = "asterisk-database_userpassword";    //Пароль пользователя
$dbName = "asteriskcdrdb"; //БД Asterisk
$today = date('Y-m-d');    //Дата
$counter = 1;
// Подключаемся к БД
mysql_connect($hostname,$username,$password) or die("Не могу подключиться к БД");
mysql_select_db($dbName) or die(mysql_error());
//Формируем e-mail
$headers  = "Content-type: text/html; charset=utf8 \r\n";
$headers .= "From: Отчёт по вызовам <notify@voip-server.ru>\r\n";
$headers .= "Reply-To: notify@voip-server.ru\r\n";
//Выбираем из БД данные для отправки. 4000 - по какому пользователю формируем отчет
$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` = '77755';" ;
$res=mysql_query($query) or die(mysql_error());
$number = mysql_num_rows($res);
//Формируем таблицу
$mes .= '
<table style="max-width: 500px;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: 50px;background:#05477c;">Порядковый номер</th>
<th style="padding:10px; color: #fff; max-width: 250px;background:#05477c;">Дата</th>
<th style="padding:10px; color: #fff; max-width: 100px;background:#05477c;">Кто звонил</th>
<th style="padding:10px; color: #fff; max-width: 50px;background:#05477c;">Кому</th>
<th style="padding:10px; color: #fff; max-width: 50px;background:#05477c;">Статус звонка</th>
</tr></thead>';
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></tbody></table>';
$counter = $counter + 1;
  }
//Кому отсылаем почту
mail("director@voip-server.ru", 'Все входящие вызовы за '.$today.'', $mes, $headers);
?>

Помещаем скрипт в задачи CRON:

00 20 * * * php /home/admin/reportcdr.php

На этом все!


Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.