上面什么都没有了,往下看吧
Powered by Randall
全部文档
全部文档 / 构建
审批(人在环路中)
让工作流、智能体或脚本暂停,直到你在控制台做出决定;决定以工作流事件或带签名的回调返回。
在控制台打开一条审批就是一个只有几个固定答案(默认 approve / deny)、等待人来回答的问题。它会出现在控制台的审批页和你的通知渠道里;做决定的人(你,或有写权限的工作区成员)一次性了结它。除非你设置了更短的 expiresInSeconds,请求七天后过期。
bash
curl -s https://randallflare.com/api/edge/v1/approvals -H 'authorization: Bearer rfp_…' -H 'content-type: application/json' -d '{
"title": "给订单 1042 退款(€120)?",
"body": "客户称包裹从未送达;承运商显示已签收。",
"choices": ["approve", "deny", "ask-carrier"],
"meta": { "orderId": 1042 },
"callbackUrl": "https://shop.example.com/hooks/approval",
"expiresInSeconds": 86400
}'
# → { "approval": { "id": "apr_…", "status": "PENDING", "url": "/flare/approvals?id=apr_…" }, "callbackSecret": "…" } (secret 只显示这一次)
- 工作流:传
workflowId 和 instanceId(以及 eventType,默认 )。暂停中的实例里 会得到 。
approval
step.waitForEvent("approval", { type: "approval" })
{ approvalId, decision, decidedBy, decidedAt, title, meta }
回调:传一个 https 的 callbackUrl。决定会以同样的 JSON POST 过去,附带 x-rf-approval-timestamp 和 x-rf-approval-signature,后者是用创建时拿到的 callbackSecret 对 <timestamp>.<body> 做的 HMAC-SHA256。轮询:GET /api/edge/v1/approvals/<id> 返回 status(PENDING、DECIDED、EXPIRED)和 decision。js
// 等待人来决定的工作流步骤
const approval = await step.do("ask", async () =>
(await fetch("https://randallflare.com/api/edge/v1/approvals", {
method: "POST",
headers: { authorization: `Bearer ${this.env.RF_TOKEN}`, "content-type": "application/json" },
body: JSON.stringify({ title: `发货订单 ${event.payload.orderId}?`, workflowId: this.env.WORKFLOW_ID, instanceId: event.instanceId }),
})).json());
const { payload } = await step.waitForEvent("approval", { type: "approval", timeout: "7 days" });
if (payload.decision !== "approve") return "stopped";
// 校验回调签名(Node)
import { createHmac, timingSafeEqual } from "node:crypto";
const expected = createHmac("sha256", secret).update(`${req.headers["x-rf-approval-timestamp"]}.${rawBody}`).digest("hex");
const ok = timingSafeEqual(Buffer.from(expected), Buffer.from(String(req.headers["x-rf-approval-signature"])));
- 在控制台里,每条待定请求显示它的文字、
meta,以及每个选项一个按钮。决定是最终的;第二次尝试会被拒绝。 - 从脚本或持有
workflow:write 令牌的智能体:POST /api/edge/v1/approvals/<id>,内容为 { "decision": "approve" }。 - 在通知渠道的类型里勾上审批(或让类型留空),请求一到就会收到带链接的通知。
请求属于你当前所在的工作区,同时最多有 200 条待定。