Skip to main content

ติดตามที่มาของเพื่อน

ภาพรวม

Friend Track ตอบคำถามว่า "เพื่อนคนนี้มาจากช่องทางไหน" โดยให้แอดมินสร้างลิงก์หรือ QR เฉพาะแคมเปญขึ้นมา เมื่อผู้ใช้กดเพิ่มเพื่อนผ่านลิงก์นั้น ระบบจะบันทึกเหตุการณ์ และสามารถเขียนค่าที่มาลงเป็น attribute ของเพื่อนคนนั้นได้ทันที

นอกจากนี้ยังรองรับ ref id ย่อย เช่น รหัสพนักงาน รหัสสาขา หรือรหัสสื่อ ซึ่งอัปโหลดเป็นชุดล่วงหน้าได้ ทำให้แยกยอดได้ละเอียดกว่าระดับแคมเปญ

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

friend_track_campaign (model FriendTrackCampaign)

  • name, description, token (unique — ใช้ประกอบลิงก์เพิ่มเพื่อน) และ status (string, default active)
  • attribute_config JSONB — ระบุว่าจะเขียนค่าใดลง attribute ของผู้ใช้เมื่อมาจากแคมเปญนี้
  • ref_attribute_key — คีย์ attribute ที่ใช้เก็บ ref id
  • ref_upload_status JSONB — สถานะการอัปโหลดชุด ref
  • FK line_oa_idline_oa.id และ organization_idorganization.id ทั้งคู่เป็น ON DELETE Restrict

มีความสัมพันธ์ 1 : N กับ friend_track_event, friend_track_ref และ content_page เนื่องจากหน้าคอนเทนต์สามารถแนบปุ่มชวนเพิ่มเพื่อนของแคมเปญนี้ได้

friend_track_event (model FriendTrackEvent)

บันทึกเหตุการณ์ที่เกิดขึ้นจริง

  • campaign_id FK (ON DELETE CASCADE), line_user_id, event_type
  • snapshot โปรไฟล์ ณ เวลานั้น ได้แก่ display_name และ picture_url
  • ref_id — ref ย่อยที่ติดมากับลิงก์
  • index บน (campaign_id), (line_user_id, line_oa_id) และ (event_type, campaign_id)

friend_track_ref (model FriendTrackRef)

ทะเบียน ref ที่อนุญาตให้ใช้ได้ unique (campaign_id, ref_id) และ FK ไปยัง friend_track_campaign แบบ ON DELETE CASCADE

Trigger

friend_track_event_insert_notify (AFTER INSERT) เรียก notify_friend_track_event_insert() เพื่อยิง pg_notify('friend_track_event_inserted', ...)

หมายเหตุเชิงประวัติ — trigger ตัวนี้เคยหายไปจากฐานข้อมูล กล่าวคือมีเพียงฟังก์ชัน แต่ไม่มีตัว trigger ทำให้ช่องสัญญาณนี้เงียบสนิท และได้รับการแก้ไขเมื่อ 24 กรกฎาคม 2026 ใน manual-sql/5.sql

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

  • prisma/schema.prisma:1388 — model FriendTrackCampaign
  • prisma/schema.prisma:1418 — model FriendTrackEvent
  • prisma/schema.prisma:1439 — model FriendTrackRef
  • manual-sql/5.sql — ฟังก์ชันและ trigger พร้อมคอมเมนต์อธิบายบั๊กที่แก้
  • schema-dumps/2026-07-24/schema.sql:1869, :1912, :1950

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

  • webhook-go — รับ follow event ที่มี ref ติดมา แล้ว insert friend_track_event
  • worker-go — listen ช่อง friend_track_event_inserted เพื่อเขียน attribute ตาม attribute_config จัดผู้ใช้เข้ากลุ่ม audience และจุด workflow
  • cms-api-go — สร้างแคมเปญ อัปโหลดชุด ref และดูรายงานยอดตามช่องทาง ผ่านโมดูล friend-track
  • client-api-go — หน้าคอนเทนต์ที่มีปุ่มเพิ่มเพื่อนของแคมเปญ

โดเมนที่เกี่ยวข้อง: เพื่อน LINE, Attribute Master, หน้าคอนเทนต์, Event Outbox