Правила и автоматизация¶
Правило делает за вас рутинную часть работы с заявками: когда что-то происходит с заявкой и заявка соответствует вашему описанию, измените её, оставьте заметку, сообщите кому-то или отправьте клиенту сохранённый ответ. Правила создаются в рабочей области в разделе Automation → Rules сотрудниками с helpdesk-pro.settings.
У правила всегда три части: когда (один триггер), если (условия по заявке) и тогда (одно или несколько действий). Редактора workflow и цепочки состояний нет.
Когда: триггеры¶
| Триггер | Ключ | Срабатывает, когда |
|---|---|---|
| Заявка создана | ticket.created |
Сохраняется новая заявка из любого канала. |
| Клиент ответил | client.replied |
Клиент (заявитель или копия) добавляет публичный ответ. Ответ по почте, только цитирующий переписку, не считается. |
| Сотрудник ответил клиенту | staff.replied |
Сотрудник добавляет публичный ответ. |
| Добавлена заметка | note.added |
Сотрудник добавляет внутреннюю заметку. |
| Статус изменился | status.changed |
Заявка переходит в другой статус. |
| Заявка назначена | ticket.assigned |
Исполнитель меняется, в том числе на никого. |
| Приоритет изменился | priority.changed |
Приоритет меняется. |
| Пользовательское поле изменилось | ticket.fields_changed |
Кто-то меняет одно или несколько пользовательских полей. Сочетайте с Changed field, чтобы реагировать только на одно поле. |
| Организация изменилась | ticket.organization_changed |
Заявку переносят в другую организацию или из неё. |
| Срок SLA скоро | ticket.sla_warning |
Цель входит во время предупреждения (SLA). |
| Срок SLA нарушен | ticket.sla_breached |
Цель проходит свой срок, а работа не сделана. Нарушение, найденное после того, как заявку уже ответили или решили, не срабатывает. |
| Клиент оценил заявку | ticket.rated |
Клиент отвечает «How did we do?» или меняет ответ (Оценки клиентов). |
| Клиент комментирует свою оценку | ticket.rating_commented |
Клиент добавляет или меняет комментарий под тем же ответом. |
| Заявка пробыла в статусе некоторое время | time |
Заявка пробыла в одном статусе (или любом статусе одной категории) заданное число часов: «waiting on the client for 72 hours». Проверяется каждые десять минут заданием rules.sweep. |
Правило по времени срабатывает один раз на заявку за пребывание в состоянии. Если заявка выходит из состояния и возвращается, отсчёт начинается заново, и правило может сработать снова через то же число часов. Пребывание считается с последнего изменения статуса заявки, поэтому переход между двумя статусами одной категории тоже начинает новое пребывание.
Если: условия¶
Каждое условие проверяет одно поле. Выберите all (должны совпасть все условия) или any (достаточно одного). Правило без условий совпадает с каждой заявкой, на которой срабатывает его триггер.
| Поле | Ключ | Проверяет |
|---|---|---|
| Project | project |
один из / не один из |
| Status | status |
один из / не один из |
| Status category | status_category |
одна из / не одна из |
| Priority | priority |
один из / не один из / не ниже / не выше |
| Labels | labels |
есть любой из / есть все из / нет ни одного / есть метка / нет меток |
| Channel | channel |
один из / не один из (web, email, staff, api) |
| Assignee | assignee |
один из / не один из / назначен / не назначен |
| Requester email | requester_email |
равен / заканчивается на / содержит / не содержит |
| Requester email domain | requester_domain |
один из / не один из (example.com) |
| Subject | subject |
содержит / не содержит / равен |
| Message text | body |
содержит / не содержит |
| Kind | kind |
один из / не один из (support, bug, feature) |
| Organization | organization |
одна из / не одна из / нет |
| SLA state | sla.state |
один из / не один из: Breached, Due soon, On track или No policy (также когда SLA выключен) |
| SLA target | sla.target |
одна из / не одна из: First response или Resolution. О какой цели предупреждение или нарушение. |
| Rating | csat.rating |
одна из / не одна из (Great, Okay, Not good) / нет. Последний раз, когда заявку спрашивали. |
| Rating comment | csat.comment |
заполнен / пуст / содержит |
| Changed field | fields.changed |
один из / не один из (ключи пользовательских полей). О каких полях событие A custom field changes. |
| Пользовательское поле | field.<key> |
Зависит от типа поля (ниже) |
Текстовые проверки игнорируют регистр. Message text — сообщение, о котором триггер: добавленный ответ или заметка либо первое сообщение новой заявки. Для триггера по времени и в пробном запуске это новейшее публичное сообщение заявки.
Условия пользовательских полей¶
Каждое неархивное пользовательское поле — отдельное условие с ключом field. и ключом поля (field.plan):
| Тип | Проверяет |
|---|---|
| Select | один из / не один из / заполнено / пусто |
| Multi-select | включает любой из / не включает ни одного / включает все / заполнено / пусто |
| Checkbox | да / нет |
| Number | не меньше / не больше / заполнено / пусто |
| Date | начиная с / не позже (YYYY-MM-DD) / заполнено / пусто |
| Text, long text, URL, email | содержит / не содержит / равен / заполнено / пусто |
Условие читает значение, которое видят сотрудники, какой бы ни была его видимость. Когда поле архивировано, правило, проверяющее его, сохраняет условие, но условие никогда не совпадает, пока поле архивное: список правил помечает правило Needs attention, а пробный запуск помечает условие Never matches. Восстановите поле, и правило снова работает.
Тогда: действия¶
Правило выполняет действия в указанном порядке, каждое по заявке в том виде, в каком её оставили предыдущие действия.
| Действие | Ключ | Значение |
|---|---|---|
| Установить статус | status |
Статус |
| Установить приоритет | priority |
Low, Normal, High или Urgent |
| Назначить | assign |
Сотрудника или никого (none) |
| Добавить метки | add_labels |
Одну или несколько меток |
| Удалить метки | remove_labels |
Одну или несколько меток |
| Установить тип | kind |
Support, bug или feature |
| Перенести в проект | project |
Проект |
| Добавить внутреннюю заметку | note |
Текст заметки (Markdown) |
| Уведомить | notify |
Исполнителя, всех, кто работает с проектом, или одного сотрудника, с необязательным сообщением |
| Отправить клиенту сохранённый ответ | reply |
Общий сохранённый ответ с текстом |
| Установить поле | set_field |
Пользовательское поле, затем значение его типа; пустое очищает |
| Опубликовать в каналы | channels |
Необязательное сообщение (до 500 символов) |
Каждое изменение идёт тем же путём, что изменение человеком, поэтому активность, события, уведомления, письма и обновления в реальном времени точно такие, какими были бы при изменении человеком. Назначение тому, кто не работает с проектом заявки, завершается ошибкой так же, как в рабочей области.
- Notify кладёт уведомление в колокольчик человека («Rule “Big customers” flagged “Invoice missing”: please look today») и отправляет его по почте, когда он не прочитал вовремя. Уведомляются только сотрудники, которые могут открыть заявку.
- Post to channels публикует заявку в каждом включённом канале уведомлений, где отмечено Rule posts и который охватывает проект заявки.
- Set a field проверяет значение так же, как введённое в рабочей области. Поле, не применимое к проекту заявки или с тех пор архивированное, пропускается, и выполняется следующее действие.
- Send the client a saved reply публикует ответ от системного человека Helpdesk с заполненными подстановками (
{{agent.name}}— «Helpdesk»), и клиенту, как обычно, отправляется письмо. Использовать можно только общие сохранённые ответы. Собственные действия макроса сохранённого ответа не применяются.
Защиты¶
Правила выполняются в порядке списка; меняйте его кнопками Move up и Move down в Automation → Rules. Следующее правило видит заявку в том виде, в каком её оставили предыдущие.
- Правила действуют от имени системы. Изменения правила делает системный человек Helpdesk, а правило называется в активности: хронология заявки говорит, что её изменило «Rule “Big customers”».
- Изменение, сделанное правилом, никогда не запускает правила снова. Правило не может запустить другое правило или само себя, поэтому зацикливания нет. Это включает поле, установленное правилом, и нарушение SLA, вызванное повышением приоритета правилом.
- Правило никогда не срабатывает дважды на одно событие. Повторно проигранное или повторённое событие ничего не делает.
- Сбойное правило пропускается и никогда не фатально. Если действие не удалось (человек больше не работает с проектом, удалён сохранённый ответ), ошибка записывается и показывается в правиле, а следующее правило всё равно выполняется. Запрос, вызвавший событие, никогда не затрагивается.
Правила выполняются после сохранения вызвавшего их изменения, в том же запросе (или задании — для почты и триггера по времени). Поиск, уведомления и обновления в реальном времени узнают об изменении до того, как на него подействует любое правило.
rules.enabled выключает все правила сразу, не удаляя ни одного. Каждое правило также можно выключить отдельно.
Встроенное автоматическое закрытие¶
Helpdesk Pro поставляет одно собственное правило, показанное в начале Automation → Rules: Auto-close. Решённая заявка, чей клиент молчит rules.auto_close.nudge_days, получает ответ от Helpdesk о том, что обращение будет закрыто через rules.auto_close.close_days дней, если клиент не ответит. Если клиент продолжает молчать, заявка закрывается через столько дней после напоминания.
Ответ клиента после напоминания отменяет закрытие, потому что ответ клиента открывает решённую заявку снова. Если заявку позже снова решат, цикл начинается заново.
Оно выключено по умолчанию, потому что его включение отправляет письма клиентам и закрывает их обращения. Включите его переключателем в Automation → Rules или на вкладке Rules настроек плагина. За один обход напоминание получают не более 50 заявок и закрываются 50, поэтому включение на большом объёме распределяет почту.
Текст напоминания — rules.auto_close.message; {days} становится задержкой закрытия. Автоматическое закрытие действует как правило: оно называется «Auto-close» в активности, а его ответ и закрытие никогда не запускают другие правила.
Примеры¶
- Эскалация нарушения. Триггер An SLA target is breached, без условий, действия Set the priority Urgent и Notify всех, кто работает с проектом.
- Работа с недовольным клиентом. Триггер The client rates the ticket, условие Rating — одно из Not good, действия Add an internal note («The client was not happy. Please call them.») и Assign to тимлиду.
- Метка VIP по полю. Триггер A custom field changes, условия Changed field — Plan и Plan — Gold, действие Set a field VIP customer в Yes.
- Напоминание молчащим клиентам. Триггер A ticket has been in a status for a while (waiting on client, 72 часа), действия Send the client a saved reply и Notify исполнителя.
Создание правила¶
- Откройте Automation → Rules и выберите New rule.
- Назовите правило и выберите триггер.
- Добавьте условия и выберите all или any. Каждое значение рисуется для своего поля: выбор для проектов, статусов, меток, сотрудников и организаций, поле числа или даты либо текст.
- Добавьте действия.
- Используйте Test against ticket с номером заявки, чтобы увидеть, что сделало бы правило.
- Сохраните.
Список правил показывает каждое правило одним предложением («When a ticket is created, if the subject contains “invoice”: set priority to High.»), с переключателем, когда оно последний раз срабатывало и сколько раз, и последней ошибкой. В меню ⋯ строки есть Move up, Move down и Delete.
Test against ticket — пробный запуск правила в том виде, в каком оно в редакторе, сохранённое или нет. Он говорит, какие условия заявка выполняет сейчас, каждое предложением, и что правило изменило бы («Set status to Resolved (now Open)»). Он ничего не сохраняет и игнорирует триггер: он отвечает на вопрос «если бы это правило выполнилось на этой заявке сейчас».
Настройки¶
На вкладке Rules настроек плагина:
| Ключ | По умолчанию | Что делает |
|---|---|---|
rules.enabled |
true |
Выполняет правила, созданные в Automation → Rules. Выключение останавливает все правила сразу, не удаляя ни одного; у автоматического закрытия свой переключатель. |
rules.auto_close.enabled |
false |
Встроенное автоматическое закрытие. |
rules.auto_close.nudge_days |
7 |
Сколько дней клиент решённой заявки молчит до отправки напоминания. |
rules.auto_close.close_days |
3 |
Через сколько дней после напоминания заявка закрывается, если клиент не ответил. |
rules.auto_close.message |
'' |
Текст напоминания. {days} становится close_days. Пусто использует встроенный текст. |
API и MCP¶
Каждому маршруту нужно helpdesk-pro.settings.
| Маршрут | Тело или запрос | Ответ |
|---|---|---|
GET /helpdesk-pro/rules |
{items, builtin}: правила по порядку, каждое со своим триггером, условиями, действиями, fire_count, last_fired_at, last_error, summary (правило одним предложением) и problems; builtin содержит автоматическое закрытие. |
|
GET /helpdesk-pro/rules/catalog |
{triggers, conditions, actions}: что предлагает редактор, включая всё, что зарегистрировало дополнение. |
|
POST /helpdesk-pro/rules |
{name, enabled, trigger, time, match, conditions, actions} |
201 с правилом. |
GET /helpdesk-pro/rules/{id} |
Правило. | |
PATCH /helpdesk-pro/rules/{id} |
Любое поле создания | Правило. Изменение правила очищает его последнюю ошибку. |
DELETE /helpdesk-pro/rules/{id} |
204. То, что правило уже сделало, остаётся. |
|
POST /helpdesk-pro/rules/order |
{ids}, каждое правило один раз, первый выполняется первым |
Правила в новом порядке. |
POST /helpdesk-pro/rules/test |
{ticket_id, rule_id} для сохранённого правила, {ticket_id, rule} для несохранённого |
{ticket_id, matched, match, conditions, actions, summary}. Нечитаемая заявка — 404. |
Правило в API:
{
"name": "Chase quiet clients",
"enabled": true,
"trigger": "time",
"time": {"status_category": "waiting_client", "hours": 72},
"match": "all",
"conditions": [{"field": "project", "op": "in", "value": [2]}],
"actions": [
{"type": "reply", "value": 14},
{"type": "notify", "value": "assignee", "message": "Chased the client for you."}
]
}
time принимает status_id вместо status_category для одного статуса. Set a field — {"type": "set_field", "field": "plan", "value": "gold"}; multi-select принимает список, checkbox — true или false, а null очищает поле. Условие пользовательского поля — {"field": "field.plan", "op": "in", "value": ["gold"]}. Операторы хранятся как in, not_in, has_any, has_all, has_none, is_set, is_empty, contains, not_contains, equals, ends_with, gte и lte.
Автоматическое закрытие задаётся через конфигурацию плагина (rules.auto_close.*). Переключатель рабочей области сохраняет его через маршрут конфигурации плагина API (PATCH /config/plugins/helpdesk-pro), для которого нужно api.config.write.
Инструменты MCP: list_rules, get_rule_catalog, get_rule, create_rule, update_rule, delete_rule, reorder_rules и test_rule. Правило действует с полномочиями системы на каждой заявке, поэтому давайте эти инструменты ИИ-клиенту только с ключом API, которому вы доверили бы настройку рабочей области.