Правила робочого процесу
Автоматизуйте процеси вашої служби підтримки за допомогою налаштовуваних правил робочого процесу. Правила робочого процесу дозволяють автоматично оновлювати атрибути тікетів, надсилати сповіщення та запускати конкретні дії на основі визначених подій або умов. Ця функція допомагає зменшити ручну роботу, підтримувати послідовність та прискорити час відповіді.
Після встановлення Helpdesk MX автоматично створює правило робочого процесу за замовчуванням "Auto-change status to Waiting for Customer on agent reply".
Загальна інформація

- Rule Name: визначте описову назву для правила. Чітка назва допомагає вашій команді легко ідентифікувати, що робить кожне правило.
- Active: увімкніть або вимкніть правило. Виконуються лише активні правила при виконанні їх подій та умов.
- Event: виберіть подію, яка запускає правило.
- Priority / Sort Order: вкажіть порядок обробки правила. Менші числа виконуються першими. Це допомагає контролювати, які правила мають пріоритет, коли кілька правил застосовуються до однієї події.
- Stop Further Rules Processing: зупинити виконання правил з нижчим пріоритетом після застосування цього правила. Корисно, коли ви хочете, щоб конкретне правило мало повний контроль над подією.
Події
Події визначають, коли оцінюється правило робочого процесу. Доступні події:
- New Ticket — запускається при створенні нового тікета.
- New Customer Reply — запускається, коли клієнт надсилає нову відповідь.
- New Staff Reply — запускається, коли агент публікує відповідь.
- New Third Party Reply — запускається, коли третя сторона надсилає повідомлення.
- Ticket Assigned — запускається, коли тікет призначається користувачу.
- Ticket Updated — запускається при оновленні полів тікета.
- Cron Every Hour — запускається системою щогодини, дозволяючи дії на основі часу.
Умови
Умови визначають, коли правило робочого процесу повинно виконуватися. Ви можете використовувати одну або кілька умов, поєднувати їх логікою ALL/ANY та навіть створювати вкладені групи для розширеної фільтрації. Залиште цей розділ порожнім, щоб правило виконувалося при кожному виникненні події.

Доступні поля
Ви можете будувати умови, використовуючи такі поля:
- Subject — перевіряє слова або фрази в темі тікета.
- Customer Email — відповідає email-адресі клієнта.
- Customer Name — порівнює ім'я клієнта.
- Channel — фільтрує тікети, створені з конкретних джерел (наприклад, email, контактна форма, API).
- Department — відповідає поточному відділу, призначеному тікету.
- Department (Before Change) — дозволяє порівняння з відділом до події оновлення.
- Folder — перевіряє, до якої папки поточно належить тікет.
- Folder (Before Change) — перевіряє папку до останньої зміни.
- Owner — відповідає призначеному агенту.
- Owner (Before Change) — порівнює власника до оновлення.
- Priority — перевіряє поточний пріоритет тікета.
- Priority (Before Change) — порівнює пріоритет до оновлення.
- Status — перевіряє поточний статус тікета.
- Status (Before Change) — порівнює попередній статус.
- Last Message — дозволяє перевіряти вміст в останньому повідомленні.
- Last Reply By — визначає, хто відповів останнім (клієнт, персонал або третя сторона).
- Hours Since Created — час, що минув з моменту створення тікета.
- Hours Since Last Reply — час з моменту останньої відповіді.
- Hours Since Updated — час з моменту останньої зміни тікета.
Оператори умов
Кожна умова може використовувати один з таких операторів для визначення способу порівняння значень:
- Equals — спрацьовує, коли значення поля точно відповідає вказаному значенню.
- Not Equals — спрацьовує, коли значення поля відрізняється від вказаного значення.
- Greater Than — спрацьовує, коли значення більше за вказане (переважно для числових або часових полів).
- Greater Than or Equals — спрацьовує, коли значення більше або рівне вказаному.
- Less Than — спрацьовує, коли значення менше за вказане.
- Less Than or Equals — спрацьовує, коли значення менше або рівне вказаному.
- Between — спрацьовує, коли значення знаходиться між двома вказаними числами (корисно для умов на основі часу).
- Matches Regex — порівнює значення полів за допомогою регулярних виразів для розширеного зіставлення шаблонів.
- Starts With — спрацьовує, якщо поле починається з вказаного тексту.
- Ends With — спрацьовує, якщо поле закінчується вказаним текстом.
- Is Empty — спрацьовує, коли поле не має значення.
- Is Not Empty — спрацьовує, коли поле містить будь-яке значення.
- Contains — спрацьовує, коли поле включає вказаний текст.
- Does Not Contain — спрацьовує, коли поле не включає вказаний текст.
Дії
Дії визначають, що відбувається після виконання всіх умов. Кілька дій можна поєднати в одному правилі.

Доступні дії:
- Set Status — оновити статус тікета.
- Set Priority — змінити рівень пріоритету.
- Set Department — перепризначити тікет іншому відділу.
- Set Owner — призначити конкретному агенту.
- Change Folder — перемістити тікет до конкретної папки.
- Add Tags — додати теги для категоризації.
- Remove Tags — видалити існуючі теги з тікета.
- Send Email — надіслати email-сповіщення вказаним одержувачам.
- Run Script — виконати кастомний JavaScript-код для розширеної автоматизації.
Дія Send Email
Дія Send Email дозволяє надсилати автоматичні email-сповіщення при спрацюванні правила. Це корисно для оповіщення членів команди, повідомлення клієнтів або комунікації із зовнішніми сторонами.
Доступні опції:
- Send to ticket owner — сповістити призначеного агента.
- Send to all department users — оповістити всіх членів відділу тікета.
- Send to customer — інформувати клієнта про оновлення.
- Send to other addresses — вказати кастомні email-адреси.
- Email Subject — визначити тему листа (підтримує змінні шаблону Liquid).
- Email Body — скласти вміст листа (підтримує змінні шаблону Liquid).
- Include attachments — прикріпити файли з останнього повідомлення.
Змінні шаблону
Ви можете використовувати змінні шаблону Liquid в полях Email Subject та Email Body для динамічної вставки інформації про тікет, клієнта та повідомлення.
Змінні тікета:
| Змінна | Опис |
|---|---|
{{ ticket.code }} | Код тікета (наприклад, T-001) |
{{ ticket.subject }} | Тема тікета |
{{ ticket.created_at }} | Мітка часу створення тікета |
{{ ticket.updated_at }} | Мітка часу останнього оновлення |
{{ ticket.customer_name }} | Повне ім'я клієнта |
{{ ticket.customer_email }} | Email-адреса клієнта |
{{ ticket.admin_url }} | Пряме посилання на тікет в адмін-панелі |
{{ ticket.admin_last_message_text }} | Тіло останньої відповіді агента (простий текст) |
{{ ticket.admin_last_message_html }} | Тіло останньої відповіді агента (HTML) |
{{ ticket.customer_last_message_text }} | Тіло останньої відповіді клієнта (простий текст) |
{{ ticket.customer_last_message_html }} | Тіло останньої відповіді клієнта (HTML) |
Змінні власника/призначеного:
| Змінна | Опис |
|---|---|
{{ owner.firstname }} | Ім'я призначеного агента |
{{ owner.lastname }} | Прізвище призначеного агента |
{{ owner.email }} | Email призначеного агента |
{{ owner.fullname }} | Повне ім'я призначеного агента |
{{ owner.is_admin }} | Чи є власник адміністратором |
Змінні відділу:
| Змінна | Опис |
|---|---|
{{ department.name }} | Назва відділу |
{{ department.sender_name }} | Ім'я відправника відділу |
Змінні повідомлення (при запуску подіями повідомлення):
| Змінна | Опис |
|---|---|
{{ message.body_text }} | Вміст повідомлення (простий текст) |
{{ message.body_html }} | Вміст повідомлення (HTML) |
{{ message.type }} | Тип повідомлення |
{{ message.created_at }} | Мітка часу створення повідомлення |
Змінні дати/часу:
| Змінна | Опис |
|---|---|
{{ now }} | Поточна мітка часу (RFC3339) |
{{ date }} | Поточна дата (YYYY-MM-DD) |
{{ time }} | Поточний час (HH:MM:SS) |
{{ year }} | Поточний рік |
Приклад шаблону email:
Subject: Нова відповідь на тікет #{{ ticket.code }}
Привіт {{ owner.firstname }},
Клієнт відповів на тікет "{{ ticket.subject }}".
Клієнт: {{ ticket.customer_name }} ({{ ticket.customer_email }})
Останнє повідомлення:
{{ ticket.customer_last_message_text }}
Переглянути тікет: {{ ticket.admin_url }}
Дія Run Script
Дія Run Script дозволяє виконувати кастомний JavaScript-код для реалізації складної логіки автоматизації, що виходить за межі простого присвоєння полів. Скрипти можуть читати дані тікета, приймати умовні рішення та оновлювати кілька полів одночасно.
Доступні властивості тікета (читання):
| Властивість | Опис |
|---|---|
ticket.id | Унікальний ідентифікатор тікета |
ticket.subject | Тема тікета |
ticket.folder | Поточна папка (INBOX, ASSIGNED, SPAM тощо) |
ticket.tags | Масив тегів |
ticket.status | Об'єкт з id, code та name |
ticket.priority | Об'єкт з id та name |
ticket.department | Об'єкт з id та name |
ticket.owner | Об'єкт з id, email, firstname, lastname |
ticket.customer | Об'єкт з id, email, firstname, lastname, name |
ticket.<custom_field_code> | Значення кастомного поля за його кодом |
Доступні властивості тікета (запис):
| Властивість | Очікуване значення |
|---|---|
ticket.status | Код статусу (рядок) або ID статусу |
ticket.priority | Назва пріоритету (рядок) або ID пріоритету |
ticket.department | Назва відділу (рядок) або ID відділу |
ticket.owner | Email користувача (рядок) або ID користувача |
ticket.folder | Назва папки: "INBOX", "ASSIGNED", "SPAM", "ARCHIVE" |
ticket.tags | Масив рядків тегів |
ticket.<custom_field_code> | Значення, що відповідає типу кастомного поля |
Допоміжні функції:
| Функція | Повертає |
|---|---|
getStatuses() | Масив усіх доступних статусів |
getPriorities() | Масив усіх доступних пріоритетів |
getDepartments() | Масив усіх доступних відділів |
getUsers() | Масив усіх доступних користувачів |
fetch(url, options) | Виконання HTTP-запитів до зовнішніх API |
Контекст повідомлення (доступний при запуску правила подією повідомлення):
| Властивість | Опис |
|---|---|
message.id | Унікальний ідентифікатор повідомлення |
message.body_text | Вміст повідомлення (простий текст) |
message.body_html | Вміст повідомлення (HTML) |
message.createdAt | Мітка часу створення повідомлення |
Приклади скриптів:
// Встановити пріоритет на основі ключових слів теми
if (ticket.subject.toLowerCase().includes("urgent")) {
ticket.priority = "High";
}
// Маршрутизація тікетів по відділах на основі вмісту
if (ticket.subject.includes("billing") || ticket.subject.includes("invoice")) {
ticket.department = "Billing";
} else if (ticket.subject.includes("technical") || ticket.subject.includes("error")) {
ticket.department = "Technical Support";
}
// Обробка VIP-клієнтів
if (ticket.customer && ticket.customer.email.endsWith("@enterprise.com")) {
ticket.priority = "High";
ticket.tags = ["vip", "enterprise"];
}
// Встановити значення кастомного поля
ticket.order_id = "12345";
ticket.vip_customer = true;
ticket.order_amount = 99.99;
// Отримати дані клієнта із зовнішнього API та оновити тікет
var response = fetch("https://api.example.com/customers/" + ticket.customer.email, {
headers: { "Authorization": "Bearer YOUR_API_KEY" }
});
if (response.ok && response.json) {
ticket.customer_tier = response.json.tier;
if (response.json.tier === "enterprise") {
ticket.priority = "High";
ticket.department = "Enterprise Support";
}
}
Важливі примітки:
- Скрипти мають таймаут 10 секунд для запобігання нескінченним циклам.
- Невалідні значення полів (неіснуючий статус, пріоритет тощо) ігноруються.
- Помилки скриптів не впливають на інші правила та не призводять до збою системи.
- Кастомні поля адресуються за їх кодом, а не назвою.
Сповіщення
Ви можете надсилати автоматичні email-сповіщення при виконанні правила, щоб усі сторони були в курсі.

Опції сповіщень:
- Send email to ticket owner — сповістити призначеного агента.
- Send email to all department users — оповістити всіх членів відділу.
- Send email to customer — інформувати клієнта про зміни.
- Send email to other addresses — надіслати зовнішнім одержувачам.
- Email Subject — вказати тему листа.
- Email Body — скласти вміст листа.
- Attach files previously attached to the last message — включити попередні вкладення для контексту.
Приклади правил робочого процесу
Зміна статусу при відповіді клієнта
Коли клієнт відповідає, система автоматично змінює статус тікета на Waiting for Agent.
Тип: Workflow Rule
Is Active: Так
Event: New Customer Reply
Conditions: Status Not Equals Closed
Actions: Set Status → Waiting for Agent
Нова відповідь від третьої сторони
Коли третя сторона надсилає повідомлення, система встановлює статус Waiting for Agent та додає тег `third_party`.
Тип: Workflow Rule
Is Active: Так
Event: New Third Party Reply
Conditions: Немає
Actions:
Set Status → Waiting for Agent
Add Tags → third_party
Тікет призначено персоналу
Коли тікет призначається члену персоналу, він автоматично переміщується до папки Assigned та надсилається email-сповіщення.
Тип: Workflow Rule
Is Active: Так
Event: Ticket Assigned
Conditions: Немає
Actions:
Change Folder → Assigned
Send email to ticket owner
Закриття тікета після 72 годин без відповіді
Якщо відповідь не отримано протягом 72 годин, тікет автоматично закривається.
Тип: Workflow Rule
Is Active: Так
Event: Cron Every Hour
Conditions:
Status Equals Waiting for Customer
Hours Since Last Reply Greater Than 72
Actions: Set Status → Closed
Скрипт: Маршрутизація та пріоритезація на основі домену email клієнта
Маршрутизація корпоративних клієнтів до спеціалізованої підтримки та встановлення високого пріоритету.
Тип: Workflow Rule
Is Active: Так
Event: New Ticket
Conditions: Немає
Actions: Run Script
```javascript
if (ticket.customer && ticket.customer.email) {
var domain = ticket.customer.email.split("@")[1];
if (domain === "enterprise.com" || domain === "bigcorp.com") {
ticket.priority = "High";
ticket.department = "Enterprise Support";
ticket.tags = ["enterprise", "priority"];
}
}
```
Скрипт: Автоматична категоризація тікетів за ключовими словами теми
Автоматична категоризація тікетів та встановлення кастомних полів на основі вмісту теми.
Тип: Workflow Rule
Is Active: Так
Event: New Ticket
Conditions: Немає
Actions: Run Script
```javascript
var subject = ticket.subject.toLowerCase();
if (subject.includes("refund") || subject.includes("return")) {
ticket.department = "Billing";
ticket.category = "refund_request";
} else if (subject.includes("password") || subject.includes("login")) {
ticket.department = "Technical Support";
ticket.category = "account_access";
} else if (subject.includes("order") || subject.includes("shipping")) {
ticket.department = "Orders";
ticket.category = "order_inquiry";
}
```
Скрипт: Ескалація на основі аналізу вмісту повідомлення
Виявлення термінових ключових слів у повідомленнях та автоматична ескалація тікетів.
Тип: Workflow Rule
Is Active: Так
Event: New Customer Reply
Conditions: Немає
Actions: Run Script
```javascript
if (message && message.body_text) {
var body = message.body_text.toLowerCase();
var urgentKeywords = ["asap", "urgent", "critical", "down", "outage", "emergency"];
for (var i = 0; i < urgentKeywords.length; i++) {
if (body.includes(urgentKeywords[i])) {
ticket.priority = "High";
ticket.tags = ticket.tags.concat(["escalated"]);
break;
}
}
}
```