Skip to main content

ข้อความริช (Rich Message)

ภาพรวม

Rich Message คือกล่องข้อความที่จะถูกส่งออกไป ประกอบด้วยข้อความ รูปภาพ วิดีโอ Flex Message รวมถึงปุ่มและลิงก์ ได้หลายบล็อกในชุดเดียวกัน โมดูลนี้ทำหน้าที่เป็นคลังเก็บ rich message ที่นำกลับมาใช้ซ้ำได้ โดยผู้บริโภคหลักคือโมดูลแคมเปญและ auto-response

โมดูลรองรับการอัปโหลดรูปภาพและวิดีโอผ่าน multipart/form-data พร้อมมี endpoint สำหรับสร้าง thumbnail จากวิดีโอให้ด้วย

Business Flow

  1. GET /api/rich-message แสดงรายการแบบแบ่งหน้าในรูป {data, total} โดย scope ตาม lineOaId
  2. GET /api/rich-message/find-all-object คืนข้อมูลรูปแบบ object/dropdown ซึ่งไม่มี policy annotation ตามระบบ TypeScript เดิม
  3. POST /api/rich-message รับ multipart/form-data เพื่อสร้างรายการใหม่
    • อัปโหลดไฟล์แนบขึ้น object storage ผ่าน storage service
    • หากเป็น Flex Message จะส่งไปให้ LINE ตรวจสอบความถูกต้องผ่าน validateJsonFlexMessage หากไม่ผ่านจะตอบ error RMS_002 (Failed to validate with LINE API)
    • หากชื่อซ้ำจะตอบ error RMS_001 (Duplicate title)
  4. POST /api/rich-message/gen-thumbnail-video รับ form-data เพื่ออัปโหลดวิดีโอและขอ thumbnail ใช้ตอนตั้งค่าบล็อกวิดีโอ เนื่องจาก LINE ต้องการ preview image
  5. GET /api/rich-message/:id ดูรายละเอียด และ PUT /api/rich-message/:id แก้ไข ซึ่งรับเป็น form-data เช่นเดียวกัน
  6. DELETE /api/rich-message/:id ลบแบบ soft delete ส่วน DELETE /api/rich-message/:id/hard?confirm=true ลบข้อมูลจริง เฉพาะ super admin
  7. เมื่อแคมเปญถึงเวลาส่ง ระบบจะอ่าน rich message ตัวนี้ไปประกอบ payload แล้ว publish ลง RabbitMQ

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

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

MethodRouteHandlerPolicy (metadata)
GET/api/rich-messagect.findAllreadAll rich-message
GET/api/rich-message/find-all-objectct.findAllObject
GET/api/rich-message/:idct.findByIDread rich-message
POST/api/rich-messagect.createcreate rich-message
POST/api/rich-message/gen-thumbnail-videoct.genThumbnailVideoread rich-message
PUT/api/rich-message/:idct.updateupdate rich-message
DELETE/api/rich-message/:idct.deletedelete rich-message
DELETE/api/rich-message/:id/hardct.hardDeleteauth.SuperAdmin()

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

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

  • PermissionModuleGate("rich-message") เป็นตัวบังคับจริง ส่วน PolicyModuleRichMessage เป็นเพียง metadata และ hard delete ต้องผ่าน auth.SuperAdmin()
  • ตารางที่เกี่ยวข้องrich_message, line_oa
  • Redis — cache ทั้งรายการและรายละเอียด โดย key และ TTL ตรงกับระบบ TypeScript เดิม
  • Storage — เก็บรูปภาพ วิดีโอ และ thumbnail
  • External — LINE API สำหรับ validate Flex Message
  • ผู้บริโภค — การจัดการแคมเปญ, auto-response ซึ่งอ่านตาราง rich_message โดยตรง และ template message
  • Error codeRMS_001 ชื่อซ้ำ และ RMS_002 LINE validate ล้มเหลว