การติดตามผล (Tracking)
ภาพรวม
Domain นี้มี 3 ตาราง คือ tracking_log (log เหตุการณ์การอ่าน/คลิก/ส่ง ที่เกิดจาก content ทุกชนิด),
tracking_token (token ของลิงก์ย่อที่ใช้ redirect พร้อมปลายทางจริง) และ tracking_line_users
(ตารางจับคู่ tracking key กับ LINE user ที่เคยกดลิงก์นั้น)
ตาราง tracking_log
| Column | Type | Nullable | Default | คำอธิบาย |
|---|---|---|---|---|
id | UUID | NO | gen_random_uuid() | รหัสอ้างอิงหลักของ log |
redirect_id | TEXT | YES | - | รหัสอ้างอิงของการ redirect ที่ทำให้เกิด log นี้ |
token | TEXT | YES | - | token ของลิงก์ที่ถูกกด (ตรงกับ tracking_token.token) |
organization_id | INTEGER | NO | - | รหัสองค์กรเจ้าของข้อมูล (FK ไป organization.id) |
line_oa_id | INTEGER | NO | - | รหัส LINE OA ที่เกิดเหตุการณ์ (FK ไป line_oa.id) |
line_uid | TEXT | YES | - | LINE user ID ของผู้ทำเหตุการณ์ (NULL เมื่อระบุตัวตนไม่ได้) |
service | "TrackingService" | NO | redirect | ช่องทางที่จับเหตุการณ์: webhook หรือ redirect |
action_type | "ActionType" | NO | read | ประเภทการกระทำ: read, click, send |
type | "TrackingType" | NO | asset | ชนิดของสิ่งที่ถูกติดตาม: message, uri, asset, postback |
content_type | "ContentType" | YES | - | ชนิด content ต้นทาง: rich_menu, campaign, auto_response, trigger_rule, lead_generation |
campaign_id | INTEGER | YES | - | รหัสแคมเปญต้นทาง (FK ไป campaign.id) |
rich_menu_id | INTEGER | YES | - | รหัส rich menu ต้นทาง (FK ไป rich_menu.id) |
rich_menu_action_index | INTEGER | YES | - | ลำดับพื้นที่กดบน rich menu ที่ถูกกด |
rich_message_id | INTEGER | YES | - | รหัสข้อความต้นทาง |
rich_message_index | TEXT | YES | - | ตำแหน่ง/ส่วนของข้อความที่ถูกกด |
auto_response_id | INTEGER | YES | - | รหัสกฎตอบกลับอัตโนมัติต้นทาง |
trigger_rule_id | INTEGER | YES | - | รหัส trigger rule ต้นทาง |
tracking_label | TEXT | YES | - | ป้ายกำกับที่ผู้ใช้ตั้งไว้เพื่อจัดกลุ่มสถิติ |
title | TEXT | NO | - | ชื่อของสิ่งที่ถูกติดตาม ณ เวลาเกิดเหตุการณ์ |
short_url | TEXT | YES | - | ลิงก์ย่อที่ผู้ใช้กด |
original_url | TEXT | YES | - | URL ปลายทางจริงที่ถูก redirect ไป |
raw_data | JSONB | YES | - | ข้อมูลดิบของเหตุการณ์ เช่น payload webhook หรือ header ของ request |
created_date | TIMESTAMPTZ(3) | NO | now() | วันเวลาที่เกิดเหตุการณ์ |
rich_menu_archive_id | INTEGER | YES | - | รหัส rich menu ที่เก็บถาวรต้นทาง (FK ไป rich_menu_archive.id) |
ตาราง tracking_token
| Column | Type | Nullable | Default | คำอธิบาย |
|---|---|---|---|---|
id | UUID | NO | gen_random_uuid() | รหัสอ้างอิงหลักของ token |
token | TEXT | NO | - | ค่า token ที่ใช้ในลิงก์ย่อ (unique ทั้งตาราง) |
content_type | "ContentType" | NO | - | ชนิด content ที่ token นี้ผูกอยู่ |
content_id | INTEGER | NO | - | รหัส content ที่ token นี้ผูกอยู่ ตีความตาม content_type |
action_index | INTEGER | NO | - | ลำดับ action/พื้นที่กดภายใน content นั้น |
destination_url | TEXT | NO | - | URL ปลายทางจริงที่จะ redirect ไป |
tracking_label | TEXT | YES | - | ป้ายกำกับสำหรับจัดกลุ่มสถิติ |
organization_id | INTEGER | NO | - | รหัสองค์กรเจ้าของข้อมูล |
line_oa_id | INTEGER | NO | - | รหัส LINE OA เจ้าของ token (FK ไป line_oa.id) |
line_oa_hash | TEXT | NO | - | ค่า hash ของ LINE OA ที่ใช้ประกอบเป็น URL ย่อ |
metadata | JSONB | YES | - | ข้อมูลประกอบเพิ่มเติมของ token |
status | "CommonStatus" | NO | active | สถานะของ token (active, inactive, expired, ...) |
created_date | TIMESTAMPTZ(3) | NO | now() | วันเวลาที่สร้าง token |
created_by | INTEGER | NO | 0 | รหัสผู้ใช้ที่สร้างรายการ |
updated_date | TIMESTAMPTZ(3) | YES | - | วันเวลาที่แก้ไขล่าสุด (อัปเดตอัตโนมัติ) |
updated_by | INTEGER | YES | 0 | รหัสผู้ใช้ที่แก้ไขล่าสุด |
deleted_date | TIMESTAMPTZ(3) | YES | - | วันเวลาที่ลบแบบ soft delete |
expires_at | TIMESTAMPTZ(3) | YES | - | วันเวลาหมดอายุของ token (NULL = ไม่หมดอายุ) |
ตาราง tracking_line_users
| Column | Type | Nullable | Default | คำอธิบาย |
|---|---|---|---|---|
id | UUID | NO | gen_random_uuid() | รหัสอ้างอิงหลักของรายการ |
tracking_key | TEXT | NO | - | คีย์ติดตามที่ผู้ใช้คนนี้เคยกด |
line_user_id | TEXT | NO | - | LINE user ID ของผู้กด |
content_type | "ContentType" | NO | - | ชนิด content ที่คีย์ติดตามนี้สังกัด |
content_id | INTEGER | NO | - | รหัส content ที่คีย์ติดตามนี้สังกัด |
organization_id | INTEGER | NO | - | รหัสองค์กรเจ้าของข้อมูล |
line_oa_id | INTEGER | NO | - | รหัส LINE OA ที่เกี่ยวข้อง |
created_at | TIMESTAMPTZ(6) | NO | now() | วันเวลาที่บันทึกครั้งแรก |
updated_at | TIMESTAMPTZ(6) | NO | now() | วันเวลาที่อัปเดตล่าสุด (อัปเดตอัตโนมัติ) |
หมายเหตุ
- FK ของ
tracking_log:organization_idไปorganization.id,line_oa_idไปline_oa.id,campaign_idไปcampaign.id,rich_menu_idไปrich_menu.id,rich_menu_archive_idไปrich_menu_archive.idและ (line_uid,line_oa_id,organization_id) ไปยังline_user(user_id,line_oa_id,organization_id) แบบ composite key tracking_token.tokenมี unique constraint;tracking_line_usersมี unique constraintuk_tracking_key_line_user_idบน (tracking_key,line_user_id) — ผู้ใช้ 1 คนต่อ 1 tracking key จะมีได้แถวเดียวtracking_logมี index รวม 6 ชุด ครอบคลุมการ query ตามผู้ใช้, ตามแคมเปญ, ตาม rich menu, ตามช่องทาง/ชนิด และตามการคลิกรายส่วนของข้อความ — ทุกชุดมีcreated_dateหรือ key คัดกรองนำหน้าtracking_logไม่มีคอลัมน์ soft delete เพราะเป็น append-only logtracking_line_usersใช้ความละเอียดเวลา 6 หลัก (TIMESTAMPTZ(6)) ต่างจากอีก 2 ตารางที่ใช้TIMESTAMPTZ(3)