Skip to main content

กลุ่มเป้าหมาย (Audience)

ภาพรวม

Audience คือ กลุ่มผู้ใช้ LINE ที่คัดเลือกไว้เพื่อยิงข้อความหรือสลับ rich menu สร้างได้ 2 ทางตาม enum AudiencesDataSource

  • csv — อัปโหลดรายชื่อ userId เข้ามาโดยตรง
  • filter — ตั้งเงื่อนไขจาก attribute หรือกิจกรรมของผู้ใช้ แล้วให้ระบบคำนวณสมาชิกให้เอง

จุดออกแบบที่สำคัญคือ สมาชิกของ audience ไม่ได้เก็บเป็นตารางเชื่อม แต่ denormalize ไว้ในคอลัมน์ line_user.audience_ids (JSONB พร้อม GIN index) ทำให้การตรวจสอบว่า "ผู้ใช้คนนี้อยู่กลุ่มใดบ้าง" ทำได้เร็วมาก ส่วนประวัติการเข้าออกกลุ่มถูกบันทึกแยกไว้ใน audience_member_log

โครงสร้างข้อมูลหลัก

audience (model Audience)

เก็บข้อมูลบรรยาย title, description, slug, details และ data_source (csv หรือ filter)

ข้อมูลสรุปและเงื่อนไขinfo JSONB เก็บข้อมูลสรุปเช่นจำนวนสมาชิก ส่วน filter_info JSONB เก็บเงื่อนไขกรอง ซึ่งอ้างคีย์จาก นิยาม Attribute

การรีเฟรชอัตโนมัติauto_refresh_enabled, last_refresh_date และ refresh_status (default idle)

ขอบเขตและที่มาline_oa_id, organization_id พร้อม api_client_id และ api_key_id สำหรับกรณีที่กลุ่มนี้ถูกจัดการผ่าน public API

ใช้ soft delete ผ่าน deleted_date และมีความสัมพันธ์ 1 : N กับ campaign, rich_menu, rich_menu_archive และ audience_member_log

audience_member_log (model AudienceMemberLog)

บันทึกประวัติการเข้าและออกกลุ่ม ประกอบด้วย audience_id (FK ไปยัง audience.id), line_user_id (LINE userId แบบ string), action (enum AudienceMemberAction: add หรือ remove) และ trigger_type (enum AudienceMemberTriggerType: auto_refresh, manual หรือ api)

มี index บน (audience_id), (created_date DESC), (action) และ (line_oa_id)

การควบคุมการรีเฟรช

การรีเฟรชอัตโนมัติควบคุมด้วยการตั้งค่า 2 ระดับ คือระดับ channel ผ่าน line_oa.audience_refresh_enabled และ line_oa.audience_refresh_interval (นาที) ร่วมกับสวิตช์รายกลุ่ม audience.auto_refresh_enabled และยังถูกจำกัดเพิ่มด้วย plan_limits.maxSegments และ plan_limits.autoRefresh

ไฟล์ที่เกี่ยวข้อง

  • prisma/schema.prisma:424 — model Audience
  • prisma/schema.prisma:1319 — model AudienceMemberLog
  • seed-data/08.audience.sql — seed กลุ่มตัวอย่าง
  • manual-sql/7.plan_limits.sql — โควตา maxSegments และ autoRefresh
  • schema-dumps/2026-07-24/schema.sql:983 และ :1032

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

  • cms-api-go — CRUD audience, อัปโหลด CSV, ดูรายชื่อสมาชิก และ export
  • worker-go — job รีเฟรช audience ตามรอบ โดยคำนวณสมาชิกใหม่จาก filter_info แล้วอัปเดต line_user.audience_ids พร้อมเขียนประวัติลง audience_member_log
  • Audience ถูกใช้เป็นเป้าหมายของ Campaign ทั้งแบบ multicast และ narrowcast, ใช้สลับ Rich Menu, ใช้จำกัดสิทธิ์การเข้าถึงใน หมวดหมู่เนื้อหา และควบคุมการมองเห็นหมวดหมู่ใน Bulletin