Skip to main content

ปุ่มตอบด่วน

ภาพรวม

Quick Reply คือชุดปุ่มตัวเลือกที่แสดงเหนือแป้นพิมพ์ในหน้าแชท LINE ให้ผู้ใช้กดเลือกแทนการพิมพ์เอง โมดูลนี้ทำหน้าที่เป็นคลังกลางสำหรับเก็บชุดปุ่มที่สร้างไว้ เพื่อนำไปแนบกับข้อความในจุดต่าง ๆ ได้

โมดูลนี้เป็นโมดูลที่พัฒนาขึ้นใหม่ในเวอร์ชัน Go โดยไม่มีต้นฉบับใน NestJS โครงสร้างโค้ดอ้างอิงจาก โมดูลเรียบง่ายที่มีอยู่แล้วอย่าง Content Category และ Template Message จุดที่ต่างจากโมดูลอื่นคือมี endpoint references สำหรับตรวจสอบว่าชุดปุ่มนั้นถูกใช้งานอยู่ที่ใดบ้าง ก่อนตัดสินใจลบ

Business Flow

  1. GET /api/quick-reply ลิสต์ชุดปุ่มแบบแบ่งหน้า scope ตาม lineOaId ของผู้ใช้ ทุก query ต้องระบุเงื่อนไข deleted_date IS NULL อย่างชัดเจน เนื่องจาก entity ไม่ได้ใช้ gorm.DeletedAt
  2. POST /api/quick-reply สร้างชุดปุ่มใหม่ โดยระบุชื่อชุดและรายการปุ่มพร้อม action ของแต่ละปุ่ม
  3. GET /api/quick-reply/:id ดูรายละเอียด หากเป็น id ที่ไม่มีอยู่จริงหรือเป็นของ OA อื่น จะตอบกลับด้วย httpx.NotFound แทนการคืนค่าว่าง
  4. GET /api/quick-reply/:id/references ตรวจสอบว่าชุดปุ่มนี้ถูกอ้างอิงจากที่ใดบ้าง เพื่อให้ UI แจ้งเตือนผลกระทบก่อนลบ
  5. PUT /api/quick-reply/:id แก้ไขชุดปุ่ม
  6. DELETE /api/quick-reply/:id เป็น soft delete โดยประทับค่าลงคอลัมน์ deleted_date
  7. เมื่อส่งข้อความจริง ชุดปุ่มที่เลือกไว้จะถูกแนบไปกับ payload ที่ยิงเข้า LINE

ไฟล์และฟังก์ชันหลัก

โค้ดหลักอยู่ที่ internal/modules/quickreply/ ประกอบด้วย controller.go, service.go และ dto.go

MethodRouteHandlerPolicy (metadata)
GET/api/quick-replyct.listreadAll quick-reply
POST/api/quick-replyct.createcreate quick-reply
GET/api/quick-reply/:idct.getread quick-reply
GET/api/quick-reply/:id/referencesct.referencesread quick-reply
PUT/api/quick-reply/:idct.updateupdate quick-reply
DELETE/api/quick-reply/:idct.deletedelete quick-reply

ทุก route ถูก register บน group authed ซึ่งใช้ global JWT โดยไม่มี ModuleGate ครอบ

จุดเชื่อมต่อกับ Service อื่น

  • สิทธิ์การเข้าถึง — ต้องผ่าน global JwtAuth และ token ต้องมี lineOaId ส่วนค่า PolicyModuleQuickReply = "quick-reply" เป็น enum ที่ตั้งให้ตรงกับ MODULE_URL.QUICK_REPLY ของ cms-web เพื่อให้บังคับใช้ policy ได้ทันทีหากเปิดใช้งานในอนาคต
  • ตารางที่เกี่ยวข้องquick_reply ซึ่งใช้ soft delete แบบคอลัมน์ deleted_date ธรรมดา ไม่ใช่ gorm.DeletedAt
  • Context — อ่าน lineOaId จาก CLS เพื่อกำหนดขอบเขตข้อมูล
  • เอกสารออกแบบdocs/superpowers/specs/2026-07-25-quick-reply-design.md
  • โมดูลที่เกี่ยวข้อง — Auto Response, Rich Message และ Workflow