![](http://habrastorage.org/getpro/habr/post_images/fe7/f4f/9c0/fe7f4f9c05f00d4888e049780e792583.png)
Поисковые системы выдают огромное количество результатов разной полезности на запрос вынесный в заголовок.
На Хабрахабре такой статьи не нашел, а значит её нужно написать!
За основу я взял проект 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
Занавес
На этом все!
Буду рад если мой труд окажется полезен.
ссылка на оригинал статьи http://habrahabr.ru/post/212815/
Добавить комментарий