เวิร์กโฟลว์และแชตบอต
ภาพรวม
Workflow เป็นฟีเจอร์ที่ใหญ่และซับซ้อนที่สุดของระบบ ใช้สร้างขั้นตอนการทำงานอัตโนมัติหรือแชตบอตเป็นลำดับ node (รับข้อความ ตัดสินใจ เรียก API ตอบกลับ) โดยมีเครื่องมือครบชุดตามที่ระบบ automation ระดับใช้งานจริงต้องมี
| ความสามารถ | รายละเอียด |
|---|---|
| Versioning | ทุกครั้งที่แก้ไขจะเก็บเวอร์ชันไว้ และย้อนกลับ (rollback) ได้ |
| Activate / Deactivate | เปิดหรือปิดใช้งานโดยไม่ต้องลบ จำนวนที่ active พร้อมกันถูกจำกัดด้วยโควตา |
| Clone | คัดลอก flow เดิมไปทำเวอร์ชันใหม่ |
| Test-run / Test-chat | ทดลองรันในแซนด์บ็อกซ์ก่อนเปิดใช้จริง |
| Generate ด้วย AI | ให้ AI ร่าง flow จากคำอธิบายภาษาคน |
| Stats / Logs | ติดตามว่าทำงานไปกี่ครั้งและผลลัพธ์เป็นอย่างไร |
Workflow ใช้ กฎทริกเกอร์อัตโนมัติ เป็นตัวจุดการทำงาน และใช้ คลังความรู้ เป็นแหล่งความรู้ของบอตในรูปแบบ RAG ผ่าน embedding และ Meilisearch
Business Flow
สร้าง
POST /api/workflows/generateให้ AI ร่าง flow จากคำอธิบายภาษาคน (GenerateWorkflowDto)POST /api/workflowsบันทึก flow โดยตรวจโควตาผ่านโมดูล Plan Limits ก่อนPOST /api/workflows/parse-responseช่วยแปลงและตรวจสอบ response spec ของ node ที่เรียก API ภายนอก
ทดสอบ
POST /api/workflows/:id/test-runรัน flow ในแซนด์บ็อกซ์ด้วยข้อมูลทดสอบPOST /api/workflows/:id/test-chatสนทนากับบอตแบบทดลอง- แซนด์บ็อกซ์เรียก embedding API และ Meilisearch เพื่อค้นความรู้ประกอบคำตอบ (RAG)
- policy metadata ของ endpoint นี้เป็น read
line-oaไม่ใช่workflowซึ่งยกมาตามพฤติกรรมของระบบ TypeScript เดิม
เปิดใช้งานและดูแล
POST /api/workflows/:id/activateและPOST /api/workflows/:id/deactivateเปิดหรือปิดการใช้งาน จำนวน workflow ที่ active พร้อมกันถูกจำกัดด้วยโควตาmaxActiveWorkflowsGET /api/workflowsดูรายการ,GET /api/workflows/:idดูรายละเอียด,PUT /api/workflows/:idแก้ไข,DELETE /api/workflows/:idลบแบบ soft deletePOST /api/workflows/:id/cloneคัดลอก flow
เวอร์ชันและประวัติ
GET /api/workflows/:id/versionsดูรายการเวอร์ชัน และGET /api/workflows/:id/versions/:versionIdดูรายละเอียดเวอร์ชันPOST /api/workflows/:id/versions/:versionId/rollbackย้อนกลับไปใช้เวอร์ชันที่เลือกGET /api/workflows/:id/statsและGET /api/workflows/:id/logsดูผลการทำงาน
ฝั่ง runtime
เมื่อ trigger ยิงเข้ามา worker จะเดิน flow ตาม node ที่กำหนด เรียก API ภายนอกผ่านคิว web_request_execute และส่งข้อความตอบกลับผู้ใช้ผ่าน LINE
ไฟล์และฟังก์ชันหลัก
โค้ดอยู่ที่ internal/modules/workflow/
| ไฟล์ | บทบาท |
|---|---|
controller.go | ลงทะเบียน route |
service.go | CRUD, เวอร์ชัน, activate/deactivate, stats |
executor.go | ตัวเดินขั้นตอนของ flow |
sandbox.go | newSandboxService สำหรับ test-run และ test-chat พร้อม RAG (embedding + Meilisearch) |
ai.go, prompt.go | generate flow ด้วย AI |
paths.go, helpers.go, dto.go | helper และ DTO |
| Method | Route | Handler | Policy |
|---|---|---|---|
| GET | /api/workflows | ct.findAll | read workflow |
| GET | /api/workflows/:id | ct.findOne | read workflow |
| GET | /api/workflows/:id/stats | ct.getStats | read workflow |
| GET | /api/workflows/:id/logs | ct.getLogs | read workflow |
| GET | /api/workflows/:id/versions | ct.getVersions | read workflow |
| GET | /api/workflows/:id/versions/:versionId | ct.getVersionDetail | read workflow |
| POST | /api/workflows | ct.create | create workflow |
| POST | /api/workflows/generate | ct.generate | create workflow |
| POST | /api/workflows/parse-response | ct.parseResponse | update workflow |
| POST | /api/workflows/:id/test-run | ct.testRun | update workflow |
| POST | /api/workflows/:id/test-chat | ct.testChat | read line-oa |
| POST | /api/workflows/:id/versions/:versionId/rollback | ct.rollbackToVersion | update workflow |
| POST | /api/workflows/:id/clone | ct.clone | create workflow |
| POST | /api/workflows/:id/activate | ct.activate | update workflow |
| POST | /api/workflows/:id/deactivate | ct.deactivate | update workflow |
| PUT | /api/workflows/:id | ct.update | update workflow |
| DELETE | /api/workflows/:id | ct.remove | delete workflow |
ทุก route ครอบด้วย modulegate.ModuleGate(d, "workflow")
จุดเชื่อมต่อกับ Service อื่น
- สิทธิ์การเข้าถึง — ต้องผ่าน
ModuleGate("workflow")โดยใช้PolicyModuleWorkflowเป็น metadata ของ policy - ตารางที่เกี่ยวข้อง —
workflow,workflow_version,trigger_rule,knowledge_base,knowledge_document,knowledge_chunk,line_oa - ข้อควรระวังเรื่อง soft delete — ตาราง
workflow,trigger_ruleและworkflow_versionใช้คอลัมน์deleted_dateธรรมดา ไม่ใช่gorm.DeletedAtจึงต้องใส่เงื่อนไขdeleted_date IS NULLเองในทุก query - Environment ของแซนด์บ็อกซ์ —
EMBEDDING_API_URL(ค่าเริ่มต้นhttps://poc-rag-xwqe451.1moby.tech/embed),MEILISEARCH_HOST(ค่าเริ่มต้นhttp://localhost:7700) และMEILISEARCH_API_KEY - RabbitMQ —
web_request_executeและmessage_received_trigger - โมดูลข้ามสาย — Plan Limits (โควตา
maxActiveWorkflows), Knowledge Base, Trigger Rule และโมดูล AI - โมดูลที่เกี่ยวข้อง — กฎทริกเกอร์อัตโนมัติ, คลังความรู้, ตั้งค่า AI และ Auto Response