公共任务契约
创建响应可以包括:| 字段 | 含义 | 操作 |
|---|---|---|
id | 公共 TokenLab 任务 ID | 将其与您自己的作业记录一起存储 |
task_id | 相同公共任务标识的兼容别名 | 将其视为与 id 等效 |
status | 当前公共任务状态 | 当状态不是终止时开始轮询 |
poll_url | 优选状态 URL | 存在时优先使用此 URL |
model | 端点请求或解析的模型 | 存储以便支持和计费对账 |
/v1/tasks/{id} 是公共异步媒体作业的规范固定状态端点。可能存在特定于媒体的状态路由以保持兼容性,但新的集成应优先使用 poll_url 或 /v1/tasks/{id}。
推荐流程
- 验证用户请求并发送带有显式
model的创建调用。 - 在将控制权返回给 UI 之前,持久化
id/task_id、poll_url、端点、模型、用户 ID 和您自己的作业 ID。 - 对于长时间运行的媒体任务,每
5-10s轮询一次。 - 仅在任务为
completed或failed时停止。 - 在
completed时,读取特定于媒体的结果字段并存储最终 URL 或元数据。 - 在
failed时,存储公共错误,并仅作为新的用户可见作业提供重试。
轮询示例
pending、processing、completed 和 failed。取消的任务表示为 failed,并带有 cancelled: true 和 cancellation_status: "cancelled",以便旧的状态处理继续有效。
客户端重试规则
网络超时是重复作业的最常见来源。使用以下规则:| 超时发生位置 | 更安全的行为 |
|---|---|
| 在您的服务器接收到创建响应之前 | 检查服务器日志中的 request_id;仅在未创建任务时重试 |
| 在存储创建响应之后 | 恢复对存储的 task_id 的轮询 |
| 在轮询期间 | 使用退避重试状态请求 |
| 在终止状态之后 | 除非用户明确刷新记录,否则不要再次轮询 |
计费与结算
异步作业在创建请求被接受时可以保留估计金额。最终结算发生在终止状态之后。当可用时,任务状态响应可以暴露billing_transaction_id 和 X-Billing-Transaction-ID 头。
对于对账,请在您的日志中连接这些标识符:
- 来自创建请求的
request_id。 - 来自任务的
task_id/id。 - 当存在时的
billing_transaction_id。 - 您自己的用户 ID、项目 ID 或作业 ID。
取消
DELETE /v1/tasks/{id} 是故意狭窄的。它当前支持排队的 Volcengine Seedance 视频任务,如 seedance-1.5-pro、seedance-2.0 和 seedance-2.0-fast。
不支持的任务返回 400 unsupported_task_cancel。已经运行或处于终止状态的任务返回 409 task_not_cancellable。构建取消 UI 时应为“请求取消”,而不是保证停止按钮。
故障排除
| 症状 | 可能原因 | 检查内容 |
|---|---|---|
async_task_not_found | 任务未知、过期、对该 API 密钥不可访问或不是公共异步任务 | 确认 API 密钥所有权和存储的公共 task_id |
| 任务似乎从未完成 | 客户端一直在轮询错误的 URL 或在终止状态之前停止 | 使用 poll_url 或 /v1/tasks/{id} 并检查最新状态 |
| 最终媒体 URL 缺失 | 任务未完成,或上游作业完成但没有可用输出 | 继续轮询直到终止,然后将缺失输出处理为失败 |
| 用户看到重复项 | 重试路径在超时或刷新后创建了新任务 | 通过您自己的作业 ID 和存储的 task_id 去重 |
| 计费不匹配 | 结算是异步的或客户端在比较提供商 ID | 比较 request_id、task_id 和 billing_transaction_id |
支持包
联系支持时,请包括request_id、task_id、billing_transaction_id(如有)、端点、模型、时间戳和经过清理的请求形状。除非支持要求提供经过编辑的示例,否则请勿包含 API 密钥、私人媒体、签名 URL 或完整提示。