ไอเดีย #31: ระบบ Helpdesk / Ticket สำหรับฝ่ายบริการลูกค้า
เจ้าของร้านขายอุปกรณ์ไอทีออนไลน์คนหนึ่งเคยบ่นให้ฟังว่า ลูกค้าทักมาถามเรื่องเคลมสินค้าทั้งทางอีเมล ทาง LINE OA และโทรเข้ามา พนักงานสามคนต่างคนต่างตอบ บางเคสตอบซ้ำกันสองคน บางเคสไม่มีใครตอบเลยจนลูกค้าโกรธไปรีวิวแย่ ๆ ต้นเหตุคือไม่มีที่รวมเรื่องไว้ที่เดียว ระบบ Helpdesk หรือ Ticket คือคำตอบที่ทำเองได้ไม่ยาก และเป็นโปรเจกต์ที่ขายให้ SME ได้จริง
ใครจะใช้
- ลูกค้า — เปิดเรื่องผ่านฟอร์มหน้าเว็บหรือส่งอีเมล แล้วติดตามสถานะได้เอง
- เจ้าหน้าที่ (Agent) — รับเรื่อง ตอบกลับ เปลี่ยนสถานะ ส่งต่อให้คนอื่น
- หัวหน้าทีม — ดูภาพรวม คิวงานค้าง เคสที่ใกล้หลุด SLA
- ผู้ดูแลระบบ — ตั้งค่าหมวดหมู่ ระดับความสำคัญ และเวลา SLA
ฟีเจอร์ขั้นต่ำ (MVP)
- เปิด ticket จากฟอร์มหน้าเว็บ ได้เลขที่อ้างอิงสั้น ๆ เช่น TK-2569-00123 ให้ลูกค้าเก็บไว้
- รับอีเมลเข้ามาเป็น ticket อัตโนมัติ (อ่าน inbox ผ่าน IMAP ด้วย cron) และถ้าลูกค้าตอบอีเมลเดิม ให้ต่อท้ายเป็นข้อความใน ticket เดิม
- สถานะพื้นฐาน: ใหม่ / กำลังดำเนินการ / รอลูกค้าตอบ / ปิดแล้ว พร้อม log ว่าใครเปลี่ยนเมื่อไร
- มอบหมาย ticket ให้เจ้าหน้าที่ และมีหน้า “งานของฉัน”
- กำหนด SLA ตามระดับความสำคัญ เช่น ต้องตอบครั้งแรกภายในกี่ชั่วโมง และต้องปิดภายในกี่วันทำการ แสดงสีเตือนเมื่อใกล้ครบเวลา
- ตอบกลับลูกค้าทางอีเมลจากในระบบ แยกโน้ตภายใน (internal note) ที่ลูกค้ามองไม่เห็น
- แนบไฟล์ได้
ต่อยอดได้อีก
- เชื่อม LINE Messaging API ให้ลูกค้าเปิดเรื่องจาก LINE OA และรับแจ้งเตือนเมื่อสถานะเปลี่ยน
- คลังคำตอบสำเร็จรูป (canned response) และฐานความรู้ให้ลูกค้าค้นหาเองก่อนเปิด ticket
- แบบประเมินความพึงพอใจหลังปิดเรื่อง
- Dashboard เวลาตอบเฉลี่ย จำนวนเคสต่อหมวด เจ้าหน้าที่คนไหนงานล้น
โครงข้อมูลตั้งต้น
tickets— id, code, customer_id, category_id, priority, status, assignee_id, first_response_due, resolve_due, created_atticket_messages— id, ticket_id, author_type, author_id, body, is_internal, email_message_id, created_atticket_attachments— id, message_id, file_path, mime, sizesla_policies— id, priority, first_response_hours, resolve_hours, business_hours_onlyticket_events— id, ticket_id, user_id, action, old_value, new_value, created_at
ระดับความยาก และสิ่งที่จะได้เรียนรู้
ระดับ ปานกลาง ทำด้วย Yii2 หรือ Laravel คู่กับ PostgreSQL/MySQL ได้สบาย สิ่งที่จะได้ฝึก:
- การอ่านและส่งอีเมล รวมถึงการจับคู่ thread ด้วย header อย่าง Message-ID และ In-Reply-To
- การคำนวณเวลาแบบวันทำการ ที่ต้องข้ามวันหยุด
- queue และ cron job สำหรับงานเบื้องหลัง
- การออกแบบ state machine ให้สถานะเปลี่ยนได้เฉพาะเส้นทางที่ถูกต้อง
ข้อควรระวัง
- ข้อความลูกค้ามักมีชื่อ เบอร์โทร ที่อยู่ ถือเป็นข้อมูลส่วนบุคคลตาม PDPA ต้องจำกัดสิทธิ์การเข้าถึงและมีนโยบายลบข้อมูลเก่า
- อีเมลขาเข้าอาจเป็น spam หรือมีไฟล์แนบอันตราย ควรจำกัดชนิดไฟล์และขนาด และกันอีเมลตอบกลับอัตโนมัติวนลูป
- ถ้าเจ้าหน้าที่สองคนกดรับเรื่องเดียวกันพร้อมกัน อาจเกิด race condition ควรใช้ optimistic locking หรือ update แบบมีเงื่อนไข
ใครเคยทำระบบ ticket ใช้เองในบริษัทบ้างครับ ตอนคิด SLA แบบวันทำการ แก้ปัญหาวันหยุดยาวกันยังไง หรือถ้าเป็นคุณจะเพิ่มฟีเจอร์อะไรเป็นอย่างแรก มาแชร์กันในกระทู้นี้ได้เลย และถ้าลงมือทำแล้ว เอาภาพหน้าจอหรือโครงสร้างมาอวดในบอร์ดนี้ได้นะครับ