นำเข้าข้อมูลเพื่อน (Import / Mapping)
ภาพรวม
ระบบมีกลไกนำข้อมูลจากภายนอกเข้ามาผูกกับเพื่อน LINE อยู่ 2 แบบ
- Import LINE user — อัปโหลดไฟล์ CSV ที่มี LINE userId เพื่อสร้างแถวใหม่ใน
line_userใช้ในกรณีย้ายระบบ หรือกรณีที่มีรายชื่อ userId อยู่แล้ว - Import mapping — อัปโหลด CSV ที่มีข้อมูลลูกค้า แล้ว map ลงบนเพื่อนที่มีอยู่ในระบบแล้ว โดยเลือก "คีย์เชื่อม" เช่น
mobile_noหรือคีย์ในรูปcustom.<key>
ทั้งสองแบบทำงานแบบ asynchronous ผ่าน worker-go และบันทึกสถิติผลลัพธ์ไว้ในคอลัมน์ JSONB
โครงสร้างข้อมูลหลัก
line_user_import (model LineUserImport)
หนึ่งแถวต่อหนึ่งไฟล์ที่อัปโหลด เก็บ title, file_name, file_path, archive_path พร้อมตัวนับความคืบหน้า total_records, total_processed, process_attempt
สถานะงานอยู่ในคอลัมน์ status (enum LineUserImportStatus: new, processing, completed, failed) และมี summary_stats JSONB, note, line_oa_id, organization_id
line_user_import_detail (model LineUserImportDetail)
หนึ่งแถวต่อหนึ่งบรรทัดใน CSV ใช้ UUID เป็น primary key เชื่อมกลับด้วย import_id (FK ไปยัง line_user_import.id)
เก็บ line_user_id (LINE userId ที่อ่านได้จากไฟล์), line_user_profile JSONB, status (enum LineUserImportDetailStatus: new, insert, exist, undefined, error_format) และ error_message
import_mapping_job
ตารางนี้สร้างด้วย manual SQL เท่านั้น ไม่ปรากฏใน Prisma รองรับงาน import mapping
file_name,file_pathและstatus(pending,processing,success,partial,failed)unique_keyJSONB — คีย์ที่ใช้จับคู่ เช่น{"field":"mobile_no","csvColumn":"Phone Number"}mappingsJSONB — การจับคู่คอลัมน์ปลายทาง เช่น[{"csvColumn":"Member Tier","target":"custom.member_tier"}]validationJSONB — ผลตรวจสอบก่อน import สรุปจำนวน total, willUpdate, noMatch, errors และเหตุผลstatsJSONB — ผลลัพธ์จริงหลังประมวลผล และerror_log_pathสำหรับดาวน์โหลด log- index
(line_oa_id, status)
migration ที่สร้างตารางนี้ยังลงทะเบียนโมดูล import-mapping เข้าไปใน system_module, system_role_module และ organization_module พร้อมกันด้วย
ไฟล์ที่เกี่ยวข้อง
prisma/schema.prisma:716— modelLineUserImportprisma/schema.prisma:742— modelLineUserImportDetailmanual-sql/9.import_mapping.sql— สร้างตารางimport_mapping_jobและ grant สิทธิ์โมดูลschema-dumps/2026-07-24/schema.sql:2281,:2306และ:1984
จุดเชื่อมต่อกับ Service อื่น
- cms-api-go — รับไฟล์อัปโหลด สร้าง job แสดงผลสรุป และให้ดาวน์โหลด error log
- worker-go — ประมวลผลคิว
import_mapping_jobและงาน import line user แล้วเขียนผลกลับไปยังline_userระหว่างทำ bulk update จะตั้งค่าapp.skip_triggers='true'เพื่อไม่ให้ triggerattribute_changedยิงถี่เกินไป - ปลายทางของข้อมูลคือ เพื่อน LINE ส่วนคีย์ที่ใช้ map อ้างอิงนิยามจาก นิยาม Attribute