Очередь исполнителей
Для контроля и автоматического назначения исполнителей для заявок в боте существуют очереди исполнителей. Вариативность перехода заявки по очереди зависит от заданных параметров. Один из стандартных вариантов, это когда заявка назначается исполнителю, он переходит в конец очереди, а следующая за ним персона становится первой в очереди на заявку.
Существуют очереди по видам очередей и по видам заявок. Очереди по видам заявок создаются автоматически, при создании вида заявки. Для создания очереди по виду очереди требуется сначала создать вид очереди, далее соответствующая очередь появится в меню очередей.
В меню очередей исполнителей можно попасть из раздела Заявки и персоны в верхнем меню бота, нажав в выпадающем списке на Очередь исполнителей.
После перехода к меню очередей открывается таблица содержащая все очереди исполнителей бота распределенные на две группы по видам очередей и видам заявок.
В меню доступны следующие функции:
- Просмотр таблиц очередей;
- 1 - Создание новых видов очередей;
- 2 - Добавление персон в очереди;
- 3 - Переход к таблице видов очередей;
- 4.1 - Редактирование информации о добавленных персонах и их удаление из очереди;
- 4.2 - Редактирование информации о видах очередей.
Виды очередей
При переходе по кнопке Виды очередей открывается меню видов очередей.
Здесь можно просматривать таблицу, создавать новые виды очередей (1), редактировать информацию об уже существующих и удалять их (2).
При нажатии на кнопку Создать (или кнопку Создать новый вид очереди в меню очередей) открывается окно настройки вида очереди со следующими полями:
- Наименование - имя вида очереди;
- Код - идентификатор используемый в js методах.
После создания вид появится в таблице в меню видов с автоматически заданным ему Id. Тут его можно редактировать и удалить.
Редактирование видов включает в себя те же поля, что при создании.
Добавление персон в очереди
При нажатии на кнопку Добавить персону в очередь открывается окно настройки персоны со следующими полями:
- Активна - если опция выключена, то персона будет пропускаться в очереди;
- Очередь - выпадающий список с видами очередей, куда будет добавлена персона;
- Тип заявки - выпадающий список с типами заявок по которым будут созданы очереди, куда будет добавлена персона;
При добавлении персоны в очередь может быть заполнено только одно поле из Очередь и Тип заявки. При заполнении обоих полей произойдет ошибка.
- Персона - выпадающий список с персонами, добавляемыми в очередь;
- Количество отказов от заявки - когда значение данного поля превысит максимальное количество отказов в боте, персона будет перемещена в конец очереди.
После создания персона появится в соответствующей очереди в меню очередей. Тут ее можно редактировать и удалить.
Редактирование видов включает в себя те же поля, что при создании.
JS
С очередями так же можно работать с помощью методов JS. Все методы дляи работыих с очередями исполнителей
К очередям исполнителейописание можно обращаться из JS следующими методами:
Назначить исполнителя заявки
ticket.assignToPersonById(?int $personId, ?int $personQueueIdForLog = null, ?string $personQueueTableForLog = null, ?int $assignAttemptForLog = null): bool
Получить количество отказов от заявок
ticket.getAssignedPersonRejectsCount(?int $personQueueId = null, ?string $personQueueTable = null): ?int
Установить количество отказов от заявок
ticket.setAssignedPersonRejectsCount(int $rejectsCount, ?int $personQueueId = null, ?string $personQueueTable = null): bool
Увеличить количество отказов от заявок
ticket.incAssignedPersonRejectsCount(?int $personQueueId = null, ?string $personQueueTable = null): bool
Заявка передается в скрипт v8 автоматически: определяется на основе текущей активной заявки лида (текущая (активная) заявка хранится в атрибутах лида в переменной sys_current_ticket_id) или передается по цепочке из триггера в другой триггер/скрипт, если первоначально был запущен триггер по событию связанному с заявкой.
У каждого объекта ScriptPersonQueue есть свои атрибуты и методы. Они расписаны в конце раздела.
Каждый из методов подробнее расписан ниже.
Назначить заявку следующему исполнителю
ticket.assignToNextQueuePerson(int $queueMode = 1, ?int $personQueueId = null, ?string $personQueueTable = null, ?int $currentAssignAttempt = null, bool $isIncRejectsCount = true, bool $isMoveToEndIfRejectsExceed = true)Описание:
Назначить заявку следующему исполнителю. Исполнитель будет определен, как первый в очереди распределения по типу заявки.
Логика работы функции:
Поиск исполнителя выполняется по следующим критериям:
Условие (количество отказов по исполнителю rejects_count < $maxRejects+1) НЕ НУЖНО, т.к.: 1. Как только лимит превышен персона сразу будет перемещена в конец очереди, а счетчик сброшен; 2. Может возникнуть баг, если лимит превышен, персона никогда не попадет в выборку и ее счетчик не будет сброшен.
Атрибуты:
Режим работы очереди.
Для работы с очередью на основе видов заявок указывать не нужно, будет использовано значение по умолчанию 1;Для работы с очередью на основе видов очередей указать 2.
Номер попытки прогона одного и того же тикета по той же очереди
Возвращает:
bool - подтверждение назначения заявки следующему исполнителю.
Пример:
ticket.assignToNextQueuePerson(2, 1653, null, null, true, false);Перенести исполнителя в конец очереди
ticket.moveAssignedPersonToEndOfQueue(int $queueMode = 1, ?int $personQueueId = null, ?string $personQueueTable = null, bool $isResetRejectsCount = true)Описание:
Используется для скрипта "Приема заявки" в боте, чтобы переместить исполнителя в конец очереди, после того как он принял заявку.
Логика работы функции: переносит персону, которой в данный момент назначен тикет, в конец очереди, при этом исполнитель заявки не меняется.
Атрибуты:
Режим работы очереди.
Для работы с очередью на основе видов заявок указывать не нужно, будет использовано значение по умолчанию 1;Для работы с очередью на основе видов очередей указать 2.
Возвращает:
bool - подтверждение переноса исполнителя.
Пример:
ticket.moveAssignedPersonToEndOfQueue(1, null, null, true);Назначить исполнителя заявки
ticket.assignToPersonById(?int $personId, ?int $personQueueIdForLog = null, ?string $personQueueTableForLog = null, ?int $assignAttemptForLog = null)Описание:
Назначает указанного исполнителя для заявки. Для сброса персоны необходимо указать null в аргументах функции.
Атрибуты:
Возвращает:
bool - подтверждение назначения исполнителя.
Пример:
ticket.assignToPersonById(2561);Получить количество отказов от заявок
ticket.getAssignedPersonRejectsCount(?int $personQueueId = null, ?string $personQueueTable = null): ?intОписание:
Возвращает количество отказов от заявок для текущего исполнителя.
Атрибуты:
Возвращает:
int - количество отказов от заявок в формате числа.
Пример:
let RejectsCount = ticket.getAssignedPersonRejectsCount();Установить количество отказов от заявок
ticket.setAssignedPersonRejectsCount(int $rejectsCount, ?int $personQueueId = null, ?string $personQueueTable = null)Описание:
Установить количество отказов от заявок для текущего исполнителя.
Атрибуты:
Возвращает:
bool - подтверждение успешной установки отказов.
Пример:
ticket.setAssignedPersonRejectsCount(10);Увеличить количество отказов от заявок
ticket.incAssignedPersonRejectsCount(?int $personQueueId = null, ?string $personQueueTable = null)Описание:
Увеличить количество отказов от заявок для текущего исполнителя на 1. Метод не сбрасывает кол-во попыток, если значение будет больше чем указанное в боте максимальное количество отказов.
Атрибуты:
Возвращает:
bool - подтверждение успешного увеличения отказов.
Пример:
ticket.incAssignedPersonRejectsCount();Добавление персоны в очередь
person.addToQueue(?int $personQueueId = null, ?string $personQueueTable = null, ?int $ticketTypeId = null, bool $isActive = true, int $rejectsCount = 0)Описание:
Добавляет персону в указанную очередь.
Атрибуты:
ID вида очереди, в которую будет добавлена персона
Наименование кастомной таблицы
ID вида заявки, в очередь которой будет добавлена персона
Активность персоны в очереди
Количество отказов от заявки
Одновременно в методе может быть указан либо только вид заявки, либо только вид очереди (одна из этих переменных должна содержать значение null). Так же по видам заявок не должна допускаться установка значения кастомной таблицы
Возвращает:
int - id добавленной персоны.
Пример:
person.addToQueue(null, null, 2541);Удаление персоны из очереди
person.removeFromQueue(?int $personQueueId = null, ?string $personQueueTable = null, ?int $ticketTypeId = null)Описание:
Удаляет персону из указанной очереди.
Атрибуты:
ID вида очереди
Наименование кастомной таблицы
ID вида заявки
Одновременно в методе может быть указан либо только вид заявки, либо только вид очереди (одна из этих переменных должна содержать значение null)
Возвращает:
bool - подтверждение удаления персоны.
Пример:
person.removeFromQueue(3527, "table");Перемещение персоны в конец очереди
person.moveToEndOfQueue(int $queueMode = 1, ?int $personQueueId = null, ?string $personQueueTable = null, ?int $ticketTypeId = null, bool $isResetRejectsCount = true)Описание:
Перемещает персону в конец указанной очереди, либо в конец нескольких очередей.
Атрибуты:
Режим работы очереди.
Для работы с очередью на основе видов заявок указывать не нужно, будет использовано значение по умолчанию 1;Для работы с очередью на основе видов очередей указать 2
ticketTypeIds
isResetRejectsCount
Возвращает:
bool - подтверждение удачного перемещения персоны.
Пример:
person.moveToEndOfQueue(2, 3352, null, [1013]);
persons.moveToEndOfQueue();Активация/деактивация персоны в очереди
person.setIsActiveInQueue(bool $isActive = true)Описание:
Включает или выключает параметр Активна персоны в очереди.
Атрибуты:
isActive
Возвращает:
bool - подтверждение активации или деактивации.
Пример:
persons.setIsActiveInQueue(true);Найти очередь исполнителей
personQueues.find($where, bool $isReturnCollection = false)Описание:
Находит очередь исполнителей соответствующую указанным значениям.
Атрибуты:
where
isReturnCollection
Возвращает:
ScriptPersonQueue[] - обертка вокруг записи из таблицы person_queues
или
Collection - данные очередей в виде коллекции.
Пример:
Найти очередь исполнителей по id
personQueues.findById(string|int|null $id)Описание:
Находит очередь исполнителей соответствующую указанному id.
Атрибуты:
id
Возвращает:
ScriptPersonQueue[] - обертка вокруг записи из таблицы person_queues.
Пример:
Найти очереди исполнителей по заголовку
personQueues.findAllByTitles(string|array|object|null $titles, bool $isEnabled = null, string $findTitleOperator = 'IN', bool $isReturnCollection = false)Описание:
Находит очереди исполнителей соответствующим указанным заголовкам.
Атрибуты:
titles
isEnabled
findTitleOperator
isReturnCollection
Возвращает:
ScriptPersonQueue[] - обертка вокруг записи из таблицы person_queues
или
Collection - данные очередей в виде коллекции.
Пример:
Найти очередь исполнителей по коду
personQueues.findByCode(string $code, bool $isEnabled = null, string $findCodeOperator = '=')Описание:
Находит очередь исполнителей соответствующую указанному коду.
Атрибуты:
code
isEnabled
findCodeOperator
Возвращает:
ScriptPersonQueue[] - обертка вокруг записи из таблицы person_queues.
Пример:
let personQueue = personQueues.findByCode('хоккей');
let personQueueId = personQueue.id;Найти очереди исполнителей по коду
personQueues.findAllByCodes($codes, bool $isEnabled = null, string $findCodeOperator = 'IN', bool $isReturnCollection = false)Описание:
Находит очереди исполнителей соответствующим указанным кодам.
Атрибуты:
codes
isEnabled
findCodeOperator
isReturnCollection
Возвращает:
ScriptPersonQueue[] - обертка вокруг записи из таблицы person_queues
или
Collection - данные очередей в виде коллекции.
Пример:
Обновить очередь исполнителей
personQueues.reload()Описание:
Обновляет данные очередей исполнителей
Возвращает:
bool - подтверждение обновления очередей.
Получить коллекцию очередей исполнителей
personQueues.getCollection()Описание:
Возвращает коллекцию очередей исполнителей.
Возвращает:
Collection - данные очередей в виде коллекции.
Атрибуты и методы ScriptPersonQueue
Получение id
.id
.getId()
.code
.getCode()
.is_enabled
.getIsEnabled()
.title
.getTitle()
.created_at
.createdAt
.getCreatedAtFormatted(string $format = 'Y-m-d H:i:s', ?string $timeZone = null)
.createdAtFormatted(string $format = 'Y-m-d H:i:s', ?string $timeZone = null)
.updated_at
.updatedAt
.getUpdatedAtFormatted(string $format = 'Y-m-d H:i:s', ?string $timeZone = null)
.updatedAtFormatted(string $format = 'Y-m-d H:i:s', ?string $timeZone = null)




