Rich Menu
ภาพรวม
Rich menu คือเมนูรูปภาพที่แสดงด้านล่างหน้าแชท LINE ระบบรองรับหลายเมนูต่อหนึ่ง channel และสลับเมนูให้ผู้ใช้ได้ตามกลุ่ม audience ตามช่วงเวลา หรือจากการกดปุ่มภายในเมนูเอง (switch / alias)
จุดสำคัญของการออกแบบคือมี ตารางคู่แฝด ได้แก่ rich_menu (เมนูปัจจุบัน) และ
rich_menu_archive (สแนปช็อตของเมนูที่เคยใช้งาน) ซึ่งมีคอลัมน์เหมือนกันเกือบทั้งหมด
ทำให้ tracking log ที่อ้างถึงเมนูเวอร์ชันเก่ายังตีความได้ถูกต้อง แม้เมนูปัจจุบันจะถูกแก้ไปแล้ว
โครงสร้างข้อมูลหลัก
rich_menu (model RichMenu)
line_rich_menu_id— รหัสที่ LINE คืนกลับมาหลังอัปโหลดเมนูtitle,custom_label,thumbnail,layout(หมายเลขเทมเพลตการแบ่งช่อง)typeenumRichMenuType—guest/member/custom/default/switchaudience_id→audience.id(nullable) และparent_id(เมนูแม่ในกรณี switch)status(CommonStatus, defaultprocessing),complete_link_user,total- ช่วงเวลาใช้งาน
start_date/end_date container_originalJSONB (โครงเมนูดิบ),rich_menu_actionsJSONB,template_trackingJSONB และis_for_automation
มีความสัมพันธ์แบบ 1 : N กับ rich_menu_action, rich_menu_member, line_user
และ tracking_log
rich_menu_action
แต่ละแถวคือพื้นที่กดหนึ่งช่องในเมนู
rich_menu_id,index(ลำดับช่อง) และtype(enumRichMenuActionType: message / uri / tel / postback / datetimepicker / camera / cameraroll / location / richmenu / no_action / alias)label,link,boundaryJSONB (พิกัดของช่อง),rich_menu_aliastracking_keyและis_trackingสำหรับประกอบลิงก์ trackingrich_menu_archive_id(nullable) สำหรับแถวที่ผูกกับเมนูฉบับ archive แทน
rich_menu_member
จับคู่เมนูกับรายชื่อผู้ใช้ โดยเก็บ line_user_id เป็น JSONB คือเก็บเป็นชุดรายชื่อ
ไม่ได้แยกเป็นแถวละคน
rich_menu_archive
โครงสร้างเหมือน rich_menu ทุกประการ และมี relation ชุดเดียวกัน
(rich_menu_action, rich_menu_member, line_user, tracking_log)
ฝั่งผู้ใช้ คอลัมน์ line_user.rich_menu_id และ line_user.rich_menu_archive_id
เป็นตัวบอกว่าผู้ใช้คนนั้นกำลังเห็นเมนูใดอยู่
ไฟล์ที่เกี่ยวข้อง
prisma/schema.prisma:535— modelRichMenuprisma/schema.prisma:575— modelRichMenuActionprisma/schema.prisma:597— modelRichMenuMemberprisma/schema.prisma:654— modelRichMenuArchiveseed-data/09.rich_menu.sqlschema-dumps/2026-07-24/schema.sql:2490,:2523,:2562,:2635
จุดเชื่อมต่อกับ Service อื่น
- cms-api-go — ออกแบบเมนู อัปโหลดรูปไปยัง LINE publish/unpublish และผูก audience
- worker-go — งาน link/unlink เมนูกับผู้ใช้จำนวนมาก เนื่องจาก LINE API ต้องยิงทีละคน
- webhook-go — จัดการ postback และการ switch เมนู รวมถึงเปลี่ยนเมนูจาก guest เป็น member เมื่อผู้ใช้ลงทะเบียนสำเร็จ
- client-api-go — หน้าฟอร์มที่ตั้งค่าให้เปลี่ยน rich menu หลังส่งฟอร์มสำเร็จ
โดเมนที่เกี่ยวข้อง: ฟอร์ม, Audience, เพื่อน LINE, การติดตามผล