← 返回 Skills 市场
kukuoai

DeepSop TK工作台

作者 kukuoAI · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ✓ 安全检测通过
10
总下载
0
收藏
0
当前安装
1
版本数
在 OpenClaw 中安装
/install deepsop-tiktokflow
功能描述
TikTok 视频 AI 生成与发布技能(数字员工 Toby)。用户输入自然语言指令,AI 自动拆解任务参数,调用 deepsop 平台接口生成 AI 视频并发布到 TikTok,等待后查询并推送播放/点赞/评论/分享等数据。触发场景:用户说「发 TikTok 视频」「生成视频发布到 TikTok」「抖音国际版发...
使用说明 (SKILL.md)

\r \r

TikTok 视频 AI 生成与发布(数字员工 Toby)\r

\r

功能简介\r

\r 本技能基于 deepsop 平台数字员工 Toby,能够:\r \r

  • 理解自然语言指令:直接描述需求,如「生成一条库阔 AI 宣传视频发布到 TikTok」\r
  • AI 视频生成:调用 Veo3.1 / Sora2 / Wan2.x / Seedance / kling-v3-omni 等多种视频模型生成视频\r
  • TikTok 自动发布:根据用户配置的发布参数(数量、开始时间、间隔)自动定时发布到指定 TikTok 账号\r
  • 结果统计:任务完成后自动查询播放量、点赞、评论、分享、视频明细等数据,并展示 TikTok 链接\r \r

Toby 不依赖客户挖掘(AiWa)等其他员工,可独立执行。如需配合客户挖掘 / 邮件销售 / 电话销售 / 短信销售等多员工协作,请改用 deepsop-humabot。\r \r ---\r \r

前置条件:获取 API Key\r

\r 本技能需要 API Key 授权才能调用 DeepSOP 接口。\r \r

  1. 获取 API Key 入口:\r
  2. 登录后进入「设置」/「API 管理」页面,新建以 sk- 开头的 API Key。\r
  3. 配置环境变量:\r \r
DEEPSOP_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxx\r
```\r
\r
> 所有 API 请求头需携带:`x-api-key: $DEEPSOP_API_KEY`\r
> API Base URL:`https://ai.deepsop.com/prod-api/`\r
\r
---\r
\r
## ⛔ 接口路径强约束(最高优先级)\r
\r
> 🔒 调用任何接口时,**必须严格使用本文档对应步骤标注的完整 URL**,不得做任何形式的改写、简化、猜测或自创。\r
>\r
> 请求前自检流程:\r
> 1. 在下方「**API 路径权威清单**」中找到对应步骤的接口;\r
> 2. 将即将发出的完整 URL(含 host、path、query key 名与顺序、`platform=1` / `pageSize` 等)与清单中的 `Path` 列**逐字符比对**;\r
> 3. 完全一致才允许发出;任何偏差立即停止。\r
>\r
> 禁止行为:\r
> - ❌ 把 `prod-api` 改成 `api` / `v1` / `prod`\r
> - ❌ 把 camelCase 改成 snake_case 或全小写(`presetEmployee` ≠ `preset_employee` ≠ `presetemployee`)\r
> - ❌ `authaccount` 偏偏是全小写,不得改成 `authAccount`\r
> - ❌ 漏写或私自补加 query 参数(如漏 `platform=1` / `status=1`)\r
> - ❌ 凭"经验/记忆"猜测路径,不回到本文档对照\r
\r
### 📋 API 路径权威清单(Base URL: `https://ai.deepsop.com/prod-api`)\r
\r
| # | 步骤 | 方法 | Path(不含 Base URL) |\r
|---|---|---|---|\r
| 1 | Step 1.5 数字员工可用性 | `GET` | `/ai/presetEmployee/list` |\r
| 1.1 | Step 1.5.1① 签约套餐列表 | `GET` | `/ai/setting/list?packageType=3` |\r
| 1.2 | Step 1.5.1② 人民币→K币汇率 | `GET` | `/system/config/configKey/CNY_TO_KCOIN` |\r
| 1.3 | Step 1.5.1③ K币余额查询 | `GET` | `/ai/vip/balance?userId={userId}` |\r
| 1.4 | Step 1.5.1④ 提交签约(扣K币) | `POST` | `/ai/order/purchaseIndependentPackageByKToken` |\r
| 1.5 | Step 1.5.1③ 用户 Profile(取 userId) | `GET` | `/ai/user/profile` |\r
| 2 | Step 3 提交任务 | `POST` | `/ai/presetEmployee/submitTask` |\r
| 3 | Step 3 前置 E-1 TikTok 账号列表 | `GET` | `/ai/authaccount/list?pageNum=1&pageSize=999&platform=1&status=1` |\r
| 4 | Step 3 前置 E-2 TikTok 账号权限 | `GET` | `/ai/auth/tiktok/getCreatorInfo?authAccountId={id}` |\r
| 5 | Step 3 前置 E-3 视频模型列表 | `POST` | `/ai/consumeSource/list?pageNum=1&pageSize=999` |\r
| 6 | Step 5-1 视频统计 | `GET` | `/ai/data/count?taskId={tobyDagTaskId}&customerPoolId={tobyCustomerPoolId}&platform=1` |\r
| 7 | Step 5-2 视频列表 | `GET` | `/ai/data/list?pageNum=1&pageSize=10&taskId={tobyDagTaskId}&customerPoolId={tobyCustomerPoolId}&platform=1` |\r
\r
### 🛡️ 双轨强约束(本文档 + 代码)\r
\r
> 上述清单同时存在于 `scripts/api_paths.py`:\r
>\r
> - **LLM 直接发请求时:** 必须对照本文档清单逐字符比对路径。\r
> - **脚本调用 API 时:** 严禁脚本内硬编码 URL,必须从 `api_paths.py` 通过 `build_url("xxx")` 获取,并配合 `assert_url_matches()` 自检。\r
> - 漂移检测:运行 `python scripts/api_paths.py` 会扫描本文件中所有 `https://ai.deepsop.com/prod-api/...` 路径,未在 `api_paths.py` 登记则非零退出。\r
\r
---\r
\r
## 完整执行流程\r
\r
### Step 0:触发类型判断(每次进入技能必须首先执行)\r
\r
检查输入是否包含 `[DeepSOP-AutoQuery-Toby]` 标记:\r
\r
- **包含**:cron 定时回调。**不得询问用户、不得等待确认**。立即从输入中解析 `taskId` / `tobyDagTaskId` / `tobyCustomerPoolId` / `taskName` / `feishuChatId`,跳过 Step 1~4 直接执行 Step 5。\r
- **不包含**:用户主动指令,继续 Step 1。\r
\r
---\r
\r
### Step 1:AI 分析(任务拆解)\r
\r
用以下 prompt 分析用户指令,严格返回 JSON:\r
\r
```\r
根据【指令】描述,Json格式返回数据\r
不需要多余的描述,不要过度解读,没有提及的内容请不要擅自理解,识别结果除了Json数据其他文字不要出现\r
规则如下:{\r
  "taskName": "根据描述总结出一个简洁的任务名称",\r
  "totalTarget": "提取描述中提及的视频数量(无单位纯数字);未提及则填 1",\r
  "tiktokContent": "根据描述总结出一个 TikTok 内容发布的内容主题"\r
}\r
```\r
\r
解析结果字段(**注意:内部解析变量,不要原样塞到最终 API 请求体**):\r
- `taskName` → `collaborationSubmitTaskParam.taskName`\r
- `totalTarget` → `employeeParams.Toby.totalTarget`(不得作为根级字段)\r
- `tiktokContent` → `employeeParams.Toby.content` 与 `employeeParams.Toby.param.text`(不得作为独立字段出现)\r
\r
**`executionMode` 当前阶段强制规则:** 提交请求体时一律硬编码为数字 `1`(定额任务)。后端枚举:`周期性任务 = 0`,`定额任务 = 1`。**绝不允许**写中文字符串、`"1"` 字符串、`true`、`null`。\r
\r
---\r
\r
### Step 1.5:数字员工 Toby 可用性校验(Step 1 完成后立即执行)\r
\r
**接口:** `GET https://ai.deepsop.com/prod-api/ai/presetEmployee/list`\r
\r
**请求头:** `x-api-key: $DEEPSOP_API_KEY`\r
\r
响应 `data` 数组中找到 `name === "Toby"` 的条目,检查:\r
- `status`:`0` = 启用,`1` = 禁用\r
- `remainingDays`:剩余可用天数(可为 null)\r
\r
规则:\r
\r
1. **禁用(status=1)→ 终止任务:**\r
   > ⚠️ 数字员工「Toby」当前处于禁用状态,无法执行任务。请联系管理员启用后再试。\r
\r
2. **未开通 / 已过期(status=0 且 `remainingDays` 为 null 或 ≤ 0)→ 进入签约流程(Step 1.5.1)**。完成后重新拉 `/ai/presetEmployee/list` 校验通过后继续;用户放弃或余额不足则终止。\r
\r
3. **剩余 ≤ 7 天 → 提示但允许继续:**\r
   > ⚡ 提示:数字员工「Toby」剩余可用天数仅剩 **{remainingDays} 天**,建议尽快前往 https://ai.deepsop.com 续费。\r
\r
4. **正常(status=0 且 remainingDays > 7)→ 继续**\r
\r
#### Step 1.5.1:Toby 签约流程(仅规则 2 触发时执行)\r
\r
**① 拉取套餐列表**\r
\r
接口:`GET https://ai.deepsop.com/prod-api/ai/setting/list?packageType=3`\r
\r
响应 `data` 中按 `presetEmployeeId` 匹配 Toby 对应条目,取其 `packageOptions`:\r
\r
```\r
{\r
  presetEmployeeId,\r
  packageOptions: [\r
    { id, packageId, description, purchaseMonths, actualPrice, discountRate, giftKToken }\r
  ]\r
}\r
```\r
\r
**② 展示套餐**\r
\r
获取人民币→K币汇率:\r
接口:`GET https://ai.deepsop.com/prod-api/system/config/configKey/CNY_TO_KCOIN`\r
响应 `msg` 即为汇率(`rate`)。\r
\r
应付 K 币计算:\r
```\r
priceKCoin = actualPrice × (discountRate / 100) × rate\r
```\r
\r
向用户展示并等待用户回复序号。用户「取消」→ 终止:\r
> 已取消签约,任务终止。\r
\r
**③ K 币余额校验**\r
\r
> 🔒 **强制实时查询规则:每次进入本步骤都必须重新调用 `/ai/vip/balance`,严禁复用先前查询到的 balance 值。**\r
\r
先获取 `userId`:`GET https://ai.deepsop.com/prod-api/ai/user/profile` 响应 `data.userId`。\r
\r
接口:`GET https://ai.deepsop.com/prod-api/ai/vip/balance?userId={userId}`\r
\r
响应 `data` 即为余额。\r
\r
- `balance \x3C priceKCoin` → 终止:\r
  > ❌ 余额不足,签约失败。当前余额:**{balance} K币**,所需:**{priceKCoin} K币**。\r
  > 请前往 https://ai.deepsop.com 充值后重新下达任务。\r
\r
- `balance ≥ priceKCoin` → 进入 ④\r
\r
**④ 提交签约**\r
\r
接口:`POST https://ai.deepsop.com/prod-api/ai/order/purchaseIndependentPackageByKToken`\r
请求体:\r
```json\r
{ "packageId": "\x3CpackageId>", "optionId": "\x3Cid>" }\r
```\r
\r
成功 → 回复成功并回到 Step 1.5 校验后继续;失败 → 终止。\r
\r
---\r
\r
### Step 2:Toby TikTok 账号与发布参数配置(Step 3 前置)\r
\r
**E-1:查询 TikTok 绑定账号**\r
\r
接口:`GET https://ai.deepsop.com/prod-api/ai/authaccount/list?pageNum=1&pageSize=999&platform=1&status=1`\r
\r
请求头:`x-api-key: $DEEPSOP_API_KEY`\r
\r
关键字段:\r
- `rows[].id`、`rows[].account`、`rows[].fansNum`、`rows[].groupNames`、`rows[].expiredTime`\r
\r
处理:\r
- `rows` 为空 → 终止:\r
  > ⚠️ 当前账号未绑定任何 TikTok 授权账号,请先登录 https://ai.deepsop.com 添加 TikTok 授权账号后再试。\r
- 1 条 → 列出并等用户回复「确认」:\r
  ```\r
  检测到以下 TikTok 账号,请确认是否使用(回复「确认」即可):\r
  1. @{account}(粉丝:{fansNum},分组:{groupNames})\r
  ```\r
- 多条 → 列出供用户多选(逗号分隔序号)。\r
\r
**等待用户确认/选择**后,将选中账号的 `id` 列表记为 `selectedAccountIds`。\r
\r
**E-2:获取账号权限信息**\r
\r
针对第一个选中账号:\r
接口:`GET https://ai.deepsop.com/prod-api/ai/auth/tiktok/getCreatorInfo?authAccountId={selectedAccountIds[0]}`\r
\r
提取:\r
- `data.privacyLevelOptions[]`:可用隐私级别\r
- `data.commentDisabled` / `data.duetDisabled` / `data.stitchDisabled`\r
\r
`privacyLevelOptions` 多个时让用户选择隐私级别:\r
```\r
请选择该账号的视频隐私设置(回复序号):\r
1. PUBLIC_TO_EVERYONE — 全公开\r
2. MUTUAL_FOLLOW_FRIENDS — 互关好友\r
3. SELF_ONLY — 仅自己可见\r
```\r
\r
**E-3:AI 视频生成模型(默认)**\r
\r
`param.methodType` **默认固定为 `"3"`**(Veo3.1 Fast Lite),无需用户选择。如需查看全部模型,可调:\r
\r
接口:`POST https://ai.deepsop.com/prod-api/ai/consumeSource/list?pageNum=1&pageSize=999`\r
请求体:`{"sourceTypeList":["VIDEO_MODEL"],"hiddenState":"0"}`\r
\r
默认 methodType=`"3"` 下其他视频参数默认:\r
- `resolution`: `720p`,`ratio`: `16:9`,`duration`: `8`(methodType=3 唯一允许值)\r
- `generationType`: `"FIRST&LAST"`,`shotType`: `"single"`,`mode`: `"pro"`\r
- `keepOriginalSound`: `"yes"`,`personGeneration`: `"allow_adult"`,`resizeMode`: `"pad"`\r
- `n`: `1`,`generateAudio`: `true`\r
- `enhancePrompt` / `promptExtend` / `multiShot`: `false`,`durationSwitch`: `"1"`\r
\r
> 若用户切换其他模型(Veo3.1 Pro / Sora2 Pro / kling-v3-omni 等),先调 `consumeSource/list` 拿 `sourceValue`,再据此 methodType 去下方「methodType → 取值约束表」校正各依赖字段,**不得**沿用默认值。\r
\r
**E-4:视频生成提示词确认(必问,禁止跳过)**\r
\r
以 Step 1 解析出的 `tiktokContent` 作为默认提示词,强制询问:\r
\r
```\r
当前 AI 视频生成提示词为:「{tiktokContent}」\r
是否需要修改?(回复「不用」直接使用,或直接输入新的提示词)\r
```\r
\r
- 「不用」/类似否定 → 保持 `tiktokContent` 不变\r
- 输入新提示词 → 替换 `content` 与 `param.text`\r
\r
**未收到用户回复不得继续。**\r
\r
**E-5:发布参数配置(必须由用户指定,禁止自动填充)**\r
\r
针对每个选中账号依次询问:\r
```\r
请为账号 @{account} 配置发布参数:\r
- 每天发布视频数(publishCount,如 3):\r
- 定时发布开始时间(startTime,HH:mm 格式,如 09:30):\r
- 视频发布间隔(publishInterval,分钟,如 60):\r
```\r
\r
**等待所有账号回复完毕**后,构建 `publishTemplates`。\r
\r
---\r
\r
### Step 3:构建并提交任务\r
\r
> 🧷 **请求体总规约(最高优先级)**\r
>\r
> `collaborationSubmitTaskParam` **有且仅有以下 5 个根级键**:\r
>\r
> ```ts\r
> {\r
>   "taskName":        String,   // Step 1 的 taskName,非空\r
>   "currentModule":   "content",// 字符串字面量,永远是 "content"\r
>   "executionMode":   1,        // 永远写数字 1\r
>   "employeeParams":  { "Toby": {...} },\r
>   "taskDescription": String    // 用户原始指令,原文透传\r
> }\r
> ```\r
>\r
> 与其同级必须再带:\r
> - `completed`: `true`(布尔字面量)\r
> - `sourceSettings`: `null`(Toby 单独执行时永远为 null)\r
>\r
> **硬规则:**\r
> 1. `currentModule` 永远 `"content"`;`executionMode` 永远 `1`。\r
> 2. `taskDescription` 透传用户原文,禁止改写为 AI 总结。\r
> 3. `employeeParams` 子键必须是 PascalCase `Toby`,不得 `toby` / `TOBY` / `tobyParam`。\r
> 4. Step 1 内部解析变量(`tiktokContent` / 根级 `totalTarget`)一律不得出现在请求体中——只能流到 `employeeParams.Toby` 内的指定字段。\r
\r
**接口:** `POST https://ai.deepsop.com/prod-api/ai/presetEmployee/submitTask`\r
\r
**请求头:**\r
```\r
Content-Type: application/json; charset=utf-8\r
x-api-key: $DEEPSOP_API_KEY\r
```\r
\r
> 🔒 **强制使用 `submit_task.py` 提交,禁止直接 curl:**\r
>\r
> ```bash\r
> python3 scripts/submit_task.py \x3C\x3C'TASK_BODY_EOF'\r
> {\r
>   "completed": true,\r
>   "collaborationSubmitTaskParam": { ...完整请求体... }\r
> }\r
> TASK_BODY_EOF\r
> ```\r
>\r
> 原因:直接 `curl -d '{中文 JSON}'` 会触发 Windows cp936 与 UTF-8 转码歧义,导致 taskName/taskDescription 中文乱码。`submit_task.py` 通过 stdin 字节流 + 显式 UTF-8 + `Content-Type: application/json; charset=utf-8` 闭合编码链路,并内置 `validate_employee_params.py` pre-flight 校验。\r
>\r
> 行为约束:\r
> - 必须 heredoc 单引号定界符(`\x3C\x3C'TASK_BODY_EOF'`),禁止 argv 传 JSON。\r
> - 退路:`python3 scripts/submit_task.py --file /tmp/task_body.json`。\r
> - 退出码:`0` 成功 / `1` 校验失败 / `2` 网络失败 / `3` 服务端非 2xx / `4` 输入格式错误。\r
> - 退出码 ≠ 0 时,**必须**把 `summary` + `errors`/`response` 原样回给用户,不得跳过或假装成功。\r
\r
> ⛔ **字段名零改写规则:** 所有键名严格保持 camelCase,不得改 snake_case / kebab-case / 同义词。`accountConfigList` ≠ `account_config_list`,`publishTemplates` ≠ `publish_templates`,`staffId` ≠ `staff_id`,`videoItems` ≠ `video_items`,等等。\r
\r
**Toby 参数构建规则:**\r
\r
- `totalTarget`:定额模式下填 Step 1 的 totalTarget,周期模式下为 null\r
- `incrementalTarget`:周期模式下填用户指定的每天发布数,定额模式下固定填 10\r
- `upperLimitTarget`:固定 10\r
- `content`:来自 Step 1 的 `tiktokContent`(E-4 确认后的最终值)\r
- `staffId`:固定为空字符串 `""`\r
- `param`:嵌套对象,**有且仅有以下 27 个键**,必须按官方默认模板的键集构建(`text` 取自 E-4 确认后的最终提示词;`methodType` 默认 `"3"`)。**注意:当前 methodType 下 UI 不显的字段也必须传默认值,禁止裁剪 key**:\r
\r
  | 字段 | 默认值 | 类型 | 说明 |\r
  |---|---|---|---|\r
  | `methodType` | `"3"` | string | 视频生成模型,默认 Veo3.1 Fast Lite |\r
  | `multiShot` | `false` | boolean | 是否多镜头(仅 methodType=`"10"` 实际生效) |\r
  | `generationType` | `"FIRST&LAST"` | string | 生成类型;可选值受 methodType 约束 |\r
  | `text` | E-4 提示词 | string | 视频生成提示词,与 `Toby.content` 相同 |\r
  | `multiPrompt` | `[]` | string[] | 多镜头分镜(仅 `shotType="customize"` 时填) |\r
  | `negativePrompt` | `""` | string | 反向提示词 |\r
  | `imageUrlList` | `[]` | string[] | 参考图(仅 `generationType` ∈ {REFERENCE,EDIT,FEATURE} 时填) |\r
  | `firstImageUrl` | `null` | string\|null | 首帧图(仅 `generationType="FIRST&LAST"` 时填) |\r
  | `lastImageUrl` | `null` | string\|null | 尾帧图(除 methodType ∈ {auto,1,8,11,12} 外) |\r
  | `firstClipUrl` | `null` | string\|null | 续写/编辑/参考视频(仅 methodType ∈ {10,14}) |\r
  | `elementList` | `[]` | array | 参考主体(仅 methodType=`"10"` 时填) |\r
  | `videoUrlList` | `[]` | string[] | 参考视频(methodType ∈ {9,16,17,18}) |\r
  | `audioUrl` | `null` | string\|null | 参考音频(methodType ∈ {7,8,14,15,16}) |\r
  | `keepOriginalSound` | `"yes"` | string | 保留视频原声(仅 methodType=`"10"` 实际生效) |\r
  | `durationList` | `[]` | array | 多段时长配置 |\r
  | `mode` | `"pro"` | string | 生成模式(仅 methodType=`"10"` 实际生效) |\r
  | `resolution` | `"720p"` | string | 分辨率;可选值受 methodType 约束 |\r
  | `ratio` | `"16:9"` | string | 画面比例;可选值受 methodType 约束 |\r
  | `generateAudio` | `true` | boolean | 是否生成声音(methodType ∈ {2,5,6,10,17,18} 生效) |\r
  | `enhancePrompt` | `false` | boolean | 翻译为英文(methodType ∈ {3,4,5,6} 生效) |\r
  | `n` | `1` | number | 生成数量(methodType ∈ {5,6} 生效) |\r
  | `personGeneration` | `"allow_adult"` | string | 是否允许人物(methodType ∈ {5,6} 生效) |\r
  | `resizeMode` | `"pad"` | string | 图像缩放(methodType ∈ {5,6} 生效) |\r
  | `promptExtend` | `false` | boolean | 智能改写(methodType ∈ {7,8,9,14,15,16} 生效) |\r
  | `shotType` | `"single"` | string | 镜头模式;可选值受 methodType 约束 |\r
  | `durationSwitch` | `"1"` | string | 生成时长模式(methodType ∈ {2,17,18} 生效) |\r
  | `duration` | `8`(methodType=`"3"`) | number | 视频时长(秒);范围与默认值受 methodType 约束 |\r
\r
- `videoItems`:固定 `[]`\r
- `publishTemplates`:每个选中账号一条:\r
  - `publishCount`:用户指定(字符串)\r
  - `releaseType`:固定 `"1"`\r
  - `timeZone`:固定 `"1"`\r
  - `intervalType`:固定 `"1"`\r
  - `startTime`:用户指定(HH:mm)\r
  - `accountId`:对应账号 `id`(字符串)\r
  - `publishInterval`:用户指定(整数,分钟)\r
- `accountConfigList`:仅一条,取 E-2 中第一个选中账号:\r
  - `accountId`:`selectedAccountIds[0]`(字符串)\r
  - `privacyLevel`:用户选定值\r
  - `disableDuet`:来自 `data.duetDisabled`(布尔转字符串)\r
  - `disableStitch`:来自 `data.stitchDisabled`\r
  - `disableComment`:来自 `data.commentDisabled`\r
  - `expand`:固定 `false`\r
  - `brandContentToggle`:固定 `"false"`\r
  - `brandOrganicToggle`:固定 `"false"`\r
  - `isPublicAccount`:固定 `true`\r
  - `commentDisabled`:同 `data.commentDisabled`(布尔转字符串)\r
  - `duetDisabled`:同 `data.duetDisabled`\r
  - `stitchDisabled`:同 `data.stitchDisabled`\r
\r
> ⛔ **Toby 结构强约束:**\r
> 1. 子对象 key 必须 **`Toby`**,不得 `toby` / `TOBY` / `tobyParam` / `tobyParams`。\r
> 2. 必须嵌在 `collaborationSubmitTaskParam.employeeParams.Toby` 下。\r
> 3. **`param` 必须保持嵌套对象**:所有视频生成参数都是 `param` 内部键,**禁止**提升到 Toby 根部(错例:`Toby.methodType`、`Toby.text`)。\r
> 4. `tiktokContent` **不是请求体字段**,其值落到 `Toby.content` 与 `Toby.param.text`,但不得自己再加 `tiktokContent` 键。\r
> 5. `publishTemplates` 数组每条必填 7 键。\r
> 6. `accountConfigList` 数组(仅一条)必填 12 键。\r
> 7. `staffId` 必填,空字符串 `""` 也得给。\r
> 8. `videoItems` 必填,空数组 `[]` 也得给。\r
> 9. Toby 根部必填 9 键:`totalTarget` / `incrementalTarget` / `upperLimitTarget` / `content` / `staffId` / `param` / `videoItems` / `publishTemplates` / `accountConfigList`。\r
> 10. **`param` 27 键全量传**:即使当前 methodType 隐藏了某些字段,请求体仍按表中默认值传值,不得裁剪 key。\r
\r
**📐 methodType → 取值约束表:**\r
\r
| methodType | 模型 | `generationType` 可选 | `resolution` 可选 | `ratio` 可选 | `duration`(步长/最小/最大/默认) | `shotType` 可选 |\r
|---|---|---|---|---|---|---|\r
| `"auto"` | Auto | `FIRST&LAST` | `720p` | `16:9`,`9:16` | 由模型自动决定 (键保留默认 `8`) | `single` |\r
| `"1"` | Sora2 BetaMax | `TEXT`,`FIRST&LAST` | `720p` | `16:9`,`9:16` | step=5, 10–15, 默认 `10` | `single` |\r
| `"2"` | Seedance1.5 Pro | `TEXT`,`FIRST&LAST` | `480p`,`720p`,`1080p` | `adaptive`,`1:1`,`3:4`,`4:3`,`16:9`,`9:16`,`21:9` | step=1, 4–12, 默认 `4` | `single` |\r
| `"3"`(**默认**) | Veo3.1 Fast Lite | `TEXT`,`FIRST&LAST`,`REFERENCE` | `720p`,`1080p`,`4K` | `adaptive`,`16:9`,`9:16` | step=1, 8–8, 默认 `8`(**唯一允许 8**) | `single` |\r
| `"4"` | Veo3.1 Pro Lite | `TEXT`,`FIRST&LAST` | `720p`,`1080p`,`4K` | `adaptive`,`16:9`,`9:16` | step=1, 8–8, 默认 `8` | `single` |\r
| `"5"` | Veo3.1 Fast | `TEXT`,`FIRST&LAST` | `720p`,`1080p`,`4K` | `adaptive`,`16:9`,`9:16` | step=2, 4–8, 默认 `4` | `single` |\r
| `"6"` | Veo3.1 Pro | `TEXT`,`FIRST&LAST` | `720p`,`1080p`,`4K` | `adaptive`,`16:9`,`9:16` | step=2, 4–8, 默认 `4` | `single` |\r
| `"7"` | Wan2.6 t2v | `TEXT` | `720p`,`1080p` | `1:1`,`3:4`,`4:3`,`16:9`,`9:16` | step=1, 3–15, 默认 `3` | `single`,`multi` |\r
| `"8"` | Wan2.6 i2v | `FIRST&LAST` | `720p`,`1080p` | **不传 `ratio`** | step=1, 3–15, 默认 `3` | `single`,`multi` |\r
| `"9"` | Wan2.6 r2v | `REFERENCE` | `720p`,`1080p` | `1:1`,`3:4`,`4:3`,`16:9`,`9:16` | step=1, 3–10, 默认 `3` | `single`,`multi` |\r
| `"10"` | kling-v3-omni | `TEXT`,`FIRST&LAST`,`REFERENCE`,`EDIT`,`FEATURE` | **不传 `resolution`** | `1:1`,`16:9`,`9:16` | step=1, 3–15, 默认 `3` | `single`,`multi`,`customize` |\r
| `"11"` | Sora2 | `TEXT`,`FIRST&LAST` | `720p` | `16:9`,`9:16` | step=4, 4–12, 默认 `4` | `single` |\r
| `"12"` | Sora2 Pro | `TEXT`,`FIRST&LAST` | `720p`,`2K` | `16:9`,`9:16`,`7:4`,`4:7` | step=4, 4–12, 默认 `4` | `single` |\r
| `"14"` | Wan2.7 i2v | `FIRST&LAST`,`CONTINUATION` | `720p`,`1080p` | **不传 `ratio`** | step=1, 3–15, 默认 `3` | `single` |\r
| `"15"` | Wan2.7 t2v | `TEXT` | `720p`,`1080p` | `1:1`,`3:4`,`4:3`,`16:9`,`9:16` | step=1, 3–15, 默认 `3` | `single` |\r
| `"16"` | Wan2.7 r2v | `REFERENCE` | `720p`,`1080p` | `1:1`,`3:4`,`4:3`,`16:9`,`9:16` | 有 videoUrlList 时 step=1, 3–10;否则 3–15;默认 `3` | `single` |\r
| `"17"` | Seedance2.0 | `TEXT`,`FIRST&LAST`,`REFERENCE` | `480p`,`720p`,`1080p` | `adaptive`,`1:1`,`3:4`,`4:3`,`16:9`,`9:16`,`21:9` | step=1, 4–15, 默认 `4` | `single` |\r
| `"18"` | Seedance2.0 Fast | `TEXT`,`FIRST&LAST`,`REFERENCE` | `480p`,`720p` | `adaptive`,`1:1`,`3:4`,`4:3`,`16:9`,`9:16`,`21:9` | step=1, 4–15, 默认 `4` | `single` |\r
\r
> 🔒 **填值硬规则:**\r
> 1. `generationType` / `resolution` / `ratio` / `shotType` 必须从该 methodType 行内"可选值"中取。\r
> 2. `duration` 必须落在该行 [最小, 最大] 闭区间内,且 `(duration - 最小) % 步长 === 0`。methodType=`"3"` 时只能是 `8`。\r
> 3. methodType=`"8"` / `"14"` 时**不传 `ratio`**(键保留、值给默认 `"16:9"`,后端忽略);methodType=`"10"` 时**不传 `resolution`**(键保留、值给默认 `"720p"`);methodType=`"auto"` 时 duration 由后端决定(键保留默认 `8`)。\r
> 4. 字段间依赖:\r
>    - `generationType="FIRST&LAST"` → `firstImageUrl` 必填、`lastImageUrl` 必填(除 methodType ∈ {auto,1,8,11,12} 留 `null`)\r
>    - `generationType ∈ {REFERENCE, EDIT, FEATURE}` → `imageUrlList` ≥ 1 项\r
>    - `generationType ∈ {CONTINUATION, EDIT, FEATURE}` → `firstClipUrl` 必填(仅 methodType ∈ {10,14} 支持)\r
>    - `shotType="customize"` → `multiPrompt` ≥ 1 项;`text` 可留空\r
> 5. 默认 methodType=`"3"` 下,合法 `param` 默认快照:`generationType="FIRST&LAST"`、`resolution="720p"`、`ratio="16:9"`、`duration=8`、`shotType="single"`、`enhancePrompt=false`,其他依赖字段保持空值(`null` 或 `[]`)。\r
\r
**Toby 任务请求体示例:**\r
```json\r
{\r
  "collaborationSubmitTaskParam": {\r
    "taskName": "AI宣传视频TikTok分发",\r
    "taskDescription": "生成库阔AI宣传视频分发到tiktok",\r
    "executionMode": 1,\r
    "employeeParams": {\r
      "Toby": {\r
        "totalTarget": 1,\r
        "incrementalTarget": 10,\r
        "upperLimitTarget": 10,\r
        "content": "库阔AI宣传视频",\r
        "staffId": "",\r
        "param": {\r
          "methodType": "3",\r
          "multiShot": false,\r
          "generationType": "FIRST&LAST",\r
          "text": "库阔AI宣传视频",\r
          "multiPrompt": [],\r
          "negativePrompt": "",\r
          "imageUrlList": [],\r
          "firstImageUrl": null,\r
          "lastImageUrl": null,\r
          "firstClipUrl": null,\r
          "elementList": [],\r
          "videoUrlList": [],\r
          "audioUrl": null,\r
          "keepOriginalSound": "yes",\r
          "durationList": [],\r
          "mode": "pro",\r
          "resolution": "720p",\r
          "ratio": "16:9",\r
          "generateAudio": true,\r
          "enhancePrompt": false,\r
          "n": 1,\r
          "personGeneration": "allow_adult",\r
          "resizeMode": "pad",\r
          "promptExtend": false,\r
          "shotType": "single",\r
          "durationSwitch": "1",\r
          "duration": 8\r
        },\r
        "videoItems": [],\r
        "publishTemplates": [\r
          {\r
            "publishCount": "1",\r
            "releaseType": "1",\r
            "timeZone": "1",\r
            "intervalType": "1",\r
            "startTime": "15:10",\r
            "accountId": "130",\r
            "publishInterval": 60\r
          }\r
        ],\r
        "accountConfigList": [\r
          {\r
            "accountId": "130",\r
            "privacyLevel": "PUBLIC_TO_EVERYONE",\r
            "disableDuet": "false",\r
            "disableStitch": "false",\r
            "disableComment": "false",\r
            "expand": false,\r
            "brandContentToggle": "false",\r
            "brandOrganicToggle": "false",\r
            "isPublicAccount": true,\r
            "commentDisabled": "false",\r
            "duetDisabled": "false",\r
            "stitchDisabled": "false"\r
          }\r
        ]\r
      }\r
    },\r
    "sourceSettings": null,\r
    "currentModule": "content"\r
  },\r
  "completed": true\r
}\r
```\r
\r
**用户确认清单(缺一不可提交):**\r
- ✅ 用户已选择/确认 TikTok 账号(`selectedAccountIds` 非空)\r
- ✅ 用户已确认或修改视频生成提示词(`content` 已确定)\r
- ✅ 用户已为每个账号填写 `publishCount`、`startTime`、`publishInterval`\r
- ✅ 用户已选择隐私级别(`privacyLevel` 非空)\r
\r
**成功响应:**\r
```json\r
{\r
  "msg": "操作成功",\r
  "code": 200,\r
  "data": {\r
    "employeeList": [\r
      { "dagTaskId": "\x3CtobyDagTaskId>", "nodeType": "TOBY", "customerPoolId": 1066 }\r
    ],\r
    "taskId": "\x3CtaskId>"\r
  }\r
}\r
```\r
\r
**响应字段提取:**\r
- `taskId` = `data.taskId`\r
- `tobyDagTaskId`:遍历 `data.employeeList` 找 `nodeType === "TOBY"` 取 `dagTaskId`\r
- `tobyCustomerPoolId`:同条目的 `customerPoolId`\r
\r
> ⚠️ `nodeType` 后端返回**全大写** `"TOBY"`,不是 PascalCase `Toby`。\r
\r
提交成功后,告知用户并询问等待时间:\r
> 任务已提交!任务名:{taskName},目标视频数:{totalTarget},任务ID:{taskId}。\r
>\r
> 后台正在生成与发布,**你希望多久后查询结果并推送给你?**(直接告诉我时间,例如「8 分钟」「半小时」「20 分钟后」,直接回复「好」或不填则默认 8 分钟)\r
\r
---\r
\r
### Step 3.5:解析用户指定的等待时间\r
\r
| 用户说 | 解析为秒数 |\r
|--------|----------|\r
| N分钟 / N分 | N × 60 |\r
| N小时 | N × 3600 |\r
| 半小时 | 1800 |\r
| 一刻钟 | 900 |\r
| 好 / 默认 / ok / 回车 / 不填 | 480(8分钟)|\r
| 无法识别 | 再询问一次,仍无效则用 480 |\r
\r
回复确认:\r
> 好的,将在 {用户指定时间描述}(约 {N} 分钟)后为你查询结果,请稍候 ☕\r
\r
---\r
\r
### Step 4:按用户指定时间设置自动查询\r
\r
使用 `cron` 工具设置一次性定时任务:\r
\r
```json\r
{\r
  "action": "add",\r
  "job": {\r
    "name": "toby-query-{taskId前8位}",\r
    "schedule": { "kind": "at", "at": "{当前时间 + waitSeconds 的 ISO8601 字符串,如 2026-03-19T15:00:00+08:00}" },\r
    "sessionTarget": "main",\r
    "wakeMode": "now",\r
    "payload": {\r
      "kind": "systemEvent",\r
      "text": "[DeepSOP-AutoQuery-Toby] TikTok 视频任务定时结果推送,请立即跳转 Step 5 执行结果查询并主动推送,不要等待用户提问,不要执行 Step 1-4。taskId={taskId},tobyDagTaskId={tobyDagTaskId},tobyCustomerPoolId={tobyCustomerPoolId},任务名:{taskName},feishuChatId={feishuChatId}。1. 调用 GET https://ai.deepsop.com/prod-api/ai/data/count?taskId={tobyDagTaskId}&customerPoolId={tobyCustomerPoolId}&platform=1 查询统计;2. 调用 GET https://ai.deepsop.com/prod-api/ai/data/list?pageNum=1&pageSize=10&taskId={tobyDagTaskId}&customerPoolId={tobyCustomerPoolId}&platform=1 查询视频列表;3. 展示统计数据(播放、点赞、评论、分享、发布总数)并列出每条视频的标题、播放、点赞、评论、转发、发布时间、TikTok 链接。"\r
    },\r
    "deleteAfterRun": true\r
  }\r
}\r
```\r
\r
cron 设置成功后回复:\r
> ✅ 定时任务已设置!将在 **{N} 分钟后**({schedule.at})自动查询结果并推送,请安心等候 ⏰\r
> 如需提前查询,可说「现在就查结果」,我会立即执行。\r
\r
> ⚠️ **等待期间处理规则:**\r
> - cron 设置完成到 [DeepSOP-AutoQuery-Toby] 到达之前,不得主动执行 Step 5。\r
> - 用户在等待期间问其他话题,正常回应,但不要提前查询。\r
> - 用户说「现在就查结果」/「提前查」→ 立即执行 Step 5。\r
\r
---\r
\r
### Step 5:查询结果并返回给用户\r
\r
> 🚨 **触发锁定:Step 5 只允许在以下两种情况下执行:**\r
> 1. 收到含 `[DeepSOP-AutoQuery-Toby]` 标记的 systemEvent\r
> 2. 用户明确说「现在就查结果」/「提前查」\r
\r
**5-1:查询统计数据**\r
\r
接口:`GET https://ai.deepsop.com/prod-api/ai/data/count?taskId={tobyDagTaskId}&customerPoolId={tobyCustomerPoolId}&platform=1`\r
\r
请求头:`x-api-key: $DEEPSOP_API_KEY`\r
\r
关键字段:\r
- `data.playCount`:总播放量\r
- `data.likeCount`:总点赞数\r
- `data.commentCount`:总评论数\r
- `data.shareCount`:总分享数\r
- `data.totalTiktokCount`:已发布视频数\r
\r
**5-2:查询视频列表**\r
\r
接口:`GET https://ai.deepsop.com/prod-api/ai/data/list?pageNum=1&pageSize=10&taskId={tobyDagTaskId}&customerPoolId={tobyCustomerPoolId}&platform=1`\r
\r
请求头:`x-api-key: $DEEPSOP_API_KEY`\r
\r
关键字段:\r
- `rows[].titleName`:视频标题\r
- `rows[].platformUrl`:TikTok 链接\r
- `rows[].url`:视频文件地址\r
- `rows[].playNum` / `likesNum` / `commentNum` / `transmitNum`\r
- `rows[].displayCreateTime`:发布时间\r
- `total`:列表总数\r
\r
**5-3:回复结果摘要**\r
\r
```\r
🎥 Toby TikTok 视频发布结果\r
任务:{taskName}\r
\r
📊 数据概览:\r
   发布视频数:{totalTiktokCount}\r
   总播放量:{playCount}\r
   总点赞数:{likeCount}\r
   总评论数:{commentCount}\r
   总分享数:{shareCount}\r
\r
📋 视频明细(共 {total} 条):\r
1. 《{titleName}》\r
   播放:{playNum} | 点赞:{likesNum} | 评论:{commentNum} | 转发:{transmitNum}\r
   发布时间:{displayCreateTime}\r
   TikTok 链接:{platformUrl}\r
2. ...\r
```\r
\r
**情况:两个接口均返回非 200 或 data 为空**\r
\r
> Toby TikTok 视频任务数据暂未就绪,可能仍在生成/发布中。\r
> 任务ID:{tobyDagTaskId}\r
> 你可以告诉我「再查 Toby 结果」,我会立即重新查询。\r
\r
---\r
\r
## 实现方式\r
\r
- **AI 分析**:直接在当前对话中用 LLM 完成\r
- **HTTP 请求**:使用 `exec` 工具调用 `curl`(仅 GET 接口;POST submitTask **必须**走 `submit_task.py`)\r
- **定时等待**:使用 `cron(action=add)` 设置一次性 systemEvent\r
\r
---\r
\r
## 依赖\r
\r
- Python 3(系统自带)\r
- 仅 Python 标准库(urllib),无第三方依赖\r
\r
---\r
\r
## 错误处理\r
\r
- `DEEPSOP_API_KEY` 未设置:提示用户**需要 API Key 授权**\r
  - 已有账号 → [https://ai.deepsop.com/login?source=5](https://ai.deepsop.com/login?source=5)\r
  - 没有账号 → [https://ai.deepsop.com/register?source=5](https://ai.deepsop.com/register?source=5)\r
- POST 接口返回非 200:展示错误信息,提示检查参数或稍后重试\r
- TikTok 账号为空:终止任务,提示用户登录 https://ai.deepsop.com 添加 TikTok 授权账号\r
- 视频模型列表为空:终止任务,提示用户联系管理员开通视频生成权限\r
- 获取账号权限失败:提示用户重新授权该 TikTok 账号\r
- 统计/列表接口异常或数据为空:提示视频任务可能仍在生成/发布中,给出 tobyDagTaskId 供用户告知「再查 Toby 结果」\r
- 数字员工 Toby 禁用(status=1):终止任务,提示联系管理员启用\r
- Toby 使用天数耗尽(remainingDays≤0):进入 Step 1.5.1 签约流程;用户放弃或余额不足则终止\r
- 网络请求失败:展示 curl 错误信息\r
安全使用建议
Install only if you intend to let DeepSOP generate and publish TikTok videos through your connected accounts. Verify the selected TikTok account, privacy level, prompt, posting cadence, and any DeepSOP credit purchase before allowing submission.
能力标签
requires-sensitive-credentials
能力评估
Purpose & Capability
The capability is high impact because it can publish to TikTok and consume DeepSOP credits, but that is the stated purpose and the workflow asks the user to choose accounts, privacy, prompt, posting count, start time, and interval.
Instruction Scope
Instructions are tightly focused on DeepSOP/Toby TikTok workflows; the one-shot cron callback is scoped to result queries, though users should only treat the auto-query marker as trusted when it comes from the scheduler.
Install Mechanism
The artifact contains markdown plus small Python helper scripts using the standard library; no dependency installation, shell persistence, or hidden installer behavior was found.
Credentials
Requiring DEEPSOP_API_KEY and access to connected TikTok accounts is proportionate to the stated publishing workflow, but users should understand this grants real posting authority through DeepSOP.
Persistence & Privilege
The only persistence described is a delete-after-run scheduled callback to query publish metrics after submission; no long-running worker, privilege escalation, or local credential-store access was found.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install deepsop-tiktokflow
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /deepsop-tiktokflow 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
deepsop-tiktokflow 1.0.0 - Initial release: Seamlessly generates AI TikTok videos based on natural language commands and auto-publishes them to TikTok. - Includes robust parameter extraction, account/balance checks, employee Toby signing, video generation, publishing, and performance tracking workflows. - Adds strict API path validation and security-driven process constraints. - Offers user guidance for API key setup and clear signing/payment handling. - Handles both user-triggered and scheduled automation scenarios.
元数据
Slug deepsop-tiktokflow
版本 1.0.0
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 1
常见问题

DeepSop TK工作台 是什么?

TikTok 视频 AI 生成与发布技能(数字员工 Toby)。用户输入自然语言指令,AI 自动拆解任务参数,调用 deepsop 平台接口生成 AI 视频并发布到 TikTok,等待后查询并推送播放/点赞/评论/分享等数据。触发场景:用户说「发 TikTok 视频」「生成视频发布到 TikTok」「抖音国际版发... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 10 次。

如何安装 DeepSop TK工作台?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install deepsop-tiktokflow」即可一键安装,无需额外配置。

DeepSop TK工作台 是免费的吗?

是的,DeepSop TK工作台 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

DeepSop TK工作台 支持哪些平台?

DeepSop TK工作台 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 DeepSop TK工作台?

由 kukuoAI(@kukuoai)开发并维护,当前版本 v1.0.0。

💬 留言讨论