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

## Конвертация при помощи программы конвертера через настройки в админке

Начиная с версии Itgrix\_bx v[3.13.0](https://docs.itgrix.ru/custom_common/pages/-M0SZwZn5pERjpAzqeP-#id-3.13.0), процедура конвертации записей в .mp3 перенесена из кастомизации в основной функционал коннектора и настраивается через админку:

<figure><img src="/files/u72oxSxoXDEK0m7bJXbf" alt=""><figcaption></figcaption></figure>

## Конвертация в кастомизации пути до файла записи звонка

{% hint style="info" %}
Кастомизация настраивается в файле **process\_record\_file\_path.php,** он находится в каталоге:
{% endhint %}

|          itgrix\_bx (Битрикс24)         |           itgrix\_amo (amoCRM)           |
| :-------------------------------------: | :--------------------------------------: |
| **/opt/itgrix\_bx/customizer/actions/** | **/opt/itgrix\_amo/customizer/actions/** |

{% hint style="info" %}
Для более ранних версий:
{% endhint %}

| itgrix\_bx (Битрикс24) ДО версии 3.4.0 | itgrix\_amo (amoCRM) ДО версии 2.6.0 |
| :------------------------------------: | :----------------------------------: |
|       **/opt/itgrix\_bx/custom/**      |     **/opt/itgrix\_amo/custom/**     |

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

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

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

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

{% hint style="info" %}
Для версий ДО 3.4.0 включение запроса в CDR и удаления исходного wav-файла осуществляется раскомментированием кода:

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

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

{% endhint %}

{% hint style="danger" %}
Обращаем ваше внимание на то, что любые изменения должны проводиться опытным разработчиком и учитывать специфику вашей системы.
{% endhint %}

{% hint style="info" %}
Параметры и другие примеры описаны в статье [Кастомизация имени файла аудиозаписи](/custom_common/filepath.md).
{% endhint %}

```php
$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 в системе. Если у вас его нет, устанавливается он любым доступным менеджером пакетов:

```bash
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;
}
*/
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.itgrix.ru/custom_common/mp3-record.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
