การติดตามผล (Tracking)
ภาพรวม
โดเมนนี้คือ ระบบวัดผลกลาง ของทั้งแพลตฟอร์ม ทำหน้าที่บันทึกว่าใครอ่านหรือกดอะไร เมื่อไร และมาจากคอนเทนต์ชิ้นใด ลิงก์ทุกลิงก์ที่ส่งออกไปทาง LINE จะถูกแทนที่ด้วย ลิงก์สั้นที่ผ่านระบบ tracking ก่อน แล้วจึง redirect ต่อไปยังปลายทางจริง
โครงสร้างประกอบด้วย 3 ตาราง
| ตาราง | หน้าที่ |
|---|---|
tracking_log | บันทึกเหตุการณ์ที่เกิดขึ้น (append-only) |
tracking_token | ทะเบียนลิงก์สั้นและปลายทาง |
tracking_line_users | กันการนับซ้ำรายบุคคล |
โครงสร้างข้อมูลหลัก
tracking_log (model TrackingLog, PK UUID)
ตารางเหตุการณ์แบบ append-only จำแนกเหตุการณ์ด้วย enum หลายชุด
service(enumTrackingService) —webhookหรือredirectบอกว่าเหตุการณ์เข้ามาทางไหนaction_type(enumActionType) —read/click/sendtype(enumTrackingType) —message/uri/asset/postbackcontent_type(enumContentType) —rich_menu/campaign/auto_response/trigger_rule/lead_generation
การอ้างถึงต้นทางใช้คอลัมน์ campaign_id, rich_menu_id, rich_menu_action_index,
rich_message_id, rich_message_index, auto_response_id, trigger_rule_id
และ rich_menu_archive_id
การระบุตัวตนผู้ใช้ใช้ line_uid ร่วมกับ composite FK
(line_uid, line_oa_id, organization_id) → line_user
ข้อมูลลิงก์ประกอบด้วย redirect_id, token, short_url, original_url,
tracking_label, title และ raw_data JSONB พร้อม created_date
ตารางนี้มี composite index รวม 6 ชุด ครอบคลุมมุมมองรายงานทั้งหมด ได้แก่ รายงานต่อผู้ใช้ ต่อแคมเปญ ต่อ rich menu ต่อ service/type และการนับ unique click
tracking_token (model TrackingToken, PK UUID)
ทะเบียนลิงก์สั้น
token(unique),destination_url,tracking_labelcontent_type+content_id+action_index— ระบุว่าโทเคนนี้เป็นของปุ่มใดในคอนเทนต์ชิ้นใดline_oa_hash(ใช้ประกอบ URL สาธารณะ),metadataJSONB,expires_at- index บน
(token, status),(line_oa_id, content_type, content_id)และ(expires_at, status)
tracking_line_users (model TrackingLineUsers, PK UUID)
บันทึกว่าผู้ใช้คนหนึ่งเคยกด key นี้ไปแล้ว เพื่อใช้คำนวณ unique click และ first click ของแคมเปญ
- unique
(tracking_key, line_user_id)ภายใต้ชื่อuk_tracking_key_line_user_id tracking_keyมีรูปแบบcampaignId:richMessageId:bubbleIndex:index(ดูคำอธิบายในไฟล์ seed)
Trigger
tracking_log_campaign_click_notify (AFTER INSERT) เรียกฟังก์ชัน notify_campaign_click()
ซึ่งยิง pg_notify('campaign_click', ...) เมื่อเหตุการณ์นั้นเป็นการคลิกของแคมเปญ
ที่ระบุตัวผู้ใช้ได้ ฝั่ง worker จะรับสัญญาณนี้ไปอัปเดตยอดและจุด trigger rule ต่อ
ไฟล์ที่เกี่ยวข้อง
prisma/schema.prisma:610— modelTrackingLogprisma/schema.prisma:857— modelTrackingTokenprisma/schema.prisma:888— modelTrackingLineUsersmanual-sql/4.sql— triggernotify_campaign_clickmanual-sql/5.sql— เวอร์ชันที่เขียนลงevent_outboxเพิ่มด้วยseed-data/15.tracking_line_users.sqlschema-dumps/2026-07-24/schema.sql:2980,:3012,:2963
จุดเชื่อมต่อกับ Service อื่น
- client-api-go — endpoint redirect (
/r/...) อ่านtracking_tokenเขียนtracking_logแล้วตอบ 302 ไปยังdestination_url - webhook-go — เขียน log ฝั่ง event ได้แก่ read และ postback
- worker-go — รวมยอดกลับไปที่คอลัมน์
campaign.total_*และ listen ช่องcampaign_click - cms-api-go — หน้ารายงานผลผ่านโมดูล
tracking-log
โดเมนที่เกี่ยวข้อง: แคมเปญส่งข้อความ, Rich Menu, ตอบกลับอัตโนมัติ, เพื่อน LINE