ปุ่มตอบด่วน
ภาพรวม
Quick Reply คือชุดปุ่มตัวเลือกที่แสดงเหนือแป้นพิมพ์ในหน้าแชท LINE ให้ผู้ใช้กดเลือกแทนการพิมพ์เอง โมดูลนี้ทำหน้าที่เป็นคลังกลางสำหรับเก็บชุดปุ่มที่สร้างไว้ เพื่อนำไปแนบกับข้อความในจุดต่าง ๆ ได้
โมดูลนี้เป็นโมดูลที่พัฒนาขึ้นใหม่ในเวอร์ชัน Go โดยไม่มีต้นฉบับใน NestJS โครงสร้างโค้ดอ้างอิงจาก
โมดูลเรียบง่ายที่มีอยู่แล้วอย่าง Content Category และ Template Message
จุดที่ต่างจากโมดูลอื่นคือมี endpoint references สำหรับตรวจสอบว่าชุดปุ่มนั้นถูกใช้งานอยู่ที่ใดบ้าง
ก่อนตัดสินใจลบ
Business Flow
GET /api/quick-replyลิสต์ชุดปุ่มแบบแบ่งหน้า scope ตามlineOaIdของผู้ใช้ ทุก query ต้องระบุเงื่อนไขdeleted_date IS NULLอย่างชัดเจน เนื่องจาก entity ไม่ได้ใช้gorm.DeletedAtPOST /api/quick-replyสร้างชุดปุ่มใหม่ โดยระบุชื่อชุดและรายการปุ่มพร้อม action ของแต่ละปุ่มGET /api/quick-reply/:idดูรายละเอียด หากเป็น id ที่ไม่มีอยู่จริงหรือเป็นของ OA อื่น จะตอบกลับด้วยhttpx.NotFoundแทนการคืนค่าว่างGET /api/quick-reply/:id/referencesตรวจสอบว่าชุดปุ่มนี้ถูกอ้างอิงจากที่ใดบ้าง เพื่อให้ UI แจ้งเตือนผลกระทบก่อนลบPUT /api/quick-reply/:idแก้ไขชุดปุ่มDELETE /api/quick-reply/:idเป็น soft delete โดยประทับค่าลงคอลัมน์deleted_date- เมื่อส่งข้อความจริง ชุดปุ่มที่เลือกไว้จะถูกแนบไปกับ payload ที่ยิงเข้า LINE
ไฟล์และฟังก์ชันหลัก
โค้ดหลักอยู่ที่ internal/modules/quickreply/ ประกอบด้วย controller.go, service.go
และ dto.go
| Method | Route | Handler | Policy (metadata) |
|---|---|---|---|
| GET | /api/quick-reply | ct.list | readAll quick-reply |
| POST | /api/quick-reply | ct.create | create quick-reply |
| GET | /api/quick-reply/:id | ct.get | read quick-reply |
| GET | /api/quick-reply/:id/references | ct.references | read quick-reply |
| PUT | /api/quick-reply/:id | ct.update | update quick-reply |
| DELETE | /api/quick-reply/:id | ct.delete | delete 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