กลุ่มเป้าหมาย (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— modelAudienceprisma/schema.prisma:1319— modelAudienceMemberLogseed-data/08.audience.sql— seed กลุ่มตัวอย่างmanual-sql/7.plan_limits.sql— โควตาmaxSegmentsและautoRefreshschema-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