การลงมือทำ Action ของ Workflow
ภาพรวม
หลังจาก trigger engine ตัดสินแล้วว่า "ลูกค้าคนนี้เข้าเงื่อนไข ต้องทำ action นี้" งานจริงจะถูกส่งมาที่
queue action_execute โดยมี ActionExecutorService เป็นผู้ลงมือ ไฟล์นี้เป็นไฟล์ที่ใหญ่ที่สุด
ในโปรเจกต์ (ราว 1,200 บรรทัด) เพราะต้องรองรับ action หลายชนิดที่ไปแตะระบบต่างกันทั้งหมด
การแยก queue ออกมาเช่นนี้ทำให้ขั้นตอนการประเมินกฎซึ่งทำงานเร็ว แยกออกจากขั้นตอนการลงมือทำ ซึ่งช้ากว่าและต้องเรียก API ภายนอกได้อย่างชัดเจน
Business Flow
- รับ
ActionExecutePayloadซึ่งประกอบด้วยruleId,ruleName,actionType,actionConfig,sourceConfig,userId,lineOaId,organizationId,triggerDepth,workflowIdและworkflowNodePath - ตรวจ delay ก่อนเสมอ — หาก
actionConfig.delayมีค่า จะไม่ทำทันที แต่เรียกScheduleActionเพื่อบันทึกลงscheduled_action(ดู Action แบบหน่วงเวลา / ตั้งเวลา) - dispatch ตามค่า
actionType
actionType | การทำงาน |
|---|---|
switch_rich_menu | publish payload setRichMenuByTriggerRule เข้า queue line_change_richmenu |
send_message | sendRichMessageToUser — โหลด rich message, สร้าง tracking link รายบุคคล, resolve merge tag, แนบ quick reply แล้ว push ผ่าน LINE |
advanced_send_message | ส่งข้อความแบบกำหนดเองผ่าน ResponseSenderService ซึ่งใช้ pipeline เดียวกับ AI response |
send_booking_link | ใช้ logic เดียวกับ advanced_send_message โดยมี bookingPayload เป็นแหล่งของ merge tag |
add_to_audience | เพิ่มผู้ใช้เข้า audience โดยอัปเดต line_user.audience_ids และหากเป็น manual audience จะ regenerate ไฟล์ CSV ใหม่ |
remove_from_audience | ถอนผู้ใช้ออกจาก audience พร้อม regenerate CSV |
update_attribute | อัปเดตคอลัมน์ของ line_user หรือ merge ค่าลง custom_attribute ซึ่งเป็น jsonb |
talk_to_agent | ส่งต่อไปยัง mbox handoff เพื่อโอนแชทให้เจ้าหน้าที่ |
update_booking_status | อัปเดตสถานะการจองใน schema appointment |
| ชนิดอื่น | log warning แล้วคืน error ซึ่งจะทำให้ message เข้า DLQ |
- การสร้าง tracking link —
createTriggerRedirectMappingsห่อทุก URL และรูปในข้อความ ด้วยลิงก์ติดตาม โดยผูกกับruleIdและuserIdเพื่อให้ทราบว่าใครกดอะไรจาก workflow ใด และเรียกappendGaIdentityParamเพื่อต่อ param ของ GA หาก OA เปิดใช้ไว้ regenerateAudienceCsv— เมื่อสมาชิกของ manual audience เปลี่ยน ระบบจะสร้าง CSV ใหม่ แล้วอัปโหลดขึ้น S3 ภายใต้ path รูปแบบprivate/{lineOaHash}/audience/{filename}.csvเพื่อให้การ multicast รอบถัดไปใช้ข้อมูลล่าสุด- error ทุกกรณีจะถูก log พร้อมบริบทของ rule และ user แล้วคืนขึ้นไปให้ชั้น mq เป็นผู้ตัดสินว่าจะ retry หรือส่งเข้า DLQ
ไฟล์และฟังก์ชันหลัก
internal/actionexecute/service.go(ประมาณ 1,236 บรรทัด)ActionExecutorService.Execute(ctx, payload)— จุด dispatch หลักswitchRichMenu(),sendRichMessageToUser(),handleAdvancedSendMessage(),handleTalkToAgent(),addToAudience(),removeFromAudience(),updateAttribute(),handleUpdateBookingStatus()createTriggerRedirectMappings(),appendGaIdentityParam(),isManualAudience(),regenerateAudienceCsv(),buildAudienceCSV(),getLineUser()
internal/actionexecute/consumer.go—Consumer.HandleActionExecuteinternal/actionexecute/deps.go— interface seam ได้แก่MessageTransformer,ResponseSender,MboxHandoff,AudienceCsvStorage,RedirectClient,LineClientFactoryinternal/actionexecute/scheduler.go—ActionSchedulerServiceสำหรับบันทึก action ที่หน่วงเวลาinternal/actionexecute/payloads.goและinternal/actionexecute/helpers.gocmd/worker/integration.go— จุด wiring ของactionMessageTransformer,actionResponseSender,actionMboxHandoffและactionCsvStorageที่ผูกเข้ากับ service จริงของแต่ละโดเมน- Queue: consume
action_executeและ publishline_change_richmenu(profilemain)
จุดเชื่อมต่อกับ Service อื่น
- รับ job จาก: เครื่องยนต์ Trigger / Workflow Automation, Action แบบหน่วงเวลา / ตั้งเวลา และ booking event trigger
- ตารางที่เกี่ยวข้อง:
line_user(attribute และaudience_ids),audience,rich_message,trigger_rule,line_oa,appointment.bookingและกลุ่มตาราง quick reply - S3: เขียนไฟล์ CSV ของ audience ที่ถูก regenerate
- LINE API:
POST /v2/bot/message/pushสำหรับส่งข้อความ และการ link rich menu ผ่าน queue - บริการอื่นภายใน worker:
messagetrigger.ResponseSenderServiceสำหรับการส่งข้อความขั้นสูง และ AI,mbox.MboxHandoffServiceสำหรับโอนแชทให้เจ้าหน้าที่ รวมถึง utility ของlinemessageapiได้แก่TransformMessageObjects,ResolveMergeTagsและExtractUrls - Redirect service และ campaignlink — ใช้สร้าง URL ที่มี tracking