Skip to main content

กฎทริกเกอร์และงานตั้งเวลา

ภาพรวม

Domain นี้มี 4 ตาราง: trigger_rule เก็บกฎที่กำหนดว่า "เมื่อเกิดเหตุการณ์อะไร ให้ทำอะไร" (source + action เป็น JSONB), trigger_log เก็บ log ทุกครั้งที่กฎถูกยิงพร้อมผลลัพธ์, scheduled_action เก็บ action ที่ถูกตั้งเวลาไว้ให้ทำงานภายหลัง (queue) และ scheduled_trigger_execution เก็บผลการรันกฎแบบตามตารางเวลาในแต่ละรอบ

ตาราง trigger_rule

ColumnTypeNullableDefaultคำอธิบาย
idSERIALNOnextval(...)Primary key
nameVARCHAR(255)NO-ชื่อกฎทริกเกอร์
source_typeVARCHAR(30)NO-ประเภทของแหล่งเหตุการณ์ที่ใช้ทริกเกอร์
source_configJSONBNO-การตั้งค่าของแหล่งเหตุการณ์ (เงื่อนไขการทริกเกอร์)
action_typeVARCHAR(30)NO-ประเภทของ action ที่จะทำเมื่อกฎถูกยิง
action_configJSONBNO-การตั้งค่าของ action
enabledBOOLEANNOtrueเปิดใช้งานกฎนี้หรือไม่
frequencyVARCHAR(20)NO'once_per_hour'ความถี่สูงสุดที่กฎนี้ยิงได้
cooldown_secondsINTEGERYES-ระยะเวลาพักก่อนที่กฎจะยิงซ้ำได้ (วินาที)
line_oa_idINTEGERNO-LINE OA ที่กฎนี้สังกัด
organization_idINTEGERNO-องค์กรเจ้าของกฎ
created_byINTEGERYES-ผู้สร้าง (user id)
updated_byINTEGERYES-ผู้แก้ไขล่าสุด (user id)
created_dateTIMESTAMPTZ(3)NOnow()วันเวลาที่สร้าง
updated_dateTIMESTAMPTZ(3)YES-วันเวลาที่แก้ไขล่าสุด
deleted_dateTIMESTAMPTZ(3)YES-วันเวลาที่ลบ (soft delete)
workflow_idINTEGERYES-เวิร์กโฟลว์ที่กฎนี้เป็นส่วนหนึ่ง (FK ไป workflow.id)
workflow_node_pathVARCHAR(500)YES-ตำแหน่ง node ในเวิร์กโฟลว์ที่กฎนี้อ้างถึง

ตาราง trigger_log

ColumnTypeNullableDefaultคำอธิบาย
idBIGSERIALNOnextval(...)Primary key
trigger_rule_idINTEGERNO-กฎที่ถูกยิงในครั้งนี้
audience_idINTEGERYES-audience ที่เกี่ยวข้องกับการยิงครั้งนี้
user_idVARCHAR(255)NO-ผู้ใช้ที่ถูกกฎนี้กระทำ (LINE user id)
trigger_onVARCHAR(20)NO-เหตุการณ์ที่ทำให้กฎถูกยิง
action_typeVARCHAR(30)NO-ประเภทของ action ที่ถูกทำ
action_configJSONBYES-การตั้งค่าของ action ที่ใช้จริงในครั้งนั้น
statusVARCHAR(20)NO'success'ผลลัพธ์ของการทำ action
error_messageTEXTYES-ข้อความ error กรณีทำ action ไม่สำเร็จ
line_oa_idINTEGERNO-LINE OA ที่เกี่ยวข้อง
organization_idINTEGERNO-องค์กรที่เกี่ยวข้อง
created_dateTIMESTAMPTZ(3)NOnow()วันเวลาที่บันทึก log

ตาราง scheduled_action

ColumnTypeNullableDefaultคำอธิบาย
idSERIALNOnextval(...)Primary key
trigger_rule_idINTEGERYES-กฎที่สร้าง action ที่ตั้งเวลานี้
user_idVARCHAR(64)NO-ผู้ใช้เป้าหมายของ action (LINE user id)
line_oa_idINTEGERNO-LINE OA ที่เกี่ยวข้อง
organization_idINTEGERNO-องค์กรที่เกี่ยวข้อง
action_typeVARCHAR(30)NO-ประเภทของ action ที่จะทำเมื่อถึงเวลา
action_configJSONBNO-การตั้งค่าของ action
source_configJSONBYES-การตั้งค่าของแหล่งเหตุการณ์ที่ทำให้เกิด action นี้
execute_atTIMESTAMPTZNO-วันเวลาที่กำหนดให้ทำ action
expires_atTIMESTAMPTZYES-วันเวลาที่ action หมดอายุ (ไม่ต้องทำอีก)
statusVARCHAR(20)NO'pending'สถานะของ action ในคิว
retry_countINTEGERNO0จำนวนครั้งที่พยายามทำใหม่
created_atTIMESTAMPTZNOnow()วันเวลาที่สร้างรายการ
updated_atTIMESTAMPTZNOnow()วันเวลาที่แก้ไขล่าสุด
executed_atTIMESTAMPTZYES-วันเวลาที่ทำ action จริง
workflow_idINTEGERYES-เวิร์กโฟลว์ต้นทางของ action นี้
workflow_node_pathVARCHAR(500)YES-ตำแหน่ง node ในเวิร์กโฟลว์ที่สร้าง action นี้

ตาราง scheduled_trigger_execution

ColumnTypeNullableDefaultคำอธิบาย
idSERIALNOnextval(...)Primary key
trigger_rule_idINTEGERNO-กฎที่ถูกรันในรอบนี้
scheduled_atTIMESTAMPTZNO-วันเวลาของรอบที่ตั้งไว้
started_atTIMESTAMPTZNOnow()วันเวลาที่เริ่มรัน
completed_atTIMESTAMPTZYES-วันเวลาที่รันเสร็จ
statusVARCHAR(20)NO'processing'สถานะของรอบการรัน
total_usersINTEGERNO0จำนวนผู้ใช้ทั้งหมดในรอบนี้
processed_usersINTEGERNO0จำนวนผู้ใช้ที่ประมวลผลสำเร็จ
failed_usersINTEGERNO0จำนวนผู้ใช้ที่ประมวลผลไม่สำเร็จ
error_messageTEXTYES-ข้อความ error ของรอบการรัน
created_atTIMESTAMPTZNOnow()วันเวลาที่สร้างเรกคอร์ด

หมายเหตุ

  • trigger_rule.workflow_id เป็น FK เดียวในกลุ่มนี้ที่ประกาศไว้ในระดับ schema — ชี้ไป workflow.id (ดู เวิร์กโฟลว์อัตโนมัติ)
  • trigger_log.trigger_rule_id, scheduled_action.trigger_rule_id และ scheduled_trigger_execution.trigger_rule_id อ้างถึง trigger_rule.id เชิงตรรกะ แต่ไม่ได้ประกาศเป็น FK ใน schema
  • scheduled_trigger_execution มี unique constraint uq_scheduled_trigger_execution บน (trigger_rule_id, scheduled_at) — กันไม่ให้รอบเดียวกันถูกรันซ้ำ
  • scheduled_action มี index สำหรับการดึงงานจากคิวโดยเฉพาะ: idx_scheduled_action_pending (บน execute_at), idx_scheduled_action_processing (บน updated_at) และ idx_scheduled_action_user (บน user_id, trigger_rule_id)
  • trigger_log มี index บน (trigger_rule_id, created_date DESC) สำหรับดึง log ล่าสุดของกฎ
  • trigger_rule มี index บน (line_oa_id, organization_id) และบน deleted_date
  • คอลัมน์เวลาใน scheduled_action และ scheduled_trigger_execution เป็น TIMESTAMPTZ ความละเอียด default (microsecond) ต่างจากตารางอื่นในระบบที่ใช้ TIMESTAMPTZ(3)
  • แหล่งเหตุการณ์ที่ทำให้ trigger_rule ถูกยิงส่วนหนึ่งมาจาก pg_notify / event outbox (ดู pg_notify และ Event Outbox)