Конвертация записей в формат MP3

Кастомизация настраивается в файле process_record_file_path.php, он находится в каталоге:

itgrix_bx (Битрикс24)itgrix_amo (amoCRM)

/opt/itgrix_bx/customizer/actions/

/opt/itgrix_amo/customizer/actions/

Для более ранних версий:

itgrix_bx (Битрикс24) ДО версии 3.4.0itgrix_amo (amoCRM) ДО версии 2.6.0

/opt/itgrix_bx/custom/

/opt/itgrix_amo/custom/

Конвертация записей уже включена по умолчанию при установке (приведенный в листинге ниже код уже присутствует в файле кастомизации).

Но по умолчанию отключено удаление исходного wav-файла и обновление записи в CDR. Т.е. записи в формате mp3 создаются в дополнение к существующим wav-файлам, это приводит к занятию дополнительного места на сервере Астериск.

Чтобы включить обновление в CDR (поле recordingfile) и удаление wav-файла, нужно установить в true значения переменных (см. листинг ниже):

$updateFilenameInCdr = false; // Заменить в CDR имя файла на mp3
$removeWavFile       = false; // Удалить исходный wav-файл

Для версий ДО 3.4.0 включение запроса в CDR и удаления исходного wav-файла осуществляется раскомментированием кода:

//         mysqli_query(getDB(), "UPDATE `cdr` SET `recordingfile` = '{$newBasename}' WHERE `recordingfile` = '{$basename}'");

//         удаляем файл с расширением .wav
//         unlink($path);

Обращаем ваше внимание на то, что любые изменения должны проводиться опытным разработчиком и учитывать специфику вашей системы.

Параметры и другие примеры описаны в статье Кастомизация имени файла аудиозаписи.

$callId = $params['call_id'];
$from   = $params['from'];
$to     = $params['to'];
$path   = $params['path'];

//
// Пример конвертации записей разговоров в mp3
//

$updateFilenameInCdr = false; // Заменить в CDR имя файла на mp3
$removeWavFile       = false; // Удалить исходный wav-файл

$recPathInfo = pathinfo($path);
$recBasename  = $recPathInfo['basename'];
$recExtension = $recPathInfo['extension'];

if (strtolower($recExtension) == 'wav') {

    $newPath = Utils::convertToMp3($path);
    if ($newPath === false) {
        return array(
            'state' => 'error',
            'data' => "Failed to convert recording file to mp3: '$path'",
        );
    }
    $this->logInfo("Converted recording file: '$newPath'");

    $newBasename = basename($newPath);

    // Заменить в CDR имя файла на новое (wav на mp3)
    if ($updateFilenameInCdr) {
        $dbResult = Utils::mysqliQuery(
            "UPDATE `cdr` SET `recordingfile` = '{$newBasename}'" .
            " WHERE `recordingfile` = '{$recBasename}'");

        if ($dbResult === false) {
            return array(
                'state' => 'error',
                'data' => 'Ошибка при запросе в CDR',
            );
        }
        $this->logInfo("Updated recording filename in CDR: '$newBasename'");
    }

    // Удалить исходный файл с расширением .wav
    if ($removeWavFile) {
        $rmSuccess = unlink($path);
        if (! $rmSuccess) {
            return array(
                'state' => 'error',
                'data' => "Не удалось удалить исходный wav-файл: '$path'",
            );
        }
        $this->logInfo("Removed recording file: '$path'");
    }

    $path = $newPath;
}

return array(
    'state' => 'success',
    'data'  => array(
        'path' => $path,
    ),
);

Данный код предполагает установленный lame в системе. Если у вас его нет, устанавливается он любым доступным менеджером пакетов:

yum install lame

Для того чтобы отключить конвертирование файлов записей в mp3 достаточно закомментировать обращение к функцииям кастомизации записей в коде указанном выше:

/*if (strtolower($recExtension) == 'wav') {

    $newPath = Utils::convertToMp3($path);
    if ($newPath === false) {
        return array(
            'state' => 'error',
            'data' => "Failed to convert recording file to mp3: '$path'",
        );
    }
    $this->logInfo("Converted recording file: '$newPath'");

    $newBasename = basename($newPath);

    // Заменить в CDR имя файла на новое (wav на mp3)
    if ($updateFilenameInCdr) {
        $dbResult = Utils::mysqliQuery(
            "UPDATE `cdr` SET `recordingfile` = '{$newBasename}'" .
            " WHERE `recordingfile` = '{$recBasename}'");

        if ($dbResult === false) {
            return array(
                'state' => 'error',
                'data' => 'Ошибка при запросе в CDR',
            );
        }
        $this->logInfo("Updated recording filename in CDR: '$newBasename'");
    }

    // Удалить исходный файл с расширением .wav
    if ($removeWavFile) {
        $rmSuccess = unlink($path);
        if (! $rmSuccess) {
            return array(
                'state' => 'error',
                'data' => "Не удалось удалить исходный wav-файл: '$path'",
            );
        }
        $this->logInfo("Removed recording file: '$path'");
    }

    $path = $newPath;
}
*/

Last updated