服务端工作流就是你的后端:API 接口、Webhook 处理程序、定时任务以及对数据变化的响应。它们与客户端工作流使用相同的可视化编辑器和步骤模型,但运行在 Cloudflare 的边缘网络上,可以使用密钥、写入数据表和发送邮件。
触发器
构建服务端工作流
在 Logic 工作区中切换到服务端工作流并新建一个。选择触发器并添加步骤。在工作流内部,可以使用 input、user 和 steps。Return 会结束本次运行;对于接口,它的值就是响应体。
{
"name": "Create order",
"runtime": "server",
"trigger": { "type": "http", "method": "POST", "path": "/orders", "auth": "user" },
"input": { "schema": { "items": "array", "couponCode": "string?" } },
"steps": [
{ "id": "order", "action": "core.tableInsert",
"params": { "table": "orders", "values": { "userId": { "$expr": "user.id" }, "items": { "$expr": "input.items" } } } },
{ "id": "mail", "action": "core.sendEmail",
"params": { "to": { "$expr": "user.email" }, "subject": "Order received", "text": "Thanks!" } },
{ "id": "done", "action": "core.return", "params": { "value": { "$expr": "{ orderId: steps.order.id }" } } }
]
}
发布后,该接口会在该环境的所有域名上生效:
curl -X POST https://shop.example.com/api/orders \
-H 'content-type: application/json' \
-d '{ "items": [{ "sku": "mug", "qty": 2 }] }'
接口认证
public:任何人都可以调用。公开接口有限流。user:只有已登录的访客可以调用;user就是调用者。apiKey:预留给服务器之间的调用(暂不可用)。
从页面调用
集成步骤(OpenAI、Stripe、Resend…)需要你的密钥,所以只能在服务端工作流中运行。要在按钮或表单中使用:
- 创建一个触发器为 Called from pages 的服务端工作流。选择谁可以调用它:所有人,或只有已登录的访客。
- 添加集成步骤。从
input读取页面发送的内容,最后加上 Return。 - 在客户端工作流中添加 Run server workflow 并选择它。它的输入会成为
input;返回值会放在steps.<id>中。
Run in preview 以你的身份运行草稿。已发布的页面运行已发布的版本。留在客户端工作流中的插件步骤会显示 Move to a server workflow,它会替你完成这些步骤。
测试运行和历史记录
使用示例输入点击 Test run。步骤会实时流入运行面板,并显示每一步的结果和耗时。测试运行使用草稿;正式运行使用已发布的版本,因此正在进行的运行永远不会受到你的编辑影响。每次运行都会保存在运行历史中,并带有状态:运行中、等待中、成功或失败。
长时间运行的工作流
添加 Sleep(几分钟到几天)或 Wait for event 后,工作流会自动变成持久化工作流。持久化运行在重启后依然存在,会以退避策略重试失败的步骤,并且可以等待审批链接或付款确认。在另一个工作流中使用 Emit event 即可恢复一个等待中的运行。启动持久化运行的接口会立即返回它的 runId。
仅限服务端的步骤
- HTTP request:调用任意 HTTPS API;私有地址会被拦截,超时 15 s,响应上限 1 MB。
- Send email:发送文本或 HTML 格式的事务性邮件。
- Query, get, insert, update, delete row:操作原生表。
- Set visitor roles:授予或移除已注册访客的角色。
- Run JavaScript:在沙箱中运行代码,可使用
input和steps,没有网络访问,也没有密钥。 - Run operation:使用集成的密钥调用其操作。要在页面中使用,请参阅从页面调用。
- Run server workflow、Return、Sleep、Wait for event、Emit event。
每个步骤都可以设置 retries(最多 5 次),延迟方式可选固定、线性或指数。
上限
站点套餐决定每月运行次数和每次运行的步骤数;参见套餐。内联运行在 30 秒后放弃。由表事件触发、又会写入数据表的工作流,在三层之后停止,因此工作流不会无限循环触发自己。