Перевод записей в режим стерео и конвертирование их в формат mp3 в FreePBX
В рамках данной статьи рассмотрим доработку, позволяющую более удобно переводить записи в режим стерео, а также конвертировать записи разговоров в формат mp3 в FreePBX. Чем отличается от предыдущей статьи В предыдущей статье мы рассматривали похожую доработку, но там запись в стерео-режиме осуществлялась с помощью приложения Monitor, которое объявлено устаревшим. Здесь же мы переделаем запись, пользуясь […]
В рамках данной статьи рассмотрим доработку, позволяющую более удобно переводить записи в режим стерео, а также конвертировать записи разговоров в формат mp3 в FreePBX.
Чем отличается от предыдущей статьи
В предыдущей статье мы рассматривали похожую доработку, но там запись в стерео-режиме осуществлялась с помощью приложения Monitor, которое объявлено устаревшим. Здесь же мы переделаем запись, пользуясь приложением MixMonitor. Также в предыдущей статье не рассматривалось конвертирование записи разговора в формат mp3.
Итак, получаются следующие отличия от предыдущей статьи:
1) Запись в режим стерео будет осуществляться с помощью приложения MixMonitor;
2) Конвертирование записи разговора в формат mp3 сразу по его окончанию.
Результатом нашей доработки будут следующие переключатели, размещённые в разделе Call Recording вкладки Settings -> Advanced Settings.
В разделе Call Recording появятся следующие переключатели:
Convert to the mp3 – отвечает за конвертацию записи сразу по завершению разговора, в формат mp3;
Enable Stereo Mode – позволяет включать/выключать режим стерео-записи;
Remove sourse files – удаляет исходные файлы записей –in и -out (используется только если включен режим стерео).
Конвертация в формат mp3 и использование стерео-режима могут использоваться независимо друг от друга.
Перед тем, как приступим к написанию кода, необходимого для работы нашего функционала, проведём ряд подготовительных мероприятий.
Подготовительный этап
В рамках подготовительного этапа добавим переключатели на вкладку Advanced Settings. Делается это при помощи добавления записей в таблицу freepbx_settings базы данных asterisk.
Подробнее о том, как редактировать и добавлять параметры на вкладку Advanced Settings можно прочесть в статье.
Итак, выполняем следующие шаги:
1) Если ранее, в рамках предыдущей статьи создавали переключатель MIXMONITOR_USE (для переключения между приложениями Monitor и MixMonitor), то здесь он больше не понадобится и его необходимо удалить. Если не создавали – пропускаем этот пункт.
DELETE FROM freepbx_settings WHERE keyword='MIXMONITOR_USE';
2) Создаём переключатель STEREOMODE_USE, позволяющий управлять стереорежимом записи разговоров. Если выполняли данный шаг в рамках предыдущей статьи, то этот пункт пропускаем;
INSERT INTO freepbx_settings(keyword,value,name,description,type,options,defaultval,readonly,hidden,category,module,sortorder) values ('STEREOMODE_USE',0,'Enable Stereo Mode','KEYWORD:STEREOMODE_USE Setting true will use the record in stereo mode.','bool','',0,0,0,'Call Recording','callrecording',0);
3) Добавляем переключатели CONVERT_TO_MP3 и REMOVE_SOURCE:
INSERT INTO freepbx_settings(keyword,value,name,description,type,options,defaultval,readonly,hidden,category,module,sortorder) values ('REMOVE_SOURCE',0,'Remove source files','Setting true will remove source –in and –out files.','bool','',0,0,0,'Call Recording','callrecording',0);
INSERT INTO freepbx_settings(keyword,value,name,description,type,options,defaultval,readonly,hidden,category,module,sortorder) values ('CONVERT_TO_MP3',0,'Convert to the mp3','','bool','',0,0,0,'Call Recording','callrecording',0);
На этом подготовительный этап завершен. Перейдём к редактированию скриптов.
Правка скриптов
Открываем в режиме редактирования файл …/admin/modules/callrecording/functions.inc.php.
1. Находим в нём функцию callrecording_get_config($engine). Здесь находим строку:
$context = 'ext-callrecording';
До неё вставляем следующий код:
$stereo_mode = FreePBX::Config()->get_conf_setting('STEREOMODE_USE');
$path_to_sox = FreePBX::Config()->get_conf_setting('WHICH_sox');
$path_to_lame = FreePBX::Config()->get_conf_setting('WHICH_lame');
$convert_to_mp3 = FreePBX::Config()->get_conf_setting('CONVERT_TO_MP3');
$remove_source = FreePBX::Config()->get_conf_setting('REMOVE_SOURCE');
$path_to_rm = '/usr/bin/rm';
$path_to_monitor = '/var/spool/asterisk/monitor/';
Тем самым мы обеспечили считывание текущих настроек, указанных на вкладке Advanced Settings. В переменную $path_to_sox
считываем значения параметра Path for sox. Оно нам потребуется в дальнейшем, при реализации стереорежима записи.
2. Теперь, в этой же функции находим строку:
$exten = 'recordcheck';
Это означает, что правки, внесённые ниже, будут относиться к экстеншену recordcheck, контекста sub-record-check. Находим вызов приложения MixMonitor, относящийся к данному экстеншену (должен быть немного ниже), по следующей строке (если по предыдущей статье правки не выполнялись):
$ext->add($context, $exten, '', new ext_mixmonitor('${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT}','abi(LOCAL_MIXMON_ID)${MIXMON_BEEP}','${MIXMON_POST}'));
Если же правки из предыдущей статьи были выполнены, то находим следующий блок кода:
$monitor_flag = '';
if ($stereo_mode) {
$ext->add($context, $exten, '', new ext_set('MONITOR_EXEC',"$path_to_sox -M"));
$monitor_flag = 'm';
}
if ($use_mixmonitor) {
$ext->add($context, $exten, '', new ext_mixmonitor('${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT}','abi(LOCAL_MIXMON_ID)${MIXMON_BEEP}','${MIXMON_POST}'));
}
else {
$ext->add($context, $exten, '', new ext_monitor('${MIXMON_FORMAT}','${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}', $monitor_flag));
}
Найденное заменяем на:
$command = '';
$fullname = $path_to_monitor . '${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}';
$fname = '${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}';
if ($stereo_mode)
{
$command = $path_to_rm . ' -f ' . $fullname . '.${MON_FMT}';
$command .= ' && ' . $path_to_sox . ' -M ' . $fullname . '-in.${MON_FMT} ' . $fullname . '-out.${MON_FMT} ' . $fullname . '.${MON_FMT}';
if ($remove_source)
$command .= ' && ' . $path_to_rm . ' -f ' . $fullname . '-in.${MON_FMT} ' . $fullname . '-out.${MON_FMT}';
if ($convert_to_mp3)
$command .= ' && ' . $path_to_lame . ' -V7 ' . $fullname . '.${MON_FMT} ' . $fullname . '.mp3 && ' . $path_to_rm . ' -f ' . $fullname . '.${MON_FMT} ';
$ext->add($context, $exten, '', new ext_execif('$[${LEN(${MIXMON_POST})}]', 'Set', 'MIXMON_POST= && ${MIXMON_POST}'));
$ext->add($context, $exten, '', new ext_mixmonitor($fname . '.${MON_FMT}', 'a${MONITOR_REC_OPTION}i(LOCAL_MIXMON_ID)${MIXMON_BEEP}r(' . $fname . '-in.${MON_FMT})t(' . $fname . '-out.${MON_FMT})S', $command . '${MIXMON_POST}'));
}
else
{
if ($convert_to_mp3)
{
$command = $path_to_lame . ' -V7 ' . $fullname . '.${MON_FMT} ' . $fullname . '.mp3 && ' . $path_to_rm . ' -f ' . $fullname . '.${MON_FMT} ';
$ext->add($context, $exten, '', new ext_execif('$[${LEN(${MIXMON_POST})}]', 'Set', 'MIXMON_POST= && ${MIXMON_POST}'));
}
$ext->add($context, $exten, '', new ext_mixmonitor($fname . '.${MON_FMT}','abi(LOCAL_MIXMON_ID)${MIXMON_BEEP}', $command . '${MIXMON_POST}'));
}
3. Для того, чтобы в CDR имя файла записывалось уже с расширением mp3, заменяем несколькими строками ниже следующую строку:
$ext->add($context, $exten, '', new ext_set('CDR(recordingfile)','${CALLFILENAME}.${MON_FMT}'));
на
if ($convert_to_mp3)
$ext->add($context, $exten, '', new ext_set('CDR(recordingfile)','${CALLFILENAME}.mp3'));
else
$ext->add($context, $exten, '', new ext_set('CDR(recordingfile)','${CALLFILENAME}.${MON_FMT}'));
Теперь находим ниже по коду строку:
$exten = 'recq';
и повторяем шаги 2 и 3 теперь для этого блока кода.
На этом доработка по упрощению перевода записей в режим стерео завершена.
Остались вопросы?
Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.
Здравствуйте.
Решение хорошее, есть 2 проблемы.
1- переменная $path_to_monitor = ‘/var/spool/asterisk/monitor/’;
Если меняем через настройки Advanced Settings MIXMON_DIR (местонахождение записей разговоров) то настройка не работает, т.к. получаем несуществующую папку.
2- При записи в таблицу CEL, получаем ошибку Data too long for column ‘appdata’
И если 1 решается например пустым $path_to_monito=»
То 2 решить простым увеличением appdata varchar пока не решились.