กฎเวิร์กโฟลว์
ทำกระบวนการ Helpdesk ของคุณให้เป็นอัตโนมัติด้วยกฎเวิร์กโฟลว์ที่ปรับแต่งได้ กฎเวิร์กโฟลว์ช่วยให้คุณสามารถอัปเดตคุณลักษณะตั๋วโดยอัตโนมัติ ส่งการแจ้งเตือน และทริกเกอร์การกระทำเฉพาะตามเหตุการณ์หรือเงื่อนไขที่กำหนด ฟีเจอร์นี้ช่วยลดงานด้วยตนเอง รักษา ความสม่ำเสมอ และเพิ่มความเร็วในการตอบสนอง
หลังจากการติดตั้ง 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 — เปรียบเทียบค่าฟิลด์โดยใช้ regular expressions สำหรับการจับคู่รูปแบบขั้นสูง
- 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 ในฟิลด์ Email Subject และ Email Body เพื่อแทรกข้อมูลตั๋ว ลูกค้า และข้อความแบบไดนามิก
ตัวแปรตั๋ว:
| ตัวแปร | คำอธิบาย |
|---|---|
{{ 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 }} | ปีปัจจุบัน |
ตัวอย่างเทมเพลตอีเมล:
Subject: การตอบกลับใหม่ในตั๋ว #{{ 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) | ทำคำขอ 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 วินาทีเพื่อป้องกันลูปไม่สิ้นสุด
- ค่าฟิลด์ที่ไม่ถูกต้อง (สถานะที่ไม่มีอยู่ ลำดับความสำคัญ เป็นต้น) จะถูกเพิกเฉยอย่างสงบ
- ข้อผิดพลาดของสคริปต์ไม่ส่งผลกระทบต่อกฎอื่นหรือทำให้ระบบล่ม
- ฟิลด์กำหนดเองอ้างอิงโดยรหัสของพวกเขา ไม่ใช่ชื่อ
การแจ้งเตือน
คุณสามารถส่งการแจ้งเตือนทางอีเมลอัตโนมัติเมื่อกฎดำเนินการเพื่อให้ทุกฝ่ายได้รับแจ้ง

ตัวเลือกการแจ้งเตือนรวมถึง:
- 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
ประเภท: กฎเวิร์กโฟลว์
ใช้งาน: ใช่
เหตุการณ์: New Customer Reply
เงื่อนไข: Status Not Equals Closed
การกระทำ: Set Status → Waiting for Agent
การตอบกลับใหม่จากบุคคลที่สาม
เมื่อบุคคลที่สามส่งข้อความ ระบบจะตั้งสถานะเป็น Waiting for Agent และเพิ่มแท็ก `third_party`
ประเภท: กฎเวิร์กโฟลว์
ใช้งาน: ใช่
เหตุการณ์: New Third Party Reply
เงื่อนไข: ไม่มี
การกระทำ:
Set Status → Waiting for Agent
Add Tags → third_party
ตั๋วถูกมอบหมายให้พนักงาน
เมื่อตั๋วถูกมอบหมายให้สมาชิกพนักงาน จะย้ายไปยังโฟลเดอร์ Assigned โดยอัตโนมัติและส่งการแจ้งเตือนทางอีเมล
ประเภท: กฎเวิร์กโฟลว์
ใช้งาน: ใช่
เหตุการณ์: Ticket Assigned
เงื่อนไข: ไม่มี
การกระทำ:
Change Folder → Assigned
Send email to ticket owner
ปิดตั๋วหลังจาก 72 ชั่วโมงไม่มีการตอบกลับ
หากไม่ได้รับการตอบกลับภายใน 72 ชั่วโมง ตั๋วจะปิดโดยอัตโนมัติ
ประเภท: กฎเวิร์กโฟลว์
ใช้งาน: ใช่
เหตุการณ์: Cron Every Hour
เงื่อนไข:
Status Equals Waiting for Customer
Hours Since Last Reply Greater Than 72
การกระทำ: Set Status → Closed
สคริปต์: กำหนดเส้นทางและจัดลำดับความสำคัญตามโดเมนอีเมลลูกค้า
กำหนดเส้นทางลูกค้าองค์กรไปยังการสนับสนุนเฉพาะและตั้งลำดับความสำคัญสูง
ประเภท: กฎเวิร์กโฟลว์
ใช้งาน: ใช่
เหตุการณ์: New Ticket
เงื่อนไข: ไม่มี
การกระทำ: 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"];
}
}
```
สคริปต์: จัดหมวดหมู่ตั๋วอัตโนมัติตามคำหลักในหัวเรื่อง
จัดหมวดหมู่ตั๋วอัตโนมัติและตั้งฟิลด์กำหนดเองตามเนื้อหาหัวเรื่อง
ประเภท: กฎเวิร์กโฟลว์
ใช้งาน: ใช่
เหตุการณ์: New Ticket
เงื่อนไข: ไม่มี
การกระทำ: 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";
}
```
สคริปต์: เลื่อนระดับตามการวิเคราะห์เนื้อหาข้อความ
ตรวจจับคำหลักเร่งด่วนในข้อความและเลื่อนระดับตั๋วอัตโนมัติ
ประเภท: กฎเวิร์กโฟลว์
ใช้งาน: ใช่
เหตุการณ์: New Customer Reply
เงื่อนไข: ไม่มี
การกระทำ: 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;
}
}
}
```