CDR мой вариант
Добавлено: 23 июн 2019, 12:49
Вот мой вариант CDR viewer
вот такая у меня таблица в базе
файл cdr_mysql.conf
в контексты пишу такие строчки
подключаемся к базе и печатаем
скачиваем файл с записью
Полезные источники:
http://subnets.ru/blog/?p=4872
https://github.com/prog-it/Asterisk-CDR-Viewer-Mod
https://www.dmosk.ru/miniinstruktions.php?mini=asterisk-mysql
https://www.google.com
вот такая у меня таблица в базе
- Код: Выделить всё
CREATE TABLE `cdr` (
`accountcode` varchar(80) DEFAULT NULL,
`src` varchar(80) DEFAULT NULL,
`dst` varchar(80) DEFAULT NULL,
`dcontext` varchar(80) DEFAULT NULL,
`clid` varchar(80) DEFAULT NULL,
`channel` varchar(80) DEFAULT NULL,
`dstchannel` varchar(80) DEFAULT NULL,
`lastapp` varchar(80) DEFAULT NULL,
`lastdata` varchar(80) DEFAULT NULL,
`start` datetime DEFAULT NULL,
`answer` datetime DEFAULT NULL,
`end` datetime DEFAULT NULL,
`duration` int(11) DEFAULT NULL,
`billsec` int(11) DEFAULT NULL,
`disposition` varchar(45) DEFAULT NULL,
`amaflags` varchar(45) DEFAULT NULL,
`userfield` varchar(256) DEFAULT NULL,
`uniqueid` varchar(150) DEFAULT NULL,
`linkedid` varchar(150) DEFAULT NULL,
`peeraccount` varchar(80) DEFAULT NULL,
`sequence` int(11) DEFAULT NULL,
`recordingfile` varchar(256) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
файл cdr_mysql.conf
- Код: Выделить всё
[global]
hostname=localhost
dbname=asterisk
table=cdr
password=asterisk
user=asterisk
port=3306
sock=/tmp/mysql.sock
[columns]
.......
.......
;добавил вот такую запись
alias recfile => recordingfile
........
........
в контексты пишу такие строчки
- Код: Выделить всё
[context]
exten => _X.,1,Set(fname=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)}-${CALLERID(number)}-${EXTEN})
exten => _X.,n,MixMonitor(/var/spool/asterisk/monitor/${fname}.wav)
exten => _X.,n,Set(CDR(recfile)=/var/spool/asterisk/monitor/${fname}.wav)
.......
.......
подключаемся к базе и печатаем
- Код: Выделить всё
<?php
function con_base()
{
$d= date("Y-m-d");
$nd= "'".$d." "."00:00:00"."'";
$link = mysqli_connect(
'localhost', /* Хост, к которому мы подключаемся */
'asterisk', /* Имя пользователя */
'asterisk', /* Используемый пароль */
'asterisk'); /* База данных для запросов по умолчанию */
if (!$link) {
printf("Невозможно подключиться к базе данных. Код ошибки: %s\n", mysqli_connect_error());
// print("Невозможно подключиться к базе данных. Код ошибки: %s\n", mysqli_connect_error());
exit;
}
return $link;
}
function uregsqli($tabl,$src,$dst,$d_from,$d_to,$lm,$ind)
{
$cnt_full =0;
$cnt_answer = 0;
$cnt_no_answer =0;
$cnt_busy =0;
$cnt_congest=0;
$cnt_fail =0;
$today = date("H:m:s Y-m-d D");
$link=con_base();
switch($ind){
case 0: $result = mysqli_query($link, "SELECT start, src, dst, billsec, disposition, recordingfile
FROM $tabl ORDER BY start DESC LIMIT $lm"); break;
case 1: $result = mysqli_query($link, "SELECT start, src, dst, billsec, disposition, recordingfile
FROM $tabl WHERE start BETWEEN '$d_from' AND '$d_to'"); break;
case 2: $result = mysqli_query($link, "SELECT start, src, dst, billsec, disposition, recordingfile
FROM $tabl WHERE start BETWEEN '$d_from' AND '$d_to' AND src like '%$src%'"); break;
case 3: $result = mysqli_query($link, "SELECT start, src, dst, billsec, disposition, recordingfile
FROM $tabl WHERE start BETWEEN '$d_from' AND '$d_to' AND dst like '%$dst%'"); break;
case 4: $result = mysqli_query($link, "SELECT start, src, dst, billsec, disposition, recordingfile
FROM $tabl WHERE start BETWEEN '$d_from' AND '$d_to' AND src like '%$src%' AND dst like '%$dst%' ");
default: break;
}
// На печать
// print "Rezult OK";echo '<br>';
/* Выводим результаты в html */
echo '<br>';
echo '<br>';
print '<table border="1" cellpadding="7" cellspacing="0">';
print '<td width="1%" align="left">'.$today.'</td>';
print '</table>';
print '<table border="1" cellpadding="7" cellspacing="0">';
print '<td bgcolor="#F08080" width="5%" align="center">'."Дата Время".'</td>';
print '<td bgcolor="#F08080" width="10%" align="center">'."Кто звонил".'</td>';
print '<td bgcolor="#F08080" width="10%" align="center">'."Куда Звонил".'</td>';
print '<td bgcolor="#F08080" width="10%" align="center">'."Длительность, сек".'</td>';
print '<td bgcolor="#F08080" width="10%" align="center">'."Результат".'</td>';
print '<td bgcolor="#F08080" width="10%" align="center">'."Player".'</td>';
while( $row = mysqli_fetch_assoc($result) ){
print '<tr>';
print '<td width="5%" valign="top" align="left">'.$row['start'].'</td>';
print '<td width="10%" align="center">'.$row['src'].'</td>';
print '<td width="10%" align="center">'.$row['dst'].'</td>';
print '<td width="10%" valign="center" align="center">'.$row['billsec'].'</td>';
$cnt_full=$cnt_full + 1;
switch($row['disposition'])
{
case 'ANSWERED':
print '<td bgcolor="#00FF00" width="10%" align="center">'.$row['disposition'].'</td>';
$cnt_answer=$cnt_answer + 1;
break;
case 'NO ANSWER':
print '<td bgcolor="#FF00FF" width="10%" align="center">'.$row['disposition'].'</td>';
$cnt_no_answer=$cnt_no_answer + 1;
break;
case 'BUSY':
print '<td bgcolor="#FFFF00" width="10%" align="center">'.$row['disposition'].'</td>';
// print '</tr>';
$cnt_busy=$cnt_busy + 1;
break;
case 'CONGESTION':
print '<td bgcolor="#FF0000" width="10%" align="center">'.$row['disposition'].'</td>';
// print '</tr>';
$cnt_congest=$cnt_congest + 1;
break;
case 'FAILED':
print '<td bgcolor="#FF0000" width="10%" align="center">'.$row['disposition'].'</td>';
// print '</tr>';
$cnt_fail=$cnt_fail + 1;
break;
default:
print '<td bgcolor="#FF00FF" width="10%" align="center">*******</td>';
// print '</tr>';
}
print '<td width="10%" valign="center" align="center">';
print '<audio src="download.php?audio='.$row['recordingfile'].'" preload="none" controls></audio>';
print '</td>';
print '</tr>';
}
// end печать
print '</table>';
print '<table border="1" cellpadding="7" cellspacing="0">';
print '<td width="1%" align="left">';
print "Выведено записей: ".$cnt_full."\n";
print '</td>';
print '</table>';
print '<table border="1" cellpadding="7" cellspacing="0">';
print '<td width="1%" align="left">';
print "Завершенных ответом: ".$cnt_answer."\n";
print '</td>';
print '</table>';
print '<table border="1" cellpadding="7" cellspacing="0">';
print '<td width="1%" align="left">';
print "Оставшиеся без ответа : ".$cnt_no_answer."\n";
print '</td>';
print '</table>';
print '<table border="1" cellpadding="7" cellspacing="0">';
print '<td width="1%" align="left">';
print "Неотвеченных вследствие перегрузки : ".$cnt_congest."\n";
print '</td>';
print '</table>';
print '<table border="1" cellpadding="7" cellspacing="0">';
print '<td width="1%" align="left">';
print "Неотвеченных из-за отказа : ".$cnt_fail."\n";
print '</td>';
print '</table>';
//print '</table>';
/* Освобождаем используемую память */
mysqli_free_result($result);
/* Закрываем соединение */
mysqli_close($link);
}
?>
скачиваем файл с записью
- Код: Выделить всё
<?php
$file = ($_REQUEST['audio']);
$file = str_replace(" ","+",$file);
header ("Content-Type: application/octet-stream");
header ("Accept-Ranges: bytes");
header ("Content-Length: ".filesize($file));
header ("Content-Disposition: attachment; filename=".$file);
readfile($file);
?>
Полезные источники:
http://subnets.ru/blog/?p=4872
https://github.com/prog-it/Asterisk-CDR-Viewer-Mod
https://www.dmosk.ru/miniinstruktions.php?mini=asterisk-mysql
https://www.google.com