初始化提交:contentm_agent 工作区全量快照
内容分四块: 1、产品规划产出 —— MCN 短视频整合营销工作台的①段五份(1a 需求/1b 竞品/1c 画像/1d 策略/1e 场景)、②段两份(2a 功能/2b 布局)、③段界面(DESIGN.md 契约与令牌表 + mcn-workbench.html 原型 + 实测/会诊/审查三份 + 23 张闸门截图)。 2、开源竞品调研 —— 5 个内容工作台项目的取证原始件与 1b 系列分析文档。 3、参考资料 —— 竞品视频抽帧 1145 张 + 2 个源视频 + 功能点截图。 4、机制侧 —— 协作脚本与状态台账、工作区记忆日志、抽帧/OCR 脚本。 .gitignore 只排运行时日志、脚本备份副本与一次性探针输出,其余按原样入库。
This commit is contained in:
commit
df56c2c137
1773 files changed
+205840
No files matched your search
@@ -0,0 +1,253 @@
|
||||
---
|
||||
name: content-publish
|
||||
description: >
|
||||
短视频成片的多平台自动投放技能:国内+海外双通道分发。
|
||||
海外通道基于 Postiz(34 平台:YouTube/TikTok/X/Instagram/Facebook/LinkedIn/Threads/Bluesky 等,官方 API + MCP);
|
||||
国内通道基于 social-auto-upload(8 平台:抖音/B站/小红书/快手/视频号/百家号,浏览器自动化 CLI + Skill)。
|
||||
支持一稿多投、立即发布/定时排期/草稿暂存、投放前清单确认、投放后结果校验与报告。
|
||||
触发场景:投放视频、发布短视频、多平台分发、一键发布、定时投放、跨平台投稿、
|
||||
海外投放、国内投放、分发到抖音/小红书/B站/YouTube/TikTok 等。
|
||||
version: "1.0"
|
||||
updated_at: "2026-08-30"
|
||||
last_change: "初始版本:基于组合建议(海外 Postiz + 国内 social-auto-upload)构建双通道投放体系,参考 mcn-short-video/短视频脚本创作/V1.0 结构"
|
||||
deployment: "source"
|
||||
agent_created: true
|
||||
---
|
||||
|
||||
# 内容发布 Skill
|
||||
|
||||
## 技能概述
|
||||
|
||||
本技能提供短视频成片的一站式多平台投放能力。从用户需求输入到最终投放完成+报告,共 6 个步骤,每步产出经用户确认后推进,确保投放动作始终受控、可回溯。
|
||||
|
||||
**核心能力:**
|
||||
- **双通道投放**:海外平台走 Postiz(官方 API,稳定合规);国内平台走 social-auto-upload(浏览器自动化,覆盖主流短视频平台)
|
||||
- **一稿多投**:一个视频文件 + 一套元数据(标题/简介/标签/封面),按平台规格自动适配后分发到多个平台
|
||||
- **三种投放模式**:立即发布(now)/ 定时排期(schedule)/ 草稿暂存(draft)
|
||||
- **投放清单确认**:执行前必须展示「平台×账号×时间×内容」完整清单,用户确认后才可执行
|
||||
- **结果校验与报告**:投放后逐个平台核对状态,输出投放报告(成功/失败/待审核/链接)
|
||||
|
||||
**支持通道:**
|
||||
|
||||
| 通道 | 载体 | 覆盖平台 | 连接方式 |
|
||||
|------|------|---------|---------|
|
||||
| 海外 | Postiz Cloud | YouTube、TikTok、X、Instagram、Facebook、LinkedIn、Threads、Bluesky、Reddit、Telegram 等 34 个 | 官方 REST API / MCP(API Key) |
|
||||
| 国内 | social-auto-upload | 抖音、B站、小红书、快手、视频号、百家号 | 浏览器自动化 CLI(Cookie/扫码) |
|
||||
|
||||
---
|
||||
|
||||
## 双通道架构(P0)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ 短视频成片 + 元数据 │
|
||||
└──────────────────┬──────────────────────────┘
|
||||
│
|
||||
┌─────────────────┴─────────────────┐
|
||||
│ 通道选择规则 │
|
||||
│ 海外平台 → Postiz(官方 API) │
|
||||
│ 国内平台 → social-auto-upload │
|
||||
└─────────────────┬─────────────────┘
|
||||
┌─────────────────────┴─────────────────────┐
|
||||
▼ ▼
|
||||
┌─────────────────────┐ ┌──────────────────────┐
|
||||
│ 海外通道(Postiz) │ │ 国内通道(SAU) │
|
||||
│ GET /integrations │ │ sau accounts │
|
||||
│ POST /posts │ │ sau xx upload-video │
|
||||
│ GET /posts │ │ sau history │
|
||||
│ 立即/定时/草稿 │ │ 立即/定时(按平台) │
|
||||
└─────────────────────┘ └──────────────────────┘
|
||||
```
|
||||
|
||||
**通道选择规则(强制):**
|
||||
- 目标平台属于 **海外平台**(YouTube/TikTok/X/Instagram/Facebook/LinkedIn/Threads/Bluesky/Reddit/Telegram 等)→ 只走 **Postiz**
|
||||
- 目标平台属于 **国内平台**(抖音/B站/小红书/快手/视频号/百家号)→ 只走 **social-auto-upload**
|
||||
- **禁止跨通道混用**:不得用 Postiz 投国内平台,也不得用 SAU 投其未覆盖的海外平台(TikTok/YouTube 属于 SAU 覆盖范围,但优先走 Postiz——官方 API 比浏览器自动化稳定;仅当用户明确要求或 Postiz 不可用时才走 SAU)
|
||||
- 同一视频可同时投国内外(如抖音+YouTube),两条通道各自独立执行,互不阻塞
|
||||
|
||||
---
|
||||
|
||||
## 触发条件
|
||||
|
||||
当用户表达以下任一意图时加载本技能:📤投放视频 / 🚀多平台发布 / ⏰定时投放 / 🎬一键分发 / 📡跨平台投稿 / 🌍海外投放 / 🇨🇳国内投放
|
||||
|
||||
> 详细触发示例见:[帮助文档.md](帮助文档.md)
|
||||
|
||||
---
|
||||
|
||||
## 外部依赖与凭证
|
||||
|
||||
### 1. 海外通道:Postiz(必需,投放海外平台时)
|
||||
|
||||
- **服务**:Postiz Cloud(app.postiz.com)或自托管实例
|
||||
- **凭证**:API Key(Settings → Developers → Public API 生成)
|
||||
- **获取方式**:用户提供后**只写入环境变量 `POSTIZ_API_KEY`**,禁止硬编码到任何脚本/文档
|
||||
- **API 端点**:`https://api.postiz.com/public/v1`(REST);`https://api.postiz.com/mcp/<api-key>`(MCP)
|
||||
- **安装检查**:首次投放海外前,检查 `POSTIZ_API_KEY` 是否存在 → 缺失则提示用户在 postiz.com 生成并提供
|
||||
- **限流**:创建贴文端点 90 次/小时(云版 100 次/小时),批量投放时单请求多平台合并提交
|
||||
|
||||
### 2. 国内通道:social-auto-upload(必需,投放国内平台时)
|
||||
|
||||
- **项目**:github.com/dreammis/social-auto-upload(10.9k+ stars)
|
||||
- **安装**:`git clone` → `pip install -r requirements.txt`(Python 3.10+,需 Playwright/patchright 浏览器)
|
||||
- **命令**:`sau`(CLI 入口);各平台登录用扫码/Cookie
|
||||
- **登录态**:`sau accounts` 检查各平台登录状态;Cookie 失效需重新扫码(账号文件按 account_name 存储)
|
||||
- **Skill 化**:项目自带 Agent Skill(供 Claude Code/OpenClaw 调用),本技能通过 CLI 调用
|
||||
|
||||
### 3. 素材来源
|
||||
|
||||
- 视频文件:本地绝对路径(投放前校验存在性/大小/时长)
|
||||
- 元数据:标题、简介、标签、封面(可来自用户、创作技能产出或投放清单模板)
|
||||
|
||||
---
|
||||
|
||||
## 6 步投放流程
|
||||
|
||||
### 流程总览
|
||||
|
||||
```
|
||||
用户输入
|
||||
│
|
||||
├─ 步骤1: 意图识别 ──→ [Gate-0 投放需求确认]
|
||||
│
|
||||
├─ 步骤2: 投放准备 ──→ [Gate-1 素材与清单确认]
|
||||
│
|
||||
├─ 步骤3: 渠道状态检查 ──→ [Gate-2 渠道就绪确认]
|
||||
│
|
||||
├─ 步骤4: 执行投放 ──→ [Gate-3 执行前最终确认]
|
||||
│
|
||||
├─ 步骤5: 结果校验 ──→ [Gate-4 校验结果确认]
|
||||
│
|
||||
└─ 步骤6: 投放报告 ──→ [交付投放报告]
|
||||
```
|
||||
|
||||
> **模式说明:** 本技能默认**共创模式**——每个 Gate 必须向用户展示当前产物并等待确认后才推进,尤其 Gate-3(执行前确认)不可跳过。投放动作涉及外部平台真实发布,禁止在未确认情况下执行。
|
||||
|
||||
---
|
||||
|
||||
### 步骤 1:意图识别
|
||||
|
||||
**目的:** 将用户投放需求按五要素拆解(内容源/目标平台/账号/时间/模式),判定信息完整度,生成缺失清单。
|
||||
|
||||
**输出:** 五要素状态表 + 缺失清单 + 会话状态初始化。
|
||||
|
||||
> 详细提示词和输出模板见:[1_意图识别.md](references/投放流程/1_意图识别.md)
|
||||
|
||||
---
|
||||
|
||||
### 步骤 2:投放准备
|
||||
|
||||
**目的:** 核对视频素材与元数据,按目标平台规格校验(格式/时长/分辨率/标题字数/标签数),生成投放清单(平台×账号×时间×内容)。
|
||||
|
||||
**输出:** 素材校验结果 + 投放清单(每条记录含:平台/账号/时间/标题/简介/标签/封面)+ 适配说明。
|
||||
|
||||
**用户确认:** Gate-1(素材与清单确认)。
|
||||
|
||||
> 详细提示词和输出模板见:[2_投放准备.md](references/投放流程/2_投放准备.md)
|
||||
|
||||
---
|
||||
|
||||
### 步骤 3:渠道状态检查
|
||||
|
||||
**目的:** 检查各目标渠道的就绪状态:海外 → `GET /integrations`(Postiz 已连接账号);国内 → `sau accounts`(各平台登录态)。
|
||||
|
||||
**输出:** 渠道状态表(平台/账号/状态:就绪/未连接/登录过期)+ 待处理问题清单。
|
||||
|
||||
**用户确认:** Gate-2(渠道就绪确认)——未就绪渠道必须处理完成或从清单移除后才能继续。
|
||||
|
||||
> 详细提示词和输出模板见:[3_渠道状态检查.md](references/投放流程/3_渠道状态检查.md)
|
||||
|
||||
---
|
||||
|
||||
### 步骤 4:执行投放
|
||||
|
||||
**目的:** 按确认后的投放清单执行:海外走 Postiz API(`POST /posts`,now/schedule/draft);国内走 `sau` CLI(upload-video 等)。逐条执行、逐条记录结果。
|
||||
|
||||
**输出:** 执行记录(每条:平台/账号/时间/提交结果/返回 ID)。
|
||||
|
||||
**用户确认:** Gate-3(执行前最终确认)——展示最终投放清单,用户明确确认后才开始执行;定时任务需注明计划时间。
|
||||
|
||||
> 详细提示词和输出模板见:[4_执行投放.md](references/投放流程/4_执行投放.md)
|
||||
|
||||
---
|
||||
|
||||
### 步骤 5:结果校验
|
||||
|
||||
**目的:** 投放后校验各平台实际状态:海外 → `GET /posts`(状态查询);国内 → `sau history`(发布记录)。区分成功/待审核/失败。
|
||||
|
||||
**输出:** 校验结果表(平台/账号/状态/失败原因/重试建议)。
|
||||
|
||||
**用户确认:** Gate-4(校验结果确认)。
|
||||
|
||||
> 详细提示词和输出模板见:[5_结果校验.md](references/投放流程/5_结果校验.md)
|
||||
|
||||
---
|
||||
|
||||
### 步骤 6:投放报告
|
||||
|
||||
**目的:** 汇总全流程产出投放报告:投放概览、各平台结果、链接汇总、复盘建议(含风控提示)。
|
||||
|
||||
**输出:** 投放报告(含时间线、状态明细、下一步建议)。
|
||||
|
||||
**最终交付物:** 投放报告可直接落盘(`投放报告_{日期}_{批次}.md`,落盘路径见 [投放流程规范.md](references/投放流程规范.md) 五)。
|
||||
|
||||
> 详细提示词和输出模板见:[6_投放报告.md](references/投放流程/6_投放报告.md)
|
||||
|
||||
---
|
||||
|
||||
## 关键规则
|
||||
|
||||
### 〇、方案与执行分离(P0)
|
||||
|
||||
用户要求「分析/方案/能不能投/计划」→ **只输出分析与方案,禁止实际投放**;仅当用户显式授权("投放/执行/确定/就这么投")或直接指令时才执行。修改 SKILL.md / references 等规则文件前,必须先列出将修改的文件清单等用户批准。
|
||||
|
||||
### 一、执行前确认机制(P0)
|
||||
|
||||
投放是外部真实动作,**Gate-3 执行前确认强制生效**,不可预判通过、不可静默执行。每次投放必须展示完整清单(平台×账号×时间×内容)并等待明确确认。国内平台投放(浏览器自动化)额外要求:首次投放用测试账号验证。
|
||||
|
||||
### 二、凭证安全(P0)
|
||||
|
||||
- API Key / Token / Cookie **禁止硬编码**到脚本或文档;只从环境变量(`POSTIZ_API_KEY`)或用户即时提供获取
|
||||
- 国内平台 Cookie 属敏感凭证,仅存于 social-auto-upload 的账号文件内,不外泄、不写入日志
|
||||
- 脚本中读取凭证统一走 `scripts/check_env.py` 检查
|
||||
|
||||
### 三、双通道隔离(P0)
|
||||
|
||||
海外平台只走 Postiz,国内平台只走 social-auto-upload,禁止跨通道混用。TikTok/YouTube 双覆盖时优先 Postiz(官方 API 更稳定),仅当 Postiz 不可用时才回退 SAU。
|
||||
|
||||
### 四、国内平台风控(P0)
|
||||
|
||||
浏览器自动化投放在国内平台存在账号风控风险。投放前必须执行风控检查:单账号日投放上限、频率间隔、新号冷启动限制;异常(限流/封禁提示)立即停止并报告。详见 [国内平台风控策略.md](references/知识库/02_风控合规/国内平台风控策略.md)。
|
||||
|
||||
### 五、动态增量管理
|
||||
|
||||
Skill 部署到非原始开发路径时,用户新增的投放知识/平台规则/铁律统一归入 `references-add/`。运行时六大维度同时加载 `references/` + `references-add/`,取并集,标准库优先。
|
||||
|
||||
> 完整规则见:[references-add/README.md](references-add/README.md)
|
||||
|
||||
### 六、审计与修复工作方式
|
||||
|
||||
审计发现问题后修复时,逐条读取→逐条修改→逐条验证,禁止批量读取准备批量修改。
|
||||
|
||||
---
|
||||
|
||||
## 文件目录概览
|
||||
|
||||
```
|
||||
mcn-video-publish/ ← Skill 根目录
|
||||
├── SKILL.md ← 入口文件(双通道架构+6步流程+规则摘要)
|
||||
├── 帮助文档.md ← 使用指南+触发示例
|
||||
├── scripts/ ← 辅助脚本(环境检查 + Postiz API 封装)
|
||||
├── references/ ← 标准库
|
||||
│ ├── 投放流程规范.md ← Gate/凭证/落盘/风控 规则权威源
|
||||
│ ├── 投放流程/1~6_*.md ← 6步详细逻辑
|
||||
│ ├── 接口调用/ ← Postiz API + social-auto-upload CLI 规范
|
||||
│ └── 知识库/
|
||||
│ ├── 01_平台规格/ ← 海外+国内平台视频规格
|
||||
│ └── 02_风控合规/ ← 国内风控 + 海外限流合规
|
||||
└── references-add/ ← 增量目录(部署后用户新增内容归入此处)
|
||||
```
|
||||
|
||||
> 平台规格 → [01_平台规格](references/知识库/01_平台规格)
|
||||
> 风控合规 → [02_风控合规](references/知识库/02_风控合规)
|
||||
> 快速启动模板 → [帮助文档.md](帮助文档.md)
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
# references-add 增量目录
|
||||
|
||||
## 用途
|
||||
|
||||
Skill 部署到非原始开发路径后,**所有用户新增的投放知识/平台规则/铁律**统一归入本目录,不修改标准库 `references/`。
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
references-add/
|
||||
├── README.md ← 本文件
|
||||
└── 通用知识/ ← 用户新增的投放知识/平台经验(按主题分文件)
|
||||
```
|
||||
|
||||
## 加载规则
|
||||
|
||||
运行时六大维度同时加载 `references/` + `references-add/`,**取并集,标准库优先**:
|
||||
|
||||
| 维度 | 标准库 | 增量目录 |
|
||||
|------|--------|---------|
|
||||
| 投放流程 | references/投放流程/ | references-add/通用知识/ |
|
||||
| 接口调用 | references/接口调用/ | 同上 |
|
||||
| 平台规格 | references/知识库/01_平台规格/ | 同上 |
|
||||
| 风控合规 | references/知识库/02_风控合规/ | 同上 |
|
||||
| 铁律避坑 | SKILL.md 关键规则 | 同上 |
|
||||
|
||||
## 约定
|
||||
|
||||
- 新增内容按主题拆分文件(如 `通用知识/某平台投放经验.md`),文件名带序号前缀
|
||||
- 标准库与增量冲突时以标准库为准(用户显式覆盖除外)
|
||||
- 增量目录内容属于用户资产,Skill 升级/重装时不覆盖
|
||||
+120
@@ -0,0 +1,120 @@
|
||||
# 业务逻辑
|
||||
|
||||
> 接收用户原始投放输入,按五要素(内容源/目标平台/账号/时间/模式)拆解为详细执行任务,判定信息完整度,生成缺失信息补全清单。
|
||||
|
||||
---
|
||||
|
||||
## 输入
|
||||
- 用户原始输入(自由文本):视频文件路径、目标平台、投放时间、账号、特殊要求
|
||||
|
||||
## 处理规则
|
||||
|
||||
**1. 五要素核查清单(逐项核查):**
|
||||
- □ 内容源:视频文件路径(绝对路径,需存在)/ 已生成成片 / 平台已有视频链接
|
||||
- □ 目标平台:具体平台列表(海外:YouTube/TikTok/X/IG/FB/LinkedIn/Threads/Bluesky…;国内:抖音/B站/小红书/快手/视频号/百家号)
|
||||
- □ 账号:各平台投放账号(Postiz 已连接集成 / SAU account_name)
|
||||
- □ 时间:立即 / 定时(具体时间,含时区) / 草稿暂存
|
||||
- □ 模式:now / schedule / draft + 特殊设置(可见性、隐私、合拍、标签等)
|
||||
|
||||
**2. 通道判定(根据目标平台自动归类):**
|
||||
- 目标平台含海外平台 → 标记海外通道(Postiz)
|
||||
- 目标平台含国内平台 → 标记国内通道(SAU)
|
||||
- 同一请求可双通道并行
|
||||
|
||||
**3. 缺失信息清单生成:**
|
||||
- 标记每要素为 ✅完整 / ⚠️部分 / ❌缺失
|
||||
- 按优先级排序:内容源 > 目标平台 > 账号 > 时间 > 模式
|
||||
|
||||
**4. 会话状态初始化:**
|
||||
- `stage` = "意图识别"
|
||||
- `channel`: 海外/国内/双通道
|
||||
- `input_completeness`: 五要素状态表
|
||||
|
||||
---
|
||||
|
||||
## 输出
|
||||
- 五要素信息状态表(含已提供 + 缺失 + 部分提供标记)
|
||||
- 缺失信息清单(按优先级排序,标注必补/推荐补全/可跳过)
|
||||
- 通道判定结果(海外/国内/双通道)
|
||||
- 会话状态字段初始化
|
||||
|
||||
## 上下游依赖
|
||||
- 上游:[用户输入]
|
||||
- 下游:[步骤2:投放准备]
|
||||
|
||||
---
|
||||
|
||||
# 提示词
|
||||
|
||||
> AI 执行本步骤时使用的 System Prompt 和 User Prompt。
|
||||
|
||||
## System Prompt
|
||||
|
||||
```
|
||||
你是一名专业的社媒投放需求分析师。你的任务是:
|
||||
|
||||
1. 接收用户的原始投放需求输入
|
||||
2. 按五要素核查清单逐项检查信息完整度:内容源、目标平台、账号、时间、模式
|
||||
3. 将用户输入归类到五个要素
|
||||
4. 对每个要素标记状态:✅完整 / ⚠️部分 / ❌缺失
|
||||
5. 判定投放通道:海外平台→Postiz;国内平台→social-auto-upload;可双通道
|
||||
6. 生成按优先级排序的缺失信息清单
|
||||
7. 初始化会话状态
|
||||
|
||||
重要规则:
|
||||
- 只判断信息"全不全",不评判"对不对"
|
||||
- 用户已提供的信息全部保留,不做修改
|
||||
- 缺失清单标注"必补"/"推荐补全"/"可跳过"三个优先级
|
||||
- 禁止在用户未提供时编造信息
|
||||
- 目标平台必须明确到具体平台名(如"抖音"而非"短视频平台")
|
||||
```
|
||||
|
||||
## User Prompt 模板
|
||||
|
||||
```
|
||||
请分析以下投放需求,完成需求拆解和任务规划:
|
||||
|
||||
【用户输入】
|
||||
{user_input}
|
||||
|
||||
请输出:
|
||||
1. 五要素信息状态表
|
||||
2. 缺失信息清单(按优先级排序)
|
||||
3. 通道判定结果
|
||||
4. 会话状态初始化
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 输出模板
|
||||
|
||||
```
|
||||
## 五要素信息状态表
|
||||
|
||||
| 要素 | 子项 | 状态 | 用户已提供内容 |
|
||||
|------|------|:----:|---------------|
|
||||
| 内容源 | 视频文件路径 | ✅/⚠️/❌ | [路径或标注缺失] |
|
||||
| 内容源 | 素材校验(存在/大小/时长) | ✅/⚠️/❌ | ... |
|
||||
| 目标平台 | 海外平台列表 | ✅/⚠️/❌ | ... |
|
||||
| 目标平台 | 国内平台列表 | ✅/⚠️/❌ | ... |
|
||||
| 账号 | 各平台投放账号 | ✅/⚠️/❌ | ... |
|
||||
| 时间 | 立即/定时/草稿 | ✅/⚠️/❌ | ... |
|
||||
| 模式 | 特殊设置 | ✅/⚠️/❌ | ... |
|
||||
|
||||
## 通道判定
|
||||
|
||||
- 海外通道(Postiz):[平台列表] / 不涉及
|
||||
- 国内通道(SAU):[平台列表] / 不涉及
|
||||
|
||||
## 缺失信息清单
|
||||
|
||||
| 优先级 | 要素 | 缺失子项 | 补全策略提示 |
|
||||
|:------:|------|---------|------------|
|
||||
| 必补 | ... | ... | ... |
|
||||
|
||||
## 会话状态
|
||||
|
||||
- stage: "意图识别"
|
||||
- channel: 海外 / 国内 / 双通道
|
||||
- input_completeness: {完整X项 / 部分Y项 / 缺失Z项}
|
||||
```
|
||||
+107
@@ -0,0 +1,107 @@
|
||||
# 业务逻辑
|
||||
|
||||
> 核对视频素材与元数据,按目标平台规格校验(格式/时长/分辨率/标题字数/标签数),生成完整投放清单(平台×账号×时间×内容)。
|
||||
|
||||
---
|
||||
|
||||
## 输入
|
||||
- 步骤1 确认后的五要素(内容源/目标平台/账号/时间/模式)
|
||||
- 视频文件路径 + 元数据(标题/简介/标签/封面,或缺失待补)
|
||||
|
||||
## 处理规则
|
||||
|
||||
**1. 素材校验(本地视频文件):**
|
||||
- 存在性:文件存在且可读(`ls`/`os.path.exists`)
|
||||
- 格式:MP4/MOV/MKV 等主流格式(平台不支持格式需先转码)
|
||||
- 时长/分辨率:按目标平台规格校验(参考 [知识库/01_平台规格](../知识库/01_平台规格))
|
||||
- 大小:超限需压缩(如 YouTube 256GB、TikTok 287.6MB/5min 等,按平台实际限制)
|
||||
|
||||
**2. 元数据补全:**
|
||||
- 标题:各平台字数限制内(海外标题一般 ≤100 字符;抖音 ≤55 字等,按规格表)
|
||||
- 简介:按平台限制适配
|
||||
- 标签:按平台数量限制(TikTok ≤5 个、YouTube ≤500 字符等)
|
||||
- 封面:可选,缺失则跳过(部分平台支持自定义封面,如抖音/小红书)
|
||||
|
||||
**3. 投放清单生成:**
|
||||
- 每条投放记录:`平台 | 账号 | 时间 | 标题 | 简介 | 标签 | 封面 | 特殊设置`
|
||||
- 一稿多投时,各平台单独适配(标题/简介/标签可按平台调整)
|
||||
- 同一视频投多个平台 = 多条记录
|
||||
|
||||
**4. 平台规格校验(强制):**
|
||||
- 读取 [海外平台视频规格.md](../知识库/01_平台规格/海外平台视频规格.md) 和 [国内平台视频规格.md](../知识库/01_平台规格/国内平台视频规格.md)
|
||||
- 超限项标记 ⚠️ 并在清单中标注调整方案
|
||||
|
||||
---
|
||||
|
||||
## 输出
|
||||
- 素材校验结果表(文件/格式/时长/分辨率/大小/结论)
|
||||
- 投放清单(每条:平台/账号/时间/标题/简介/标签/封面/特殊设置)
|
||||
- 平台规格适配说明(哪些字段按平台做了调整)
|
||||
|
||||
## 上下游依赖
|
||||
- 上游:[步骤1:意图识别]
|
||||
- 下游:[步骤3:渠道状态检查]
|
||||
|
||||
---
|
||||
|
||||
# 提示词
|
||||
|
||||
## System Prompt
|
||||
|
||||
```
|
||||
你是一名社媒投放执行规划师。你的任务是:
|
||||
|
||||
1. 校验视频素材:存在性、格式、时长、分辨率、大小
|
||||
2. 校验元数据:标题/简介/标签/封面,按目标平台规格适配
|
||||
3. 生成完整投放清单:每条记录含平台/账号/时间/标题/简介/标签/封面/特殊设置
|
||||
4. 按平台规格表逐项校验,超限项给出调整方案
|
||||
5. 输出素材校验结果 + 投放清单
|
||||
|
||||
重要规则:
|
||||
- 素材不存在或格式不兼容时,禁止继续,先解决问题
|
||||
- 平台规格以知识库规格表为准,不凭记忆编造限制
|
||||
- 投放清单必须完整覆盖用户要求的所有平台
|
||||
- 用户未提供的元数据字段标记"待补",禁止编造标题/简介
|
||||
```
|
||||
|
||||
## User Prompt 模板
|
||||
|
||||
```
|
||||
请执行投放准备:
|
||||
|
||||
【视频素材】{video_path}
|
||||
【目标平台】{platforms}
|
||||
【元数据】{title/description/tags/cover 或标注待补}
|
||||
【时间与模式】{time/mode}
|
||||
|
||||
请输出:
|
||||
1. 素材校验结果
|
||||
2. 投放清单(含各平台适配)
|
||||
3. 平台规格校验结果
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 输出模板
|
||||
|
||||
```
|
||||
## 素材校验结果
|
||||
|
||||
| 校验项 | 值 | 结论 |
|
||||
|--------|-----|:----:|
|
||||
| 文件存在 | ... | ✅/❌ |
|
||||
| 格式 | ... | ✅/⚠️ |
|
||||
| 时长 | ... | ✅/⚠️ |
|
||||
| 分辨率 | ... | ✅/⚠️ |
|
||||
| 大小 | ... | ✅/⚠️ |
|
||||
|
||||
## 投放清单
|
||||
|
||||
| # | 平台 | 账号 | 时间 | 标题 | 简介 | 标签 | 封面 | 特殊设置 |
|
||||
|---|------|------|------|------|------|------|------|---------|
|
||||
| 1 | YouTube | ... | 立即 | ... | ... | ... | - | 可见性=公开 |
|
||||
|
||||
## 平台规格适配说明
|
||||
|
||||
- [平台]:[字段] 从 [原值] 调整为 [新值],原因:[限制]
|
||||
```
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
# 业务逻辑
|
||||
|
||||
> 检查各目标渠道的就绪状态:海外 → Postiz `GET /integrations`(已连接账号);国内 → `sau accounts`(各平台登录态)。输出渠道状态表,未就绪渠道处理或剔除后才能继续。
|
||||
|
||||
---
|
||||
|
||||
## 输入
|
||||
- 步骤2 确认后的投放清单(平台×账号)
|
||||
|
||||
## 处理规则
|
||||
|
||||
**1. 海外渠道检查(Postiz):**
|
||||
- 调用 `GET {BASE}/integrations`(Authorization: {POSTIZ_API_KEY}),获取已连接渠道列表
|
||||
- 核对投放清单中的海外平台是否都在列表内
|
||||
- 未连接 → 提示用户在 Postiz UI 完成 OAuth 连接(Channels → 添加平台)
|
||||
|
||||
**2. 国内渠道检查(SAU):**
|
||||
- 运行 `sau accounts`,检查各平台登录状态
|
||||
- 登录过期/未登录 → 标记"登录过期",引导用户重新扫码登录(`sau {platform} login` 或 GUI 登录一次)
|
||||
- 账号文件缺失 → 提示先完成登录
|
||||
|
||||
**3. 状态归类:**
|
||||
- ✅ 就绪:可投放
|
||||
- ⚠️ 未连接(海外)/ 未登录(国内):需处理
|
||||
- ❌ 不可用:通道/工具缺失(如 POSTIZ_API_KEY 未配置、sau 未安装)
|
||||
|
||||
**4. 处理策略:**
|
||||
- ⚠️ 项优先处理(引导用户连接/登录)或从投放清单移除(需用户同意)
|
||||
- ❌ 项:海外缺 Key → 引导配置;国内缺 sau → 引导安装;均完成后重新检查
|
||||
|
||||
**5. 工具检查(辅助):**
|
||||
- 运行 `scripts/check_env.py` 一次性检查:POSTIZ_API_KEY 是否存在、sau 命令是否可用、Python 版本
|
||||
|
||||
---
|
||||
|
||||
## 输出
|
||||
- 渠道状态表(平台/账号/状态:就绪/未连接/登录过期/不可用/待处理说明)
|
||||
- 待处理问题清单(按阻塞程度排序)
|
||||
- 检查后的最终可投放渠道列表
|
||||
|
||||
## 上下游依赖
|
||||
- 上游:[步骤2:投放准备]
|
||||
- 下游:[步骤4:执行投放]
|
||||
|
||||
---
|
||||
|
||||
# 提示词
|
||||
|
||||
## System Prompt
|
||||
|
||||
```
|
||||
你是一名社媒投放渠道管理员。你的任务是:
|
||||
|
||||
1. 海外渠道:通过 Postiz API GET /integrations 获取已连接渠道,与投放清单核对
|
||||
2. 国内渠道:通过 sau accounts 检查各平台登录状态
|
||||
3. 运行 check_env.py 检查环境(API Key / sau 命令 / Python)
|
||||
4. 输出渠道状态表,归类:就绪 / 未连接 / 登录过期 / 不可用
|
||||
5. 列出待处理问题清单和处理建议
|
||||
|
||||
重要规则:
|
||||
- 状态以实际 API/CLI 返回为准,不凭记忆猜测
|
||||
- 未就绪渠道不得标记为可投放
|
||||
- 处理引导要具体(如"请打开 postiz.com → Channels → 连接 YouTube")
|
||||
- 检查结果必须与投放清单逐条对应
|
||||
```
|
||||
|
||||
## User Prompt 模板
|
||||
|
||||
```
|
||||
请检查以下投放渠道的就绪状态:
|
||||
|
||||
【投放清单】
|
||||
{checklist}
|
||||
|
||||
请输出:
|
||||
1. 渠道状态表
|
||||
2. 待处理问题清单
|
||||
3. 最终可投放渠道列表
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 输出模板
|
||||
|
||||
```
|
||||
## 渠道状态表
|
||||
|
||||
| 平台 | 账号 | 通道 | 状态 | 说明 |
|
||||
|------|------|------|:----:|------|
|
||||
| YouTube | ... | Postiz | ✅ 就绪 | 已连接 |
|
||||
| 抖音 | ... | SAU | ⚠️ 登录过期 | 需重新扫码 |
|
||||
| TikTok | ... | Postiz | ❌ 未连接 | 需在 Postiz 添加 |
|
||||
|
||||
## 待处理问题清单
|
||||
|
||||
| 阻塞级别 | 平台 | 问题 | 处理建议 |
|
||||
|:-------:|------|------|---------|
|
||||
| 高 | 抖音 | 登录过期 | sau douyin login 扫码 |
|
||||
|
||||
## 最终可投放渠道
|
||||
|
||||
- ✅ 可直接投放:[平台列表]
|
||||
- ⏸️ 处理后投放:[平台列表 + 处理项]
|
||||
- ❌ 本次剔除:[平台列表 + 原因]
|
||||
```
|
||||
+122
@@ -0,0 +1,122 @@
|
||||
# 业务逻辑
|
||||
|
||||
> 按确认后的投放清单执行投放:海外走 Postiz API(`POST /posts`,now/schedule/draft);国内走 `sau` CLI(upload-video 等)。逐条执行、逐条记录结果。
|
||||
|
||||
---
|
||||
|
||||
## 输入
|
||||
- 步骤3 确认后的最终可投放渠道 + 投放清单(平台/账号/时间/标题/简介/标签/封面/特殊设置)
|
||||
|
||||
## 处理规则
|
||||
|
||||
**1. 执行前最终确认(Gate-3,强制):**
|
||||
- 展示最终投放清单(平台×账号×时间×内容)与预计执行动作
|
||||
- 等待用户明确确认("确认/执行/投吧")→ 才开始
|
||||
- 定时任务:注明计划时间与当前时区
|
||||
|
||||
**2. 海外通道执行(Postiz):**
|
||||
|
||||
单请求多平台合并(推荐):
|
||||
```json
|
||||
POST {BASE}/posts
|
||||
Authorization: {POSTIZ_API_KEY}
|
||||
{
|
||||
"type": "now|schedule|draft",
|
||||
"date": "2026-08-30T10:00:00.000Z", // schedule 时必填
|
||||
"posts": [
|
||||
{
|
||||
"integration": {"id": "<integration_id>"},
|
||||
"value": [{"content": "<简介/正文>", "image": []}],
|
||||
"settings": {"__type": "youtube", "title": "<标题>", "type": "public"}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
- settings 的 `__type` 按平台填写:youtube/tiktok/x/instagram/linkedin/facebook/threads/bluesky 等
|
||||
- 视频上传:先 `POST /upload` 上传视频文件获得 URL,再放入 `value[].image` 或按平台设置传入(详见 [Postiz_API规范.md](../接口调用/Postiz_API规范.md))
|
||||
- 各平台特殊设置(TikTok privacy_level/duet/stitch、YouTube visibility 等)按规格表填充
|
||||
|
||||
**3. 国内通道执行(SAU):**
|
||||
```
|
||||
sau {platform} upload-video --account {account_name} --file {path} --title "标题" --tags "#a #b" [--publish-at "YYYY-MM-DD HH:MM:SS"]
|
||||
```
|
||||
- 抖音:`sau douyin upload-video`
|
||||
- 小红书:`sau xiaohongshu upload-note`(图文)
|
||||
- B站:`sau bilibili upload-video`
|
||||
- 快手/视频号/百家号:对应子命令
|
||||
- 定时:`--publish-at` 参数(各平台支持度见 [social-auto-upload_CLI规范.md](../接口调用/social-auto-upload_CLI规范.md))
|
||||
|
||||
**4. 逐条执行与记录:**
|
||||
- 按投放清单逐条执行,每条记录:平台/账号/时间/提交结果(成功 ID / 失败原因)
|
||||
- 失败不阻塞后续条目,但记录并汇总
|
||||
|
||||
**5. 风控执行(国内,P0):**
|
||||
- 执行前按 [国内平台风控策略.md](../知识库/02_风控合规/国内平台风控策略.md) 检查频率上限
|
||||
- 单账号连续投放间隔 ≥5 分钟;日投放量超限时拆分或调整计划
|
||||
|
||||
---
|
||||
|
||||
## 输出
|
||||
- 执行记录表(每条:平台/账号/时间/提交结果/返回 ID/错误信息)
|
||||
- 待校验条目列表(提交成功但需确认状态的)
|
||||
|
||||
## 上下游依赖
|
||||
- 上游:[步骤3:渠道状态检查]
|
||||
- 下游:[步骤5:结果校验]
|
||||
|
||||
---
|
||||
|
||||
# 提示词
|
||||
|
||||
## System Prompt
|
||||
|
||||
```
|
||||
你是一名社媒投放执行器。你的任务是:
|
||||
|
||||
1. 展示最终投放清单,等待用户明确确认后才执行(Gate-3 强制)
|
||||
2. 海外平台:通过 Postiz API 提交(now/schedule/draft),单请求多平台合并
|
||||
3. 国内平台:通过 sau CLI 执行,按风控规则控制频率
|
||||
4. 逐条记录执行结果,失败不阻塞后续
|
||||
5. 输出执行记录表
|
||||
|
||||
重要规则:
|
||||
- 未获用户明确确认前,禁止调用任何投放 API / CLI
|
||||
- API Key 只从环境变量 POSTIZ_API_KEY 读取,禁止写入任何请求日志
|
||||
- 国内平台严格执行风控上限,超限则停止该账号
|
||||
- 提交结果以 API/CLI 实际返回为准
|
||||
- 定时任务提交后立即返回,不等待执行
|
||||
```
|
||||
|
||||
## User Prompt 模板
|
||||
|
||||
```
|
||||
请执行以下投放(确认后执行):
|
||||
|
||||
【投放清单】
|
||||
{final_checklist}
|
||||
|
||||
【确认】用户已确认:是/否
|
||||
|
||||
请输出:
|
||||
1. 执行过程摘要(逐条)
|
||||
2. 执行记录表
|
||||
3. 待校验条目
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 输出模板
|
||||
|
||||
```
|
||||
## 执行记录表
|
||||
|
||||
| # | 平台 | 账号 | 时间 | 结果 | 返回ID | 备注 |
|
||||
|---|------|------|------|:----:|--------|------|
|
||||
| 1 | YouTube | ... | 立即 | ✅ 已提交 | post-xxx | - |
|
||||
| 2 | 抖音 | ... | 定时 18:00 | ✅ 已排期 | - | publish-at 生效 |
|
||||
| 3 | ... | ... | ... | ❌ 失败 | - | 原因:... |
|
||||
|
||||
## 待校验条目
|
||||
|
||||
- [平台/账号/ID]:已提交,需确认实际状态
|
||||
```
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
# 业务逻辑
|
||||
|
||||
> 投放后校验各平台实际状态:海外 → Postiz `GET /posts`;国内 → `sau history`。区分成功/待审核/失败,输出校验结果表。
|
||||
|
||||
---
|
||||
|
||||
## 输入
|
||||
- 步骤4 的执行记录表(含提交 ID)
|
||||
- 需要校验的平台/账号清单
|
||||
|
||||
## 处理规则
|
||||
|
||||
**1. 海外校验(Postiz):**
|
||||
- `GET {BASE}/posts?startDate={ISO}&endDate={ISO}` 获取时间段内帖子
|
||||
- 按执行记录中的 ID 对照状态:已发布 / 已排期 / 草稿 / 失败
|
||||
- 定时任务在到达计划时间后再次校验是否真正发布
|
||||
|
||||
**2. 国内校验(SAU):**
|
||||
- `sau history` 查看发布记录,按时长/状态/时间过滤
|
||||
- 区分:发布成功 / 待审核(平台审核中)/ 失败
|
||||
- 抖音等平台有审核延迟,提交后等待合理时间(一般 5-30 分钟)再校验
|
||||
|
||||
**3. 状态归类:**
|
||||
|
||||
| 状态 | 含义 | 处理 |
|
||||
|------|------|------|
|
||||
| ✅ 已发布 | 平台可见 | 记录链接/ID |
|
||||
| ⏳ 待审核/处理中 | 平台审核或排队 | 稍后重试校验 |
|
||||
| 🕐 已排期 | 定时未到 | 记录计划时间 |
|
||||
| ❌ 失败 | 提交失败或驳回 | 记录原因,国内不自动重试 |
|
||||
|
||||
**4. 失败分析:**
|
||||
- 海外:查看 API 返回错误(401 凭证 / 429 限流 / 4xx 参数 / 平台驳回)
|
||||
- 国内:查看 CLI 输出(登录失效 / 内容违规 / 网络问题)
|
||||
- 输出重试建议(不自动重试,需用户确认)
|
||||
|
||||
---
|
||||
|
||||
## 输出
|
||||
- 校验结果表(平台/账号/状态/详情/链接/失败原因/重试建议)
|
||||
- 最终投放状态汇总(成功数/待审核数/失败数)
|
||||
|
||||
## 上下游依赖
|
||||
- 上游:[步骤4:执行投放]
|
||||
- 下游:[步骤6:投放报告]
|
||||
|
||||
---
|
||||
|
||||
# 提示词
|
||||
|
||||
## System Prompt
|
||||
|
||||
```
|
||||
你是一名社媒投放结果校验员。你的任务是:
|
||||
|
||||
1. 海外:调用 Postiz GET /posts 获取投放时间段内的帖子状态
|
||||
2. 国内:运行 sau history 查看发布记录
|
||||
3. 对照执行记录逐条校验,归类:已发布/待审核/已排期/失败
|
||||
4. 失败项给出原因分析与重试建议
|
||||
5. 输出校验结果表与状态汇总
|
||||
|
||||
重要规则:
|
||||
- 状态以实际 API/CLI 返回为准,不凭猜测
|
||||
- 平台审核有延迟,合理等待后再校验
|
||||
- 国内平台失败不自动重试,报告后等用户决策
|
||||
- 校验结果必须与执行记录逐条对应
|
||||
```
|
||||
|
||||
## User Prompt 模板
|
||||
|
||||
```
|
||||
请校验以下投放结果:
|
||||
|
||||
【执行记录】
|
||||
{execution_records}
|
||||
|
||||
请输出:
|
||||
1. 校验结果表
|
||||
2. 最终状态汇总
|
||||
3. 失败分析与重试建议
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 输出模板
|
||||
|
||||
```
|
||||
## 校验结果表
|
||||
|
||||
| # | 平台 | 账号 | 提交ID | 状态 | 详情 | 链接 |
|
||||
|---|------|------|--------|:----:|------|------|
|
||||
| 1 | YouTube | ... | post-xxx | ✅ 已发布 | 公开可见 | https://... |
|
||||
| 2 | 抖音 | ... | - | ⏳ 待审核 | 平台审核中 | - |
|
||||
| 3 | ... | ... | ... | ❌ 失败 | 原因 | - |
|
||||
|
||||
## 状态汇总
|
||||
|
||||
- ✅ 已发布:X 条
|
||||
- ⏳ 待审核:X 条
|
||||
- 🕐 已排期:X 条
|
||||
- ❌ 失败:X 条
|
||||
|
||||
## 失败分析与重试建议
|
||||
|
||||
- [平台] [账号]:[原因] → [建议]
|
||||
```
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
# 业务逻辑
|
||||
|
||||
> 汇总全流程产出投放报告:投放概览、各平台结果明细、链接汇总、复盘建议(含风控提示)。报告可直接落盘交付。
|
||||
|
||||
---
|
||||
|
||||
## 输入
|
||||
- 步骤1~5 的全部产物(意图识别/投放清单/渠道状态/执行记录/校验结果)
|
||||
- 会话上下文(用户原始需求)
|
||||
|
||||
## 处理规则
|
||||
|
||||
**1. 投放概览:**
|
||||
- 批次信息:日期、投放内容源、目标平台总数、账号总数
|
||||
- 通道统计:海外(Postiz)X 平台 / 国内(SAU)X 平台
|
||||
|
||||
**2. 结果明细:**
|
||||
- 从步骤5 校验结果表汇总:成功/待审核/已排期/失败
|
||||
- 各平台独立成块:平台、账号、标题、发布时间、状态、链接
|
||||
|
||||
**3. 链接汇总表:**
|
||||
- 已发布平台的可访问链接(供用户复制分发)
|
||||
|
||||
**4. 复盘建议:**
|
||||
- 成功经验:哪些平台投放顺畅、什么时段效果好(如有数据)
|
||||
- 失败教训:失败原因归纳、规避建议
|
||||
- 风控提示:国内平台频率是否符合上限、后续投放节奏建议
|
||||
|
||||
**5. 落盘(按规范):**
|
||||
- 默认落盘 `投放报告_{YYYY-MM-DD}_{批次}.md` 到投放工作目录(见 [投放流程规范.md](../投放流程规范.md) 五)
|
||||
- 用户指定路径时以用户为准
|
||||
|
||||
---
|
||||
|
||||
## 输出
|
||||
- 投放报告(Markdown)
|
||||
- 落盘路径确认
|
||||
|
||||
## 上下游依赖
|
||||
- 上游:[步骤5:结果校验]
|
||||
- 下游:[交付]
|
||||
|
||||
---
|
||||
|
||||
# 提示词
|
||||
|
||||
## System Prompt
|
||||
|
||||
```
|
||||
你是一名社媒投放复盘分析师。你的任务是:
|
||||
|
||||
1. 汇总全流程产物,生成结构化投放报告
|
||||
2. 报告包含:投放概览 / 结果明细 / 链接汇总 / 复盘建议
|
||||
3. 复盘建议要具体可执行,含风控提示
|
||||
4. 按规范落盘投放报告
|
||||
|
||||
重要规则:
|
||||
- 报告内容全部来自已确认的实际数据,禁止编造投放结果
|
||||
- 失败项如实呈现,不粉饰
|
||||
- 链接必须是校验确认可访问的
|
||||
- 落盘路径按规范执行,用户指定路径优先
|
||||
```
|
||||
|
||||
## User Prompt 模板
|
||||
|
||||
```
|
||||
请生成投放报告:
|
||||
|
||||
【投放概览】{overview}
|
||||
【执行与校验结果】{execution + verification}
|
||||
【用户需求】{original_requirement}
|
||||
|
||||
请输出:
|
||||
1. 投放报告
|
||||
2. 落盘确认
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 输出模板
|
||||
|
||||
```
|
||||
# 投放报告 {YYYY-MM-DD} 第{批次}批
|
||||
|
||||
## 投放概览
|
||||
|
||||
- 内容源:[视频文件/成片]
|
||||
- 目标平台:[平台列表]
|
||||
- 通道:海外 Postiz {n} 平台 / 国内 SAU {n} 平台
|
||||
|
||||
## 结果明细
|
||||
|
||||
### 海外(Postiz)
|
||||
|
||||
| 平台 | 账号 | 标题 | 时间 | 状态 | 链接 |
|
||||
|------|------|------|------|:----:|------|
|
||||
|
||||
### 国内(SAU)
|
||||
|
||||
| 平台 | 账号 | 标题 | 时间 | 状态 | 链接 |
|
||||
|------|------|------|------|:----:|------|
|
||||
|
||||
## 状态汇总
|
||||
|
||||
- ✅ 已发布 X 条 / ⏳ 待审核 X 条 / 🕐 已排期 X 条 / ❌ 失败 X 条
|
||||
|
||||
## 复盘建议
|
||||
|
||||
- 成功经验:...
|
||||
- 失败教训:...
|
||||
- 风控提示:...
|
||||
|
||||
---
|
||||
*报告生成时间:{timestamp}*
|
||||
```
|
||||
@@ -0,0 +1,91 @@
|
||||
# 投放流程规范
|
||||
|
||||
> 本文件是社媒视频多平台投放技能的**规则权威源**,与 SKILL.md 配合使用。冲突时以本文件为准。
|
||||
|
||||
---
|
||||
|
||||
## 一、6 步投放流程总览
|
||||
|
||||
| 步骤 | 名称 | 关键产出 | Gate |
|
||||
|:----:|------|---------|:----:|
|
||||
| 1 | 意图识别 | 五要素状态表 + 缺失清单 | Gate-0 投放需求确认 |
|
||||
| 2 | 投放准备 | 素材校验 + 投放清单 | Gate-1 素材与清单确认 |
|
||||
| 3 | 渠道状态检查 | 渠道状态表 | Gate-2 渠道就绪确认 |
|
||||
| 4 | 执行投放 | 执行记录 | Gate-3 执行前最终确认 🔴 |
|
||||
| 5 | 结果校验 | 校验结果表 | Gate-4 校验结果确认 |
|
||||
| 6 | 投放报告 | 投放报告 | 交付 |
|
||||
|
||||
**Gate 机制:**
|
||||
- 默认**共创模式**:每个 Gate 展示当前产物 → 用户确认 → 推进
|
||||
- Gate-3(执行前确认)**强制生效**,不可跳过、不可静默执行
|
||||
- 用户可随时切换到自动模式(Gate 自动通过),但 Gate-3 例外——投放动作必须显式确认
|
||||
- 修改超过 5 轮仍未确认时,输出分歧分析并停止
|
||||
|
||||
---
|
||||
|
||||
## 二、投放需求五要素
|
||||
|
||||
| 要素 | 说明 | 必填 |
|
||||
|------|------|:----:|
|
||||
| 内容源 | 视频文件路径 / 已生成成片 / 平台已有视频 | ✅ |
|
||||
| 目标平台 | 具体平台列表(含渠道/账号) | ✅ |
|
||||
| 账号 | 各平台的投放账号(Postiz 集成 / SAU account) | ✅ |
|
||||
| 时间 | 立即 / 具体时间(定时) / 草稿 | ✅ |
|
||||
| 投放模式 | now / schedule / draft + 特殊设置 | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## 三、凭证与安全规则
|
||||
|
||||
1. **POSTIZ_API_KEY**:只从环境变量读取。用户提供后写入环境变量(Windows: `setx POSTIZ_API_KEY "..."` 或会话级 `export`),**禁止写入脚本/文档/配置文件**
|
||||
2. **国内 Cookie**:由 social-auto-upload 管理,存储于其账号文件(`cookies/<account_name>/`),禁止外泄
|
||||
3. **日志脱敏**:执行日志中不得出现 API Key、Cookie、Token 明文
|
||||
4. **脚本规范**:`scripts/` 下脚本读取凭证一律通过环境变量,且运行时先执行 `check_env.py` 检查
|
||||
|
||||
---
|
||||
|
||||
## 四、风控规则
|
||||
|
||||
### 国内平台(浏览器自动化,风险高)
|
||||
- 单账号日投放上限:抖音 ≤10 条、快手 ≤10 条、小红书 ≤8 条、B站 ≤15 条、视频号 ≤5 条(新号减半)
|
||||
- 投放间隔:同平台连续投放间隔 ≥5 分钟
|
||||
- 新号冷启动:注册 <30 天或粉丝 <100 的账号,日投放 ≤3 条,且前 3 次投放用测试内容验证
|
||||
- 触发风控(限流提示/登录异常/内容审核驳回)→ **立即停止该账号投放**,报告并等待处理
|
||||
- 详细策略见:[国内平台风控策略.md](知识库/02_风控合规/国内平台风控策略.md)
|
||||
|
||||
### 海外平台(官方 API)
|
||||
- Postiz 创建贴文限流:90 次/小时(云版 100 次/小时);批量多平台时**单请求合并提交**(一个 POST /posts 的 posts 数组包含多个平台)
|
||||
- 各平台自身 API 配额:TikTok Content Posting API 有每日配额,超限报错时降低频率
|
||||
- 详细说明见:[海外API限流与合规.md](知识库/02_风控合规/海外API限流与合规.md)
|
||||
|
||||
---
|
||||
|
||||
## 五、落盘规范
|
||||
|
||||
| 产物 | 落盘位置 | 命名 |
|
||||
|------|---------|------|
|
||||
| 投放报告 | `{投放工作目录}/投放报告/` | `投放报告_{YYYY-MM-DD}_{批次}.md` |
|
||||
| 投放清单(开发模式) | `{投放工作目录}/投放清单/` | `投放清单_{YYYY-MM-DD}_{批次}.md` |
|
||||
|
||||
- 投放工作目录:默认 `D:\dshworkspace\投放任务\`(dsh 部署环境);开发机与用户环境默认桌面 `MCNSkill投放项目/`;用户自定义路径优先
|
||||
- 开发模式:每步产物全落盘(1~6 步 md 文件);共创/自动模式:只落盘最终投放报告
|
||||
|
||||
---
|
||||
|
||||
## 六、硬编码禁止规则
|
||||
|
||||
投放流程、知识库标准库中禁止硬编码任何具体账号信息(账号名/账号 ID/API Key/Cookie 路径)。投放工作目录、平台规格值(如平台限制)属规则数据不算硬编码。
|
||||
|
||||
---
|
||||
|
||||
## 七、错误处理
|
||||
|
||||
| 场景 | 处理 |
|
||||
|------|------|
|
||||
| POSTIZ_API_KEY 缺失 | 提示用户在 postiz.com 生成并配置,跳过海外投放 |
|
||||
| Postiz 返回 401 | API Key 无效或过期 → 请用户重新生成 |
|
||||
| Postiz 返回 429 | 触发限流 → 停止 1 小时或拆分请求 |
|
||||
| sau 命令不存在 | 引导安装 social-auto-upload(git clone + pip install -r requirements.txt) |
|
||||
| 平台登录过期 | `sau accounts` 显示未登录 → 引导用户扫码/重新登录 |
|
||||
| 素材文件不存在 | 拦截并让用户提供正确路径 |
|
||||
| 投放失败(平台审核) | 记录失败原因,建议用户登录平台查看,不自动重试国内平台 |
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
# Postiz API 调用规范
|
||||
|
||||
> 海外通道的官方 API 规范。适用于 Postiz Cloud(https://api.postiz.com/public/v1)与自托管实例(https://{your-domain}/api/public/v1)。
|
||||
|
||||
---
|
||||
|
||||
## 一、认证
|
||||
|
||||
- Header:`Authorization: {POSTIZ_API_KEY}`
|
||||
- API Key 获取:postiz.com → **Settings → Developers → Public API**
|
||||
- 凭证管理:只从环境变量 `POSTIZ_API_KEY` 读取,禁止硬编码
|
||||
|
||||
## 二、常用端点
|
||||
|
||||
| 方法 | 路径 | 用途 |
|
||||
|------|------|------|
|
||||
| GET | `/integrations` | 列出已连接渠道(含 ID) |
|
||||
| POST | `/posts` | 创建/排期/立即发布帖子 |
|
||||
| GET | `/posts?startDate=&endDate=` | 查询时间段内帖子 |
|
||||
| DELETE | `/posts/{id}` | 删除帖子(404=已删除,可忽略) |
|
||||
| POST | `/upload` | 上传媒体文件 |
|
||||
|
||||
## 三、创建帖子(POST /posts)
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "now | schedule | draft",
|
||||
"date": "2026-08-30T10:00:00.000Z",
|
||||
"shortLink": false,
|
||||
"tags": [],
|
||||
"posts": [
|
||||
{
|
||||
"integration": { "id": "integration-id" },
|
||||
"value": [ { "content": "<正文/简介>", "image": [] } ],
|
||||
"settings": { "__type": "youtube", "title": "<标题>", "type": "public" }
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
- **type**:`now`(立即,忽略 date)/ `schedule`(按 date 排期,ISO 8601 UTC)/ `draft`(草稿)
|
||||
- **settings.__type**:平台标识(见下表)
|
||||
- 一个请求的 `posts` 数组可包含多个平台 → 一稿多投合并提交,节省限流配额
|
||||
|
||||
## 四、平台 settings(__type)
|
||||
|
||||
| 平台 | __type | 常用设置 |
|
||||
|------|--------|---------|
|
||||
| YouTube | youtube | title(标题,必填)、type(可见性:public/unlisted/private) |
|
||||
| TikTok | tiktok | privacy_level、duet、stitch、comment、autoAddMusic、content_posting_method(DIRECT_POST/UPLOAD) |
|
||||
| X | x | who_can_reply_post(everyone/mentioned/following) |
|
||||
| Instagram | instagram | post_type(POST/STORY/REEL) |
|
||||
| Instagram 独立 | instagram-standalone | post_type |
|
||||
| LinkedIn | linkedin | - |
|
||||
| LinkedIn 公司页 | linkedin-page | - |
|
||||
| Facebook | facebook | url(可选) |
|
||||
| Threads | threads | - |
|
||||
| Bluesky | bluesky | - |
|
||||
| Reddit | reddit | subreddit[] |
|
||||
|
||||
## 五、视频上传流程
|
||||
|
||||
1. `POST /upload` 上传视频文件 → 返回 URL
|
||||
2. 将 URL 放入对应平台帖子的 `value[].image` 或按平台 settings 传入
|
||||
3. 视频文件较大时注意请求体上限(50MB,超限走 /upload 预上传)
|
||||
|
||||
## 六、限流与错误
|
||||
|
||||
- 创建贴文端点:**90 次/小时**(云版 100 次/小时);批量多平台单请求合并
|
||||
- 错误码:
|
||||
- 400 参数错误 / 401 凭证无效 / 403 无权限 / 404 不存在
|
||||
- 413 请求体超 50MB(改用 /upload 预上传)
|
||||
- 429 限流(停止 1 小时或拆分)
|
||||
- 视频平台额外配额:TikTok Content Posting API 有每日上限,超限降低频率
|
||||
|
||||
## 七、MCP 方式(备选)
|
||||
|
||||
- URL:`https://api.postiz.com/mcp/{API_KEY}`
|
||||
- 工具:integrationList / integrationSchema / schedulePostTool / generateImageTool 等 8 个
|
||||
- 已配置 MCP 时优先用 MCP 工具,未配置则用 REST API
|
||||
|
||||
## 八、示例:查渠道 + 立即投 YouTube+TikTok
|
||||
|
||||
```bash
|
||||
# 查渠道(取 integration id)
|
||||
curl -H "Authorization: $POSTIZ_API_KEY" https://api.postiz.com/public/v1/integrations
|
||||
|
||||
# 立即发布到 YouTube + TikTok
|
||||
curl -X POST https://api.postiz.com/public/v1/posts \
|
||||
-H "Authorization: $POSTIZ_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"type": "now",
|
||||
"posts": [
|
||||
{"integration": {"id": "yt-id"}, "value": [{"content": "视频简介"}], "settings": {"__type": "youtube", "title": "视频标题", "type": "public"}},
|
||||
{"integration": {"id": "tt-id"}, "value": [{"content": "TikTok caption"}], "settings": {"__type": "tiktok", "privacy_level": "PUBLIC"}}
|
||||
]
|
||||
}'
|
||||
```
|
||||
|
||||
> 完整 API 文档:https://docs.postiz.com/public-api (自托管:https://docs.gitroom.com/public-api)
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
# social-auto-upload CLI 调用规范
|
||||
|
||||
> 国内通道的 CLI 规范。项目:github.com/dreammis/social-auto-upload(10.9k+ stars)。
|
||||
> 基于浏览器自动化(patchright),覆盖 8 平台:抖音/B站/小红书/快手/视频号/百家号/TikTok/YouTube。
|
||||
|
||||
---
|
||||
|
||||
## 一、安装
|
||||
|
||||
```bash
|
||||
git clone https://github.com/dreammis/social-auto-upload.git
|
||||
cd social-auto-upload
|
||||
pip install -r requirements.txt # Python 3.10+
|
||||
```
|
||||
|
||||
- 启动器:`sau` 命令(或 `python main.py`)
|
||||
- 首次使用需完成各平台扫码登录(登录态持久化到账号文件)
|
||||
|
||||
## 二、命令总览
|
||||
|
||||
| 命令 | 用途 |
|
||||
|------|------|
|
||||
| `sau {platform} login` | 登录(部分平台支持扫码) |
|
||||
| `sau accounts` | 列出所有已登录账号 + 实时检测 Cookie 状态 |
|
||||
| `sau {platform} upload-video` | 上传视频 |
|
||||
| `sau {platform} upload-note` | 上传图文笔记(小红书等) |
|
||||
| `sau history` | 查询本机发布记录(时长/状态/时间过滤) |
|
||||
|
||||
## 三、平台子命令
|
||||
|
||||
| 平台 | 子命令 | 支持 |
|
||||
|------|--------|------|
|
||||
| 抖音 | `sau douyin upload-video` | 视频/图文/定时/CLI/Skill ✅ 主线最完整 |
|
||||
| B站 | `sau bilibili upload-video` | 视频/定时(自动装 biliup) |
|
||||
| 小红书 | `sau xiaohongshu upload-note` | 视频/图文/定时 |
|
||||
| 快手 | `sau kuaishou upload-video` | 视频/图文/定时(初版) |
|
||||
| 视频号 | `sau shipinhao upload-video` | 视频/定时(无 CLI) |
|
||||
| 百家号 | `sau baijiahao upload-video` | 视频/定时(无 CLI) |
|
||||
| TikTok | `sau tiktok upload-video` | 视频/定时 |
|
||||
| YouTube | `sau youtube upload-video` | 视频 + 播放列表 + 可见性 |
|
||||
|
||||
## 四、上传视频示例
|
||||
|
||||
```bash
|
||||
# 抖音
|
||||
sau douyin upload-video --account my_account --file "D:/videos/demo.mp4" --title "视频标题" --tags "#话题1 #话题2"
|
||||
|
||||
# 小红书(图文/视频笔记)
|
||||
sau xiaohongshu upload-note --account my_account --file "D:/videos/demo.mp4" --title "笔记标题" --tags "#话题"
|
||||
|
||||
# B站
|
||||
sau bilibili upload-video --account my_account --file "D:/videos/demo.mp4" --title "视频标题" --tags "标签1,标签2"
|
||||
|
||||
# 定时发布(部分平台支持 --publish-at)
|
||||
sau douyin upload-video --account my_account --file "D:/videos/demo.mp4" --title "标题" --publish-at "2026-08-30 18:00:00"
|
||||
|
||||
# 查看账号状态
|
||||
sau accounts
|
||||
|
||||
# 查看发布记录
|
||||
sau history
|
||||
```
|
||||
|
||||
- `--account`:账号名,对应一个账号文件;可多账号并发(按账号名并行任务)
|
||||
- 退出码:0=成功 / 1=异常 / 2=参数错误 / 3=业务失败(脚本/AI 编排可直接消费)
|
||||
|
||||
## 五、注意事项
|
||||
|
||||
1. **登录态**:Cookie 会过期,`sau accounts` 检测到失效需重新扫码
|
||||
2. **平台适配**:浏览器自动化依赖平台页面结构,平台改版后选择器可能失效(项目持续更新,2026 年仍高频维护)
|
||||
3. **无头模式**:支持 headless(后台运行),适合 CLI/服务端/AI Agent 场景
|
||||
4. **风控**:浏览器自动化有账号风控风险,严格执行 [国内平台风控策略](../知识库/02_风控合规/国内平台风控策略.md) 的频率上限
|
||||
5. **Skill 化**:项目自带 Agent Skill,本技能通过 CLI 统一调用,保持输出可解析(JSON/退出码)
|
||||
|
||||
## 六、与 Postiz 的分工
|
||||
|
||||
- **TikTok/YouTube**:SAU 也覆盖,但**优先走 Postiz**(官方 API 更稳定合规);仅当 Postiz 不可用时回退 SAU
|
||||
- **抖音/B站/小红书/快手/视频号/百家号**:Postiz 不覆盖,唯一通道是 SAU
|
||||
|
||||
> 项目文档:https://github.com/dreammis/social-auto-upload
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
# 国内平台视频规格
|
||||
|
||||
> 国内投放(social-auto-upload)的视频素材规格。投放准备步骤按此表校验。
|
||||
|
||||
---
|
||||
|
||||
## 一、视频通用规格
|
||||
|
||||
| 平台 | 最大时长 | 最大大小 | 分辨率建议 | 格式 |
|
||||
|------|---------|---------|-----------|------|
|
||||
| 抖音 | ≤15min(常规推荐 ≤3min) | 视频 ≤4GB,上传单文件建议 ≤1GB | 1080×1920 竖屏优先 | MP4(H.264 最佳) |
|
||||
| B站 | ≤4h(大会员更久) | ≤8GB(网页)/≤16GB(客户端) | 横屏 16:9 优先,竖屏支持 | MP4/MOV/FLV |
|
||||
| 小红书 | ≤15min(视频笔记) | 单文件 ≤2GB | 竖屏 3:4 / 1:1 优先 | MP4 |
|
||||
| 快手 | ≤10min(常规推荐 ≤5min) | ≤4GB | 竖屏优先 | MP4 |
|
||||
| 视频号 | ≤30min(长视频 ≥1min 需 1GB 内) | ≤1GB(常规)/2GB(长视频) | 竖屏 1080×1920 | MP4 |
|
||||
| 百家号 | ≤30min | ≤2GB | 横屏优先 | MP4 |
|
||||
|
||||
> ⚠️ 各平台限制随版本调整,以平台创作者中心实时要求为准。
|
||||
|
||||
## 二、元数据规格
|
||||
|
||||
| 平台 | 标题 | 简介/正文 | 标签 |
|
||||
|------|------|----------|------|
|
||||
| 抖音 | ≤55 字(含标点) | ≤1000 字 | ≤30 个话题标签 |
|
||||
| B站 | ≤80 字 | ≤2000 字 | ≤12 个标签,≤24 字符/个 |
|
||||
| 小红书 | ≤20 字 | ≤1000 字 | ≤10 个话题 |
|
||||
| 快手 | ≤55 字 | 短视频简介较宽松 | 若干话题标签 |
|
||||
| 视频号 | ≤30 字 | ≤1000 字 | 话题标签若干 |
|
||||
| 百家号 | ≤30 字 | ≤3000 字 | 标签若干 |
|
||||
|
||||
## 三、平台特殊注意
|
||||
|
||||
| 平台 | 注意点 |
|
||||
|------|--------|
|
||||
| 抖音 | 发布页有「内容由 AI 生成」自主声明勾选;定时发布支持 |
|
||||
| 小红书 | 原创声明确认框 + AI 合成内容声明;自定义封面支持 |
|
||||
| B站 | 分区/标签必选;自动装 biliup 依赖 |
|
||||
| 视频号 | 封面支持(cover_path);网络域名解析异常需 TENCENT_HOST_RESOLVER_RULES 处理 |
|
||||
| 快手/百家号 | 浏览器自动化方案初版,稳定性以项目文档为准 |
|
||||
|
||||
## 四、投前检查清单
|
||||
|
||||
- [ ] 视频时长/大小在平台上限内(抖音 ≤4GB、视频号 ≤1GB 等)
|
||||
- [ ] 分辨率适配平台(国内短视频竖屏 1080×1920 优先)
|
||||
- [ ] 标题在字数限制内(抖音 ≤55 字、小红书 ≤20 字等)
|
||||
- [ ] AI 生成内容声明按平台要求勾选(抖音/小红书有相关流程)
|
||||
- [ ] 封面/话题标签按平台规格准备
|
||||
- [ ] 账号登录态有效(sau accounts 确认)
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
# 海外平台视频规格
|
||||
|
||||
> 海外投放(Postiz)的视频素材规格。投放准备步骤按此表校验,超限项需先处理。
|
||||
|
||||
---
|
||||
|
||||
## 一、视频通用规格
|
||||
|
||||
| 平台 | 最大时长 | 最大大小 | 分辨率建议 | 格式 |
|
||||
|------|---------|---------|-----------|------|
|
||||
| YouTube | 无限制(<12h 常规,长视频需验证) | 256 GB | 1080p 起,4K 支持 | MP4/MOV/MKV/AVI 等 |
|
||||
| TikTok | 15s–10min(直传建议 ≤5min) | 287.6 MB(浏览器上传) | 1080×1920 竖屏优先 | MP4/MOV |
|
||||
| X (Twitter) | ≤2min20s(常规账号) | 512 MB | 横/竖均可 | MP4/MOV |
|
||||
| Instagram | Reels ≤15min(视频帖 ≤60min) | 100 MB(Reels)/4GB(长视频) | 1080×1920 竖屏 | MP4/MOV |
|
||||
| Facebook | ≤240min | 10 GB | 1080p 起 | MP4/MOV |
|
||||
| LinkedIn | ≤15min | 5 GB | 横屏 16:9 优先 | MP4/MOV |
|
||||
| Threads | ≤5min | 未公开(按 IG 体系) | 竖屏优先 | MP4 |
|
||||
| Bluesky | ≤10min(待确认,随平台更新) | 大文件受限 | 通用 | MP4 |
|
||||
|
||||
> ⚠️ 平台限制会随版本调整,投放前以 Postiz integrationSchema 返回的实时规则为准。
|
||||
|
||||
## 二、元数据规格
|
||||
|
||||
| 平台 | 标题 | 简介/正文 | 标签 |
|
||||
|------|------|----------|------|
|
||||
| YouTube | ≤100 字符 | ≤5000 字符 | ≤500 字符(含逗号),视频建议 2-3 个 |
|
||||
| TikTok | 不单独设标题 | ≤2200 字符 | ≤5 个 |
|
||||
| X | - | ≤280 字符 | 计入正文 |
|
||||
| Instagram | - | ≤2200 字符 | ≤30 个(建议 3-5) |
|
||||
| LinkedIn | - | ≤3000 字符 | ≤3 个 |
|
||||
| Facebook | - | ≤63206 字符 | ≤30 个 |
|
||||
| Threads | - | ≤500 字符 | 计入正文 |
|
||||
|
||||
## 三、平台特殊设置(Postiz settings.__type)
|
||||
|
||||
| 平台 | 特殊设置项 | 说明 |
|
||||
|------|-----------|------|
|
||||
| YouTube | type | 可见性:public / unlisted / private |
|
||||
| TikTok | privacy_level / duet / stitch / comment / autoAddMusic / content_posting_method | DIRECT_POST 直传 / UPLOAD 上传 |
|
||||
| X | who_can_reply_post | everyone / mentioned / following |
|
||||
| Instagram | post_type | POST / STORY / REEL |
|
||||
|
||||
## 四、投前检查清单
|
||||
|
||||
- [ ] 视频时长在目标平台上限内(TikTok ≤10min、X ≤2min20s 等)
|
||||
- [ ] 视频大小在上限内(YouTube 256GB / TikTok 287.6MB / IG 100MB-Reels 等)
|
||||
- [ ] 分辨率适配平台(竖屏平台优先 1080×1920)
|
||||
- [ ] 标题/简介/标签在字符限制内
|
||||
- [ ] 封面可选(缺失跳过)
|
||||
- [ ] 特殊设置(可见性/隐私/合拍)按用户要求填写
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
# 国内平台风控策略
|
||||
|
||||
> 国内平台走浏览器自动化(social-auto-upload),存在账号风控风险。本文件是投放频率与风控的红线,**投放前必须执行**。
|
||||
|
||||
---
|
||||
|
||||
## 一、风险等级认识
|
||||
|
||||
- 浏览器自动化 ≠ 官方 API:行为特征可能被平台风控识别(IP 变化、操作间隔、无头浏览器指纹等)
|
||||
- 后果从轻到重:限流 → 内容限推 → 登录验证码 → 封禁投稿 → 封号
|
||||
- 结论:**小号先行、频率克制、异常即停**
|
||||
|
||||
## 二、频率红线(默认,新号减半)
|
||||
|
||||
| 平台 | 单账号日投放上限 | 连续投放最小间隔 |
|
||||
|------|:---------------:|:---------------:|
|
||||
| 抖音 | ≤10 条 | ≥5 分钟 |
|
||||
| 快手 | ≤10 条 | ≥5 分钟 |
|
||||
| 小红书 | ≤8 条 | ≥10 分钟 |
|
||||
| B站 | ≤15 条 | ≥3 分钟 |
|
||||
| 视频号 | ≤5 条 | ≥10 分钟 |
|
||||
| 百家号 | ≤8 条 | ≥10 分钟 |
|
||||
|
||||
**新号/低权重账号**(注册 <30 天或粉丝 <100):
|
||||
- 日投放 ≤3 条
|
||||
- 前 3 次投放必须用测试内容验证(标题不含营销词)
|
||||
- 逐步增加频率,观察平台反馈
|
||||
|
||||
## 三、内容风控
|
||||
|
||||
- 避免绝对化用语、医疗/金融敏感词、搬运重复内容(平台查重)
|
||||
- 营销/引流词密度过高易触发限流
|
||||
- 多平台同内容一稿多投时,各平台可适当差异化标题/封面
|
||||
- AI 生成内容按平台要求如实声明(抖音「内容由 AI 生成」、小红书 AI 合成声明)
|
||||
|
||||
## 四、账号操作规范
|
||||
|
||||
- 同一 IP 下多账号投放,间隔拉大(≥30 分钟)
|
||||
- 登录态失效重新扫码时,用与登录环境一致的网络
|
||||
- 账号密码/Cookie 不外泄;仅存于 SAU 账号文件
|
||||
|
||||
## 五、异常处理流程(P0)
|
||||
|
||||
```
|
||||
触发异常(限流/验证码/审核驳回/登录失效)
|
||||
│
|
||||
▼
|
||||
立即停止该账号投放(不再提交任何请求)
|
||||
│
|
||||
▼
|
||||
记录异常信息(时间/平台/账号/错误内容)
|
||||
│
|
||||
▼
|
||||
报告用户,给出处理建议:
|
||||
- 限流 → 暂停 1-24h
|
||||
- 验证码 → 人工处理/重新扫码
|
||||
- 内容驳回 → 修改内容合规性
|
||||
- 登录失效 → 重新扫码
|
||||
│
|
||||
▼
|
||||
用户确认后才恢复投放
|
||||
```
|
||||
|
||||
## 六、投放节奏建议
|
||||
|
||||
- 常规账号:日投放控制在红线的 50% 以内更稳妥
|
||||
- 批量投放任务:按平台分组、错峰执行(如上午投 B站/百家号,下午投抖音/快手,晚间投小红书/视频号)
|
||||
- 定期用 `sau accounts` 检查登录态,提前续登避免临时失效
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
# 海外 API 限流与合规
|
||||
|
||||
> 海外投放(Postiz 官方 API)的限流与合规说明。
|
||||
|
||||
---
|
||||
|
||||
## 一、Postiz 侧限流
|
||||
|
||||
| 项 | 限制 |
|
||||
|----|------|
|
||||
| 创建贴文端点(POST /posts) | **90 次/小时**(云版 100 次/小时),全实例全局值 |
|
||||
| 其他端点 | 无单独公开限流说明,按平台稳定性控制 |
|
||||
| 批量策略 | 一个 POST /posts 的 posts 数组合并多个平台 → 一次请求多平台投放 |
|
||||
|
||||
**应对**:批量投放时单请求多平台合并提交;超限(429)后停止 1 小时或拆分请求。
|
||||
|
||||
## 二、平台侧配额(Postiz 背后的官方 API)
|
||||
|
||||
| 平台 | 注意事项 |
|
||||
|------|---------|
|
||||
| TikTok | Content Posting API 需商业合作方资质;有每日发布配额,超限报错需降频 |
|
||||
| X | 媒体上传与发帖有速率限制(按 API 套餐),高频率会被限 |
|
||||
| Instagram | 图形 API 发布配额按 app/用户分级 |
|
||||
| YouTube | Data API 配额按每日单位计算(视频上传消耗较大) |
|
||||
| LinkedIn/Facebook | 各有速率限制,异常报错时降低频率 |
|
||||
|
||||
> 具体配额随平台政策变化,以 Postiz 返回错误信息为准。
|
||||
|
||||
## 三、合规红线
|
||||
|
||||
1. **账号授权**:所有平台通过 Postiz OAuth 连接用户本人账号,不得使用他人账号/代理账号
|
||||
2. **内容合规**:遵守各平台社区准则(版权、色情、仇恨言论、误导信息等);违规内容会导致账号封禁且申诉困难
|
||||
3. **AI 生成声明**:TikTok/YouTube 等平台要求 AI 生成内容标记(brand_content_toggle / AI 标记),如实声明
|
||||
4. **自动化声明**:遵守平台 API 服务条款,不使用自动化规避平台限制
|
||||
5. **数据隐私**:不采集/外传平台用户数据
|
||||
|
||||
## 四、错误码速查(Postiz)
|
||||
|
||||
| 状态码 | 含义 | 处理 |
|
||||
|:------:|------|------|
|
||||
| 400 | 参数错误 | 检查请求体/平台 settings |
|
||||
| 401 | 凭证无效 | 检查 POSTIZ_API_KEY |
|
||||
| 403 | 无权限 | 检查集成归属 |
|
||||
| 404 | 不存在 | 检查 integration id |
|
||||
| 413 | 请求体超 50MB | 改用 /upload 预上传 |
|
||||
| 429 | 限流 | 停止 1 小时或拆分 |
|
||||
| 5xx | 服务端错误 | 指数退避重试 |
|
||||
|
||||
## 五、健康检查建议
|
||||
|
||||
- 每次投放前 `GET /integrations` 确认渠道仍有效(OAuth token 可能过期)
|
||||
- 定时任务失败率 >20% 时暂停并检查平台政策变更
|
||||
- 关注 Postiz 官方公告(平台 API 变更会集中处理)
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
# 知识库
|
||||
|
||||
> content-publish 投放域知识。分类原则:**按主题分域、按区域分项**,边界清晰、内容独立、不重叠。
|
||||
|
||||
## 分类总览
|
||||
|
||||
| 分类 | 子项 | 内容 | 性质 |
|
||||
|------|------|------|------|
|
||||
| **01_平台规格** | 海外平台视频规格 | YouTube/TikTok/X/IG/FB/LinkedIn 时长/大小/分辨率/元数据限制 | 🏷️ 分类知识(海外域) |
|
||||
| | 国内平台视频规格 | 抖音/B站/小红书/快手/视频号/百家号 规格 | 🏷️ 分类知识(国内域) |
|
||||
| **02_风控合规** | 国内平台风控策略 | 日投放上限/间隔/新号限制/异常处理 | 🏷️ 分类知识(国内域) |
|
||||
| | 海外API限流与合规 | Postiz 限流/平台配额/合规红线/错误码 | 🏷️ 分类知识(海外域) |
|
||||
|
||||
## 通用知识 vs 分类知识
|
||||
|
||||
- **通用知识**(跨双通道通用):
|
||||
- `../投放流程规范.md`(Gate 机制/凭证安全/落盘规范——全流程规则权威源)
|
||||
- `../接口调用/Postiz_API规范.md`、`../接口调用/social-auto-upload_CLI规范.md`(操作规范,按通道使用)
|
||||
- **分类知识**(按海外/国内分域):本目录 01_平台规格、02_风控合规 共 4 个文件
|
||||
|
||||
## 边界说明(不重叠)
|
||||
|
||||
| 目录 | 职责 | 不包含 |
|
||||
|------|------|--------|
|
||||
| `知识库/01_平台规格` | 素材/元数据**规格**(能发什么、限制多少) | 不写操作步骤、不写风控红线 |
|
||||
| `知识库/02_风控合规` | **风控与合规**(怎么发安全、限流规则) | 不写平台规格数字、不写 API 调用 |
|
||||
| `接口调用/` | **操作规范**(怎么调 API/CLI) | 不写规格/风控 |
|
||||
| `投放流程/` + `投放流程规范.md` | **流程与规则**(步骤、Gate、落盘) | 不写具体规格/风控数值 |
|
||||
|
||||
## 使用时机
|
||||
|
||||
- 投放准备(流程2)→ 读 `01_平台规格`
|
||||
- 执行投放(流程4)→ 读 `02_风控合规/国内平台风控策略`(频率红线)
|
||||
- 海外通道调用 → 读 `接口调用/Postiz_API规范`;国内通道 → 读 `接口调用/social-auto-upload_CLI规范`
|
||||
@@ -0,0 +1,50 @@
|
||||
# scripts 目录说明
|
||||
|
||||
辅助脚本清单与用法。
|
||||
|
||||
## check_env.py
|
||||
|
||||
投放环境检查:POSTIZ_API_KEY、sau 命令、Python 版本、requests 库。
|
||||
|
||||
```bash
|
||||
python check_env.py
|
||||
```
|
||||
|
||||
返回码:0=双通道就绪,1=有缺失项。投放流程步骤 3 开始时运行。
|
||||
|
||||
## postiz_client.py
|
||||
|
||||
Postiz REST API 封装(标准库 + requests),用于海外投放:
|
||||
|
||||
```bash
|
||||
# 列出已连接渠道(取 integration id)
|
||||
python postiz_client.py integrations
|
||||
|
||||
# 上传视频文件(返回 URL)
|
||||
python postiz_client.py upload D:/videos/demo.mp4
|
||||
|
||||
# 创建/排期/发布(请求体为 JSON 文件)
|
||||
python postiz_client.py posts post_body.json
|
||||
|
||||
# 查询时间段内帖子
|
||||
python postiz_client.py query 2026-08-30T00:00:00.000Z 2026-08-31T00:00:00.000Z
|
||||
```
|
||||
|
||||
**凭证**:环境变量 `POSTIZ_API_KEY`(必填),`POSTIZ_API_BASE` 可覆盖(自托管实例)。
|
||||
|
||||
post_body.json 示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "now",
|
||||
"posts": [
|
||||
{
|
||||
"integration": {"id": "yt-integration-id"},
|
||||
"value": [{"content": "视频简介", "image": []}],
|
||||
"settings": {"__type": "youtube", "title": "视频标题", "type": "public"}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
> 依赖安装:`pip install requests`(upload 子命令需要)。
|
||||
@@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""投放环境检查脚本:检查海外(Postiz)与国内(SAU)通道依赖。
|
||||
|
||||
用法:python check_env.py
|
||||
"""
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
GREEN = "\033[32m"
|
||||
YELLOW = "\033[33m"
|
||||
RED = "\033[31m"
|
||||
RESET = "\033[0m"
|
||||
|
||||
|
||||
def check(label, ok, detail=""):
|
||||
if ok:
|
||||
print(f" {GREEN}[OK]{RESET} {label} {detail}")
|
||||
else:
|
||||
print(f" {RED}[X ]{RESET} {label} {detail}")
|
||||
return ok
|
||||
|
||||
|
||||
def main():
|
||||
print("=== 社媒视频多平台投放 - 环境检查 ===\n")
|
||||
|
||||
# Python
|
||||
py_ok = sys.version_info >= (3, 10)
|
||||
check("Python >= 3.10", py_ok, sys.version.split()[0])
|
||||
|
||||
# 海外通道:Postiz
|
||||
print("\n[海外通道 Postiz]")
|
||||
key = os.environ.get("POSTIZ_API_KEY", "").strip()
|
||||
check("POSTIZ_API_KEY 已设置", bool(key), "" if key else "→ postiz.com → Settings → Developers → Public API 生成")
|
||||
|
||||
# 国内通道:SAU
|
||||
print("\n[国内通道 social-auto-upload]")
|
||||
sau = shutil.which("sau")
|
||||
check("sau 命令可用", sau is not None, f"({sau})" if sau else "→ git clone github.com/dreammis/social-auto-upload && pip install -r requirements.txt")
|
||||
|
||||
# 辅助脚本依赖
|
||||
print("\n[脚本依赖]")
|
||||
try:
|
||||
import requests # noqa
|
||||
check("requests 库", True)
|
||||
except ImportError:
|
||||
check("requests 库", False, "→ pip install requests(postiz_client.py upload 需要)")
|
||||
|
||||
print("\n=== 结论 ===")
|
||||
missing = []
|
||||
if not key:
|
||||
missing.append("海外通道:配置 POSTIZ_API_KEY")
|
||||
if sau is None:
|
||||
missing.append("国内通道:安装 social-auto-upload")
|
||||
if missing:
|
||||
print(f" {YELLOW}需处理{RESET}:")
|
||||
for m in missing:
|
||||
print(f" - {m}")
|
||||
else:
|
||||
print(f" {GREEN}双通道就绪,可进行投放{RESET}")
|
||||
return 0 if not missing else 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
+116
@@ -0,0 +1,116 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Postiz REST API 客户端封装(海外投放通道)。
|
||||
|
||||
依赖:requests(pip install requests)
|
||||
凭证:环境变量 POSTIZ_API_KEY(禁止硬编码)
|
||||
用法:
|
||||
python postiz_client.py integrations # 列出已连接渠道
|
||||
python postiz_client.py upload <video_path> # 上传视频,返回 URL
|
||||
python postiz_client.py posts <json_file> # 创建/排期/发布(JSON 文件为请求体)
|
||||
python postiz_client.py query <start> <end> # 查询时间段帖子(ISO UTC)
|
||||
"""
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import urllib.request
|
||||
import urllib.error
|
||||
|
||||
BASE = os.environ.get("POSTIZ_API_BASE", "https://api.postiz.com/public/v1")
|
||||
|
||||
|
||||
def get_key():
|
||||
key = os.environ.get("POSTIZ_API_KEY", "").strip()
|
||||
if not key:
|
||||
print("ERROR: 环境变量 POSTIZ_API_KEY 未设置。请在 postiz.com → Settings → Developers → Public API 生成后配置。")
|
||||
sys.exit(2)
|
||||
return key
|
||||
|
||||
|
||||
def request(method, path, body=None):
|
||||
key = get_key()
|
||||
url = BASE + path
|
||||
data = json.dumps(body).encode("utf-8") if body is not None else None
|
||||
req = urllib.request.Request(url, data=data, method=method)
|
||||
req.add_header("Authorization", key)
|
||||
if data:
|
||||
req.add_header("Content-Type", "application/json")
|
||||
try:
|
||||
with urllib.request.urlopen(req) as resp:
|
||||
return resp.status, json.loads(resp.read().decode("utf-8") or "null")
|
||||
except urllib.error.HTTPError as e:
|
||||
detail = e.read().decode("utf-8", "ignore")[:500]
|
||||
return e.code, {"error": detail}
|
||||
|
||||
|
||||
def cmd_integrations():
|
||||
status, data = request("GET", "/integrations")
|
||||
print(f"[{status}]")
|
||||
if isinstance(data, list):
|
||||
for it in data:
|
||||
print(f" {it.get('id', '?')} | {it.get('name', it.get('provider', '?'))}")
|
||||
else:
|
||||
print(json.dumps(data, ensure_ascii=False, indent=2)[:2000])
|
||||
|
||||
|
||||
def cmd_upload(path):
|
||||
if not os.path.exists(path):
|
||||
print(f"ERROR: 文件不存在: {path}")
|
||||
sys.exit(3)
|
||||
# 上传走 multipart;此处用 requests 更稳,urllib 需要手写 multipart。
|
||||
# 建议使用 requests 库:
|
||||
try:
|
||||
import requests # noqa
|
||||
except ImportError:
|
||||
print("ERROR: 需要 requests 库:pip install requests")
|
||||
sys.exit(2)
|
||||
key = get_key()
|
||||
with open(path, "rb") as f:
|
||||
resp = requests.post(
|
||||
BASE + "/upload",
|
||||
headers={"Authorization": key},
|
||||
files={"file": (os.path.basename(path), f)},
|
||||
timeout=600,
|
||||
)
|
||||
print(f"[{resp.status_code}]")
|
||||
print(resp.text[:2000])
|
||||
|
||||
|
||||
def cmd_posts(json_file):
|
||||
if not os.path.exists(json_file):
|
||||
print(f"ERROR: 请求体文件不存在: {json_file}")
|
||||
sys.exit(3)
|
||||
with open(json_file, "r", encoding="utf-8") as f:
|
||||
body = json.load(f)
|
||||
status, data = request("POST", "/posts", body)
|
||||
print(f"[{status}]")
|
||||
print(json.dumps(data, ensure_ascii=False, indent=2)[:3000])
|
||||
|
||||
|
||||
def cmd_query(start, end):
|
||||
status, data = request("GET", f"/posts?startDate={start}&endDate={end}")
|
||||
print(f"[{status}]")
|
||||
print(json.dumps(data, ensure_ascii=False, indent=2)[:3000])
|
||||
|
||||
|
||||
def main():
|
||||
args = sys.argv[1:]
|
||||
if not args:
|
||||
print(__doc__)
|
||||
sys.exit(0)
|
||||
cmd, rest = args[0], args[1:]
|
||||
if cmd == "integrations":
|
||||
cmd_integrations()
|
||||
elif cmd == "upload" and rest:
|
||||
cmd_upload(rest[0])
|
||||
elif cmd == "posts" and rest:
|
||||
cmd_posts(rest[0])
|
||||
elif cmd == "query" and len(rest) >= 2:
|
||||
cmd_query(rest[0], rest[1])
|
||||
else:
|
||||
print(__doc__)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,68 @@
|
||||
# 社媒视频多平台投放技能 — 使用指南
|
||||
|
||||
> 本技能提供短视频成片的**国内+海外多平台自动投放**能力。直接对话即可使用,无需记住指令。
|
||||
|
||||
---
|
||||
|
||||
## 🚀 快速上手
|
||||
|
||||
| 你这样问 | 我会做什么 |
|
||||
|------|------|
|
||||
| "把 D:/videos/demo.mp4 投到抖音和B站" | 国内通道(social-auto-upload)分发,投放前给你确认清单 |
|
||||
| "把这段视频发到 YouTube 和 TikTok,明早 9 点定时发" | 海外通道(Postiz)定时排期 |
|
||||
| "一条视频同时投抖音+小红书+YouTube+TikTok" | 双通道混合投放:国内平台走 SAU,海外平台走 Postiz |
|
||||
| "帮我看看能投哪些平台" | 渠道状态检查:海外已连接账号 + 国内登录态一览 |
|
||||
| "查一下刚才投放的结果" | 结果校验 + 投放报告 |
|
||||
|
||||
---
|
||||
|
||||
## 🌍 海外投放(Postiz)
|
||||
|
||||
| 你这样问 | 我会做什么 |
|
||||
|------|------|
|
||||
| "投到 YouTube" | 通过 Postiz API 发布,支持标题/可见性/标签 |
|
||||
| "投到 TikTok,隐私设为私密" | 走 Postiz,可设置 privacy_level/duet/stitch 等 |
|
||||
| "投到 X、Instagram、Facebook、LinkedIn" | 一稿多投,各平台按规格适配 |
|
||||
| "这周五 10 点定时发" | schedule 模式排期 |
|
||||
|
||||
> **首次使用**:需要你先在 [postiz.com](https://postiz.com) 注册 → 连接目标平台账号(OAuth)→ 在 **Settings → Developers → Public API** 生成 API Key 发我(我只写入环境变量,不落盘到代码)。
|
||||
|
||||
---
|
||||
|
||||
## 🇨🇳 国内投放(social-auto-upload)
|
||||
|
||||
| 你这样问 | 我会做什么 |
|
||||
|------|------|
|
||||
| "投到抖音" | 走 SAU CLI(`sau douyin upload-video`),支持定时 |
|
||||
| "投到小红书,图文+视频" | `sau xiaohongshu upload-note` |
|
||||
| "投到B站、快手、视频号、百家号" | 对应 SAU 平台子命令 |
|
||||
| "查一下账号登录状态" | `sau accounts` |
|
||||
|
||||
> **首次使用**:需要先安装 social-auto-upload(`git clone` + pip 依赖),并完成各平台扫码登录(登录态持久化在账号文件)。本机未安装时我会先引导安装。
|
||||
|
||||
---
|
||||
|
||||
## ⏰ 三种投放模式
|
||||
|
||||
- **立即发布**:提交即发(now)
|
||||
- **定时排期**:指定时间自动发(schedule),如"明早 9 点"
|
||||
- **草稿暂存**:先存草稿不发布(draft),确认后再手动/补发
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 必读提示
|
||||
|
||||
1. **投放前必有确认清单**:我会先展示「平台×账号×时间×标题」完整清单,你说"确认/执行"才真正投放;不确认绝不投放。
|
||||
2. **国内平台风控**:浏览器自动化发布存在账号风险,首次投放建议用测试号;控制频率(单账号日发上限见知识库)。
|
||||
3. **海外优先走官方 API**:Postiz 用官方 OAuth,比浏览器自动化稳定合规,TikTok/YouTube 双覆盖时默认走 Postiz。
|
||||
4. **凭证安全**:API Key 只进环境变量;国内 Cookie 只存在 SAU 账号文件里。
|
||||
|
||||
---
|
||||
|
||||
## 🔧 环境要求
|
||||
|
||||
| 依赖 | 用途 | 检查命令 |
|
||||
|------|------|---------|
|
||||
| `POSTIZ_API_KEY` 环境变量 | 海外投放 | `scripts/check_env.py` |
|
||||
| `sau` 命令(social-auto-upload) | 国内投放 | `sau --help` |
|
||||
| Python 3.10+ | 运行辅助脚本 | `python --version` |
|
||||
Reference in new issue
Block a user