Skip to main content

กฎเวิร์กโฟลว์

ทำกระบวนการ 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;
}
}
}
```