Skip to main content

ซิงก์ข้อมูลจาก BigQuery

ภาพรวม

Domain นี้มีตารางเดียวคือ bigquery_sync_config ซึ่งเก็บการตั้งค่าให้ระบบไป ดึงข้อมูลสรุปลูกค้าจาก Google BigQuery ของลูกค้าเอง ตามรอบเวลาที่กำหนด แล้วนำผลลัพธ์มาแมปลงเป็น attribute ของเพื่อน LINE

รูปแบบการใช้งานหลักคือลูกค้าที่มี data warehouse อยู่แล้ว และมีตัวเลขที่คำนวณฝั่ง BigQuery เช่น ยอดซื้อสะสมหรือเกรดสมาชิก แล้วต้องการให้ LINE Management นำค่าเหล่านั้นมาใช้ ทำ segmentation และส่งข้อความต่อ

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

bigquery_sync_config

กลุ่มข้อมูลคอลัมน์รายละเอียด
การเชื่อมต่อproject_id, summary_table, credentialscredentials เก็บ service account JSON แบบ TEXT
การจับคู่ข้อมูลuser_id_column, field_mappingsค่าเริ่มต้นของ user_id_column คือ user_id ส่วน field_mappings เป็น JSONB ที่แมปคอลัมน์เข้ากับ attribute
ตารางเวลาsync_cron, enabledค่าเริ่มต้น 0 6 * * * คือทำงานทุกวันเวลา 06:00 น.
ผลรอบล่าสุดlast_sync_at, last_sync_resultเก็บผลลัพธ์ล่าสุดแบบ JSONB เพื่อแสดงในหน้าตั้งค่า

ตารางนี้มี unique constraint (organization_id, line_oa_id) ชื่อ uq_bigquery_sync_config_org_lineoa ซึ่งบังคับว่าหนึ่งช่องทางตั้งค่าการซิงก์ได้เพียงชุดเดียว และใช้ soft delete ผ่าน deleted_date

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

  • prisma/schema.prisma:1560 — model BigquerySyncConfig
  • schema-dumps/2026-07-24/schema.sql:1108

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

  • cms-api-go ให้หน้าตั้งค่าการเชื่อมต่อ พร้อมปุ่มทดสอบว่า credential และตารางปลายทางใช้งานได้จริง
  • worker-go รัน cron ตามค่าใน sync_cron โดย query ข้อมูลจาก BigQuery แล้วอัปเดต line_user.custom_attribute ตามที่ระบุใน field_mappings การอัปเดตนี้จะทำให้ trigger attribute_changed ทำงานตามปกติ เว้นแต่จะตั้งค่า app.skip_triggers ไว้ในรอบนั้น
  • ปลายทางของข้อมูลคือ เพื่อน LINE และคีย์ที่ใช้แมป ต้องถูกนิยามไว้ล่วงหน้าที่ ทะเบียน Attribute