Links

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

Кастомизация настраивается в файле 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.0
itgrix_amo (amoCRM) ДО версии 2.6.0
/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/<дата-время>-<from>-<to>-<ID звонка>.<расширение>
Пример: /var/spool/asterisk/monitor/20180330140245-321654987-154-1522395542.2897.mp3
В данном случае мы видим, что имя файла состоит из цифр – даты/времени звонка, входящего номера, внутреннего номера и uniqueid звонка, которые указанны через дефис. Будем получать недостающие данные из базы данных.
Для актуальной версии кастомизатора (версии, начиная с Itgrix_bx 3.4.0 и Itgrix_amo 2.6.0):
$callId = $params['call_id'];
$from = $params['from'];
$to = $params['to'];
$path = $params['path'];
// Если для генерации имени файла нужно больше параметров,
// то их можно получить в БД, сделав дополнительный запрос.
// Пример кода:
$dbResult = Utils::mysqliQuery(
"SELECT * FROM `cdr` WHERE `uniqueid` = '".$callId."' ORDER BY `calldate` DESC LIMIT 1",
true);
if ($dbResult === false) {
return array(
'state' => 'error',
'data' => 'Ошибка при запросе в CDR',
);
}
if (empty($dbResult)) {
return array(
'state' => 'error',
'data' => "В CDR не найдено записей для звонка '$callId'",
);
}
//Далее собираем имя файла из полученных данных
$row = $dbResult[0];
$path = sprintf('/var/spool/asterisk/monitor/%s-%s-%s-%s.%s',
date('YmdHis', strtotime($row['calldate'])),
$row['src'],
$row['dst'],
$callId,
pathinfo($row['recordingfile'], PATHINFO_EXTENSION)
);
return array(
'state' => 'success',
'data' => array(
'path' => $path,
),
);
Для старого кастомизатора (версии ДО Itgrix_bx 3.4.0 и Itgrix_amo 2.6.0):
$callId = $params['call_id'];
$from = $params['from'];
$to = $params['to'];
$path = $params['path'];
//Если для генерации имени файла нужно больше параметров, то их можно получить в БД, сделав дополнительный запрос. Пример кода:
$res = mysqli_query(getDB(), "SELECT * FROM `cdr` WHERE `uniqueid` = '" . $call_id . "' ORDER BY `calldate` DESC LIMIT 1");
$row = mysqli_fetch_assoc($res);
//Далее собираем имя файла из полученных данных
$path = sprintf('/var/spool/asterisk/monitor/%s-%s-%s-%s.%s',
date('YmdHis', strtotime($row['calldate'])),
$row['src'],
$row['dst'],
$callId,
pathinfo($row['recordingfile'], PATHINFO_EXTENSION)
);
return array(
'state' => 'success',
'data' => array(
'path' => $path,
),
);