Перейти к содержанию

Правила и автоматизация

Правило делает за вас рутинную часть работы с заявками: когда что-то происходит с заявкой и заявка соответствует вашему описанию, измените её, оставьте заметку, сообщите кому-то или отправьте клиенту сохранённый ответ. Правила создаются в рабочей области в разделе 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 исполнителя.

Создание правила

  1. Откройте Automation → Rules и выберите New rule.
  2. Назовите правило и выберите триггер.
  3. Добавьте условия и выберите all или any. Каждое значение рисуется для своего поля: выбор для проектов, статусов, меток, сотрудников и организаций, поле числа или даты либо текст.
  4. Добавьте действия.
  5. Используйте Test against ticket с номером заявки, чтобы увидеть, что сделало бы правило.
  6. Сохраните.

Список правил показывает каждое правило одним предложением («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, которому вы доверили бы настройку рабочей области.