Skip to main content

ตอบกลับอัตโนมัติ (Auto Response)

ภาพรวม

Auto Response คือกฎแบบ "keyword → Rich Message" ของ LINE OA เมื่อผู้ใช้พิมพ์ข้อความในห้องแชทที่ตรงกับ keyword ที่ตั้งไว้ ระบบจะส่ง Rich Message ที่ผูกกับ keyword นั้นกลับไปให้โดยอัตโนมัติ โดยไม่ต้องมีแอดมินคอยตอบ

หน้าจอนี้เหมาะกับทีมที่ดูแลแชทของ LINE OA และต้องการลดภาระการตอบคำถามซ้ำ ๆ เช่น เวลาทำการ ที่ตั้งสาขา วิธีสั่งซื้อ หรือโปรโมชันประจำเดือน

ข้อมูล 1 รายการประกอบด้วย

ข้อมูลคำอธิบาย
ชื่อกฎชื่อที่ใช้อ้างอิงในตาราง ความยาวไม่เกิน 100 ตัวอักษร
Keywordระบุได้หลายคำต่อ 1 กฎ ระบบจะตอบกลับเมื่อข้อความตรงกับคำใดคำหนึ่ง
Rich Messageข้อความ Rich Message ที่จะถูกส่งกลับเมื่อ keyword ถูก trigger
สถานะเปิด (active) / ปิด (inactive) ปรับได้ทันทีจากตาราง

จุดสำคัญที่ต้องทราบ

  • Keyword ต้องไม่ซ้ำกันทั้งระบบ ระบบตรวจสอบความซ้ำแบบทันทีขณะพิมพ์ หากซ้ำจะแจ้งเตือนพร้อมลิงก์ไปยังกฎที่ถือ keyword นั้นอยู่
  • Keyword ของกฎที่เปิดใช้งานอยู่ จะถูกนำไปแสดงเป็นคำแนะนำ (suggestion) ให้ฟีเจอร์อื่นที่ส่งข้อความกลับเข้าห้องแชทได้ เช่น Quick Reply, Template Message, Flex Card Builder และปุ่ม action ของ Rich Message
  • หาก LINE OA ตั้งค่าลำดับการจัดการข้อความเป็น ai_classifier_only ระบบจะขึ้นแถบเตือนเหนือตาราง เพราะในโหมดนั้น chatbot/AI classifier จะรับข้อความทั้งหมดไป ทำให้ Auto Response ไม่ทำงาน

Business Flow

การจัดการรายการกฎ

  1. เข้าหน้ารายการ Auto Response ระบบตรวจสิทธิ์การเข้าถึง (สิทธิ์ VIEW ของโมดูล auto-response) ก่อนแสดงผล
  2. ระบบอ่านการตั้งค่า LINE OA ปัจจุบันเพื่อตรวจว่าโหมดจัดการข้อความเป็น ai_classifier_only หรือไม่ ถ้าใช่จะแสดงแถบเตือนที่ปิดได้เหนือตาราง
  3. ตารางแสดงลำดับ ชื่อกฎ (เรียงลำดับได้) Rich Message ที่ผูกไว้ สถานะ และปุ่มดำเนินการ หาก Rich Message ที่ผูกไว้ถูกลบหรือปิดใช้งาน จะขึ้นป้ายกำกับให้เห็นในคอลัมน์นั้น
  4. ค้นหาและกรองข้อมูลได้จากชื่อกฎและสถานะ เงื่อนไขการกรองล่าสุดถูกจดจำไว้ในเซสชัน ทำให้กลับเข้าหน้านี้แล้วยังเห็นผลการกรองเดิม
  5. เปิด/ปิดกฎได้ทันทีด้วยสวิตช์ในตาราง ระบบบันทึกทันทีโดยไม่ต้องยืนยันซ้ำ
  6. การลบต้องยืนยันผ่านกล่องข้อความก่อน เมื่อสำเร็จระบบจะแจ้งผลและรีเฟรชตารางให้อัตโนมัติ

การสร้างและแก้ไขกฎ

  1. เข้าฟอร์มได้ 4 โหมด ได้แก่ สร้างใหม่ แก้ไข ทำสำเนา (duplicate) และดูอย่างเดียว (view) โดยหัวข้อและปุ่มบนหน้าจอจะเปลี่ยนตามโหมด
  2. ระบบโหลดรายการ Rich Message ที่เปิดใช้งานมาเป็นตัวเลือกก่อน แล้วจึงโหลดข้อมูลกฎเดิม เพื่อให้ตรวจสอบได้ว่า Rich Message ที่ผูกไว้ยังมีอยู่จริง
  3. หาก Rich Message เดิมถูกลบหรือปิดไปแล้ว ระบบจะล้างค่าในช่องนั้นและแสดงข้อความแจ้งเตือนให้ผู้ใช้เลือกใหม่
  4. กรอกชื่อกฎ ระบุ keyword และเลือก Rich Message ช่อง keyword รับค่าแบบแท็ก พิมพ์เครื่องหมายจุลภาคเพื่อขึ้นแท็กใหม่ได้ และจำกัดความยาวการแสดงผลแท็กละ 30 ตัวอักษร
  5. ทุกครั้งที่เพิ่ม keyword ระบบจะตรวจความซ้ำกับกฎอื่นในระบบ หากซ้ำจะลบแท็กนั้นออกให้ทันที พร้อมแจ้งเตือนและมีปุ่มเปิดกฎที่ใช้ keyword นั้นอยู่ในแท็บใหม่
  6. คอลัมน์ด้านขวาแสดงตัวอย่างข้อความในรูปแบบหน้าจอแชทจริง เพื่อให้เห็นผลลัพธ์ก่อนบันทึก
  7. ปุ่มบันทึกจะเปิดใช้งานเมื่อกรอกครบทั้งชื่อ keyword และ Rich Message และไม่มีข้อผิดพลาดค้างอยู่ในฟอร์ม
  8. โหมดสร้างใหม่บันทึกได้ทันที ส่วนโหมดแก้ไขจะมีกล่องยืนยันก่อนบันทึก เมื่อสำเร็จระบบจะพากลับสู่หน้ารายการ

การนำ keyword ไปใช้ในฟีเจอร์อื่น

  1. ฟีเจอร์ที่ต้องพิมพ์ข้อความซึ่งจะถูกส่งกลับเข้าห้องแชท จะเรียกใช้ช่องกรอกแบบ AutoComplete ที่ดึง keyword ของกฎที่เปิดใช้งานอยู่มาแสดงเป็นคำแนะนำ (ดึงสูงสุด 100 รายการ)
  2. ระบบรวม keyword จากทุกกฎ ตัดค่าซ้ำและค่าว่างออก แล้วแสดงพร้อมป้ายกำกับให้รู้ว่าเป็น keyword ของ Auto Response
  3. ผู้ใช้ยังพิมพ์ข้อความอิสระได้ตามปกติ คำแนะนำเป็นเพียงตัวช่วยให้ข้อความที่ตั้งไว้ตรงกับกฎที่มีอยู่จริง

หน้าจอและองค์ประกอบหลัก

หน้ารายการ (/auto-response)

  • แถบเตือน AI Classifier — แสดงเมื่อ LINE OA ตั้งค่าให้ AI classifier รับข้อความทั้งหมด ปิดแถบได้และไม่กระทบการทำงานอื่น
  • ส่วนกรองข้อมูล — ช่องค้นหาชื่อกฎ และตัวเลือกสถานะ พร้อมปุ่มค้นหา/ล้างค่า
  • ตารางรายการ — คอลัมน์ลำดับ ชื่อ Rich Message สถานะ (สวิตช์) และปุ่มแก้ไข/ลบ รองรับการเรียงลำดับตามชื่อและการแบ่งหน้า
  • กล่องยืนยันและกล่องแจ้งผล — ใช้ชุด modal มาตรฐานของระบบสำหรับยืนยันการลบ แจ้งสำเร็จ และแจ้งข้อผิดพลาด

ไฟล์อ้างอิงหลัก: src/app/auto-response/page.tsx, src/components/auto-response/list/auto-response.container.tsx

หน้าฟอร์ม (/auto-response/form)

  • ช่องชื่อกฎ — บังคับกรอก จำกัด 100 ตัวอักษร มีคำอธิบายเงื่อนไขอักขระที่อนุญาตในรูปแบบ popover
  • ช่อง Keyword — ช่องเลือกแบบแท็กที่ไม่มี dropdown ผู้ใช้พิมพ์เองทั้งหมด รองรับการคั่นด้วยจุลภาค
  • ช่องเลือก Rich Message — ค้นหาได้ในรายการที่โหลดมาแล้ว พร้อมปุ่มโหลดรายการใหม่กรณีเพิ่ง publish Rich Message ตัวใหม่
  • สวิตช์สถานะ — กำหนดว่ากฎจะเริ่มทำงานทันทีหลังบันทึกหรือไม่ (การสร้างใหม่ตั้งค่าเป็นเปิดใช้งานให้เป็นค่าเริ่มต้น)
  • แผงพรีวิวแชท — จำลองหน้าจอ LINE เพื่อแสดง Rich Message ที่เลือก

ไฟล์อ้างอิงหลัก: src/app/auto-response/form/page.tsx, src/components/auto-response/form/auto-response-form.container.tsx, src/components/auto-response/form/auto-response-form.tsx

คอมโพเนนต์ร่วม

src/components/common/auto-response-keyword-autocomplete.tsx — ช่องกรอกแบบ AutoComplete ที่นำ keyword ของกฎที่เปิดใช้งานมาเป็นคำแนะนำ ใช้เฉพาะกับฟิลด์ที่ค่าจะถูกส่งกลับเข้าห้องแชทเท่านั้น ไม่ควรใช้กับข้อความที่ใช้แสดงผลอย่างเดียว

บริการฝั่ง API

รวมอยู่ที่ src/services/auto-response.service.ts ภายใต้ path หลัก auto-response

ความสามารถEndpoint
ดึงรายการกฎGET /auto-response
ดึงข้อมูลกฎรายตัวGET /auto-response/{id}
สร้างกฎใหม่POST /auto-response
แก้ไขกฎPUT /auto-response/{id}
เปลี่ยนสถานะเปิด/ปิดPUT /auto-response/{id}/status
ลบกฎDELETE /auto-response/{id}
ตรวจสอบ keyword ซ้ำPOST /auto-response/check-keyword-exists

จุดเชื่อมต่อกับฟีเจอร์อื่น

  • สิทธิ์การใช้งาน — ทั้งหน้ารายการและหน้าฟอร์มถูกควบคุมด้วยสิทธิ์ของโมดูล auto-response โดยการเปิดสิทธิ์โมดูลนี้จะปลดล็อกทั้งเมนู Auto Response และ Quick Reply พร้อมกัน
  • Rich Message Management — เป็นแหล่งข้อมูลของตัวเลือก Rich Message หากรายการที่ผูกไว้ถูกลบหรือปิดใช้งาน กฎ Auto Response นั้นจะทำงานไม่สมบูรณ์ และหน้าฟอร์มจะบังคับให้เลือกใหม่
  • LINE OA Management — ค่าการตั้งค่า messageHandlingConfig.priority ของ LINE OA เป็นตัวกำหนดว่า Auto Response จะถูก AI classifier แย่งข้อความไปหรือไม่
  • Quick Reply / Template Message / Flex Card Builder / Rich Message — เป็นผู้ใช้ปลายทางของคำแนะนำ keyword เพื่อให้ปุ่มที่กดแล้วส่งข้อความกลับเข้าแชทตรงกับกฎ Auto Response ที่มีอยู่จริง
  • โครงสร้างพื้นฐานร่วม — ใช้ระบบยืนยันตัวตนและ HTTP client กลางของ CMS (ออกจากระบบอัตโนมัติเมื่อ token หมดอายุ) ระบบ breadcrumb และเมนูด้านข้าง รวมถึงชุด modal และการจดจำเงื่อนไขการกรองใน sessionStorage เช่นเดียวกับหน้ารายการอื่นในระบบ

รายละเอียดฝั่ง Backend (CMS API)

ฝั่ง cms-api ทำหน้าที่เป็น ฝั่งตั้งค่า ของ Auto Response เท่านั้น ไม่ใช่ฝั่งที่ตอบข้อความจริง ส่วนที่ตอบข้อความคือ service แยกชื่อ line-management-webhook-go ซึ่งอ่านค่าที่หน้านี้บันทึกไว้ผ่าน Redis cache

โค้ดฝั่ง backend อยู่ที่โมดูล internal/modules/autoresponse/

สิทธิ์ที่ต้องมี

  • ทุก route ถูกครอบด้วย module gate ของโมดูล auto-response หากองค์กรไม่ได้เปิดโมดูลนี้ request จะถูกปฏิเสธก่อนถึง handler
  • แต่ละ endpoint ยังตรวจ policy แยกอีกชั้น: readAll สำหรับดึงรายการและตรวจ keyword ซ้ำ, read สำหรับดูรายตัว, create / update / delete ตามการกระทำ
  • การลบถาวร (hard delete) ต้องเป็น Super Admin เท่านั้น ไม่ใช่แค่มีสิทธิ์ delete ของโมดูล

Validation และ Business Rule ที่ backend ตรวจ

  • keyword ต้องไม่ซ้ำภายใน LINE OA เดียวกัน เป็นกฎหลักของโมดูลนี้ backend จึงเปิด endpoint POST /api/auto-response/check-keyword-exists แยกไว้ (รับ payload ที่มีฟิลด์ keyword) เพื่อให้ฟอร์มถามก่อน submit ได้ ไม่ต้องรอ error ตอนบันทึก
  • endpoint สร้างกฎ (POST /api/auto-response) รับข้อมูลแบบ multipart/form-data ไม่ใช่ JSON ล้วน เพราะรองรับการแนบไฟล์มาพร้อมฟอร์มในคำขอเดียว
  • การเปลี่ยนสถานะเปิด/ปิดแยกเป็น endpoint ของตัวเอง (PUT /api/auto-response/:id/status) ไม่ผูกกับการแก้เนื้อหา ทำให้ปิดกฎชั่วคราวได้โดยไม่ต้องส่งข้อมูลกฎทั้งชุดกลับไปและไม่ต้องลบ
  • การดึงรายการ (GET /api/auto-response) ตอบกลับเป็นโครงสร้างแบ่งหน้าที่มีทั้งรายการข้อมูลและจำนวนรวม โดย join กับ rich message ที่ผูกไว้ให้เลย หน้ารายการจึงแสดงชื่อ Rich Message ได้ในคำขอเดียว

สิ่งที่บันทึกและผลข้างเคียง (Side Effect)

  • ข้อมูลกฎถูกบันทึกลงตาราง auto_response และอ้างอิงกับตาราง rich_message และ line_oa
  • หลังสร้างหรือแก้กฎ backend เขียน Redis cache ทันที ด้วยคีย์กลุ่ม AUTO_RESPONSE:* (มีการตั้ง TTL) เพื่อให้ webhook ไม่ต้อง query ฐานข้อมูลทุกครั้งที่มีข้อความเข้ามา
  • พร้อมกันนั้น backend ยังเขียนข้อมูล mapping ของ LINE OA ลง Redis hash (คีย์ LINE_OA_ID) เพื่อให้ webhook resolve ได้เร็วว่าข้อความที่เข้ามาเป็นของ OA ไหน
  • การลบด้วย DELETE /api/auto-response/:id เป็น soft delete ข้อมูลยังอยู่ในฐานข้อมูล ส่วนการลบจริงต้องเรียก DELETE /api/auto-response/:id/hard และต้องส่ง query parameter ยืนยัน (confirm=true) เพิ่มด้วย เป็นการกันการลบพลาดสองชั้น

Edge Case และข้อสังเกตที่ควรรู้

  • เพราะ webhook อ่านจาก cache ไม่ใช่จากฐานข้อมูลโดยตรง หากการเขียน cache ล้มเหลวหรือ cache หมดอายุจังหวะที่แก้ค่าไม่สำเร็จ กฎที่แก้ไปแล้วอาจยังไม่มีผลทันที ในห้องแชท กรณีที่ตั้งค่าแล้วบอทตอบเป็นค่าเดิม ให้สงสัย cache ก่อนสงสัยข้อมูล
  • โมดูลนี้ query ตาราง rich message โดยตรงจากภายในโมดูลตัวเอง (ไม่ผ่าน repository ของโมดูล rich message) ดังนั้นการเปลี่ยนโครงสร้างข้อมูล rich message มีผลกระทบมาถึงโมดูลนี้ด้วย
  • การที่ Auto Response จะได้รับข้อความหรือไม่ ยังขึ้นกับการตั้งค่าลำดับการจัดการข้อความของ LINE OA ที่ตั้งไว้อีกชั้น — บันทึกกฎสำเร็จไม่ได้แปลว่ากฎจะได้ทำงาน หาก OA ตั้งให้ AI classifier รับข้อความทั้งหมด