Skip to content

自动化工作流

This content is not available in your language yet.

自动化工作流是一张有向图:节点是动作,边是数据 + 控制流。BFS 引擎遍历执行, 每个节点的输出可以被下游节点用 {{#nodeId.varName.path#}} 模板引用。

[定时触发] ──► [查找记录] ──► [if-else] ──┬─► [发送通知]
└─► [更新记录]

按 category 分组:

  • 触发器:定时 / Webhook / 按钮 / 手动 / 记录事件 / 子流程入口
  • 逻辑 / 控制:if-else(多分支)/ 延迟 / 循环
  • 表操作:查找记录 / 新建 / 更新 / 删除
  • 集成:HTTP 请求 / 发送通知
  • 脚本:命令行(需 XHE_AUTOMATION_ALLOW_SHELL=1 开关)
  • AI:LLM(OpenAI / Anthropic / 本地模型)
  • 流程:调用子工作流
  • 批注:便笺(不参与执行,只放说明)

每个节点对应 frontend/src/components/editor/automation/nodes/<type>/Config.vue 一个配置面板, 执行逻辑在 Go 端 pkg/engine/workflow/executors.go

节点输出在 output namespace 下,用 {{#nodeId.varName.path#}} 引用。 变量编辑器在配置面板里点变量徽章弹出 picker,自动列出上游所有可用变量。

例子:

[查找记录: findUser] → output.records[]
└─► [HTTP 请求]
URL: https://api.example.com/users/{{#findUser.records[0].id#}}
body: { "name": "{{#findUser.records[0].name#}}" }

工作流自己不跑,得有触发器。常见配置:

  • 定时触发:Cron 表达式或固定间隔
  • 记录事件:表某行被创建 / 更新 / 删除时触发
  • Webhook:拿到一个 /api/v1/webhook/<id> URL,外部 POST 触发
  • 按钮:表里加 Button 字段,用户点击触发对应行作为 payload
  • 手动:用户在编辑器点「▶ 运行」时触发

每次执行落库一条 run,包含每个节点的 input / output / 状态 / 耗时 / 错误。 右下角的「运行历史」浮层可以筛选、查看节点日志、回看 input/output。

WebSocket 实时推送:节点开始 / 结束都广播给前端,画板上对应节点会有”运行中” 视效(呼吸光晕 / 滚动虚线 / 流光 / 脉冲,可在偏好设置切)。

  • BFS 图遍历 + killed-edge / skipped 传播:if-else 不走的分支整支被标 skipped
  • 异步 worker pool(runqueue.go),并发执行无依赖的节点
  • 触发器入口 → 运行入队 → 执行 → 写历史 → WS 推送给前端