Web интерфейс прослушивания записей звонков Asterisk

от автора


Поисковые системы выдают огромное количество результатов разной полезности на запрос вынесный в заголовок.
На Хабрахабре такой статьи не нашел, а значит её нужно написать!
За основу я взял проект 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.

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 плеера в поле «Файл».

часть include/functions.php

	$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

ссылка на оригинал статьи http://habrahabr.ru/post/212815/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *