跳到主要内容

工作流规则

使用可自定义的工作流规则自动化您的服务台流程。工作流规则允许您根据定义的事件或条件自动更新工单属性、发送通知并触发特定操作。此功能有助于减少手动工作、保持一致性并加快响应时间。

安装后,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;
}
}
}
```