Денис Пестрецов
18.10.2019
1569

Упрощение перевода записей в режим стерео в FreePBX

В предыдущей статье мы рассмотрели способы добавления и редактирования параметров на вкладку Advanced Settings . В этой статье рассмотрим, как правильно обращаться к параметрам Advanced Settings из кода модуля. Делать мы это будем на примере доработки, которая упростит перевод записей в режим стерео в FreePBX. Также добавим обработчик переключателя, между использованием приложения Monitor и MixMonitor […]

В предыдущей статье мы рассмотрели способы добавления и редактирования параметров на вкладку Advanced Settings . В этой статье рассмотрим, как правильно обращаться к параметрам Advanced Settings из кода модуля. Делать мы это будем на примере доработки, которая упростит перевод записей в режим стерео в FreePBX. Также добавим обработчик переключателя, между использованием приложения Monitor и MixMonitor для записи разговоров (добавление самого переключателя описывается в предыдущей статье).

Сразу отмечу, что рассматривать будем на примере FreePBX 13 версии.

Подготовительный этап

Перед тем, как приступим к написанию кода, необходимого для работы нашего функционала, проведём ряд подготовительных мероприятий.

1) Создадим переключатель между приложениями Monitor и MixMonitor. Если Вы это уже делали, в рамках предыдущей статьи, то данный шаг можно пропустить и перейти к пункту 2. Если же нет, то необходимо выполнить в MySQL запрос:

INSERT INTO insert into freepbx_settings(keyword,value,name,description,type,options,defaultval,readonly,hidden,category,module,sortorder) values ('MIXMONITOR_USE',0,'Use MixMonitor','KEYWORD:MIXMONITOR_USE Setting true will use the MixMonitor application instead of Monitor so the concept of \'joining/mixing\' the in/out files now goes away when this is enabled.','bool','',1,0,0,'Call Recording','callrecording',0);

2) Создаём переключатель, позволяющий управлять стереорежимом записи разговоров. Для этого в MySQL выполняем следующий запрос:

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);

По итогу, после выполнения этих запросов, категория Call Recording на странице Advanced Settings должна выглядеть следующим образом:

Изменённая страница Advanced Settings
Изменённая страница Advanced Settings

Теперь, когда подготовка завершена, перейдём к редактированию скриптов.

Правки скриптов

Открываем в режиме редактирования файл …/admin/modules/callrecording/functions.inc.php.  Находим в нём функцию callrecording_get_config($engine). Здесь находим строку:

$context = 'ext-callrecording';

До неё вставляем следующий код:

$stereo_mode = FreePBX::Config()->get_conf_setting('STEREOMODE_USE');
$use_mixmonitor = FreePBX::Config()->get_conf_setting('MIXMONITOR_USE');
$path_to_sox = FreePBX::Config()->get_conf_setting('WHICH_sox');

Тем самым мы обеспечили считывание текущих настроек, указанных на вкладке Advanced Settings. В переменную $path_to_sox считываем значения параметра Path for sox. Оно нам потребуется в дальнейшем, при реализации стереорежима записи.

Теперь, в этой же функции находим строку:

$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));
}

Кодом выше мы добавили использования стереорежима и использования приложения Monitor вместо MixMonitor.

Теперь необходимо провести такую же процедуру с экстеншеном recq, также описанным в данной функции. Находим строку:

$exten = 'recq';

По аналогии с предыдущей правкой, находим здесь вызов приложения MixMonitor:

$ext->add($context, $exten, '', new ext_mixmonitor('${MONITOR_FILENAME}.${MON_FMT}','${MONITOR_OPTIONS}${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('${MONITOR_FILENAME}.${MON_FMT}','${MONITOR_OPTIONS}${MIXMON_BEEP}','${MIXMON_POST}'));
}
else {
	$ext->add($context, $exten, '', new ext_monitor('${MIXMON_FORMAT}','${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}',$monitor_flag));
}

На этом редактирование данного файла завершено.

По умолчанию, в FreePBX 13 версии отсутствует ext_monitor, который мы использовали в своём коде. Необходимо его добавить. Для этого открываем в режиме редактирования файл …/admin/libraries/ extensions.class.php. Находим здесь описание класса ext_mixmonitor (достаточно воспользоваться поиском по названию). Сразу после завершения его описания добавим свой класс ext_monitor:

class ext_monitor extends extension {
	var $file;
	var $format;
	var $flags;

	function ext_monitor($format, $file, $flags = "") {
		$this->file = $file;
		$this->format = $format;
		$this->flags = $flags;
	}
	function output() {
		return "Monitor(".$this->format.",".$this->file.",".$this->flags.")";
	}
}

Таким образом, вызов ext_monitor осуществляется с тремя параметрами: расширение файла ($format), имя файла с указанием пути ($file) и необязательный параметр – указание флагов ($flags).

На этом редактирование кода завершено. Перейдём к его проверке.

Проверка работы кода

Для проверки работы кода обратимся к файлу extensions_additional.conf. При значении параметров в Advanced Settings: Enable Stereo Mode = No,Use MixMonitor = Yes, диалплан в контексте sub-record-check останется стандартным.

Стандартный диалплан контекста sub-record-check
Стандартный диалплан контекста sub-record-check

Теперь изменим значения параметров следующим образом: Enable Stereo Mode = Yes, Use MixMonitor = No. Применяем параметры, возвращаемся к файлу. Диалплан модернизируется следующим образом:

Изменение диалплана при смене значений
Изменение диалплана при смене значений

Также меняется диалплан в экстеншене recq.

Описание работы

Здесь приведу описание работы, в зависимости от значения параметров:

  • Enable Stereo Mode = [Yes|No],Use MixMonitor = Yes – записывается один файл, используя стандартное приложение MixMonitor;
  • Enable Stereo Mode = No,Use MixMonitor = No – записываются отдельно левое и правое плечи канала в два разных файла, используя приложение Monitor;
  • Enable Stereo Mode = Yes,Use MixMonitor = No – записываются отдельно левое и правое плечи канала в два разных файла, используя приложение Monitor, после чего «склеиваются» приложением sox в один стереофайл.
В случае использования последнего варианта, на выходе получается 3 файла – 2 файла после работы приложения Monitor и 1 стереофайл, после работы sox. К сожалению, данная доработка не предусматривает механизма автоматического удаления таких файлов, поэтому следует позаботиться об этом самостоятельно.

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

Подписаться
Уведомление о
guest
3 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Дмитрий
Дмитрий
25.04.2020 21:36

Подскажите а как сразу в mp3 писать? Или какой скрипт использовать чтобы он отрабатывал? Использовал вариант из ваших чтатей но он не отрабатвает после окончания записи в случае использования стерео.

Денис
Денис
27.04.2020 11:16
Reply to  Дмитрий

Дмитрий, сразу писать в формате mp3 не получится. Можно прикрутить скрипт конвертации в mp3 «на лету».
Для этого можно воспользоваться материалами из этой статьи: https://voxlink.ru/kb/asterisk-configuration/udalenie-ishodnyh-fajlov-zapisej-razgovorov-pri-ispolzovanii-stereo/ (если удаление исходных файлов записей не нужно, то это можно убрать из скрипта, здесь важно описание вызова скрипта).
После этого в файл rec_source_remove.sh можем поместить конвертацию с помощью lame. Пример такой конвертации можно найти в статье: https://voxlink.ru/kb/asterisk-configuration/skript-konvertacii-zapisej-v-mp3-na-letu-otpravka-zapisi-na-pochtu-s-ukazaniem-informacii-po-zvonku/

Дмитрий
Дмитрий
27.04.2020 13:05
Reply to  Денис

отлично. Спасибо большое))

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

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

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

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