触发器与运行
通过手动、API 和 Webhook 启动工作流
工作流触发方式在工作流设置中配置。发布前可调试草稿,正式调用要求工作流已发布。
手动与 API 运行
编辑器内选择运行,填入输入变量后启动。API 运行使用:
curl -X POST "$CLOUISLE_API/api/v1/workflows/<workflow_id>/run" \
-H "Authorization: Bearer $CLOUISLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"inputs":{"query":"检查订单状态"}}'请求体中的 inputs 默认是空对象。响应返回运行 ID;使用运行查询接口获取状态和结果。
Webhook
- 在工作流设置选择Webhook。
- 保存后生成 Webhook Token 和 URL。
- 在访问 API页复制 URL,使用 API Key 的 Bearer 认证调用。
- 请求 JSON 直接提供工作流输入字段。
Webhook 工作流必须已发布且启用对应触发器。初始响应包含运行 ID、状态和 stream_url;连接该 URL 可通过 SSE 查看节点事件。
curl -X POST "$CLOUISLE_API/api/v1/workflows/webhook/<webhook_token>" \
-H "Authorization: Bearer $CLOUISLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"检查订单状态"}'Cron
在工作流设置 > 触发器中选择定时任务,界面支持按间隔、每天、每周、每月或自定义 Cron 配置。执行频率会换算成一条标准 Cron 表达式(分 时 日 月 周,如 0 9 * * 1-5 表示工作日上午 9 点),间隔预设为 5/10/15/30 分钟与 1/2/3/6/12 小时。
仅保存配置不会自动运行
后端有实现调度逻辑的任务:workflow.check_scheduled(backend/app/services/workflow/tasks.py)挑选已发布且 trigger_type=cron 的工作流,用 croniter 判断当前这一分钟是否命中表达式,命中就以空输入 {}、以工作流创建者的身份触发一次运行。
但随附部署不会调度它,原因有三层,必须全部解决:
- 不在
include列表里:backend/app/core/celery.py中celery_app的include不含app.services.workflow.tasks,任务默认没有注册到 Worker。 - 不在 Beat 表里:同一文件的
beat_schedule只有用量重置、密钥/密码到期检查、沙箱会话清理和 AgentRun 失联扫描,没有workflow.check_scheduled。随附的 Beat 容器(Compose/Helm/K8s 的beat服务,命令为python main.py beat)只执行这份表。 - 键名不一致:调度任务读
trigger_config["cron"],而工作流设置表单写入的是trigger_config["cron_expression"]。即使调度成功,界面保存的表达式也不会被匹配。
该任务也没有匹配的 task_routes 规则,因此会落到 default 队列——需要确认有 Worker 消费该队列,或在 Beat 条目里用 options.queue 指定队列。
启用自定义部署的 Cron
- 把
app.services.workflow.tasks加进celery_app的include,或在 Worker 启动时导入该模块。 - 在
beat_schedule添加条目(建议每分钟一次):
celery_app.conf.beat_schedule["workflow-check-scheduled"] = {
"task": "workflow.check_scheduled",
"schedule": crontab(minute="*"),
}- 统一表达式键名:把界面保存的
trigger_config.cron_expression改名为cron,或直接用 API 把表达式写到cron键上。 - 确认消费
default队列的 Worker 正在运行,否则任务发出后无人执行。

状态与取消
运行状态包括 pending、running、waiting、success、failed、cancelled 和 timeout;waiting 表示停在暂停节点等待审批或补充变量。运行抽屉可以取消仍在执行的任务;部分已发出的外部 API 请求不能被中断。查看工作流 API获取流式运行事件。
这篇文章对你有帮助吗?