工作流规则
使用可自定义的工作流规则自动化您的服务台流程。工作流规则允许您根据定义的事件或条件自动更新工单属性、发送通知并触发特定操作。此功能有助于减少手动工作、保持一致性并加快响应时间。
安装后,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 — 匹配客户的电子邮件地址。
- Customer Name — 比较客户的姓名。
- Channel — 过滤从特定来源创建的工单(例如,电子邮件、联系表单、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 — 向指定收件人发送电子邮件通知。
- Run Script — 执行自定义 JavaScript 代码以进行高级自动化。
发送电子邮件操作
Send Email 操作允许您在触发规则时发送自动电子邮件通知。这对于提醒团队成员、通知客户或与外部方沟通很有用。
可用选项:
- Send to ticket owner — 通知分配的客服。
- Send to all department users — 提醒工单部门的所有成员。
- Send to customer — 通知客户有关更新的信息。
- Send to other addresses — 指定自定义电子邮件地址。
- Email Subject — 定义电子邮件主题行(支持 Liquid 模板变量)。
- Email Body — 撰写电子邮件内容(支持 Liquid 模板变量)。
- Include attachments — 附加来自最后一条消息的文件。
模板变量
您可以在电子邮件主题和电子邮件正文字段中使用 Liquid 模板变量来动态插入工单、客户和消息信息。
工单变量:
| 变量 | 描述 |
|---|---|
{{ ticket.code }} | 工单代码(例如,T-001) |
{{ ticket.subject }} | 工单主题行 |
{{ ticket.created_at }} | 工单创建时间戳 |
{{ ticket.updated_at }} | 最后更新时间戳 |
{{ ticket.customer_name }} | 客户全名 |
{{ ticket.customer_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 }} | 分配客服的电子邮件 |
{{ 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 }} | 当前年份 |
电子邮件模板示例:
主题:工单 #{{ ticket.code }} 的新回复
嗨 {{ owner.firstname }},
客户已回复工单 "{{ ticket.subject }}"。
客户:{{ ticket.customer_name }} ({{ ticket.customer_email }})
最后消息:
{{ ticket.customer_last_message_text }}
查看工单:{{ ticket.admin_url }}
运行脚本操作
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 | 用户电子邮件(字符串)或用户 ID |
ticket.folder | 文件夹名称:"INBOX"、"ASSIGNED"、"SPAM"、"ARCHIVE" |
ticket.tags | 标签字符串数组 |
ticket.<custom_field_code> | 匹配自定义字段类型的值 |
辅助函数:
| 函数 | 返回 |
|---|---|
getStatuses() | 所有可用状态的数组 |
getPriorities() | 所有可用优先级的数组 |
getDepartments() | 所有可用部门的数组 |
getUsers() | 所有可用用户的数组 |
fetch(url, options) | 向外部 API 发出 HTTP 请求 |
消息上下文(当规则由消息事件触发时可用):
| 属性 | 描述 |
|---|---|
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 秒超时以防止无限循环。
- 无效的字段值(不存在的状态、优先级等)会被优雅地忽略。
- 脚本错误不会影响其他规则或使系统崩溃。
- 自定义字段通过其代码而非名称引用。
通知
您可以在规则执行时发送自动电子邮件通知,以使所有各方了解情况。

通知选项包括:
- 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 文件夹并发送电子邮件通知。
类型: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
脚本:根据客户电子邮件域进行路由和优先级排序
将企业客户路由到专用支持并设置高优先级。
类型: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;
}
}
}
```