Денис Пестрецов
26.02.2021
1391296

Перевод записей в режим стерео и конвертирование их в формат mp3 в FreePBX

В рамках данной статьи рассмотрим доработку, позволяющую более удобно переводить записи в режим стерео, а также конвертировать записи разговоров в формат mp3 в FreePBX. Чем отличается от предыдущей статьи В предыдущей статье мы рассматривали похожую доработку, но там запись в стерео-режиме осуществлялась с помощью приложения Monitor, которое объявлено устаревшим. Здесь же мы переделаем запись, пользуясь […]

В рамках данной статьи рассмотрим доработку, позволяющую более удобно переводить записи в режим стерео, а также конвертировать записи разговоров в формат mp3 в FreePBX.

Чем отличается от предыдущей статьи

В предыдущей статье мы рассматривали похожую доработку, но там запись в стерео-режиме осуществлялась с помощью приложения Monitor, которое объявлено устаревшим. Здесь же мы переделаем запись, пользуясь приложением MixMonitor. Также в предыдущей статье не рассматривалось конвертирование записи разговора в формат mp3.

Итак, получаются следующие отличия от предыдущей статьи:

1) Запись в режим стерео будет осуществляться с помощью приложения MixMonitor;

2) Конвертирование записи разговора в формат mp3 сразу по его окончанию.

Данная доработка тестировалась на FreePBX 13 и 14 версии.

Результатом нашей доработки будут следующие переключатели, размещённые в разделе Call Recording вкладки Settings -> Advanced Settings.

Обновленная страница Advanced 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 теперь для этого блока кода.

На этом доработка по упрощению перевода записей в режим стерео завершена.

Кейсы внедрения
Asterisk от VoxLink
Узнайте, какие крупные компании уже используют Asterisk в работе.
Скачать
Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Валерий
Валерий
28.03.2021 18:13

Здравствуйте.
Решение хорошее, есть 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 пока не решились.

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.