Поисковые системы выдают огромное количество результатов разной полезности на запрос вынесеный в заголовок.
На Хабрахабре такой статьи не нашел, а значит её нужно написать!
За основу я взял проект asterisk cdr viewer.
Перевел язык web интерфейса на великий могучий и «озвучил» его, т.е. добавил возможность прослушивать файлы записей разговоров в браузере, а так же скачивать их.
Количество полей фильтра сокращено до минимума, остались только самые необходимые.
Скриншоты, сорцы и подробное описание инсталяции уютно разместились под хабракатом.
Скриншоты web интерфейса
Логотип и ссылка на донат разработчикам остались на своих местах.
Поля переведены все, если потребуется вывести какое-либо поле как в оригинале, просто раскомментируйте его в templates/form.tpl.php
А так выглядит результат поиска по фильтру.
Каждый разговор можно скачать, либо прослушать через flash плеер.
Готовим MySQL
CDR нашего Asterisk должны писаться в MySQL базу, о том как это настроить можно прочесть здесь например ;).
Имя файла записи разговора пишется в поле file таблицы CDR.
Добавим его:
mysql -uroot -p -e "alter table `cdr` add column `filename` varchar(120) after `userfield`;" asterisk
Диалплан
Для настройки диалплана Asterisk я пользуюсь extensions.ael.
globals {
WAV=/records/wav; //Временный каталог с WAV
MP3=/records/mp3; //Куда выгружать mp3 файлы
RECORDING=1; // Запись, 1 - включена.
};
macro recording (calling,called) {
if ("${RECORDING}" = "1"){
Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called});
Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${WAV}/${fname}.wav" "${MP3}/${fname}.mp3" && rm -f "${WAV}/${fname}.wav" && chmod o+r "${MP3}/${fname}.mp3");
Set(CDR(filename)=${fname}.mp3);
Set(CDR(realdst)=${called});
MixMonitor(${WAV}/${fname}.wav,b,${monopt});
};
};
_XXXXXX => {
&recording(${CALLERID(number)},${EXTEN});
Dial(SIP/rtk/${EXTEN});
Hangup();
}
Глобальные переменные определяют пути к файлам, а так же позволяют включить/выключить запись разговора.
Макрос recording принимает в качестве параметров номер звонящего и номер куда происходит вызов. Если запись включена, то пишется временный wav файл, перекодируется в mp3, а в MySQL табличку CDR падает имя файла.
Имя файла состоит из uniqueid-дата_время-ОтКогоВызов-КомуВызов, например:
1392597899.17572-2014-02-17-07_44-83843ZZZХХХ-32ХХZZ.mp3
mp3 файлы за текущий день складываются в /records/mp3/
Каждую ночь скрипт в кроне распределяет записи разговоров в соответствующие дате папки
1 0 * * * /root/sh/mvrecords.sh
#!/bin/bash
ym=`date +%Y-%m -d "-1 day"`
ymd=`date +%Y-%m-%d -d "-1 day"`
mkdir -p /records/mp3/$ym/$ymd/
mv /records/mp3/*$ymd* /records/mp3/$ym/$ymd/
Скриншоты структуры папок.
PHP
В файле include/functions.php прописана логика вывода кнопочки «скачать файл с разговором» и flash плеера в поле «Файл».
$recorded_file = $row['filename'];
$mycalldate = substr("$calldate",0,10);
$mycalldate_ym = substr("$calldate",0,7);
$mydate = date("Y-m-d");
if ($mycalldate<$mydate){
if (file_exists("records/$mycalldate_ym/$mycalldate/$recorded_file")) {
echo " <td class="record_col"><a href="downloads.php?audio=records/$mycalldate_ym/$mycalldate/$recorded_file" title="Скачать файл с разговором"><img src="templates/images/sound.png"</a>
<object type="application/x-shockwave-flash" data="include/player_mp3_maxi.swf" width="150" height="20">
<param movie=include/player_mp3_maxi.swf/>
<param name=FlashVars value=mp3=records/$mycalldate_ym/$mycalldate/$recorded_file /> </td>n";
}
else {echo " <td class="record_col">запись отсутствует</td>n"; }
}
else {
if (file_exists("records/$recorded_file")) {
echo " <td class="record_col"><a href="downloads.php?audio=records/$recorded_file" title="Скачать файл с разговором"><img src="templates/images/sound.png"</a>
<object type="application/x-shockwave-flash" data="include/player_mp3_maxi.swf" width="150" height="20">
<param movie=include/player_mp3_maxi.swf/>
<param name=FlashVars value=mp3=records/$recorded_file /> </td>n";
}
else {echo " <td class="record_col">запись отсутствует</td>n";}
}
}
В этом коде определяется в какой папке нужно искать файл записи разговора.
За текущий день ищем в /records/mp3, а за предыдущие в /records/mp3/ГОД-МЕСЯЦ/ГОД-МЕСЯЦ-ДЕНЬ/
Если файл найден не был, то мы увидем «запись отсутствует» в поле «Файл».
Так же не забываем указать реквизиты подключения к MySQL в include/config.inc.php
Занавес
На этом все!
Буду рад если мой труд окажется полезен.
ps
Сорцы доступны по ссылкам 1 и 2
Автор: FessAectan