เทมเพลตข้อความ
ภาพรวม
Template Message คือคลังข้อความสำเร็จรูปที่สร้างครั้งเดียวแล้วนำกลับมาใช้ซ้ำได้ในหลายช่องทาง จุดเด่นของโมดูลนี้คือระบบ merge tag ซึ่งเป็นตัวแปรที่จะถูกแทนค่าตามผู้รับแต่ละคนในตอนส่งจริง เช่น ชื่อผู้รับ แต้มสะสม หรือค่าจาก custom attribute ที่องค์กรกำหนดเอง
นอกจากข้อความล้วนแล้ว โมดูลนี้ยังรองรับ Card Builder ที่อัปโหลดรูป hero ประกอบการ์ดได้
และจำนวนเทมเพลตที่สร้างได้ถูกจำกัดด้วยโควตา maxTemplates ตามแพ็กเกจขององค์กร
Business Flow
- หน้าจัดการเทมเพลตเรียก
GET /api/template-messageเพื่อลิสต์เทมเพลตแบบแบ่งหน้า โดย scope ตามlineOaIdของผู้ใช้ปัจจุบัน - ตอนแก้ไขเนื้อหา ตัวแก้ไขเรียก
GET /api/template-message/merge-tagsเพื่อดึงรายการ merge tag ที่ใช้ได้ ซึ่งรวมทั้ง tag ระบบ (ชื่อ, LINE display name และอื่น ๆ) และ tag ที่มาจาก Attribute Master ของ OA นั้น โดยพารามิเตอร์showSystemควบคุมว่าจะรวม tag ระบบด้วยหรือไม่ - สร้างเทมเพลตใหม่ผ่าน
POST /api/template-message(multipart/form-data) ระบบจะตรวจโควตาmaxTemplatesและตรวจชื่อซ้ำก่อนบันทึก หากเกินโควตาจะตอบกลับเป็น error - อัปโหลดรูป hero ของ Card Builder ผ่าน
POST /api/template-message/upload-imageเส้นทางนี้เป็น path แบบ static จึงถูก register ก่อน/:idเพื่อให้ routing เลือกได้ถูกตัว - โมดูลอื่นที่ต้องการ dropdown เรียก
GET /api/template-message/find-all-object - ดูรายละเอียดด้วย
GET /api/template-message/:idแก้ไขด้วยPUT /api/template-message/:id(form-data) และลบด้วยDELETE /api/template-message/:id - เมื่อส่งข้อความจริงผ่าน campaign, auto-response หรือ workflow
merge tag จะถูกแทนค่าโดย
linemessageapi/mergetag.goในขั้นตอนประกอบ payload
ไฟล์และฟังก์ชันหลัก
โค้ดหลักอยู่ที่ internal/modules/templatemessage/ ประกอบด้วย controller.go, service.go
และ dto.go
| Method | Route | Handler | Policy (metadata) |
|---|---|---|---|
| GET | /api/template-message | ct.findAll | read template-message |
| GET | /api/template-message/merge-tags | ct.getMergeTags | read template-message |
| GET | /api/template-message/find-all-object | ct.findAllObject | — |
| GET | /api/template-message/:id | ct.findOne | read template-message |
| POST | /api/template-message | ct.create | create template-message |
| POST | /api/template-message/upload-image | ct.uploadImage | create template-message |
| PUT | /api/template-message/:id | ct.update | update template-message |
| DELETE | /api/template-message/:id | ct.delete | delete 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-module —
planlimitsสำหรับโควตาmaxTemplatesและauthสำหรับ context ของผู้ใช้ - โมดูลที่เกี่ยวข้อง — Attribute Master (แหล่งที่มาของ merge tag), Campaign Management, Auto Response และ LINE Message API (ตัวแทนค่า merge tag ตอนส่ง)