Skip to main content

เวิร์กโฟลว์และแชตบอต

ภาพรวม

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

สร้าง

  1. POST /api/workflows/generate ให้ AI ร่าง flow จากคำอธิบายภาษาคน (GenerateWorkflowDto)
  2. POST /api/workflows บันทึก flow โดยตรวจโควตาผ่านโมดูล Plan Limits ก่อน
  3. POST /api/workflows/parse-response ช่วยแปลงและตรวจสอบ response spec ของ node ที่เรียก API ภายนอก

ทดสอบ

  1. POST /api/workflows/:id/test-run รัน flow ในแซนด์บ็อกซ์ด้วยข้อมูลทดสอบ
  2. POST /api/workflows/:id/test-chat สนทนากับบอตแบบทดลอง
    • แซนด์บ็อกซ์เรียก embedding API และ Meilisearch เพื่อค้นความรู้ประกอบคำตอบ (RAG)
    • policy metadata ของ endpoint นี้เป็น read line-oa ไม่ใช่ workflow ซึ่งยกมาตามพฤติกรรมของระบบ TypeScript เดิม

เปิดใช้งานและดูแล

  1. POST /api/workflows/:id/activate และ POST /api/workflows/:id/deactivate เปิดหรือปิดการใช้งาน จำนวน workflow ที่ active พร้อมกันถูกจำกัดด้วยโควตา maxActiveWorkflows
  2. GET /api/workflows ดูรายการ, GET /api/workflows/:id ดูรายละเอียด, PUT /api/workflows/:id แก้ไข, DELETE /api/workflows/:id ลบแบบ soft delete
  3. POST /api/workflows/:id/clone คัดลอก flow

เวอร์ชันและประวัติ

  1. GET /api/workflows/:id/versions ดูรายการเวอร์ชัน และ GET /api/workflows/:id/versions/:versionId ดูรายละเอียดเวอร์ชัน
  2. POST /api/workflows/:id/versions/:versionId/rollback ย้อนกลับไปใช้เวอร์ชันที่เลือก
  3. 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.goCRUD, เวอร์ชัน, activate/deactivate, stats
executor.goตัวเดินขั้นตอนของ flow
sandbox.gonewSandboxService สำหรับ test-run และ test-chat พร้อม RAG (embedding + Meilisearch)
ai.go, prompt.gogenerate flow ด้วย AI
paths.go, helpers.go, dto.gohelper และ DTO
MethodRouteHandlerPolicy
GET/api/workflowsct.findAllread workflow
GET/api/workflows/:idct.findOneread workflow
GET/api/workflows/:id/statsct.getStatsread workflow
GET/api/workflows/:id/logsct.getLogsread workflow
GET/api/workflows/:id/versionsct.getVersionsread workflow
GET/api/workflows/:id/versions/:versionIdct.getVersionDetailread workflow
POST/api/workflowsct.createcreate workflow
POST/api/workflows/generatect.generatecreate workflow
POST/api/workflows/parse-responsect.parseResponseupdate workflow
POST/api/workflows/:id/test-runct.testRunupdate workflow
POST/api/workflows/:id/test-chatct.testChatread line-oa
POST/api/workflows/:id/versions/:versionId/rollbackct.rollbackToVersionupdate workflow
POST/api/workflows/:id/clonect.clonecreate workflow
POST/api/workflows/:id/activatect.activateupdate workflow
POST/api/workflows/:id/deactivatect.deactivateupdate workflow
PUT/api/workflows/:idct.updateupdate workflow
DELETE/api/workflows/:idct.removedelete 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
  • RabbitMQweb_request_execute และ message_received_trigger
  • โมดูลข้ามสาย — Plan Limits (โควตา maxActiveWorkflows), Knowledge Base, Trigger Rule และโมดูล AI
  • โมดูลที่เกี่ยวข้องกฎทริกเกอร์อัตโนมัติ, คลังความรู้, ตั้งค่า AI และ Auto Response