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

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

itgrix_bx (Битрикс24)

itgrix_amo (amoCRM)

/opt/itgrix_bx/custom/

/opt/itgrix_amo/custom/

Параметры

Вход:

{
"params": {
"call_id":<ID звонка>,
"from":<Номер звонящего>,
"to":<Номер, на который пришёл звонок>,
"path":<Путь до записи>
}
}

Вернуть:

{
"data": {
"path":<Кастомизированный путь до записи>
},
"state": "success"
}

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

Файл до записи .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,
),
);