สร้างกลุ่มเป้าหมายจากเงื่อนไข (Audience Filter)
ภาพรวม
Audience Filter คือเครื่องมือสร้างกลุ่มเป้าหมาย (audience) จาก เงื่อนไขพฤติกรรมของผู้ใช้ โดยไม่ต้องอัปโหลดรายชื่อเป็น CSV เอง ระบบจะไปดึงรายชื่อจากข้อมูลที่บันทึกไว้แล้วให้อัตโนมัติ
แหล่งข้อมูลที่ใช้เป็นเงื่อนไขได้:
| แหล่งข้อมูล | ตัวอย่างเงื่อนไข |
|---|---|
| Campaign | เปิดหรือคลิกแคมเปญใด |
| Rich Menu | กดปุ่มใดบนเมนู |
| Auto Response | พิมพ์ตรงกับ keyword ใด |
| Form Builder | ตอบคำถามข้อใดด้วยค่าอะไร |
| Multi-source | ผสมหลายแหล่งข้อมูลเข้าด้วยกัน |
จุดเด่นของโมดูลนี้คือมี preview ให้ตรวจสอบจำนวนและตัวอย่างสมาชิกก่อนกดสร้างจริง ช่วยลดความเสี่ยงที่จะสร้าง audience ผิดเงื่อนไขแล้วส่งข้อความออกไปแล้ว
Business Flow
ขั้นเตรียมตัวเลือก
- cms-web โหลดรายการตัวเลือกของแต่ละแหล่งข้อมูลมาแสดงเป็น dropdown ผ่าน endpoint
list-dropdown-campaign,list-dropdown-richmenu,list-dropdown-auto-responseและlist-dropdown-form-builder - หากผู้ใช้เลือกกรองด้วยฟอร์ม ระบบเรียก
GET /api/audiences-filter/form-questions/:formIdเพื่อดึงคำถามในฟอร์มนั้นมาให้เลือกข้อและระบุค่าที่ต้องการ GET /api/audiences-filter/form-responseใช้ดูตัวอย่างคำตอบดิบเพื่อยืนยันรูปแบบข้อมูล
ขั้น Preview แล้วสร้าง
- กรองจากฟอร์ม — เรียก
POST /api/audiences-filter/preview-form-filterเพื่อดูผลลัพธ์ก่อน เมื่อพอใจจึงเรียกPOST /api/audiences-filter/create-form-filterเพื่อสร้างจริง - กรองแบบผสมหลายแหล่ง — ใช้คู่
preview-multi-source-filterและcreate-multi-source-filterในลักษณะเดียวกัน - กรองทั่วไป — เรียก
POST /api/audiences-filter/create-filterพร้อมCreateAudiencesFilterDto - ก่อนสร้างทุกครั้ง ระบบตรวจโควตา
maxSegmentsตามแพ็กเกจของลูกค้า - เมื่อสร้างสำเร็จ ผลลัพธ์จะกลายเป็น audience ปกติที่โมดูล Audience Management ดูแลต่อ ทั้งการเขียนไฟล์ CSV รายชื่อสมาชิกและการตั้ง auto-refresh
เส้นทางภายในระบบ (Internal)
POST /api/audiences-filter/internal/refreshเป็น endpoint สำหรับ service ภายในเรียกเท่านั้น ไม่ใช่ผู้ใช้ ป้องกันด้วยInternalApiKeyGuardผ่าน headerX-Internal-Keyรับ body ที่ประกอบด้วยaudienceId,lineOaId,organizationId,lineOaHashและtriggerTypeใช้ในกรณีที่ worker หรือ webhook ต้องการสั่งให้คำนวณสมาชิกของ audience ที่มาจาก filter ใหม่
ไฟล์และฟังก์ชันหลัก
โค้ดอยู่ที่ internal/modules/audiencefilter/ ประกอบด้วย controller.go, service.go และ dto.go
| Method | Route | Handler | Policy |
|---|---|---|---|
| POST | /api/audiences-filter/create-filter | ct.createFilter | create audiences |
| GET | /api/audiences-filter/list-dropdown-campaign | ct.getListDropdownCampaign | read audiences |
| GET | /api/audiences-filter/list-dropdown-richmenu | ct.getListDropdownRichmenu | read audiences |
| GET | /api/audiences-filter/list-dropdown-auto-response | ct.getListDropdownAutoResponse | read audiences |
| GET | /api/audiences-filter/list-dropdown-form-builder | ct.getListDropdownFormBuilder | read audiences |
| GET | /api/audiences-filter/form-questions/:formId | ct.getFormQuestions | read audiences |
| GET | /api/audiences-filter/form-response | ct.formResponsePreview | read audiences |
| POST | /api/audiences-filter/preview-form-filter | ct.previewFormSegment | read audiences |
| POST | /api/audiences-filter/create-form-filter | ct.createFormFilterAudience | read audiences |
| POST | /api/audiences-filter/preview-multi-source-filter | ct.previewMultiSourceFilter | read audiences |
| POST | /api/audiences-filter/create-multi-source-filter | ct.createMultiSourceFilter | create audiences |
| POST | /api/audiences-filter/internal/refresh | ct.internalRefresh | internalApiKeyGuard() |
จุดเชื่อมต่อกับ Service อื่น
- Permission — route ฝั่งผู้ใช้อยู่บน group
authedซึ่งบังคับ JWT ทั้งหมด และมีPolicyModuleAudiencesเป็น metadata ส่วน route ภายในใช้InternalApiKey(อ่านจาก envINTERNAL_API_KEY) แทน JWT - ตารางที่เกี่ยวข้อง —
audience,campaign,rich_menu,auto_response,form_builder,form_submission,line_userและtracking_line_users - Cross-module — เรียก
formbuilder.Service.GetFormByIdผ่าน local interfaceformByIDProviderเพื่อหลีกเลี่ยง import cycle นอกจากนี้ยังพึ่งโมดูล Plan Limits และ Storage - Storage — เขียนไฟล์ CSV รายชื่อสมาชิกที่ได้จากการกรองลง object storage
- โมดูลที่เกี่ยวข้อง — Audience Management, Form Builder, Campaign Management และ Rich Menu