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