微信公众号自动发布教程:用 Agent 把素材送进草稿箱
每天把素材改成文章、排版、处理封面,再复制到公众号后台,重复操作很容易比写作本身更费时间。我把这段流程整理成了 wechat-news-draft,可以交给支持本地文件与命令执行的 Agent 使用。
先说清“自动发布”的范围:这份 Skill 自动准备内容并上传公众号草稿箱,最后由人在后台检查和发布。 本地文章、远端草稿、公开文章是三个不同结果。
本文基于开源仓库的 SKILL.md、references/environment.md,以及本机 md2wechat 2.4.0 的命令帮助整理。它适合已有 Markdown 素材、希望减少编辑搬运工作的人;不是零配置的公众号托管服务。
先看整条流程
你提供的 Markdown 素材
→ Agent 选择主题、写文章、保留来源
→ article.md + cover.png + editorial-notes.md
→ md2wechat 检查并转换成 HTML
→ 上传公众号草稿箱,取得 media_id
→ 人工检查排版、图片和事实,确认发布
Skill 负责告诉 Agent 该读什么、做什么、在哪里停止;md2wechat负责转换和上传。仓库没有捆绑大模型、公众号账号或转换服务额度。
第一步:安装 Skill 和命令行工具
准备 Git、Node.js/npm,以及能够读写本地文件、执行命令的 Agent。
git clone https://github.com/Lianminx/wechat-news-draft.git
cd wechat-news-draft
npm install -g @geekjourneyx/md2wechat@2.4.0
md2wechat version --json
这里刻意固定 2.4.0,因为本文核对的是这个版本,不代表它是最新版本。安装的是带作用域的 @geekjourneyx/md2wechat,不要误装同名的无作用域 npm 包。安装过程还需要能访问上游 Release 下载地址。
可以将整个仓库放入所用 Agent 的 Skill 目录,也可以先不处理自动发现,直接告诉 Agent:“读取这个仓库的 SKILL.md,按它执行。”只下载文件并不意味着当前会话已经加载了 Skill。
第二步:分别配置公众号和转换服务
md2wechat config init
按生成的 ~/.config/md2wechat/config.yaml 模板,在本机填写配置。如果之前已经配好,不必重复初始化。
这里有两组容易混淆的配置:
| 配置 | 作用 | 失败影响 |
|---|---|---|
公众号 AppID、Secret,对应 WECHAT_APPID、WECHAT_SECRET |
调用公众号接口,创建草稿 | 草稿上传可能失败 |
| md2wechat 转换服务配置 | 将 Markdown 转为公众号 HTML | 转换可能失败,不等于公众号密钥错误 |
实际账号还需要具备对应接口能力,并按公众号后台要求配置 IP 白名单。不要把某类账号“必定可用”当作安装前提,先核对自己的后台权限。
md2wechat config validate
配置校验通过后,再继续实际转换。真实密钥只放本机配置或安全的环境变量中,不要贴进 Agent 对话、博客、Git,也不要把完整配置输出当作公开排错日志。
第三步:准备输入,给 Agent 一项完整任务
在你的内容工作目录下准备:
inputs/
ai-briefing.md
market-briefing.md
output/
wechat/
这两个名字只是示例。我的常用场景是结合 AI 和财经简报,但 Skill 也可以处理其他有来源的文章。组合日报必须使用同一天的两份材料;少了一份,就说明缺失,不拿旧日期材料补成“今日新闻”。
可以这样下任务,将路径换成实际位置:
读取 wechat-news-draft/SKILL.md。
来源:inputs/ai-briefing.md、inputs/market-briefing.md。
根据这两份材料写一篇公众号文章,日期 2026-09-15,署名“示例作者”。
输出到 output/wechat/2026-09-15。
围绕一个具体问题组织内容,保留来源,区分事实与个人判断。
生成文章、HTML、封面和编辑记录,检查后上传公众号草稿箱。
不要公开发布。缺少来源或配置时保留已完成内容并报告阻塞。
Agent 应产出:
article.md 正文及元数据
article.html 本地排版结果
cover.png 封面
editorial-notes.md 来源、选题、修改和缺失证据
封面可以用现有图片或另外生成,但要检查实际尺寸和可读性。正文插图是可选项,不必为了满足固定图片数量塞入无关配图。
第四步:先检查,再上传一次
在文章输出目录执行以下命令,让相对图片路径按文章目录解析:
md2wechat inspect article.md
md2wechat convert article.md -o article.html
Markdown 开头的元数据示例:
---
title: "今天的AI变化,开发者该关注什么"
author: "示例作者"
digest: "从两份材料中提取一个问题,并说明哪些事实已经确认。"
date: "2026-09-15"
status: draft
---
本文命令基线使用标题 32 字、作者 16 字、摘要 128 字的约束;以安装版本的 inspect 结果为准。检查正文是否又出现了重复大标题,来源链接是否保留,图片是否能加载。
打开 HTML,按手机宽度检查长段落、图片和留白。确认后执行:
md2wechat convert article.md --draft --cover cover.png
这一步会创建真实公众号草稿。 保存成功回执中的 media_id,随后去后台核对内容。
如果已经有审核过的 HTML,也存在另一条入口:
md2wechat test-draft article.html cover.png --json
不要被 test 误导:它同样会创建真实草稿,不是离线预演。使用这条路线时,尤其要核对后台生成的标题、作者和摘要,不能假设它与 Markdown 路线完全一致。两条上传路线选一条,避免重复草稿。
第五步:人工确认发布
进入公众号后台,找到对应草稿,检查标题、摘要、封面裁切、正文图片、外链和移动端预览。涉及事实、引用或个人判断的内容,再读一遍。检查完成后,由你执行最终发布。
media_id 证明取得了草稿对象,不是公开文章链接。只有后台实际发布成功,并取得可访问的文章结果,才应记录为“已发布”。
常见失败怎么处理
| 现象 | 先检查什么 | 保留什么 |
|---|---|---|
| 转换服务报错 | 转换服务配置和当前命令版本 | Markdown、封面、编辑记录 |
| 公众号接口失败 | 账号接口权限、凭据、白名单和错误码 | 本地 HTML 与失败阶段 |
| 命令超时,结果不明确 | 先看后台是否已有草稿,再决定重试 | 原始回执,避免重复上传 |
| 图片本地能看,后台异常 | 图片上传、路径替换、后台预览 | 原图及文章路径 |
| 日期材料不全 | 是否真的提供了该日来源 | 缺失清单,不编造内容 |
如果接入每日调度,先调度到“生成内容与草稿”这一阶段,并为同一天的任务保留输出目录和草稿回执。不要因为一次超时就无限重跑,也不要把每天生成新文章等同于每天适合发布。
本轮核对了 CLI 版本、命令帮助和文章元数据检查;没有为写教程而向真实公众号新增草稿或群发。读者自己的账号配置与后台排版仍需要首次验证。
小红书使用的是另一条基于浏览器的流程,见小红书自动发布教程。两套流程都保留了人工确认这一步。