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

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

![](/files/-MLboaTPN9CuhHE5pYMO)

0 - пропущенный регистрируется на ответственного за сущность (опция по умолчанию);\
1 - пропущенный регистрируется на пользователя из последнего разговора (у кого последнего звонил аппарат);\
2 - пропущенный регистрируется на “пользователя по умолчанию” (который выбирается в CRM один на всю компанию).

По умолчанию, если в конфиге не прописано иное, работает вариант 0 - назначается ответственный за пропущенный звонок = ответственный за сущность.\
В случае, если что-то не срабатывает (например, нет сущности или в ней нет ответственного):\
\- Если попытка получить ответственного за сущность не удалась - пробуем пользователя из последнего разговора (для данного разговора логика переключается 0→1).\
\- Если пользователя из последнего разговора получить не удалось - назначаем дефолтного пользователя (для данного разговора логика переключается 1→2).

Иногда удобнее распределить пропущенные звонки на нескольких ответственных. Чтобы сделать такую доработку нужно:\
1\. [Включить кастомизацию](/custom_common/vklyuchenie-kastomizatora.md), а также отметить пункт **"параметров завершения разговора".**

![](/files/-MLbnwVMTXlhq6kaEsDp)

2\. Отредактировать файл кастомизации.

{% hint style="info" %}
Кастомизация настраивается в файле **/opt/itgrix\_bx/customizer/actions/process\_final\_params.php.**

Для версий ДО 3.4.0 этот файл находится в каталоге **/opt/itgrix\_bx/custom/**
{% endhint %}

Подробно параметры [описаны в статье](/custom_bx.md#5-process_final_params).

Можно назначать ответственного случайно из списка id пользователей Битрикса – в примере в этом случае звонки будут распределены примерно поровну:

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

Если необходимо использовать более точное распределение, то нужно сохранять значение последнего ответственного, например, в файле:

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.itgrix.ru/custom_bx/responsible-missed-call.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
