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-Typeapplication/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;不在引用外再加一层引号。创建请求关闭自动重试,超时后先核对是否已有任务。

字段填写内容说明
MethodPOST创建任务
URLhttps://api.apizt.com/v1/video/create统一视频接口
AuthorizationBearer 你的apizt令牌Header
Content-Typeapplication/jsonHeader
Body准备请求.body_json用变量选择器插入完整 JSON
创建视频:统一 JSON 接口;apizt 配置示意图
创建视频:统一 JSON 接口。原创配置示意图,字段位置以所装版本为准;演示密钥无效。点击图片可在页内放大,支持关闭按钮、点击图片外区域和 Esc 关闭。

第 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 无需请求体。

查询已有任务;apizt 配置示意图
查询已有任务。原创配置示意图,字段位置以所装版本为准;演示密钥无效。点击图片可在页内放大,支持关闭按钮、点击图片外区域和 Esc 关闭。

解析代码节点输入 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 };
}
  1. 设置变量节点将解析结果的 status、url、error 依次写入循环中间变量 last_status、last_url、last_error。
  2. 设置变量后接选择器:terminal 为 true 时接「停止循环」;为 false 时正常进入下一轮。
  3. 「停止循环」必须放在循环内部。先更新中间变量再停止,保证循环外读到最后一次结果。

第 6 步:区分完成、失败与仍在生成

循环外读取中间变量的最终值,不通过数组最后一项猜测结果。选择器使用三个分支:

条件结果处理
last_status = completed 且 last_url 非空成功返回视频地址
last_status = failed失败返回 last_error 和任务 ID
10 次结束仍为 pending仍在生成返回 task_id,稍后重新传入开始节点查询
输出可追踪的任务结果;apizt 配置示意图
输出可追踪的任务结果。原创配置示意图,字段位置以所装版本为准;演示密钥无效。点击图片可在页内放大,支持关闭按钮、点击图片外区域和 Esc 关闭。

第 7 步:连接结束节点并验收

结束节点声明 task_id、status、url、error 四个 String 输出,各分支显式赋值,不透传 API Key。先单步确认创建有 id、查询有 status;再整体验证。视频生成时间可能超过本轮等待时间,pending 是可继续查询的结果;若使用异步工作流,按扣子当前发布与异步执行说明设置。

相关教程与接口

怎样确认配置已生效

  1. 创建响应解析到完整 id。
  2. 查询使用该 id,HTTP body 经过 JSON 解析。
  3. 完成时输出非空 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。