The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"FreePBX отправка отчётов CDR на почту."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (VoIP / Linux)
Изначальное сообщение [ Отслеживать ]

"FreePBX отправка отчётов CDR на почту."  +/
Сообщение от gor7740 (ok), 20-Фев-20, 09:49 
Уважаемые специалисты! Подскажите пожалуйста! Как можно организовать автоматическую отправку на почту данных отчёта «Asternic CDR Reports» и «CDR Reports» из FreePBX?
С почтой понятно – можно занести отправку через планировщика Cron, но до этого отчёт нужно выгрузить. В этих отчётах есть ручная выгрузка – но это очень неудобно.
Возможно стоит копать в SQL?

Буду очень благодарен за ответ!

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от gor7740 (ok), 20-Фев-20, 11:09   +/
> Уважаемые специалисты! Подскажите пожалуйста! Как можно организовать автоматическую
> отправку на почту данных отчёта «Asternic CDR Reports» и «CDR Reports»
> из FreePBX?
> С почтой понятно – можно занести отправку через планировщика Cron, но до
> этого отчёт нужно выгрузить. В этих отчётах есть ручная выгрузка –
> но это очень неудобно.
> Возможно стоит копать в SQL?
> Буду очень благодарен за ответ!

[root@asterisk]# mysql  // подключаемся к MySQL
mysql> use asteriskcdrdb;

`src` ,  `duration` ,   `calldate` ,  `recordingfile`
FROM  `cdr` WHERE `calldate` >= '2020-02-20 12:00:00' AND `calldate` <= '2020-02-20 12:10:00' AND LENGTH(  `src` ) >3;

Думаю, начать с этого.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #2

2. Сообщение от allez (ok), 27-Фев-20, 08:53   +/
>[оверквотинг удален]
>> этого отчёт нужно выгрузить. В этих отчётах есть ручная выгрузка –
>> но это очень неудобно.
>> Возможно стоит копать в SQL?
>> Буду очень благодарен за ответ!
> [root@asterisk]# mysql  // подключаемся к MySQL
> mysql> use asteriskcdrdb;
>  `src` ,  `duration` ,   `calldate` ,  `recordingfile`
> FROM  `cdr` WHERE `calldate` >= '2020-02-20 12:00:00' AND `calldate` <= '2020-02-20
> 12:10:00' AND LENGTH(  `src` ) >3;
> Думаю, начать с этого.

Отправка отчета в теле письма:

echo "select src, duration, calldate, billsec, disposition from cdr where calldate >= '2020-02-20 12:00:00' and calldate <= '2020-02-20 12:10:00' and length(src) > 3;" | mysql asteriskcdrdb | mutt -s "Report" user@example.com

Отправка отчета во вложении:

echo "select src, duration, calldate, billsec, disposition from cdr where calldate >= '2020-02-20 12:00:00' and calldate <= '2020-02-20 12:10:00' and length(src) > 3;" | mysql asteriskcdrdb > report.txt; mutt -s "Report" -a report.txt user@example.com

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #3

3. Сообщение от gor7740 (ok), 27-Фев-20, 09:59   +/
> Отправка отчета в теле письма:
>
echo "select src, duration, calldate, billsec, disposition from cdr where calldate 
> >= '2020-02-20 12:00:00' and calldate <= '2020-02-20 12:10:00' and length(src) >
> 3;" | mysql asteriskcdrdb | mutt -s "Report" user@example.com

> Отправка отчета во вложении:
>
echo "select src, duration, calldate, billsec, disposition from cdr where calldate 
> >= '2020-02-20 12:00:00' and calldate <= '2020-02-20 12:10:00' and length(src) >
> 3;" | mysql asteriskcdrdb > report.txt; mutt -s "Report" -a report.txt
> user@example.com

Спасибо огромное! Очень удобно.
Я начал смотреть формирование таблицы через PHP:

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
$hostname = "localhost";  //адрес хоста. Скрипт мы будем запускать на той же машине, на которой находится БД asteriskcdrdb;
//$username = "ПользовательSQL";
// $password = "ПарольSQL";
$dbName = "asteriskcdrdb"; //база данных, в которой хранятся необходимые нам данные
$today = date('y-m-d'); // сегодняшняя дата в формате 2020-02-25

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

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

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

$headers = "From: CDRPBX <почта@отКого>";
/*
$headers  = "Content-type: text/html; charset=windows-1251 \r\n"; //заголовок для письма
$headers .= "From: CDRPBX <почта@отКого>\r\n";

$headers .= "Reply-To: почта@комуПисать\r\n";
*/
$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` = '469';"  ;
//$query = "SELECT `dst` , `src` , `duration` , `dstchannel` , `calldate` , `disposition` FROM  `cdr` WHERE `dst` = '469' AND LENGTH(  `src` ) >3 AND `calldate` >='$today 00:00:00' AND `calldate` <='$today 23:59:59';"  ;
$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 таблицу, которая готова к отправке на почту.
$to = "<почта@комуОтчёт>";
$subject = 'OtchetCDRPBX'; // тема письма
$msg = "Все входящие за $today $mes\r\n";
mail($to, $subject, $msg, $headers);
?>

Но его надо доработать. Ищу ошибки.


Это позволит в дальнейшем выводить общее время вызовов - что очень важно.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру