Skip to content

订阅任务 API ​

路径前缀 /projects/:projectId/subscription-tasks,使用登录会话 JWT。查看需项目 read,管理及手动运行需 admin。此处不接受 API Key 或 OAuth Token。

方法与路径请求返回
GET /无{ tasks, canManage }
POST /任务配置201 { task }
PUT /:id{ expectedRevision, draft }{ task }
DELETE /:id无{ deleted: true },软删除并交接旧订阅
GET /:id/eventslimit 可选,1–100,默认50{ events },未知运行优先,其次在途运行,其余最近优先
POST /:id/run{ requestId: UUID }{ event },同任务同身份去重
POST /preview-cron{ cron, timezone }{ dates },未来5个ISO时间

任务配置包含 name、description、已发布部署UUID targetId、enabled、sources、watchdogs、missedPolicy: coalesce|skip、concurrency: serial|parallel、failureThreshold。

每个来源有稳定UUID id、name、固定输入 inputs。时间来源还包括 kind: time、cron、timezone;Redis 来源包括 kind: redis、topicId、mappingPath 及可选 mappingTarget。属性路径只允许 payload 下的属性或数字索引,如 payload.items.0。对象字段映射到工作流输入;标量和数组必须指定 mappingTarget。服务器生成 subscriptionId,请求不得设置。

看门狗字段:id、enabled、sourceIds、cron、timezone、fallbackInputs、satisfiedBy: accepted|success、backlogPolicy: grace|immediate、graceSeconds。

task返回增加 id、revision、legacy、nextDue、最近状态与运行ID、pendingCount、watchdogStates。事件类型 time|redis|watchdog|manual;状态 queued|dispatching|running|success|failed|needs_attention|skipped|unknown。

lastStatus 优先显示需要关注的当前运行:带 runId 的 unknown 最先,其次 running|dispatching,其余按事件创建时间和ID倒序。事件首页使用相同排序,让所有带 runId 的未知运行优先,其次在途运行;各组内部按创建时间和ID倒序,总数仍不超过请求的 limit。每条事件的 targetId 保留受理时的发布版本;跳转原运行须使用该值,不能改用任务当前 targetId。queued 的 runId 尚为预留身份,不表示已开始执行,也不表示可以恢复。同任务超过100条未知运行时第一页不能查全,第一版没有翻页参数。

任务返回的 enabled 使用数据库行上的实际启停状态。连续失败达到阈值自动停用时,配置中的历史值和 revision 保留;返回 enabled: false,看门狗状态为 paused,手动运行返回 409 task_paused。

setup: ready|pending 和 setupError 表示托管订阅建立进度。保存配置成功但Redis未就绪时返回 pending,后台继续使用同一消费者身份重试;此时不要重新POST创建任务,也不要假定新消息已被订阅。

错误含义
401 unauthorized登录失效
403 forbidden权限不足
409 revision_conflict另一份配置已经更新任务
409 task_name_conflict名称冲突
409 schedule_count_limit启用任务超过团队配额
invalid_task_inputs输入不符合工作流要求
redis_topic_not_found主题不属于本项目或已删除
503 subscription_tasks_unavailable后台暂不可用

手动运行返回受理事件,不等待执行结束。响应丢失时保留原 requestId 重试,不要自动换ID。

实时状态 ​

沿用项目实时 WebSocket 订阅。change_event 中的 table_name: subscription_task_state 表示任务状态或记录已变化,row_id 为任务 ID;可选 subscription_task_reason 为 runtime|queue|event。此信号不携带输入、消息正文或完整状态,客户端重新读取有权访问的列表和记录。纯运行派生字段的 project_schedules 更新不会生成操作提示。

匹配项目的 subscribed 确认后同步一次。数据库监听恢复时,服务先复核权限,再发送 resync,其 data 为 { scope: project|team, id };客户端据此补同步,不依赖定时轮询。撤销权限的订阅会退出,并收到 SUBSCRIPTION_REVOKED。

权限核验与读取恢复 ​

项目权限查询失败或超时返回 project_access_unavailable(503),不作为撤权。明确会话失效为401,明确项目权限拒绝为403。503保留已有任务快照并暂停管理,成功读取后恢复。

实时订阅与HTTP项目权限分别核验。实时范围暂不可核验时返回带scope的 PERMISSION_UNAVAILABLE,仅暂停该范围推送,按范围退避重试,用户级通知继续接收。明确实时拒绝停止自动重订阅,并用一次HTTP读取复核页面权限;HTTP200不会覆盖实时拒绝。手动刷新、成员变化和连接恢复可重新核验。页面提示实时暂停,不通过周期列表轮询兜底。

Redis主题与工作流分别加载。编辑窗口显示读取中、读取失败、无主题及可靠写入受阻,并提供按需重试或进入项目Redis的入口。成功任务读取会清除旧访问错误,避免刷新恢复后主题又被清空。

AI Workflow Editor