====== Запись звонков в стерео во FreePBX ======
Внимание! Данная инструкция подходит только к FreePBX версии **15**
Рассмотрим доработку FreePBX версии **15** для возможности записи разговоров в режиме стерео, что позволяет прослушивать записи разговоров отдельно два конца линии для их последующего анализа.
Результатом нашей доработки будут следующие переключатели, размещённые в разделе **Call Recording** вкладки **Settings -> Advanced Settings**.
В разделе **Call Recording** появятся следующие переключатели:
{{ :asterisk:2024-08-19_21-42-40.png|Изменённая страница Advanced Settings }}
* **Enable Stereo Mode** – позволяет включать/выключать режим стерео-записи
* **Remove sourse files** – удаляет исходные файлы записей –in и -out (используется только если включен режим стерео).
===== Подготовительный этап =====
В рамках подготовительного этапа добавим переключатели на вкладку **Advanced Settings**. Делается это при помощи добавления записей в таблицу **freepbx_settings** базы данных **asterisk**. Команды можно выполнить либо используя ssh в клиенте mysql, либо через PHPMyAdmin.
- Создаём переключатель 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);
- Добавляем переключатель 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);
===== Правка скриптов =====
Открываем в режиме редактирования файл **…/admin/modules/callrecording/functions.inc.php**.
**Внимание** Рекомендую сделать резервную копию файла **…/admin/modules/callrecording/functions.inc.php** перед внесением правок
- Находим в нём функцию **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');
$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**. Оно нам потребуется в дальнейшем, при реализации стереорежима записи.
- Теперь, в этой же функции находим строку:
$exten = 'recordcheck';
Это означает, что правки, внесённые ниже, будут относиться к экстеншену **recordcheck**, контекста **sub-record-check**. Находим вызов приложения MixMonitor, относящийся к данному экстеншену (должен быть немного ниже), по следующей строке:
$ext->add($context, $exten, '', new ext_mixmonitor('${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT}','a${MONITOR_REC_OPTION}i(${LOCAL_MIXMON_ID})${MIXMON_BEEP}','${MIXMON_POST}'));
Найденное заменяем на:
$fullname = $path_to_monitor . '${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}';
}
$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 . '${MIX
MON_POST}'));
}
else {
$ext->add($context, $exten, '', new ext_mixmonitor($fname . '.${MON_FMT}','a${MONITOR_REC_OPTION}i(${LOCAL_MIXMON_ID})${MIXMON_BEEP}', '${MIXMON_POST}'));
}
- Теперь находим ниже по коду строку:
$exten = 'recq';
и заменяем строку кода:
$ext->add($context, $exten, '', new ext_mixmonitor('${MONITOR_FILENAME}.${MON_FMT}','${EVAL(${MONITOR_OPTIONS})}${MIXMON_BEEP}','${EVAL(${MIXMON_POST})}'));
на:
$fullname = $path_to_monitor . '${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}';
}
$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}', '${EVAL(${MONITOR_OPTIONS})}${MIXMON_BEEP}r(' . $fname . '-in.${MON_FMT})t(' . $fname . '-out.${MON_FMT})S', $command . '${EVAL(${MIXMON_POST}
)}'));
}
else {
$ext->add($context, $exten, '', new ext_mixmonitor('${MONITOR_FILENAME}.${MON_FMT}','${EVAL(${MONITOR_OPTIONS})}${MIXMON_BEEP}','${EVAL(${MIXMON_POST})}'));
}
===== Примечания =====
После правки скрипта у вас будет постоянно висеть сообщение, что нарушена целостность модуля. Для отключения данного предупреждения необходимо в разделе **Call Recording** вкладки **System Setup** выключить переключатель **Enable Module Signature Checking**
Также если будет происходить обновление модуля **Call Recording**, то правки в файл **…/admin/modules/callrecording/functions.inc.php** придётся делать снова.