Ежедневные отчеты по звонкам в Asterisk на e-mail

Ежедневные отчеты по звонкам в Asterisk на e-mail

Сегодня мы хотим предложить функционал руководителю технической поддержки. Данный функционал отправляет руководителю ежедневные отчеты по звонкам, совершенных в Asterisk. Данный отчет содержит данные по всем вызовам, которые поступили в очередь технической поддержки за день. Это может быть отдельным инструментом оценки качества и контроля работы технической поддержки.

Для начала опишем имеющийся функционал и программное обеспечение:

  1. Debian 10 – https://www.debian.org/;
  2. Asterisk 16 – https://www.asterisk.org/;
  3. PHP7;
  4. MariaBD 10;
  5. Виртуальный номер 00911 (очередь);
  6. График работы технической поддержки с 08:00 до 20:00.

Цель:

Ежедневное получение отчета супервизором по всем звонкам, поступившим в очередь технической поддержки (номер 00911). Данная группа настроена как очередь (queues) в Asterisk, а отчеты формируются и отправляются в 21:00.

Содержание

Скрипт PHP

mkdir /var/sh/reportcdr/
cd /var/sh/reportcdr/

Создаем файл reportcdr.php и помещаем в него следующий код:

#!/usr/bin/php
<?php
include '/var/sh/reportcdr/config.inc.php';
$mes='';
$today = date('Y-m-d');    //Дата
$counter = 1;

// Подключаемся к БД
$db=mysqli_connect($hostname,$username,$password,$dbName);
//mysql_select_db($dbName) or die(mysql_error());
//Формируем e-mail
$headers  = "Content-type: text/html; charset=utf8 \r\n";
$headers .= "From: Отчёт по вызовам <$owner>\r\n";
$headers .= "Reply-To: $owner\r\n";
//Выбираем из БД данные для отправки. 4000 - по какому пользователю формируем отчет
$query = "SELECT  `dst` ,  `src` ,  `realsrc`, `duration` ,  `dstchannel` ,  `calldate` ,  `disposition` , `filename`  FROM  `cdr` WHERE `calldate` >='$today 00:00:00' AND `calldate` <='$today 23:59:59' AND LENGTH(  `src` ) >3 AND LENGTH(  `dst` ) >3 AND (`dst` = '$argv[1]' OR `src` = '$argv[1]' or `realsrc`='$argv[1]');" ;
$res=mysqli_query($db,$query);
$number = mysqli_num_rows($res);
//Формируем таблицу
$mes .= '
<table style="max-width: 90%;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: 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>
<th style="padding:10px; color: #fff; max-width: 50px;background:#05477c;">Запись вызова</th>
</tr></thead><tbody>';
while ($row=mysqli_fetch_array($res)) { $mes .= '

<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;">'.date("H:i:s", mktime(0, 0,$row['duration'])).'</td>
<td style="padding:10px;   border-bottom: 1px solid #eee; text-align:center;min-width: 100px;">'.$row['src'].' ('.$row['realsrc'].')</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>
<td style="padding:10px;   text-align:center;  border-bottom: 1px solid #eee; min-width: 120px; ">'.$row['filename'].'</td>
</tr>';
$counter = $counter + 1;
  }
$mes .='</tbody></table>';
//Кому отсылаем почту
mail($argv[2], 'Все входящие и исходящие вызовы абонента '.$argv[1].' за '.$today.'', $mes, $headers);
?>

Далее создаем файл config.inc.php и помещаем в него следующий код:

<?php
$hostname = "localhost";        //Адрес БД Asterisk
$username = "asterisk_user";    //Имя пользователя БД
$password = "asterisk_password";    //Пароль пользователя
$dbName = "asteriskcdrdb";      //БД Asterisk
$owner='no-reply@pro-voip.ru';
?>

Cron

Создаем задачу в /etc/crontab и помещаем следующую строку:

00 21 * * * root php /var/sh/reportcdr/reportcdr.php 00911 support@pro-voip.ru > /dev/null

где:

  • 00 21 * * * – Время отправки отчета: ежедневно в 21:00;
  • 00911 – SIP-аккаунт, по которому формируется отчет;
  • support@pro-voip.ru – почта, на которую следует отправить отчет.

Ежедневные отчеты по звонкам в Asterisk настроены.


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