如果你想用 OpenClaw 把文章推到微信公众号草稿箱,重点不是“怎么让 AI 写文章”,而是怎么把整条链路跑通。
这条链路拆开就 4 件事:
1. 配好公众号接口 2. 配好 OpenClaw 的默认发布参数 3. 用对 skill 和发布脚本 4. 知道常见报错该查哪里
下面直接讲怎么做。
一、这件事到底是怎么实现的
本质上不是 OpenClaw 直接操作公众号后台网页,而是它调用微信公众号的接口,把文章提交到草稿箱。
流程是这样的:
• 你给 OpenClaw 一个文章需求,或者直接给一篇 markdown • OpenClaw 调用 baoyu-post-to-wechat这个 skill• skill 里的脚本把 markdown 渲染成适合微信的 HTML • 然后用公众号的 AppID / AppSecret 换 access token • 再上传封面、上传正文图片 • 最后调用 draft/add接口,把文章存进草稿箱
所以它不是“神奇自动发文”,而是把写作、渲染、上传、存草稿这几个动作串起来了。
二、前置准备
先准备 3 样东西:
1)一个能用的微信公众号
而且要能拿到:
• AppID • AppSecret
位置一般在: 公众号后台 → 开发 → 基本配置
2)OpenClaw 环境
最少要有:
• OpenClaw 本体 • npx或bun• baoyu-post-to-wechat这个 skill
如果你是直接在现成 workspace 里跑,通常这些已经在了。
3)一篇文章文件
最稳的是 markdown。
因为这个 skill 的发布流程本来就是围绕 markdown 做的,会自动处理:
• 标题 • 摘要 • 作者 • 封面 • markdown 转 HTML
三、怎么配置
这里有两层配置。
第一层:公众号接口配置
把下面两个值写进 .env:
WECHAT_APP_ID=你的AppIDWECHAT_APP_SECRET=你的AppSecretOpenClaw / skill 会按这个顺序找:
1. 环境变量 2. <workspace>/.baoyu-skills/.env3. ~/.baoyu-skills/.env
如果只是当前项目用,放项目内就行;如果你想全局复用,放用户目录。
第二层:发布默认配置
这个 skill 还会读一个 EXTEND.md。
比如我现在用的是:
default_theme: defaultdefault_color: vermiliondefault_publish_method: apidefault_author: 桌游里的亲子时光need_open_comment: 1only_fans_can_comment: 0这里几个字段最有用:
• default_publish_method:默认走api还是browser• default_author:作者名默认值• default_theme:markdown 转微信 HTML 时用的主题• default_color:主题色• need_open_comment:默认是否开评论• only_fans_can_comment:是否只允许粉丝评论
如果你只是想稳定推草稿箱,默认走 就行。
四、实际发布流程怎么跑
下面是最实用的版本。
第一步:准备 markdown 文章
文章里最好直接写 frontmatter:
---title: 文章标题summary: 文章摘要author: 作者名coverImage: ./cover.png---# 正文标题这里开始写正文。这样发布脚本就不用猜你要什么。
最重要的是两项:
• title• coverImage
没有封面,草稿大概率发不出去。
第二步:调用发布脚本
实际执行时,用的是 baoyu-post-to-wechat 里的 wechat-api.ts。
命令长这样:
npx -y bun ./scripts/wechat-api.ts article.md --theme default --color vermilion --cover ./cover.png如果放到 OpenClaw 里,通常不需要你手敲命令,而是让它调用 skill 完成。
这个脚本会做几件事:
1. 读取 markdown 和 frontmatter 2. 调用渲染器,把 markdown 转成微信可用 HTML 3. 读取 .env,拿 AppID / AppSecret4. 获取 access token 5. 上传封面图 6. 上传正文里的图片 7. 调用草稿接口发布 8. 返回 media_id
只要最后拿到了 media_id,就说明已经进草稿箱了。
第三步:去公众号后台确认
路径就是: 内容管理 → 草稿箱
到这一步,你要做的是最后检查:
• 封面是不是对的 • 摘要有没有被截断 • 正文图片有没有丢 • 排版有没有异常
五、到底用了哪些 skill
你这条链路里,核心是 1 个 skill:
baoyu-post-to-wechat
它负责:
• markdown 转微信 HTML • 调用公众号接口 • 上传图片 • 发布到草稿箱
它里面最关键的脚本有两个:
• scripts/wechat-api.ts:走 API 推草稿箱• scripts/check-permissions.ts:检查环境、依赖、权限
如果你要的是稳定发草稿箱,优先用 wechat-api.ts。
如果 API 不通,再考虑浏览器方案。
六、最常见的坑
这部分最重要。
1)Error: File path required
这是脚本参数传错了。
wechat-api.ts 不是 --markdown article.md 这种写法,而是直接把文件路径当第一个参数:
npx -y bun wechat-api.ts article.md不是:
npx -y bun wechat-api.ts --markdown article.md这个地方很容易踩。
2)有 AppID / AppSecret,但还是发不出去
先查三件事:
• .env放的位置对不对• key 名是不是 WECHAT_APP_ID/WECHAT_APP_SECRET• 复制时有没有多空格、少字符
很多时候不是接口挂了,就是配置没被脚本读到。
3)没有封面图
公众号草稿的 news 类型必须有封面。
最稳妥的做法:
• frontmatter 里写 coverImage• 发布命令里再显式传一次 --cover
别赌自动兜底。
4)图片路径写错
如果正文里有本地图片,脚本会尝试上传。
但前提是路径真的存在。
所以文章和图片最好放在同一个目录体系里,别到处引用临时文件。
5)主题参数没带
这个 skill 的规范里明确要求: API 发布时总是带 。
哪怕你就用默认主题,也建议显式写出来,少一层不确定性。
6)评论开关和预期不一致
如果你发现草稿默认评论状态不对,先看 EXTEND.md 里的:
• need_open_comment• only_fans_can_comment
别只看文章正文。
7)以为“推到草稿箱”就是“已经发布”
不是。
草稿箱只是草稿箱。
真正群发、定时、正式发布,还是要你自己去公众号后台做最后一步。
七、如果你想让这条流程更顺,建议这么做
别把它当成一次性动作,把它固定成 SOP:
• 文章统一用 markdown 写 • 每篇都带 frontmatter • 封面路径固定 • .env固定放一个位置• EXTEND.md固定默认主题和作者• 永远优先走 API
这样以后你每次只需要说一句:
“写一篇文章,并推到公众号草稿箱。”
后面的动作就能稳定复用。
最后一句
OpenClaw 推送公众号草稿箱,真正难的不是发,而是第一次把配置、路径、脚本参数都对齐。
一旦第一遍跑通,后面基本就是体力活自动化。
这才是它最有用的地方。

夜雨聆风