Coze 视频工作流配置教程
适用范围:扣子工作流 HTTP、代码、循环与选择器节点;使用 apizt 统一视频 JSON 接口。
版本与验证:2026-09-28 核对本文配置项、步骤和资料入口,补齐验证与排错说明。未在真实账号中验证付费模型调用。
配置速查
| 配置项 | 填写内容 | 注意事项 |
|---|---|---|
| 创建请求 | POST https://api.apizt.com/v1/video/create | 与 /v1/videos multipart 接口不同。 |
| 鉴权 | Authorization: Bearer <apizt API Key> | 后台 HTTP 节点配置,不作为公开工作流输入。 |
| Content-Type | application/json | 请求体为 JSON。 |
| 查询请求 | GET https://api.apizt.com/v1/video/query?id=<完整任务ID> | id 放 Query Parameters,使用变量引用。 |
| 轮询 | 固定 10 次,每次等待 5 秒 | 未完成返回 pending 与 task_id。 |
| 结束输出 | task_id / status / url / error | 成功、失败、待完成分别输出。 |
还没有 API Key?注册获取免费体验额度 · 已注册:进入控制台创建 API Key
为此工具单独创建令牌,并设置合理额度和模型权限。截图中的模型仅作示例,以账号当前可用模型为准;不要公开密钥或上传含密钥的配置文件。
第 1 步:建立工作流与输入
在项目中创建工作流。开始节点添加 prompt(String,必填)、image_url(String,可选)与 task_id(String,可选)。参考图必须是模型服务可访问的 HTTPS URL;本地文件路径不能直接传入。API Key 存在后台 HTTP 配置中,不作为公开输入。
开始节点后加选择器:task_id 非空时直接使用已有任务查询;为空时进入创建分支。这样轮询超时后可以用任务 ID 接着查,避免重复创建。
第 2 步:准备 JSON 请求体
创建分支添加代码节点,输入 prompt、image_url 引用开始节点对应变量;输出 body_json 声明为 String。使用以下代码,避免提示词中的引号、换行破坏 JSON:
async function main({ params }) {
const prompt = String(params.prompt || '').trim();
const image = String(params.image_url || '').trim();
if (!prompt) throw new Error('prompt 不能为空');
if (image && !/^https:\/\//i.test(image)) throw new Error('image_url 必须是可访问的 HTTPS 地址');
return { body_json: JSON.stringify({
model: 'sora-2', prompt, images: image ? [image] : [],
orientation: 'portrait', size: 'large', duration: 15,
watermark: false, private: true
}) };
}第 3 步:发送创建请求
添加 HTTP 请求节点「创建视频」,配置如下。Body 选择 raw text,将第 2 步的 body_json 作为完整请求体插入,Content-Type 保持 application/json;不在引用外再加一层引号。创建请求关闭自动重试,超时后先核对是否已有任务。
| 字段 | 填写内容 | 说明 |
|---|---|---|
| Method | POST | 创建任务 |
| URL | https://api.apizt.com/v1/video/create | 统一视频接口 |
| Authorization | Bearer 你的apizt令牌 | Header |
| Content-Type | application/json | Header |
| Body | 准备请求.body_json | 用变量选择器插入完整 JSON |
第 4 步:解析并保存任务 ID
创建节点后加代码节点,输入 body 引用 HTTP 的 body,statusCode 引用其 HTTP 状态码;输出 task_id 声明为 String。保留接口返回的完整 id,不去掉前缀。
async function main({ params }) {
const body = typeof params.body === 'string' ? JSON.parse(params.body) : params.body;
const httpCode = Number(params.statusCode);
if (!Number.isInteger(httpCode) || httpCode < 200 || httpCode >= 300 || !body || typeof body.id !== 'string' || !body.id.trim()) {
throw new Error('创建失败或未返回 id,请查看 HTTP 状态和响应体');
}
return { task_id: body.id };
}将创建分支与已有任务分支连接到变量聚合节点。Group1 的候选变量依次选开始节点的 task_id 与创建解析节点的 task_id,类型均为 String,策略为返回第一个非空值。循环新增输入 task_id,引用聚合节点的 Group1;不要直接引用可能未执行的创建分支。循环的中间变量初始化为 last_status = pending、last_url = 空字符串、last_error = 空字符串。
第 5 步:配置轮询、状态解析与停止条件
循环类型选固定次数,次数为 10。每轮按「等待代码 → HTTP 查询 → 解析结果 → 设置变量 → 选择器」顺序连接。等待代码输出 ready(Boolean):
async function main({ params }) {
await new Promise(resolve => setTimeout(resolve, 5000));
return { ready: true };
}「查询视频」节点使用 GET,URL 填 https://api.apizt.com/v1/video/query;Query Parameters 新增 id,值用变量选择器引用循环中的 task_id。鉴权与创建节点相同;GET 无需请求体。
解析代码节点输入 body、statusCode 分别引用查询节点的输出。声明输出:status、url、error 为 String,terminal 为 Boolean:
async function main({ params }) {
let body;
try { body = typeof params.body === 'string' ? JSON.parse(params.body) : params.body; }
catch { return { status: 'failed', url: '', error: '查询 body 不是有效 JSON', terminal: true }; }
const httpCode = Number(params.statusCode);
if (!Number.isInteger(httpCode) || httpCode < 200 || httpCode >= 300 || !body || typeof body.status !== 'string') {
return { status: 'failed', url: '', error: '查询 HTTP 错误或缺少 status,请检查原始响应', terminal: true };
}
const status = body.status.toLowerCase();
if (status === 'completed') {
const url = typeof body.video_url === 'string' ? body.video_url.trim() : '';
return /^https?:\/\//i.test(url)
? { status: 'completed', url, error: '', terminal: true }
: { status: 'failed', url: '', error: '任务完成但未返回有效 video_url,请核对接口响应', terminal: true };
}
if (['failed', 'error', 'cancelled'].includes(status)) {
return { status: 'failed', url: '', error: JSON.stringify(body.error || body.detail || '视频生成失败'), terminal: true };
}
if (['pending', 'queued', 'processing', 'running', 'in_progress'].includes(status)) {
return { status: 'pending', url: '', error: '', terminal: false };
}
return { status: 'failed', url: '', error: '未知任务状态:' + status, terminal: true };
}- 设置变量节点将解析结果的 status、url、error 依次写入循环中间变量 last_status、last_url、last_error。
- 设置变量后接选择器:terminal 为 true 时接「停止循环」;为 false 时正常进入下一轮。
- 「停止循环」必须放在循环内部。先更新中间变量再停止,保证循环外读到最后一次结果。
第 6 步:区分完成、失败与仍在生成
循环外读取中间变量的最终值,不通过数组最后一项猜测结果。选择器使用三个分支:
| 条件 | 结果 | 处理 |
|---|---|---|
| last_status = completed 且 last_url 非空 | 成功 | 返回视频地址 |
| last_status = failed | 失败 | 返回 last_error 和任务 ID |
| 10 次结束仍为 pending | 仍在生成 | 返回 task_id,稍后重新传入开始节点查询 |
第 7 步:连接结束节点并验收
结束节点声明 task_id、status、url、error 四个 String 输出,各分支显式赋值,不透传 API Key。先单步确认创建有 id、查询有 status;再整体验证。视频生成时间可能超过本轮等待时间,pending 是可继续查询的结果;若使用异步工作流,按扣子当前发布与异步执行说明设置。
相关教程与接口
怎样确认配置已生效
- 创建响应解析到完整 id。
- 查询使用该 id,HTTP body 经过 JSON 解析。
- 完成时输出非空 url;未完成保留 task_id,可继续查询。
接入失败时逐项检查
| 现象 | 检查与处理 |
|---|---|
| 创建节点返回 JSON 格式错误 | 请求体选择 raw text,引用完整 body_json,Content-Type 为 application/json;不要再给引用加引号。 |
| HTTP 输出没有 id/status | 解析 body 字符串;同时检查 statusCode 和错误内容。 |
| 查询参数错误 | 统一查询接口使用 GET 的 id 参数,不使用 /videos/{id} 路径。 |
| 循环结束没有视频 | 返回 pending 和 task_id;继续查询已有任务,不重复创建。 |
| 循环输出总是旧值 | 每轮先设置 last_status / last_url / last_error,再进入停止循环节点。 |
| 继续查询分支报变量为空 | 用变量聚合 Group1 汇合开始.task_id 与创建解析.task_id,不直接读取未执行分支。 |
资料与下一步
遇到问题时保留软件版本、请求时间、模型 ID、错误码和请求 ID,联系支持时先隐藏 API Key。