Skip to main content

เทมเพลตข้อความ

ภาพรวม

Template Message คือคลังข้อความสำเร็จรูปที่สร้างครั้งเดียวแล้วนำกลับมาใช้ซ้ำได้ในหลายช่องทาง จุดเด่นของโมดูลนี้คือระบบ merge tag ซึ่งเป็นตัวแปรที่จะถูกแทนค่าตามผู้รับแต่ละคนในตอนส่งจริง เช่น ชื่อผู้รับ แต้มสะสม หรือค่าจาก custom attribute ที่องค์กรกำหนดเอง

นอกจากข้อความล้วนแล้ว โมดูลนี้ยังรองรับ Card Builder ที่อัปโหลดรูป hero ประกอบการ์ดได้ และจำนวนเทมเพลตที่สร้างได้ถูกจำกัดด้วยโควตา maxTemplates ตามแพ็กเกจขององค์กร

Business Flow

  1. หน้าจัดการเทมเพลตเรียก GET /api/template-message เพื่อลิสต์เทมเพลตแบบแบ่งหน้า โดย scope ตาม lineOaId ของผู้ใช้ปัจจุบัน
  2. ตอนแก้ไขเนื้อหา ตัวแก้ไขเรียก GET /api/template-message/merge-tags เพื่อดึงรายการ merge tag ที่ใช้ได้ ซึ่งรวมทั้ง tag ระบบ (ชื่อ, LINE display name และอื่น ๆ) และ tag ที่มาจาก Attribute Master ของ OA นั้น โดยพารามิเตอร์ showSystem ควบคุมว่าจะรวม tag ระบบด้วยหรือไม่
  3. สร้างเทมเพลตใหม่ผ่าน POST /api/template-message (multipart/form-data) ระบบจะตรวจโควตา maxTemplates และตรวจชื่อซ้ำก่อนบันทึก หากเกินโควตาจะตอบกลับเป็น error
  4. อัปโหลดรูป hero ของ Card Builder ผ่าน POST /api/template-message/upload-image เส้นทางนี้เป็น path แบบ static จึงถูก register ก่อน /:id เพื่อให้ routing เลือกได้ถูกตัว
  5. โมดูลอื่นที่ต้องการ dropdown เรียก GET /api/template-message/find-all-object
  6. ดูรายละเอียดด้วย GET /api/template-message/:id แก้ไขด้วย PUT /api/template-message/:id (form-data) และลบด้วย DELETE /api/template-message/:id
  7. เมื่อส่งข้อความจริงผ่าน campaign, auto-response หรือ workflow merge tag จะถูกแทนค่าโดย linemessageapi/mergetag.go ในขั้นตอนประกอบ payload

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

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

MethodRouteHandlerPolicy (metadata)
GET/api/template-messagect.findAllread template-message
GET/api/template-message/merge-tagsct.getMergeTagsread template-message
GET/api/template-message/find-all-objectct.findAllObject
GET/api/template-message/:idct.findOneread template-message
POST/api/template-messagect.createcreate template-message
POST/api/template-message/upload-imagect.uploadImagecreate template-message
PUT/api/template-message/:idct.updateupdate template-message
DELETE/api/template-message/:idct.deletedelete template-message

ทุก route ครอบด้วย modulegate.ModuleGate(d, "template-message")

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

  • สิทธิ์การเข้าถึง — ต้องผ่าน ModuleGate("template-message") ส่วน PolicyModuleTemplateMessage ถูกประกาศไว้เป็น metadata ของแต่ละ handler
  • ตารางที่เกี่ยวข้องtemplate_message, attribute_master, system_attribute, line_oa
  • Redis — cache ทั้งรายการลิสต์และรายละเอียดรายตัว
  • Storage Service — เก็บรูป hero ที่อัปโหลดผ่าน Card Builder
  • Cross-moduleplanlimits สำหรับโควตา maxTemplates และ auth สำหรับ context ของผู้ใช้
  • โมดูลที่เกี่ยวข้อง — Attribute Master (แหล่งที่มาของ merge tag), Campaign Management, Auto Response และ LINE Message API (ตัวแทนค่า merge tag ตอนส่ง)