LINE Official Account (Channel)
ภาพรวม
line_oa คือ หน่วย tenant ระดับที่สอง ถัดจากองค์กร และถือเป็นแกนกลางของทั้งระบบ เพราะเกือบทุกตารางที่เก็บข้อมูลฟีเจอร์จะมีคอลัมน์ line_oa_id เพื่อผูกข้อมูลไว้กับ channel ใด channel หนึ่ง
ตารางนี้รวบรวมทุกอย่างที่เกี่ยวกับ LINE Official Account หนึ่งบัญชี ตั้งแต่ credential ของ LINE Messaging API, การตั้งค่า webhook, สถานะการ sync รายชื่อเพื่อน, การตั้งค่า Google Analytics, นโยบายการตอบข้อความ ไปจนถึงโควตาการใช้งานระดับ channel
โครงสร้างข้อมูลหลัก
line_oa (model LineOa)
ข้อมูล channel — line_oa_name, channel_id, channel_secret_id, channel_access_token, channel_name, bot_basic_id, premium_id และ cover
การเข้าถึงแบบสาธารณะ — line_oa_hash เป็น hash ที่ใช้ในลิงก์ tracking และหน้า public แทนการเปิดเผย id จริงของ channel
Webhook — webhook_id และ forward_webhook_url โดย webhook-go ใช้ webhook_id เพื่อระบุ channel จาก URL ที่ LINE ยิงเข้ามา แล้วสามารถ forward ต่อไปยังปลายทางเดิมของลูกค้าได้
LINE Login / LIFF — line_login_info JSONB สำหรับให้ฝั่ง client-web ใช้งาน
การ sync เพื่อน — sync_follower_status (enum SyncFollowerStatus), sync_follower_logs และ last_sync_followers_date
Audience auto-refresh — audience_refresh_enabled และ audience_refresh_interval (หน่วยเป็นนาที)
Google Analytics — ga_tracking_enabled และ ga_identity_param (default lid)
นโยบายการตอบข้อความ — message_handling_config JSONB ค่า default คือ {"priority":"auto_response_only"} ใช้ตัดสินว่าเมื่อผู้ใช้พิมพ์ข้อความเข้ามา ระบบจะให้ auto-response, trigger rule หรือ AI เป็นผู้ตอบ
โควตา — plan_limits JSONB (เพิ่มด้วย migration) กำหนดเพดานการใช้งานเฉพาะ channel นี้
โครงสร้างพื้นฐานประกอบด้วย FK organization_id ไปยัง organization.id, soft delete ผ่าน deleted_date และ index สำคัญคือ (webhook_id, status, organization_id) กับ (line_oa_hash, status, organization_id)
line_oa_app (model LineOaApp)
สวิตช์เปิด/ปิด "แอปเสริม" ในระดับองค์กร มี unique constraint บน (organization_id, app_id) พร้อมคอลัมน์ enabled และ config JSONB
ค่า app_id คือชื่อแอป เช่น appointment, bulletin หรือ loyalty ซึ่ง API จะใช้ตารางนี้เป็นฐานของ AppEnabledGuard
otp_config
ตั้งค่า OTP ทั้งทาง SMS (ThaiBulkSMS) และอีเมล หนึ่งแถวต่อหนึ่ง OA โดยมี unique constraint บน line_oa_id ใช้งานหลักกับ form builder ดูรายละเอียดได้ที่ ฟอร์ม
ไฟล์ที่เกี่ยวข้อง
prisma/schema.prisma:295— modelLineOaprisma/schema.prisma:1675— modelLineOaAppprisma/migrations/20260726180000_add_line_oa_plan_limits/migration.sql— คอลัมน์plan_limitsseed-data/06.line_oa.sql— seed channel ทดสอบ 1 ตัวschema-dumps/2026-07-24/schema.sql:2151(line_oa) และ:2187(line_oa_app)
จุดเชื่อมต่อกับ Service อื่น
- webhook-go — ค้นหา channel จาก
webhook_id, ใช้channel_secret_idตรวจสอบ signature, ใช้channel_access_tokenเรียก LINE API และ forward ต่อไปยังforward_webhook_url - cms-api-go — จัดการ CRUD ของ channel, สั่ง sync follower, ตั้งค่า GA, message handling และ plan limits
- client-api-go — ใช้
line_oa_hashและline_login_infoสำหรับ LIFF และหน้า public - worker-go — อ่านค่า
audience_refresh_enabledและaudience_refresh_intervalเพื่อจัดตารางรีเฟรช audience - ตารางนี้เป็น parent ของแทบทุก domain ในระบบ ทั้ง campaign, rich menu, audience, content, form และ loyalty