# Алгоритмы назначения чатов

Cервис **Webim** предлагает несколько алгоритмов выбора оператора для обслуживания поступившего обращения от посетителя сайта.

## Виды алгоритмов назначения чатов

Глобально **Webim** поддерживает два вида назначения чатов: ручной и алгоритмы автоназначения.

При использовании алгоритма **ручного выбора чатов**, который действует по умолчанию, операторы сами берут в обработку пользовательские обращения из общей очереди. Эта очередь нераспределённых обращений отображается у оператора в **РМО** в списке **Ожидают ответа** (у каждого оператора этот список сужается за счёт отсева тех обращений, в которых посетители потребовали операторов из других отделов или с навыками общения на других языках).

Это единственный алгоритм, доступный на бесплатном [тарифе](https://webim.ru/price/).

**Алгоритмы автоназначения** предусматривают автоназначение диалогов на операторов по выбору сервиса **Webim**. При этом оператор параллельно с автоматическим назначением на него чатов может самостоятельно брать диалоги из общей очереди в обработку, если её просмотр не отключён. В секции **Ожидают ответа** в этом случае отображаются только те диалоги, которые назначены сервисом на данного конкретного оператора. Автоназначение упрощает работу и операторам, и администратору, а для посетителей снижает риск неответа или позднего ответа.

---

## Виды автоназначения {: #autoassignment }

Условно можно выделить две разновидности автоназначения: [базовое автоназначение](#base-auto-assign) и [автоназначение с приоритизацией отделов (скиллизацией)](#skillization), что является дополненной и видоизменённой версией базового автоназначения.

Алгоритм **скиллизации** предполагает распределение чатов на операторов с учётом приоритетов [отделов](https://webim.ru/kb/for-admins/dept.html) (скиллов). При включении данного алгоритма на странице [редактирования оператора](https://webim.ru/kb/getting-started/registration-agent.html) появляется вкладка **Отделы**, где можно установить приоритеты для отделов, к которым он привязан. В первую очередь на оператора будут назначаться обращения, оставленные в отдел, приоритет для которого выше (число меньше).

Использование алгоритма скиллизации может решать разные задачи. Например, таким образом можно обеспечить попадание большей части обращений с определённых отделов к конкретным операторам (наиболее компетентным в направлении отдела), но они, в случае загруженности наименее "приоритетного" для себя отдела, могли бы взять часть его обращений в обработку, что позволило бы равномернее распределить нагрузку между операторами и не упустить обращения.

Также скиллизация может помочь сделать так, чтобы обращения с каких-либо отделов обслуживались операторами в первую очередь: например, если нагрузка на какой-либо отдел больше, чем на другие.

Скиллизация отделов также может быть включена для отделов, которые обрабатывают обращения с каналов общения. То, откуда поступают обращения в отдел, не влияет на приоритизацию, и она происходит по выставленным для отделов приоритетам.

Подробнее о выставлении приоритета конкретным отделам, к которым привязан оператор, можно узнать [здесь](https://webim.ru/kb/for-agents/agent-gui/edit-account.html#skillization-priority-to-dept)

---

## Описание работы режимов автоназначения

Во всех режимах автоназначения в зависимости от настроек параметров возможны следующие алгоритмы выбора оператора из списка (при прочих равных):

| Значение параметра auto_assign_priority_by_last_chat_assigned_ts | Значение параметра auto_assign_priority_by_operator_order | Сценарий автоназначения                                                                                                                                                                                                                                                                |
|------------------------------------------------------------------|-----------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `true`                                                           | `true` либо `false`                                       | Для назначения чата среди операторов с наименьшим количеством диалогов (`count`) будет выбран тот, на которого последний диалог назначался наибольшее количество времени назад (значение параметра `last_chat_assigned_ts` минимальное).                                               |
| `false`                                                          | `true`                                                    | Для назначения чата среди операторов с наименьшим количеством диалогов (`count`) будет выбран оператор с наименьшим значением порядка сортировки (указывается во вкладке **Основные** на странице [редактирования оператора](https://webim.ru/kb/getting-started/registration-agent.html)). |
| `false`                                                          | `false`                                                   | Чат будет назначен на случайного оператора из числа операторов с наименьшим количеством диалогов.                                                                                                                                                                                      |

По умолчанию значением параметров `auto_assign_priority_by_last_chat_assigned_ts` и `auto_assign_priority_by_operator_order` является `false`.

Кроме того, существует ряд особенностей распределения чатов между операторами и ботами внутри отделов. Подробно настройка маршрутизации чатов между ботами и операторами, а также логика и алгоритмы распределения чатов описаны в [статье](https://webim.ru/kb/for-admins/routing-chats-between-agents-and-bots.html).

---

## Алгоритм назначения чатов при базовом автоназначении {: #base-auto-assign }

Ниже описан механизм распределения чатов при базовом автоназначении.

Автораспределение происходит сначала для всех онлайн-чатов, затем для [офлайн-чатов](https://webim.ru/kb/for-agents/work-with-offline-requests.html). И те, и другие чаты последовательно проходят через один алгоритм. Офлайн-чаты начинают распределяться, когда распределены все онлайн-чаты.

### Проход 1. Онлайн-чаты

  1. Анализируется занятость всех активных операторов (находящихся в статусе *Онлайн*), а именно сколько свободных слотов есть у операторов в пределах числа, указанного в параметре `max_chats_per_operator` в account config (т.е. сколько новых чатов каждый из них может взять при текущем количестве чатов).

  1. Вычисляется, для каких сочетаний отделов и языков общения какие операторы доступны.

  1. Для каждого сочетания отдела и языка список активных операторов, привязанных к отделу, сортируется по убыванию количества свободных слотов.

  1. Онлайн-чаты сортируются по времени поступления обращения (т.е. времени создания чата): более старые чаты распределяются первыми.

  1. Первый в отсортированном списке из пункта 4 чат распределяется на выбранного оператора из пункта 3.

### Проход 2. Офлайн-чаты

После того, как все онлайн-чаты распределены, тем же образом распределяются офлайн-чаты.

Иными словами, сервис **Webim** выбирает того оператора, который находится в статусе онлайн, при этом:

  * Уполномочен ответить на обращения, то есть принадлежит соответствующему отделу, см. [Регистрация отделов](https://webim.ru/kb/for-admins/dept.html), и общается на языке обращения

  * Имеет наименьшее количество назначенных на него диалогов, и это количество меньше установленного лимита (см. ниже)

Если такой оператор найден, то новое обращение распределяется на него. Если таких операторов в настоящий момент нет, то обращение остаётся ожидать распределения в очереди. Операторы и администраторы видят такие обращения в **РМО** в списке **Общая очередь** либо **Офлайн-обращения**. Администратор видит длину очереди нераспределённых обращений в графе **Ожидает** на **Панели приборов**.

---

## Алгоритм назначения чатов при включённой приоритизации отделов (скиллизации) {: #skillization }

Автораспределение происходит сначала для всех онлайн-чатов, затем для офлайн-чатов. И те, и другие чаты последовательно проходят через один алгоритм. Офлайн-чаты начинают распределяться, когда распределены все онлайн-чаты.

### Проход 1. Онлайн-чаты

  1. Анализируется занятость всех активных операторов (находящихся в статусе *Онлайн*), а именно сколько свободных слотов есть у операторов в пределах числа, указанного в параметре `max_chats_per_operator` (т.е. сколько новых чатов каждый из них может взять при текущем количестве чатов).

  1. Вычисляется, для каких сочетаний отделов и языков общения какие операторы доступны, а также какие у них указаны значения приоритетов для каждого сочетания.

  1. Список операторов с их приоритетами для разных отделов и языков сортируется по возрастанию уровней приоритетов: от операторов с наивысшим приоритетом для отдела обращения (т.е. наименьшим числовым значением приоритета) к операторам с наименьшим приоритетом.

  1. Для элемента списка с отсортированными приоритетами из пункта 3 последовательно в порядке сортировки берутся очереди чатов, соответствующие:

    * онлайновости чатов (в данном случае онлайн-чаты)

    * отделам и языкам общения оператора для выбранного приоритета

  1. Среди отобранных в пункте 4 чатов выбирается минимальный чат и очередь.

     Минимальный чат в очереди — первый чат внутри отсортированной очереди, а минимальная очередь — первая очередь в отсортированном списке очередей.

  1. Минимальный чат из пункта 5 распределяется на оператора из пункта 2, то есть, у которого:

    * наибольшее количество свободных слотов

    * наивысший приоритет для отдела, в который поступил данный чат

### Проход 2. Офлайн-чаты

После того, как все онлайн-чаты распределены, тем же образом распределяются офлайн-чаты.

Следовательно, при автоназначении чатов из общей очереди на операторов можно заметить, что обращения, поступившие в сервис раньше, могут назначаться на операторов после того, как распределились обращения, поступившие в сервис позже по времени. Такое поведение системы является корректным и объясняется особенностями логики распределения чатов. Наглядно механизм автоназначения чатов при включённой приоритизации отделов можно рассмотреть на примере.

### Пример

  1. Оператор 1 имеет один свободный слот (т.е. больше, чем у Оператора 2) и может взять в обработку один чат.

  1. Ожидающие автораспределения чаты сортируются согласно приоритетам оператора (у Оператора 1 в приоритете чаты в Отдел 2). Вверху списка оказываются чаты в Отдел 2, после них — чаты в Отдел 1.

  1. Чаты для отделов сортируются по времени поступления обращения. У чатов, поступивших в Отдел 2, наибольшим приоритетом обладает чат, поступивший в 11:55 (раньше, чем другой чат в данный отдел). В Отдел 1 поступило только одно обращение, и оно стоит в очереди после чатов в Отдел 2.

  1. На оператора распределяется самый ранний чат из чатов в Отдел 2, то есть тот, что поступил в 11:55.

  1. После этого распределяется следующее по времени обращение в Отдел 2, то есть обращение в 12:01.

  1. Так как обращение в Отдел 1 не было взято за это время в обработку другим оператором (все его слоты были заняты или он обрабатывал чаты из отделов с более высоким для себя приоритетом), оно распределяется на Оператора 1 в 12:10 после того, как все чаты в Отдел 2 были обработаны. Если бы до этого в Отдел 2 поступило новое обращение и оно бы не было назначено на других операторов до того, как у Оператора 1 появился свободный слот, оно бы обладало наивысшим приоритетом и было на него распределено, и обращению в Отдел 1 пришлось бы ждать ещё дольше.

![схема автоназначения чатов с приоритизацией отделов (скиллизация)](https://webim.ru/kb/img/for-admins/chat-assignment-modes/autoassign_skillization_mechanism.webp){ style="width: 691px; max-width: 100%" }

Таким образом, обращение, которое было оставлено раньше всех (в 11:40) было обработано позднее, чем обращения, оставленные в 11:55 и 12:01, поскольку включённая скиллизация нацелена на то, чтобы обращения обрабатывались наиболее компетентными по конкретному вопросу операторами.

Чтобы оценить, насколько эффективно распределены приоритеты отделов у различных операторов, администраторы могут воспользоваться возможностями аналитики на странице **Статистика**, отслеживать метрики на **Панели приборов**. При обнаружении закономерности, что обращениям в те или иные отделы отводится чрезмерно низкий приоритет (наблюдается слишком долгое распределение чатов в какой-то отдел), целесообразно пересмотреть и перераспределить приоритеты отделов у операторов, повысив их для "проблемных" отделов, либо увеличив максимально допустимое количество чатов для операторов.

Если включена приоритизация отделов (скиллизация) и администратор меняет приоритеты отделов, то произойдет следующее: при сохранении изменений выполнится очистка кэша отделов и в следующем 30-секундном цикле работы автоназначения сработают новые приоритеты. То есть, максимальное время ожидания вступления в силу настроек — длительность операции обновления настроек + 30 секунд.

---

## Автоназначение приоритетных чатов

Если включена настройка `high_priority_urls` в [account config](https://webim.ru/kb/for-admins/service-pages/account-config-editor.html), то вне зависимости от типа автоназначения (со скиллизацией отделов или без неё) и статуса чатов (онлайн или офлайн) первыми будут распределяться чаты посетителей с [приоритетных страниц](https://webim.ru/kb/for-admins/high-priority-urls.html). Таким образом, при сортировке чатов дополнительно будет проверяться [поле посетителя](https://webim.ru/kb/dev/identification/id-2-0.html) `high_priority`, значение которого определяется тем, с какой страницы посетитель начал чат. Если значение поля равно 1 (`'high_priority' = "1"` - посетитель находится на приоритетной странице), то этот чат будет расположен в очереди раньше других. Затем приоритетные чаты (если их несколько) сортируются по времени обращения.

Также поле `high_priority` может быть указано у посетителя(ей) самостоятельно клиентом, если нужно, чтобы чаты от определённых посетителей обрабатывались в первую очередь. Например, такой подход можно использовать в **мобильном приложении** на основе **Webim Mobile SDK**.

---

## Переключение между режимами

Включение и регулирование функции автоназначения осуществляет администратор в разделе [**Общие настройки → Распределение диалогов**](https://webim.ru/kb/control-panel/settings-general.html).

!!! Note "С версии 10.8"
    Настройки автоназначения переехали из подраздела «Возможности» в отдельный раздел «Распределение диалогов».

Для включения функции:

  1. Установите флажок **Автоназначение**.

  1. Укажите **Максимальное кол-во чатов на оператора**. Это значение устанавливает лимит, при превышении которого автоназначение на такого оператора перестаёт работать. Значение по умолчанию: 5. Введите значение вручную или используйте стрелочки для увеличения-уменьшения.

Кроме того, возможно отдельно выставлять автоназначение для онлайн и офлайн-чатов. По умолчанию для офлайн-чатов автоназначение включено, если включено автоназначение для онлайн-чатов, и наоборот. Если Вы хотите установить для офлайн-чатов другой режим, Вам необходимо изменить параметр `auto_assign_offline` в специальных настройках, недоступных через **Консоль управления**, либо попросить об этом [техническую поддержку](mailto:support@webim.ru).

**Приоритизация отделов** работает при включённом автоназначении, которое включается в **Общих настройках** (см. [предыдущий пункт](#base-auto-assign)) и тем самым устанавливает значение `true` параметру `auto_assign`. Для активации самого алгоритма скиллизации необходимо установить значение `true` специальному параметру `operator_department_prioritization` (по умолчанию `false`). Это делается в account config по отдельному URL. Если у Вас нет к нему доступа, обратитесь в [техническую поддержку](mailto:support@webim.ru) **Webim**.

---

## Настройки для режимов автоназначения

При автоназначении возможна настройка следующих параметров [account config](https://webim.ru/kb/for-admins/service-pages/account-config-editor.html):

| Параметр                                        | Тип       | Значение по умолчанию                                                                                                   | Описание                                                                                                                                                                                 |
|-------------------------------------------------|-----------|-------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `auto_assign_priority_by_operator_order`        | `Boolean` | `false`                                                                                                                 | Выбор оператора при автоназначении по порядку сортировки, а не случайно. Выбирается оператор с минимальным значением порядка из числа предварительно отсеянных.                          |
| `auto_assign_priority_by_last_chat_assigned_ts` | `Boolean` | `true` для новых аккаунтов, `false` для ранее созданных | Выбор оператора при автоназначении по времени назначения предыдущего чата на него. Выбирается оператор, которому последний чат назначался раньше всех из числа предварительно отсеянных. |
| `auto_assign_to_last_chat_operator`             | `Boolean` | `true`                                                                                                                  | Чат назначается на оператора, с которым у посетителя был последний чат.                                                                                                                  |
| `auto_assign_to_last_chat_operator_if_busy`     | `Boolean` | `false`                                                                                                                 | Чат назначается на оператора, с которым у посетителя был последний чат, вне зависимости от занятости оператора. Действует только при `auto_assign_to_last_chat_operator = true`.         |

При включённой скиллизации дополнительно можно устанавливать следующие настройки:

| Параметр                               | Тип       | Значение по умолчанию | Описание                                                                                                         |
|----------------------------------------|-----------|-----------------------|------------------------------------------------------------------------------------------------------------------|
| `default_operator_department_priority` | `Integer` | `5`                   | Значение приоритета по умолчанию, если не выставлено другое.                                                     |
| `restricted_profiles`                  | `Boolean` | `false`               | Невозможность редактировать свои собственные настройки, в том числе приоритеты отделов (операторы, супервизоры). |

Выставлять приоритеты для отделов для операторов и супервизоров всегда может администратор, а супервизор может менять приоритеты операторов, которые находятся в подревизных ему отделах, а также подревизных супервизору напрямую. По умолчанию (при значении системного параметра `restricted_profiles = false`) операторы и супервизоры могут менять значение приоритетов у своих отделов. Если параметр `restricted_profiles = true`, операторы и супервизоры не могут редактировать свои приоритеты.

По умолчанию приоритеты отделов равны 5.

---

Источник: https://webim.ru/kb/for-admins/chat-assignment-modes.html
