96push

通过本地客户端控制96Push,实现多平台内容发布与管理。

已扫描
适合谁
内容运营人员、自媒体创作者
不适合谁
无96Push客户端的用户、不熟悉多平台发布流程者
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @xsxs89757/96push

Skill 说明

命令、参数、文件名以原文为准

96Push 远程控制

通过附带的脚本,可经由 96.cn 的 HTTPS 代理控制用户本地的 96Push 桌面客户端。此技能可能影响已登录的社交媒体账号,请将发布、删除、取消队列、平台设置更改等操作视为高影响行为。

安全第一

  • 在用户明确批准前,不要执行 updatepublishdelete-articlecancel-queuecreate-plat-setupdate-plat-setdelete-plat-set 命令。
  • 在请求确认前,应展示内容 ID/标题、内容类型、目标账号 ID/平台、草稿/发布状态、可见性及平台设置详情。
  • 优先使用草稿模式或单个账号。向多个账号发布需额外一次明确确认以确认完整账号列表。
  • 默认情况下,不要要求用户将 PUSH_API_KEY 粘贴到聊天中。建议用户将密钥本地存储在环境变量或 ~/.openclaw/.env 文件中。
  • 不要回显 API 密钥、草稿中的私密内容或未发布的媒体链接。
  • 仅当用户有意操作 96Push 且信任 96Push 服务([https://push.96.cn](https://push.96.cn))时,才使用此技能。

要求

  • 用户需通过以下方式之一本地提供 API 密钥:

- 环境变量:PUSH_API_KEY

- ~/.openclaw/.env 文件中添加一行:PUSH_API_KEY=pk_...

  • 若密钥缺失,脚本将返回设置指引。请引导用户完成以下步骤:

1. 从 [https://push.96.cn](https://push.96.cn) 下载 96Push

2. 启动并登录

3. 进入个人资料(左下角头像)→ API 密钥 → 生成

4. 将密钥本地添加至 ~/.openclaw/.envPUSH_API_KEY;除非用户明确希望代理写入该文件,否则不要将其粘贴到聊天中。

命令

所有命令通过 python3 {baseDir}/scripts/96push.py <command> [options] 执行。

查询类命令

# 健康检查
python3 {baseDir}/scripts/96push.py check

# 平台信息
python3 {baseDir}/scripts/96push.py platforms
python3 {baseDir}/scripts/96push.py platforms --article
python3 {baseDir}/scripts/96push.py platforms --video

# 账号信息
python3 {baseDir}/scripts/96push.py accounts
python3 {baseDir}/scripts/96push.py all-accounts

# 内容查询
python3 {baseDir}/scripts/96push.py articles --page 1 --size 10 --status 1
python3 {baseDir}/scripts/96push.py article --id 42

# 发布记录
python3 {baseDir}/scripts/96push.py records --page 1 --size 10
python3 {baseDir}/scripts/96push.py record --id 7

# 仪表盘数据
python3 {baseDir}/scripts/96push.py dashboard
python3 {baseDir}/scripts/96push.py overview
python3 {baseDir}/scripts/96push.py user

# 平台配置
python3 {baseDir}/scripts/96push.py plat-sets --pid 3

# 平台发布规则(离线可用,无需 API 密钥)
python3 {baseDir}/scripts/96push.py rules --list
python3 {baseDir}/scripts/96push.py rules --platform wechat --type article
python3 {baseDir}/scripts/96push.py rules --platform wechat,zhihu --type article

上传本地图片

OpenClaw 运行于服务器环境,无法读取用户本地路径(如 /Users/...C:\...)。在使用 thumbfiles 或文章正文中的图片前,必须先将图片转为 URL。

  • 若用户上传或生成的图片存在于 OpenClaw 运行时环境中,应先上传至 96Push,使用返回的 96Push 图片 URL。
  • 若图片仅存在于用户本地计算机,应请用户通过 96Push 或其他图片托管服务上传,并提供返回的 URL。不得使用本地路径或虚构链接。
  • upload 命令返回的是 96Push 本地图片 URL(如 http://127.0.0.1:.../pix/...),该链接由用户本地 96Push 客户端支持。

上传操作会将运行时环境中的文件发送至 96Push,因此需要在执行前获得用户的明确同意。

python3 {baseDir}/scripts/96push.py upload --file "/workspace/uploads/cover.png" --confirm

创建内容

# 内容类型可省略,若 `--files` 明确包含图片或视频
# 视频文件(.mp4/.mov/.avi/.mkv/.webm/.m4v/.flv/.wmv)将自动识别为 --type video

# 文章 —— 需提供标题 + Markdown(或 HTML 内容)
python3 {baseDir}/scripts/96push.py create --type article --title "标题" --markdown "# 内容" --desc "摘要"

# 带封面图的文章
python3 {baseDir}/scripts/96push.py create --type article --title "标题" --markdown "# 内容" --thumb '["https://example.com/cover.jpg"]'

# 图文组合(graph_text)—— 需提供标题 + 至少一个图片 URL
python3 {baseDir}/scripts/96push.py create --type graph_text --title "图集" --files '["url1","url2"]'

# 视频 —— 需提供标题 + 一个视频 URL,强烈建议提供描述
python3 {baseDir}/scripts/96push.py create --type video --title "视频" --files '["video_url"]' --desc "视频描述"
python3 {baseDir}/scripts/96push.py create --title "视频" --files '["https://example.com/video.mp4"]' --desc "视频描述"

更新或删除内容

更新操作会修改 96Push 中管理的内容,删除操作具有不可逆性。两者均需在执行前获得用户明确同意。

python3 {baseDir}/scripts/96push.py update --id 42 --title "新标题" --markdown "# 新内容" --confirm
python3 {baseDir}/scripts/96push.py delete-article --id 42 --confirm

发布内容

发布为高影响操作。在执行前,必须向用户清晰展示具体内容、目标账号列表、草稿/发布状态及相关设置。只有在获得用户明确批准后方可执行。

96push

基本用法:单账号发布(需手动确认)

python3 {baseDir}/scripts/96push.py publish --type article --id 42 --accounts "1" --confirm
python3 {baseDir}/scripts/96push.py publish --type video --id 42 --accounts "5" --confirm
  • 若未指定 --type,脚本将读取内容详情并自动推断为 articlegraph_textvideo
  • 发布时会针对每个识别出的目标平台输出规则文件提示
  • 如仅需查看完整规则文本,请使用 --show-rules

高级模式:按账号配置完整设置(参考平台设置说明)

python3 {baseDir}/scripts/96push.py publish --type article --id 42 --accounts-json '[{"id":1,"platName":"微信公众号","settings":{"publishType":"publish","origin":false}}]' --confirm --show-rules

多账号草稿(需手动确认全部目标账号)

python3 {baseDir}/scripts/96push.py publish --type article --id 42 --accounts "1,5" --draft --confirm --confirm-multi-account

查询任务状态

python3 {baseDir}/scripts/96push.py poll --id 7
python3 {baseDir}/scripts/96push.py poll --id 7 --interval 10 --max 30

管理平台配置

平台配置更改会影响未来的发布行为,必须经过用户明确确认。

# 创建可复用的配置
python3 {baseDir}/scripts/96push.py create-plat-set --pid 1 --name "公众号默认" --setting '{"publishType":"publish","leave":true}' --confirm

# 更新配置
python3 {baseDir}/scripts/96push.py update-plat-set --sid 1 --pid 1 --name "公众号原创" --setting '{"publishType":"publish","origin":true}' --confirm

# 删除配置
python3 {baseDir}/scripts/96push.py delete-plat-set --sid 1 --confirm

典型工作流程

  1. check —— 确认客户端在线
  2. accounts —— 列出可用账号,供用户选择目标
  3. rules —— 在创建设置或选择封面图前,读取目标内容类型的各平台规则文件
  4. create —— 创建内容(详见内容创建规则)
  5. 提示用户确认具体内容、目标账号、草稿/发布状态及设置
  6. publish --confirm —— 提交并等待结果(仅调用一次,见下文关键规则)。使用 --confirm-multi-account 前需用户确认所有目标账号。该命令会自动轮询直至完成,无需单独调用 poll
  7. 向用户报告最终结果

关键:发布反垃圾规则(必须遵守)

**⚠️ 每个内容批次对同一组账号最多只能调用一次 publish**

发布命令触发浏览器自动化操作,耗时约 30–60 秒。脚本内置保护机制,若已有任务运行则拒绝重复提交。请严格遵守以下规则:

  1. 每批账号仅允许一次发布调用publish 命令现已自动等待完成——提交任务后持续轮询直至结束。除非使用 --no-wait,否则无需单独调用 poll
  2. 发布必须经用户明确确认。在用户确认具体内容、目标账号、草稿/发布状态及设置后,方可使用 --confirm
  3. 多账号发布需额外确认。仅在用户确认批次中所有目标账号后,才可使用 --confirm-multi-account
  4. 若发布超时,不代表发布失败——浏览器自动化可能仍在执行。不要重试发布,建议用户检查 96Push 客户端状态。
  5. **若返回 PUBLISH_ALREADY_RUNNING**,不要重试。请等待当前任务完成。
  6. 若返回 HTTP 425,表示有其他任务正在运行。请等待并告知用户,不要重试。
  7. 禁止循环或重试发布命令。每次调用都会创建一个新的浏览器自动化任务。连续调用 10 次将导致 10 个浏览器窗口同时争夺同一页面资源。
  8. 完整流程始终为:用户确认 → publish --confirm(仅一次,自动等待)→ 向用户报告结果

内容创建规则(重要)

CLI 现已对 create/update 请求进行验证并最小化数据包:

  • 文章类内容不发送 files 字段;图文/视频类内容不发送 markdowncontent 字段
  • thumbfiles 仅接受完整的 HTTP(S) URL,拒绝本地路径或 base64/data URL
  • graph_text 至少需要一个图片 URL 在 files
  • video 必须且仅能包含一个视频 URL 在 files
  • article 必须提供 markdowncontent 内容

在为特定平台创建内容前,请先查阅其规则文件:

python3 {baseDir}/scripts/96push.py rules --platform <platform> --type <article|graph_text|video>

PublishData 字段说明

字段类型是否必填说明
titlestring内容标题
descstring描述/摘要
contentstring条件HTML 格式内容(文章类需要)
markdownstring条件Markdown 源码(文章类需要)
autoThumbbool自动从内容中提取封面(默认为 true)
thumbstring[]条件封面图 HTTP(S) URL 列表。本地图片需提前上传/托管;不支持本地路径或 base64/data URL
filesstring[]条件媒体文件 HTTP(S) URL 列表——仅用于图文类图片和视频媒体。文章类不使用此字段

按内容类型分类

类型选择规则

  • 如果用户希望创建或发布视频,请尽可能显式使用 --type video
  • 如果省略 --type,CLI 会根据 --files 或现有内容详情自动推断类型。
  • 如果同时传入 --type articlefiles,CLI 会以明确指定的文章类型为准,拒绝/忽略错误放置的媒体文件,而不是静默创建 graph_text/video 内容。
  • 不要将视频 URL 用于文章内容;视频 URL 必须作为视频内容使用。

文章 (Article)

  • 必须包含title + content(HTML 格式)或 markdown
  • 封面图(thumb):部分平台要求至少一张封面图。可设置 autoThumb: true 自动从内容中的图片提取,或提供明确的 thumb 图片 URL。
  • desc:可选摘要文本,部分平台会使用。
  • **不要设置 files** 用于文章 —— files 仅用于 graph_text/video。文章中的图片应放入 markdown/content 正文,封面图放入 thumb

图文/图集 (Graph Text)

  • 必须包含title + files(图片 URL 数组,至少 1 个)
  • 封面:若 thumb 为空,则自动使用第一张图片生成。
  • 无需 content/markdown —— 图片即内容。

视频 (Video)

  • 必须包含title + files(包含且仅包含 1 个视频 URL 的数组)
  • 封面:若 thumb 为空,则从视频帧中自动生成。多数平台要求封面,请尽可能提供。
  • desc:强烈建议提供 —— 多数视频平台会将其用作视频描述。

各平台封面图要求

仅供参考。准确信息请查阅 references/platform-rules/<platform>.md

平台文章封面图文封面视频封面
微信公众号 (wechat)必须(1 张图片)从图片自动生成必须
抖音 (douyin)不适用自动从视频自动生成
今日头条 (toutiaohao)必须(1-3 张图片)自动自动
小红书 (xiaohongshu)不适用从图片自动生成自动
Bilibili (bilibili)可选(headerImg)自动必须
知乎 (zhihu)可选自动自动
百家号 (baijiahao)必须(1-3 张图片)自动必须
CSDN (csdn)可选不适用自动
微博 (sina)不适用自动自动
快手 (kuaishou)不适用自动自动
搜狐号 (sohuhao)从内容自动生成自动自动

规则:如有疑问,始终至少提供一个 thumb 图片。autoThumb: true 会尝试从内容中提取,但如果内容无图片则可能失败。

重要提示thumbfiles 仅接受 HTTP(S) URL。若文件已存在于 OpenClaw 运行时环境,请使用 upload --file ... --confirm 命令上传,然后在 thumbfiles 或文章图片 src 中使用返回的 pix URL。如果图片仅存在于用户本地,请先通过 96Push/hosting 上传。切勿传递本地路径或 base64/data URL。

发布时,96Push 会将 thumb/files 的 URL 下载到任务本地文件,以便目标平台需要文件上传。文章正文中的图片仅在目标平台需要公开图片 URL 时上传至临时公共存储;该上传基于图片哈希缓存,有效期约 47 小时。


平台设置参考(重要)

发布时,postAccounts 中每个账号都需要一个 settings 对象。不同平台所需字段不同。设置项需以 JSON 形式通过 --accounts-json 参数传入,或通过 plat-sets 预配置。

**在构建设置前,请仅阅读目标平台的规则文件 references/platform-rules/**。不要复制其他平台的设置,也不要包含空的或无关的字段,即使它们存在于通用参考中。

python3 {baseDir}/scripts/96push.py rules --platform toutiaohao --type article
python3 {baseDir}/scripts/96push.py rules --platform xiaohongshu,douyin --type video

通用字段

字段类型描述
timerPublishobject{"enable": true, "timer": "YYYY-MM-DD HH:MM:SS"}
lookScopeuint可见性:0=公开,1=好友,2=私密
sourceuint内容声明(AI/转载/原创,具体值因平台而异)
classifystring分类/栏目
collectionstring收藏夹/专栏
originbool声明为原创
labels/tagstring标签(分隔符因平台而异:/,

平台特有设置

wechat(微信公众号) — 文章/图文:

  • author:作者姓名
  • publishType"mass"(群发)或 "publish"(发布)
  • origin:声明原创(默认为 false)
  • leave:开启评论(默认为 true)
  • 定时发布时间:当前时间 +5 分钟 至 7 天内

wechat(微信公众号) — 视频(额外字段):

  • materTitle:素材标题
  • barrage:开启弹幕
  • turn2Channel:转为视频频道

douyin(抖音)

  • allowSave:允许他人保存(默认为 true)
  • lookScope:0=公开,1=好友,2=私密
  • hotspot:关联热门话题
  • music:背景音乐

toutiaohao(今日头条) — 文章:

  • starter:头条专属内容
  • syncPublish:同步发布至“微头条”
  • 定时发布时间:当前时间 +2 小时 至 7 天内。若设置了 collection,则不能使用定时发布。

xiaohongshu(小红书)

  • origin: 声明原创
  • source: 内容声明 — 0=无, 1=虚构/娱乐, 2=AI生成, 3=正文中标注, 4=自拍, 5=转载来源
  • reprint: 媒体/来源名称,仅在 source=5 时使用。禁止同时设置 origin=truesource=5
  • mark: 标记用户/位置 {"user": true, "search": "关键词"}
  • lookScope: 0=公开, 1=好友可见, 2=私密
  • 定时发布时间:现在 +1小时 ~ 14天
  • 暂存离开点击 暂存离开;发布点击 发布定时发布

bilibili (哔哩哔哩) — 视频/图文内容:

  • partition: 分区/栏目(重要!)
  • reprint: 转载来源(空 = 自制内容)
  • creation: 是否允许衍生创作
  • dynamic: 粉丝通知文案

bilibili (哔哩哔哩) — 文章:

  • classify: 栏目分类
  • headerImg: 封面图 URL
  • labels: 标签(最多10个)

zhihu (知乎) — 文章:

  • question: 提交至某个问题
  • source: 创作声明 — 0=无, 1=剧透, 2=医疗, 3=虚构, 4=财经, 5=AI辅助
  • topic: 文章话题(最多3个,用 / 分隔)
  • collection: 栏目名称
  • origin: 来源类型 — 0=无, 1=官网, 2=新闻报道, 3=电视媒体, 4=纸质媒体
  • 暂存为自动保存,等待 /api/articles/drafts 接口响应;发布等待 POST /content/publish 接口响应。
  • 视频:尽可能设置 classifyreprint=true 表示转载,false 表示原创。定时发布时间:现在 +1小时 ~ 14天。

omtencent (腾讯内容开放平台) — 文章/视频:

  • classify: 分类。稳定测试时,请使用 科技 作为文章分类。
  • labels: 标签,用 / 分隔,最多9个,每个标签不超过8个汉字。
  • activity: 平台活动关键词。
  • source: 内容声明 — 1=AI生成, 2=虚构/娱乐, 3=互联网来源, 4=个人观点, 5=旧闻。空或0当前默认为4。
  • 定时发布时间:现在 +5分钟 ~ 7天。
  • 保存/发布需等待平台提交响应;若出现 AIGC 声明弹窗,需提交后再次点击保存/发布。

baijiahao (百家号)

  • classify: 分类格式为 "一级/二级"
  • byAI: AI创作声明
  • 定时发布时间:现在 +1小时 ~ 7天

csdn (CSDN) — 文章:

  • labels: 标签(用 / 分隔,最多7个)
  • artType: 0=原创, 1=转载, 2=翻译
  • originLink: 转载内容必需填写
  • 定时发布时间:现在 +4小时 ~ 7天

juejin (掘金)

  • tag: 必填 — 至少需有一个标签
  • classify: 分类

kuaishou (快手)

  • sameFrame: 允许他人使用相同画面拍摄
  • download: 允许下载
  • sameCity: 显示在同城动态中

sina (新浪微博) — 视频/图文内容:

  • type: 0=原创, 1=衍生, 2=转发
  • stress: 是否允许添加亮点(默认为 true)
  • wait: 发布前等待 X 秒

sina (新浪微博) — 文章:

  • onlyFans: 仅粉丝可查看全文(默认为 true)

sohuhao (搜狐号) — 文章/图文/视频:

  • classify: 属性/分类 — 观点评论/故事传记/消息资讯/八卦爆料/经验教程/知识科普/测评盘点/见闻记录/运势/搞笑段子/美图/美文
  • declaration: 来源声明 — 0=无特别声明, 1=引用声明, 2=包含AI创作内容, 3=包含虚构创作
  • topic: 话题关键词(基于搜索)
  • loginView: 需登录才能查看全文(默认为 false)
  • 定时发布时间:现在 +1小时 ~ 7天
  • 封面图:若未手动上传,将从文章图片中自动提取;也支持手动上传

定时发布时间限制

平台最短延迟最长延迟
wechat现在 + 5 分钟7 天
toutiaohao现在 + 2 小时7 天
baijiahao现在 + 1 小时7 天
csdn现在 + 4 小时7 天
acfun现在 + 4 小时14 天
pinduoduo现在 + 4 小时7 天
sohuhao现在 + 1 小时7 天
tiktok现在 + 2 小时30 天

输出格式建议

发布结果

📤 发布结果 (记录 #7)

✅ WeChat (@AccountA) — 成功,耗时 12秒
✅ Zhihu (@AccountB) — 成功,耗时 8秒
❌ Baijiahao (@AccountC) — 失败:登录已过期

成功:2/3,失败:1/3

账号列表

📋 已登录账号:

1. WeChat - AccountA (ID: 1) [文章, 图文]
2. Douyin - AccountB (ID: 5) [视频, 图文]
3. Bilibili - AccountC (ID: 8) [文章, 视频, 图文]

错误处理

  • 503 CLIENT_OFFLINE → "96Push 未运行。请从 [https://push.96.cn](https://push.96.cn) 启动"
  • 425 → "另一个发布任务正在运行。不要重试 — 使用 poll 等待当前任务完成。"
  • PUBLISH_ALREADY_RUNNING → 任务已在进行中。请根据错误响应使用 poll --id <active_record_id>。不要再次调用 publish。
  • 504 TIMEOUT → "客户端响应超时。任务可能仍在运行 — 请使用 poll 查询状态。"
  • 401/403 → "API Key 无效或已过期,请在 96Push 个人资料中重新生成"
  • 账号 login=false → "账号登录已过期,请在 96Push 客户端重新登录"
  • poll 超时 → 提示用户:“发布正在持续,可能浏览器自动化仍在运行。请检查 96Push 客户端。” 不要重试发布。

安全规则

96push

  • 请勿在响应中暴露 API 密钥
  • 发布前列出目标账号并征得用户确认;仅在获得确认后使用 --confirm
  • 若涉及多个目标账号,需单独确认完整账号列表,并使用 --confirm-multi-account
  • 在执行内容更新、删除、队列取消或平台配置更改前,必须要求 --confirm
  • 远程发布必须使用 headless: true
  • 请勿猜测账号 ID —— 必须先查询获取
  • 不要输出原始的 Base64 图片数据 —— 仅需说明其存在
  • thumbfiles 字段必须为 HTTP(S) URL;不得传递用户本地路径或 base64/data URL
  • 若用户提供的是本地图片路径,请说明 OpenClaw 无法读取该文件,并请求提供已上传/托管的 URL,或技能运行时可访问的附件
  • 创建内容前,需验证必填字段后再调用创建 API
  • 在为已知目标创建/发布内容前,应先运行 rules --platform ... --type ... 并遵循该平台规则文件
  • 构建设置时,仅包含目标平台支持的字段 —— 缺失必填字段会导致发布失败,无关字段会使自动化变得脆弱
  • **同一内容+账号批次绝不允许调用 publish 多次。** 每次调用都会创建一个真实的浏览器自动化任务。重复调用会导致多个浏览器争夺同一页面,全部失败,甚至可能造成客户端崩溃。
  • **绝不应在失败或超时后重试 publish。** 若发布失败,请将错误信息报告给用户;若轮询超时,请告知用户超时情况。由用户自行决定后续操作。
  • publish 现已自动等待并轮询。仅当显式使用了 --no-wait 或需要检查现有发布记录时,才使用 poll
X
@xsxs89757

已收录 1 个 Skill

相关推荐