Comment on page
Распределение ответственных по пропущенным звонкам
Ответственным за пропущенные звонки часто сложно назначить конкретного сотрудника, так как звонок мог прийти на группу номеров или по очереди на разные номера и группы. По этой причине есть три варианта, как выбрать ответственным сотрудника.

0 - пропущенный регистрируется на ответственного за сущность (опция по умолчанию);
1 - пропущенный регистрируется на пользователя из последнего разговора (у кого последнего звонил аппарат);
2 - пропущенный регистрируется на “пользователя по умолчанию” (который выбирается в CRM один на всю компанию).
По умолчанию, если в конфиге не про писано иное, работает вариант 0 - назначается ответственный за пропущенный звонок = ответственный за сущность.
В случае, если что-то не срабатывает (например, нет сущности или в ней нет ответственного):
- Если попытка получить ответственного за сущность не удалась - пробуем пользователя из последнего разговора (для данного разговора логика переключается 0→1).
- Если пользователя из последнего разговора получить не удалось - назначаем дефолтного пользователя (для данного разговора логика переключается 1→2).
Иногда удобнее распределить пропущенные звонки на нескольких ответственных. Чтобы сделать такую доработку нужно:
1. Включить кастомизацию, а также отметить пункт "параметров завершения разговора".

2. Отредактировать файл кастомизации.
Кастомизация настраивается в файле /opt/itgrix_bx/customizer/actions/process_final_params.php.
Для версий ДО 3.4.0 этот файл находится в каталоге /opt/itgrix_bx/custom/
Можно назначать ответственного случайно из списка id пользователей Битрикса – в примере в этом случае звонки будут распределены примерно поровну:
if ($params['call_full']['channel']['type'] == 'incoming'
&& !$params['call_full']['channel']['was_answered']) { // пропущенный входящий
$assigned = array(1, 243, 57); // ID ответственных сотрудников из Битрикса
$randomKey = rand(0, count($assigned) -1);
$params['USER_ID'] = $assigned[$randomKey];
}
return array(
'state' => 'success',
'data' => $params,
);
Если необходимо использовать более точное распределение, то нужно сохранять значение последнего ответственного, например, в файле:
if ($params['call_full']['channel']['type'] == 'incoming'
&& !$params['call_full']['channel']['was_answered']) { // пропущенный входящий
// ID ответственных сотрудников из Битрикса
$assigned = array(1, 243, 57);
//файл для хранения последнего назначенного
$fileAssigned = '/opt/bx24asterisk/lastAssigned.lock';
$key = file_exists($fileAssigned) ? file_get_contents($fileAssigned) : 0;
if (! array_key_exists($key, $assigned)) {
$key = 0;
}
$params['USER_ID'] = $assigned[$key];
$key++;
file_put_contents($fileAssigned, count($assigned) >= $key ? 0 : $key);
}
return array(
'state' => 'success',
'data' => $params,
);