Skip to main content

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 (หมายเลขเทมเพลตการแบ่งช่อง)
  • type enum RichMenuTypeguest / member / custom / default / switch
  • audience_idaudience.id (nullable) และ parent_id (เมนูแม่ในกรณี switch)
  • status (CommonStatus, default processing), complete_link_user, total
  • ช่วงเวลาใช้งาน start_date / end_date
  • container_original JSONB (โครงเมนูดิบ), rich_menu_actions JSONB, template_tracking JSONB และ is_for_automation

มีความสัมพันธ์แบบ 1 : N กับ rich_menu_action, rich_menu_member, line_user และ tracking_log

rich_menu_action

แต่ละแถวคือพื้นที่กดหนึ่งช่องในเมนู

  • rich_menu_id, index (ลำดับช่อง) และ type (enum RichMenuActionType: message / uri / tel / postback / datetimepicker / camera / cameraroll / location / richmenu / no_action / alias)
  • label, link, boundary JSONB (พิกัดของช่อง), rich_menu_alias
  • tracking_key และ is_tracking สำหรับประกอบลิงก์ tracking
  • rich_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 — model RichMenu
  • prisma/schema.prisma:575 — model RichMenuAction
  • prisma/schema.prisma:597 — model RichMenuMember
  • prisma/schema.prisma:654 — model RichMenuArchive
  • seed-data/09.rich_menu.sql
  • schema-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, การติดตามผล