自动化工作流
自动化工作流是一张有向图:节点是动作,边是数据 + 控制流。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 推送给前端