Files
minis-analyse-skill/skills/swads-minis-batch-launch/SKILL.md
T
blueming3andClaude Opus 5.5 9f9e70ea2d feat: minis launch, cold-start watch and delivery watch skills
Three TikTok Minis skills for Codex and Claude Code, with the cold-start
playbook and five benchmark accounts through 88776-1 (2026-09-30).
install.sh links them into ~/.codex/skills and ~/.claude/skills.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 15:10:54 +08:00

190 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: swads-minis-batch-launch
description: 把本地剪好的短剧素材(视频、图文、或同组混搭)批量建成 TikTok Minis 计划:按剧上传素材、策源、改名/CBO/配乐、推送、同步、开投、逐条核对,也管追加广告、搬户重建和删除计划。运营手动 /swads-minis-batch-launch 触发,通过 swads MCP 网关完成,不自动加载。
disable-model-invocation: true
---
# 短剧 Minis 批量搭建
一部剧 = 一条广告系列 = 一个广告组覆盖全部国家;素材决定广告数:
| 素材形状 | 广告 | 素材分配 |
|---|---|---|
| 一个平铺的图片文件夹 + 剧名清单 | 每张图 1 条 | **默认做法**:单图复制成两帧图集,见「图文的两种组法」 |
| `<剧名>/轮播NN_*/images/*.png` | 每套 1 条 | 每条广告只放它那一套的图 |
| `<剧名>/**/*.mp4` 或一个视频文件夹 | 每 15 个 1 条 | 全部视频挂同一条广告,超过 15 个顺延到下一条 |
| 图片 + 视频,运营说「混搭」 | 每张图 1 条 + 视频 1 条 | 同一个广告组里图文广告和视频广告各自独立,见「同组混搭」 |
默认口径(运营没说就用这套):9 国一组(AU BR KR CA MX JP TH NZ ID)、日预算 500 USD、CBO 开、
按广告变现出价 ROAS 1.2、不限系统和年龄性别、英文文案 5 条、卖点 5 个英文话题标签、发布身份 Abigail。
计划名 `SW-ADS-<产品>-<剧名>-<YYYYMMDD>`(北京日期);纯图文计划在日期前加一节 `图文`,
视频计划和混搭计划不加。`<产品>` 是小程序名,如 `WISY`、`WISH`。
## 文案与素材的红线
文案要写冲突、反转、钩子(背叛、出轨、复仇、钱都能写),只避开 TikTok 按字面判违规的两类说法,
策源 agent 写出来会被打回,自己补丁改文案时先扫一遍:
- **性行为直说**:slept with、in bed with、naked、nude、sex(2026-09-21 因此拒审)。
- **工作或轻松赚钱**:jobs、hiring、salary、income、make money、get rich、work from home,以及任何金额(2026-09-22 一个户因此被封)。
素材有下面几类封户风险。素材中心会在 `content_warnings` 里提示**图片**的性内容和诈骗诱饵图,**只提示不拦截**;
视频不检测,名人脸它也认不出,这两样要靠人看。**这些是提醒运营的,不是让你自己剔图**:运营说全上就全上;你觉得该剔的,
在开工前清单里列出来问一句,运营不点头就照上。
- 明星、名人的脸,包括表情包改图。
- 像诈骗广告的诱饵图:病变畸形的身体特写、带价签或像商品广告的图、钱/奖品/付款截图。
- 别人社交帖的截图当整张广告(打码只遮账号,仍是在展示别人的帖子)。
- 来自被封账户的素材(会被关联)。
- 优先用剧本身的画面:剧照、片段截图、剧集视频、官方海报。
## 本地会话与线上会话
判据只有一条:**系统提示里有一节标题是「本批清单」、下面是一段 JSON 清单的,就是线上会话**
(策源页 `/zh/launch-intake` 开的对话),照 `references/online.md` 办,它与本文件冲突时以它为准。
没有这一节的是本地会话(运营在本机 Claude Code 里 `/swads-minis-batch-launch`),照下文办。
## 边界:只动平台数据,不动代码
这套流程只用 MCP 工具和本地上传脚本。能重试的按各节规则重试,不能重试的**停下来写进核对表**
(报错原文、卡在哪一步、已经上了平台的东西),交给运营。不要去读服务源码找原因,不要改仓库、
不要 `git commit/push`、不要开 PR、不要动凭据。真是产品缺陷,核对表里那条报错就是提 issue 的全部材料。
## 开工前问清楚,别猜
1. **素材路径**,以及要跑哪几部剧(默认全部)。
2. **投放账户**(`external_account_id`)。说不清就 `intake_list_accounts` 列给运营选。账户选错整批都错。
3. **小程序**。一个户下常挂好几个小程序(SWAVE、WISH、WISY、VEYA、WOVA),**每批都要问投哪个**,
不按上一批或旧计划的名字推断——投错小程序要删掉整批重建,这事发生过两次。
4. **剧名**(按排名)。剧集页链接**自己查,不问**:
`minis_episode_link_list(external_account_id=A, minis_id=<MINIS_ID>, titles=[剧名…])`,`found` 的直接用,
只把 `missing` 里的剧一次问完;运营回的链接先 `minis_episode_link_set` 记回清单再用。链接只抄不猜,
问了也没有的剧不建。
发布身份从 `intake_upload_context` 的 `identities` 里取 Abigail;这个户没有 Abigail 才问。
预算、ROAS、国家运营没提就用默认,在开工前清单里写明。
开不开投放也要问清:运营说「搭建完直接开投」才在推送后开,否则推完停在暂停状态等他说。
问完把**开工前清单**给运营看一眼再动手(按剧分好的文件夹可以先跑 `scripts/scan_material_folder.py <素材根目录>` 列出每部剧的文件):剧名 / 组法 / 广告数 / 每条素材数 / 落地页 / 配乐 / 预算 / ROAS / 身份。
这是唯一免费纠错的机会——素材一旦上平台,撤回就要删计划。
## 图文的两种组法
运营没说就按**方案一**;两批做法冲突拿不准时先问,别自己定。
| | 方案一(默认):单图复制成图集 | 方案二:多图组图集 |
|---|---|---|
| 一个图集 | 同一张图 × 2 帧 | 2-4 张相似的不同图 |
| 广告数 | 每张图 1 条 | 每个图集 1 条 |
| 分剧 | 图按文件名排好后**按剧排名轮流**发:第 k 张给第 `k mod 剧数` 部,除不尽时排名靠前的剧多一条 | 按 `轮播NN` 文件夹,或按运营确认的分套 |
| 例 | 48 张图 × 10 部剧:前 8 部各 5 条、后 2 部各 4 条 | 10 部剧 × 3 套 × 3 张 |
- **图集里的每一帧都是单独上传的素材**:方案一每张图传两次,文件名加 `-1`/`-2`,拿两个不同的 `asset_id`。
图文一律不带 `content_sha256`——一次策源的附件 id 必须唯一,按字节复用会把重复的帧并掉。
- 图片原样上传,不用自己缩放:推送时自动换成 1080×1920 的版本(保持比例,其余补黑边)。
- 本地会话的配乐:运营给了 `music_id` 就按剧写进每条图文广告;没给就用 `launch_carousel_music_search`
按剧情搜一首,写进开工前清单让运营确认。
## 视频尺寸
上传前先 `ffprobe` 看尺寸。正好 9:16 的(720×1280、756×1344、1080×1920)原样传。差一点的(768×1344、
544×992)TikTok 取封面时会拒:`Unsupported image size. Please upload another image.`,先等比放大到 1920 高
再居中裁到 1080×1920(`scale=-2:1920,crop=1080:1920`),视频不补黑边。比例差得多的(3:4、1:2 等)
先问运营是剔掉还是另行处理。
## 每部剧的顺序
工具参数在 `references/tool-sequence.md`,这里只说顺序。**每个带账户参数的调用都传 `external_account_id`**:
不传会被拒:MCP 不借用浏览器里选中的户。传了只对这一次调用生效,不会改动浏览器里选中的账户。
1. **上下文** `intake_upload_context(external_account_id, minis_id)`:拿入库印章、`product_app_scope`、
`identities`。scope 按账户和小程序各不相同,每个文件上传都要带这个户自己的。
2. **上传** 每个文件:`creative_upload_from_url`(begin)→ `scripts/upload_local_asset.sh` 本地 PUT →
`creative_upload_from_url`(finish)→ `creative_import_status` 轮询到 `ready` 拿 `asset_id`。
begin 和 finish 都带 `external_account_id` 与 `product_app_scope`(不带账户会落进未归属池);
一律 `review_status="approved"`;视频带 `content_sha256`,图文不带。
3. **策源** `intake_start_run`,brief 用 `references/brief-templates.md`,图文的 `asset_ids` **按套的顺序**排。
`intake_run_status(external_account_id, wait_seconds=120)` 等结果;`needs_clarification` 按 `recommended_value` 答,最多 3 轮。
返回的 `content_warnings` 原样记进核对表备注,收尾转告运营,**不要自己去掉素材重新策源**。
画面里别人的头像/昵称会被自动打码,不用处理。
`intake_start_run` 超时或断连时草稿可能已经建好:**重发前先 `campaign_list(search=<剧名>)` 找同名、
还没推送的草稿**,有就接着从第 4 步做,别再发一次(发过两次就会多一条重复草稿,多的用 `campaign_delete_draft` 删)。
刚上传完的素材偶尔报 `Creative asset authorization failed`,隔一两分钟原样重发一次就好。
4. **验形状** `campaign_workspace`:广告数和每条广告的 `creative_variants` 数要和清单一致。
不一致 → `campaign_delete_draft` 删掉重新策源,**最多 5 次,错形状不推**。这条规则只在这里写,别处引用这里。
5. **补丁** `campaign_workspace_patch`:计划名、CBO(开了就把组的 `daily_budget`/`group_budget` 清零)、
出价口径、卖点、图文配乐。每次补丁返回新的 `delivery_spec_id`,后面要用最新的。
6. **推送** `campaign_push_preview` 看 `ready_to_push`,再 `campaign_push`;`campaign_detail(wait_seconds=120)`
读 `execution_runs[0].status`。素材拉取的 `EOF`、`timeout`、`no longer have access` 是传输错,
同一版本再推,**最多 4 次**。这条重试规则只在这里写。
**推送期间不要 `account_sync`**:同步会撞掉还在排队的推送。全部推完再同步。
推送后广告组的国家、年龄、性别就改不了了(接口会报成功但不生效),搭错只能删了重建,所以推前核准。
全部剧推完后:
7. **同步** `account_sync` → `account_sync_status(wait_seconds=120)` 到 `completed*`。开投要看平台快照,没同步过会 409。
8. **开投**(运营说了才做)逐条 `campaign_set_delivery(status="active")`,三层级联 ENABLE。这是唯一开始花钱的一步。
偶尔会失败或超时,隔 20 秒重试,最多 4 次;还不行就写进核对表。
9. **核对**:`references/verification.md` 的表,开投的再用 TikTok 读回确认。
## 追加广告
**默认新建。** 同一个户里同一部剧已经有计划,运营说「搭建」照样新建一条——同剧多条计划各有日预算,
不算抢量,不用提醒。只有运营明说「追加」「往原计划里加」时,才在原计划的广告组里**新加一条广告**:
Smart+ 广告建好后不能再往里加素材,新加广告是唯一的路。追加前 `campaign_list(search=<剧名>)` 找到目标,
确认 `external_campaign_id` 非空;找到不止一条就列给运营选。命令见 `references/tool-sequence.md`「追加模式」,
追加推送**必须** `scope="additions"`。追加的广告**不过素材检测、图片也不自动补黑边**(截至 2026-09-25):
追加图片要人看过、尺寸在 1080×1920 以内;追加视频不受影响。
## 同组混搭
一个广告组里可以同时有纯图文广告和纯视频广告;**一条广告里不能混图片和视频**。一次策源建不出混搭——
agent 会把素材平均摊到各条广告上,所以分两步:
1. 按图文建计划(方案一或方案二),推送、同步。
2. 按追加模式给每部剧加视频广告:复制最后一条图文广告作模板,`asset_ids` 换成视频;
**紧接着把新广告的 `music_id` 清空**(`fields={"music_id": ""}`),否则会带着图文的配乐推上去;
`campaign_push(scope="additions")`,再同步。视频广告名用 `SW-ADS-<产品>-<剧名> Video <N>`。
然后再开投。混搭计划名不加 `图文`。
## 常见的后续操作
- **改日预算**:`campaign_set_budget(campaign_id, daily_budget)`,直接写到 TikTok 并同步回本地,不用再同步账户。
改的是花钱速度,运营点名了才改。
- **改 ROAS**:网关没有改出价的工具,这份 skill 也没验证过走补丁加推送的路子——报给运营在控制台改,别自己试。
- **停或开单条广告**:`campaign_set_ad_delivery(campaign_id, external_ad_id, status)`,同计划其他广告不动,能恢复。
`external_ad_id` 用 TikTok 的 `ad_id`(指标查询返回的就是它)。
- **拒审**:TikTok 按国家审。**部分国家被拒的广告在通过的国家照常投**(实测被拒国家零消耗、通过国家正常花钱),
不用动。全部国家被拒的素材,凌晨同步会自动在 TikTok 上关掉;运营要清理整条广告时,先停(上一条)再说删。
- **计划自己停了**:开投超过 72 小时、累计零消耗的 SW Ads 计划,凌晨会被自动暂停。运营问起先想到这个。
- **挑跑量素材复用**:用 `metrics_semantic_query` 按广告取花费、展示、点击、广告变现收入(先 `metrics_catalog`
看指标名;返回的 `ctr` 是小数不是百分数,用点击÷展示自己算更稳),花费低于门槛(常用 1–3 USD)的不排;CTR 与 ROAS 各排一次名次取平均,名次最好的几条的素材
拿去新建。门槛、取几条、看哪几天,开工前清单里写明给运营确认。
- **搬到新户重建**:素材的授权跟着账户走,新户要**下载后按新户重新上传**(`creative_asset_detail` 的 `asset_url`
就是原图),不能直接拿旧户的 `asset_id`。不要用 `creative_upload_from_url` 的 `remote_url` 直接拉:2026-09-27 实测
拉进来的素材是待审、没挂小程序授权,策源会拒。原计划被删掉或被拒审的广告不带过去,只搬现存的。
- **删除计划**:见下面「别做的事」第二条。
## 等待的方式
策源、推送、同步三个状态工具都带 `wait_seconds=120`:服务端等到有结果或满 120 秒才返回,没结果就再调一次,
不需要自己 sleep。只有素材入库 `creative_import_status` 不带等待,用前台的 `sleep 15`(单独一条 Bash 命令)
再问一次,20 分钟没 ready 才算失败。不要 `run_in_background` 的 sleep、不要 Monitor:无人值守的 `claude -p`
会话收不到后台任务的完成通知,会在「等通知」这一步直接结束。
## 别做的事
- 不改预算/出价/国家去「优化」;运营没说的都按默认。
- 已推送的计划不自己删。只有运营明确要删(「重建后把旧计划删掉」「清理这个户」这类原话)才删,走 `campaign_delete`:
本地和 TikTok 一起删、**不能恢复**,令牌要单独勾「计划·删除」(`campaign:delete`)。删之前先把计划名、账户、
在投状态列给运营;一次删一条,每条删完 `campaign_detail` 要返回 404 再删下一条;全删完 `account_sync` 一次,
核对表里写「已删」。`campaign_delete_draft` 只删没推过的草稿,推过的它会拒。细节见 `references/tool-sequence.md` 第 3 节。
- 澄清问题超过 3 轮、或同一部剧策源 5 次形状都不对,停下来把 run 的 `failure` 原文给运营,不要换 brief 硬试。
- 素材字节不经过对话:PUT 由脚本做,你只传路径。
## 结束时的汇报
用 `references/verification.md` 的表;再列出没建成的剧和原因(原文错误信息)、`content_warnings`,
以及开投后 TikTok 读回的广告状态。