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

15 KiB
Raw Blame History

name, description, disable-model-invocation
name description disable-model-invocation
swads-minis-batch-launch 把本地剪好的短剧素材(视频、图文、或同组混搭)批量建成 TikTok Minis 计划:按剧上传素材、策源、改名/CBO/配乐、推送、同步、开投、逐条核对,也管追加广告、搬户重建和删除计划。运营手动 /swads-minis-batch-launch 触发,通过 swads MCP 网关完成,不自动加载。 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:同步会撞掉还在排队的推送。全部推完再同步。 推送后广告组的国家、年龄、性别就改不了了(接口会报成功但不生效),搭错只能删了重建,所以推前核准。

全部剧推完后:

  1. 同步 account_sync → account_sync_status(wait_seconds=120) 到 completed*。开投要看平台快照,没同步过会 409。
  2. 开投(运营说了才做)逐条 campaign_set_delivery(status="active"),三层级联 ENABLE。这是唯一开始花钱的一步。 偶尔会失败或超时,隔 20 秒重试,最多 4 次;还不行就写进核对表。
  3. 核对: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 读回的广告状态。