[ PROMPT_NODE_24494 ]
Workflows API 参考
[ SKILL_DOCUMENTATION ]
# 工作流 API
## 步骤 API
typescript
// step.do()
const result = await step.do('step name', async () => { /* logic */ });
const result = await step.do('step name', { retries, timeout }, async () => {});
// step.sleep()
await step.sleep('description', '1 hour');
await step.sleep('description', 5000); // ms
// step.sleepUntil()
await step.sleepUntil('description', Date.parse('2024-12-31'));
// step.waitForEvent()
const data = await step.waitForEvent('wait', {event: 'webhook-type', timeout: '24h'}); // 默认 24 小时,最大 365 天
try { const event = await step.waitForEvent('wait', { event: 'approval', timeout: '1h' }); } catch (e) { /* 超时 */ }
## 实例管理
typescript
// 创建单个实例
const instance = await env.MY_WORKFLOW.create({id: crypto.randomUUID(), params: { userId: 'user123' }}); // id 可选,省略则自动生成
// 自定义保留期创建(默认:免费版 3 天,付费版 30 天)
const instance = await env.MY_WORKFLOW.create({
id: crypto.randomUUID(),
params: { userId: 'user123' },
retention: '30 days' // 覆盖默认保留期
});
// 批量创建(最大 100 个,幂等:跳过已存在的 ID)
const instances = await env.MY_WORKFLOW.createBatch([{id: 'user1', params: {name: 'John'}}, {id: 'user2', params: {name: 'Jane'}}]);
// 获取与状态
const instance = await env.MY_WORKFLOW.get('instance-id');
const status = await instance.status(); // {status: 'queued' | 'running' | 'paused' | 'errored' | 'terminated' | 'complete' | 'waiting' | 'waitingForPause' | 'unknown', error?, output?}
// 控制
await instance.pause(); await instance.resume(); await instance.terminate(); await instance.restart();
// 发送事件
await instance.sendEvent({type: 'approval', payload: { approved: true }}); // 必须与 waitForEvent 类型匹配
## 触发工作流
typescript
// 从 Worker 触发
export default { async fetch(req, env) { const instance = await env.MY_WORKFLOW.create({id: crypto.randomUUID(), params: { userId: 'user123' }}); return Response.json({ id: instance.id }); }};
// 从队列触发
export default { async queue(batch, env) { for (const msg of batch.messages) { await env.MY_WORKFLOW.create({id: `job-${msg.id}`, params: msg.body}); } }};
// 从 Cron 触发
export default { async scheduled(event, env) { await env.CLEANUP_WORKFLOW.create({id: `cleanup-${Date.now()}`, params: { timestamp: event.scheduledTime }}); }};
// 从另一个工作流触发(非阻塞)
export class ParentWorkflow extends WorkflowEntrypoint