Распределение ответственных по пропущенным звонкам

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

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,
);

Last updated