К списку статей

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

Для настройки кастомизации необходимо подключить файл кастомизатора в настроки модуля. Редактируем файл /opt/bx24asterisk/custom/process_record_file_path.php.

Если папки /opt/bx24asterisk/custom нет, то редактируем файл /opt/bx24asterisk/customizer.php, после строки case 'process_record_file_path'. Подробное описание входящих\выходящих параметров описано в статье.

Первым шагом необходимо понять каким образом генерируется имя файла. Иногда необходимо подставлять в путь до файла папку с определенной датой или другими параметрами.

Файл до записи .wav

В том случае, если все записи хранятся в одной директории и их имена выглядят как .wav, возможно следующее решение кастомизации выбора файла без обращения в СУБД:

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

extract(pathinfo($path));

$path = $dirname . '/' . $callID . '.wav';

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

Сложное имя файла, данные для которого нужно собирать из СУБД

Рассмотрим пример кастомизации для записи в формате: /var/spool/asterisk/monitor/20180330140245-321654987-154-1522395542.2897.mp3

В данном случае мы видим, что имя файла состоит из цифр даты\времени звонка, входящего номера, внутреннего номера и uniqueid звонка которые указанны через знак дефиса. Будем получать недостающие данные из базы данных.

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

extract(pathinfo($path));

//Если для генерации имени файла нужно больше параметров, то их можно получить в БД, сделав дополнительный запрос. Пример кода:
$res = mysqli_query(getDB(), "SELECT * FROM `cdr` WHERE `uniqueid` = '" . $call_id . "' ORDER BY `calldate` DESC LIMIT 1");
$row = mysqli_fetch_assoc($res);

//Далее собираем имя файла из полученных данных
$filename = join('-',
    date('YmdHis', strtotime($row['calldate'])),
    $row['src'],
    $row['dst'],
    $callID
);

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