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

Кастомизация настраивается в файле 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.0itgrix_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,
    ),
);

Last updated