3.14.3 Стратегии распределения
Стратегии распределения базовой очереди
Базовая очередь доступна в стандартной лицензии ECSS-10. Для такого типа очереди определяется одна из следующих стратегий распределения вызовов:
- Random (Случайный выбор)
- Serial (Серийный)
- Progressive (Нарастающий)
- Cyclic (Циклический)
- Multicall (Массовый обзвон)
Стратегии распределения расширенной очереди
Стратегии распределения делятся на два вида: простые и множественного выбора.
Простые стратегии распределения
Простые стратегии распределения подразумевают выбор одного свободного оператора за попытку распределения. Вот их список:
- MIA (Most Idle Agent) - очередь выбирает оператора, с момента последней попытки распределения на которого прошло больше всего времени. Более формально это можно описать следующим образом. При включенной стратегии mia идентификаторы операторов помещаются в специальный список в порядке в котором они перечислены в конфиге. При распределении очередь будет выбирать свободного оператора, который наиболее всего близок к голове данного списка, и распределять на него вызов, при этом сразу же перемещая его идентификатор в конец списка.
- LOA (Least Occupied Agent) - очередь выбирает оператора, который за определенный интервал времени менее других обслуживал вызовы, распределенные очередью. Размер интервала определяется таймером /domain/<Domain>/timers/core/abonent_manager_statistic_boom_timeout и по умолчанию равен 5 минут.
- Random - очередь выбирает оператора случайным образом
Если оператор не отвечает на распределенный вызов, он временно блокируется очередью. Время блокировки зависит от свойства оператора goodness:
- good - время блокировки 20 секунд;
- bad - время блокировки 40 секунд;
- ugly - время блокировки 60 секунд;
Изначально у всех операторов значение свойства goodness = good. При каждом неотвеченном вызове значение goodness, в зависимости от текущего значения, изменяется от good к bad или от bad к ugly. При каждом отвеченном вызове значение goodness изменяется в обратном направлении - от ugly к bad или от bad к good.
Очередь не будет предпринимать попытки распределения на заблокированного оператора и, если у вызова не исчерпались попытки распределения, вызов будет обслужен другим свободным оператором.
Блокировка очередью не является штатным механизмом работы очереди, так как оператор, уходящий на перерыв или отсутствующий по другим причинам, может перейти в состояние "отошел", либо выполнить logout, используя телефонный аппарат или веб-АРМ. Кроме того, супервизор может принудительно заблокировать оператора, используя механизм блокировки супервизором, или же выполнить force-logout. Однако блокировки очередью служат защитным механизмом, в случае если отсутствующий на оператор всё же не был выведен из обслуживания, или же, если в качестве операторов используются рядовые абоненты SSW, не использующие функционал агентов. Сказанное выше о блокировках очередью справедливо для всех простых стратегий распределения как в базовых, так и в расширенных очередях.
Стратегии распределения множественного выбора
Стратегии распределения множественного во время одной процедуры распределения захватывают сразу всех операторов (или подходящих по скиллу. См. skill-based распределение) и устанавливают с ними соединение, руководствуясь логикой конкретной стратегии распределения.
- Multicall (Массовый обзвон) - очередь распределяет вызов на всех операторов из числа доступных одновременно. Первый оператор, поднявший трубку будет обслуживать вызов, соединения с остальными операторами отбиваются. В случае если ни один из выбранных операторов не отвечает на вызов, все операторы, участвовавшие в распределении блокируются и их свойство goodness изменяется аналогично простым стратегиям распределения. Однако время блокировки не зависит от значения goodness и всегда равно 20 секундам.
В случае всех остальных стратегий распределения множественного выбора, блокировка очередью не применяется.
Параметр очереди window_duration актульнен только для стратегий serial, cycled и progressive. Это время в секундах после которого очередь начнет устанавливать соединение со следующей подгруппой операторов. Иными словами, это время сдвига окна распределения. По умолчанию 10 секунд.
- Serial (Серийный выбор) - устанавливает соединение с операторами в порядке, в котором они добавлены в очередь. Сначала осуществляется соединение с первым оператором. Если оператор не отвечает по прошествии времени, указанного в window_duration, или же если оператор отбивает вызов, соединение с текущим оператором прекращается и начинается соединение со следующим по списку оператором. Так продолжается до тех пор, пока окно не достигнет последнего оператора. После этого окно уже не сдвигается, и продолжается попытка соединения с последним оператором до исчерпания времени max_distribution_duration или пока оператор не отклонит соединение. При неудачной попытке распределения, механизм будет запускаться повторно до исчерпания количества попыток, определяемого параметром max_distribution_attempts.
- Progressive (Нарастающий выбор) - аналогично стратегии Serial последовательно производятся попытки соединения с операторами, но в отличие от стратегии Serial соединение с предыдущим оператором не прекращается при начале соединения с новым участником. В финале, если никто из участников не положит трубку, очередь будет параллельно осуществлять соединение со всеми операторами аналогично стратегии Multicall. Когда окно включит в себя последнего оператора, попытка распределения будет продолжаться до исчерпания времени max_distribution_duration или пока все операторы не отклонят соединение. При неудачной попытке распределения, механизм будет запускаться повторно до исчерпания количества попыток, определяемого параметром max_distribution_attempts.
- Cycled (Циклический выбор) - аналогично стратегии Serial последовательно производятся попытки соединения с операторами. После достижения последнего оператора окно переходит к первому оператору, и так далее по-кругу. Соединения будут продолжаться до тех пор пока не истечет время max_distribution_duration. При неудачной попытке распределения, механизм будет запускаться повторно до исчерпания количества попыток, определяемого параметром max_distribution_attempts.
Skill-based распределение
Для тобы очередь при распределении могла выбрать наиболее подходящего оператора, обладающего тем или иным умением, существует skill-based распределение. Когда оно активировано, очередь будет применять процедуру распределения не ко всем свободным операторам, а к тем из них, кто наиболее соответствует по уровню умения. Примеры умения - владение английским языком, знание принципов построения сетей TCP/IP, навыки оказания первой помощи и так далее. Список скиллов является открытым и администратор домена может создавать произвольные скиллы по своему усмотрению.
Чтобы активировать skill-based распределение, нужно установить у очереди параметр skill_based_distribution (см. "3.14.3 Настройка расширенной очереди").
Также для того чтобы skill-based распределение работало, скиллы, с одной стороны, должны быть настроены у операторов, и, с другой стороны должны быть выставлены у вызова перед его помещением в очередь с помощью IVR-блока Set.
Скилл в общем виде задаётся как <имя скилла>[:<уровень скилла>]. Уровень скилла может быть опущен, и тогда он по умолчанию равен 1. Примеры скиллов:
- english:3,
- police,
- medicine
Имя скилла может быть разделено на две части разделенные знаком /
: <тип>/<подтип>. Никакой алгоритмической ценности данное разделение не имеет - оно служит только для смысловой группировки скиллов, и специальным образом не обрабатывается. Пример такого задания скиллов:
- language/english:3
- language/belarus:5
- emergency/fire
- emergency/medicine
В данном примере language/english и language/belarus никак не связаны, и общий префикс language/* не даёт при определении соответствия никаких преимуществ перед другими скиллами. При определении соответствия учитывается только полное имя скилла включающее и тип и подтип
С помощью IVR блока Set вызову могут быть назначены один и более скиллов, разделённых запятой (см. IVR-редактор).
Для того чтобы выбрать наиболее подходящих по умению операторов, очередь выполняет оценку соответствия каждого оператора затребованному скиллу.
В простом случае, когда вызову назначен всего один скилл, его уровень соответствия скиллу (далее conformance) будет равен <Уровень скилла оператора>/<Требуемый уровень скилла вызова>. Т.е, для примера, если вызову назначен уровень скилла language/english:5, а у оператора уровень скилла language/english:4, то вычисленный уровень соответствия скиллу будет равен 4/5, т.е 0.8.
Conformance для одного скилла не может превышать 1, поэтому если вызову требуется уровень скилла language/english:5, то даже если уровень скилла оператора превышает данное значение, он не будет иметь преимуществ перед операторами у которых значение уровня точно равно 5. В обоих случаях conformance будет равняться 1.
Если у оператора отсутствует запрошенный скилл, то его значение conformance для данного скилла будет равняться 0.
После оценки соответствия, очередь выберет из всех операторов подгруппу, у которых максимальное и одинаковое между собой значение conformance и применит к ней текущую стратегию распределения (см. Стратегии распределения). Приведём пример.
Допустим вызову выставлен скилл language/english:5.
Оператор | skill | conformance |
---|---|---|
Оператор 1 | language/english:4 | 0.8 |
Оператор 2 | language/english:7 | 1 |
Оператор 3 | - | 0 |
Оператор 4 | language/english:5 | 1 |
В этом случае очередь выберет операторов под номером 2 и 4, так как у них максимальное среди прочих значение conformance.
Если у всех операторов значение conformance будет равно 0, то очередь будет применять текущую стратегию распределения ко всем операторам.
В случае, если вызову выставлено более одного скилла, то суммарное значение conformance будет вычислено как сумма conformance каждого скилла в отдельности. Например, если вызову назначены скиллы language/english:5 и emergency/medicine:5, а оператору назначен уровень скилла language/english:4 и emergency/medicine:3, то суммарное значение conformance будет равняться conformance первого скилла т.е 0.8 плюс conformance второго скилла т.е 0.6, и будет равняться 1.4. Т.е. в случае более одного скилла conformance может быть и больше единицы. Приведём пример.
Допустим вызову выставлены скиллы language/english:5 и emergency/medicine:5.
Оператор | skill-ы | conformance english | conformance medicine | conformance |
---|---|---|---|---|
Оператор 1 | language/english:4, emergency/medicine:3 | 0.8 | 0.6 | 1.4 |
Оператор 2 | language/english:3, emergency/medicine:4 | 0.6 | 0.8 | 1.4 |
Оператор 3 | language/english:3 | 0.6 | 0 | 0.6 |
Оператор 4 | emergency/medicine:10 | 0 | 1 | 1 |
В этом случае очередь выберет операторов под номером 1 и 2, так как у них максимальное среди прочих значение conformance.
В случае простых стратегий распределения (см. Простые стратегии распределения), порядок выбора оператора для распределения можно формально описать так:
- Выбираются операторы, которые в данный момент не обслуживают вызовы
- Среди них выбирается подгруппа с наибольшим и равным между собой значением conformance
- К выбранным операторам применяется простая стратегия распределения
Таким образом в случае простых стратегий распределения, если есть свободные операторы, вызов будет распределяться в любом случае, даже если среди свободных операторов наибольшее значение соответствия скиллу будет 0, так как skill-based распределение в случае простых стратегий распределения применяется только к операторам, которые в данный момент не обслуживают вызовы. Иными словами, в случае простых стратегий распределения, skill-based распределение носит для очереди рекомендательный характер и более строгого разделения можно добиться перемещением операторов в отдельные очереди средствами IVR сценария.
В случае стратегий распределения множественного выбора, порядок выбора оператора отличается:
- Выбираются операторы с наибольшим и равным между собой значением conformance
- Выполняется выбранная стратегия множественного распределения
Таким образом в случае стратегий множественного выбора операторы выбираются по соответствию скиллу строгим образом. Т.е если операторы свободны, но есть более подходящие операторы, соответствующие скиллу, которые заняты, вызов будет ожидать в очереди, пока эти более подходящие операторы не освободятся.
Выбор оператора по принципу повторного обращения (предпочтительный оператор)
Для того чтобы включить механизм выбора оператора по принципу повторного обращения нужно включить для очереди опцию remember_choice (ссылка на конфигурирование очереди).
Если эта опция включена, очередь будет запоминать, какой оператор был выбран в прошлый раз для обслуживания вызова с номера А, и будет считать этого оператора предпочтительным для обслуживания вызова, пытаясь выполнить распределение на него. Сервис выбора оператора по принципу повторного обращения предваряет любую стратегию распределения и skill-based распределение и если сервис срабатывает успешно, то они не применяются. Очередь хранит информацию о предпочтительном операторе в течение времени, которое определяется параметром cc_queue_remember_choice_timeout в /domain/test.domain/timers/core/*. По умолчанию 1 час со времени последнего соединения с оператором.
remember_choice может принимать значения none, strict и non-strict:
- none - опция выключена
- strict - если предпочтительный оператор занят, то вызов будет дожидаться пока он освободится. Если оператор был свободен, но соединиться с ним не удалось, например по причине неответа или DND, то далее для текущего вызова предпочтительный оператор будет игнорироваться и будет применяться выбранная стратегия распределения
- non-strict - если предпочтительный оператор занят, то далее для текущего вызова предпочтительный оператор будет игнорироваться и будет применяться выбранная стратегия распределения. Если вызов с номера А обслужит другой оператор, то предпочтительным для обслуживания последующих вызовов с номера А станет он.
Ручной (по требованию оператора) режим распределения вызовов из расширенной очереди - Manual
При указании стратегии распределения Manual, очередь НЕ БУДЕТ самостоятельно распределять вызовы. Этим должен будет заниматься супервизор (или оператор, если это позволяется лицензией). Данный функционал необходимо использовать с осторожностью, так как это может привести к слишком долгому ожиданию вызовов в очереди и потере клиентов. Рекомендуем использовать одну из стратегий распределения (mia, loa, random) в совокупности с функционалом принудительного распределения.
Алгоритм работы очереди в режиме Manual:
- Вызов поступает в очередь.
- Если очередь настроена в данном режиме, то вызовы помещается в очередь с учетом приоритетов и не распределяется на операторов.
- Супервизор (и оператор, если позволяется лицензией), выбирает вызов в ручном режиме с использованием АРМ.