Инструменты пользователя

Инструменты сайта


asterisk:stereo_record

Запись звонков в стерео во FreePBX

Внимание! Данная инструкция подходит только к FreePBX версии 15

Рассмотрим доработку FreePBX версии 15 для возможности записи разговоров в режиме стерео, что позволяет прослушивать записи разговоров отдельно два конца линии для их последующего анализа.

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

В разделе Call Recording появятся следующие переключатели:

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

  • Enable Stereo Mode – позволяет включать/выключать режим стерео-записи
  • Remove sourse files – удаляет исходные файлы записей –in и -out (используется только если включен режим стерео).

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

В рамках подготовительного этапа добавим переключатели на вкладку Advanced Settings. Делается это при помощи добавления записей в таблицу freepbx_settings базы данных asterisk. Команды можно выполнить либо используя ssh в клиенте mysql, либо через PHPMyAdmin.

  1. Создаём переключатель 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);
  2. Добавляем переключатель 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 перед внесением правок

  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');
    $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}','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}'));
    }
  3. Теперь находим ниже по коду строку:
    $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 придётся делать снова.

asterisk/stereo_record.txt · Последнее изменение: nikolay