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

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

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

<figure><img src="https://349598197-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M-rywOcELBwBcmtSBHS%2Fuploads%2FQNF10VZ5a3niHBwUpgX5%2Fimage.png?alt=media&#x26;token=d71fe6cc-ab96-401e-95e6-1ea88840e514" 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" %}
Параметры и другие примеры описаны в статье [Кастомизация имени файла аудиозаписи](https://docs.itgrix.ru/custom_common/filepath).
{% 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;
}
*/
```
