公众号全流程发布:超一字节,微信直接拒

标题超字节、摘要超字节、加粗残留、图片裂图,发草稿前的坑,自检先挡一遍。

写公众号最烦的一步,往往不是写,是发之前那一段。

标题多一个标点,接口返回一串错误码;摘要超了几个字节,草稿建不起来;正文里的加粗没识别,收尾星号原样进了排版;图片引用写的是本地相对路径,发出去全裂了。这些坑单个看都很小,凑在一起,就是每次发文都要过一遍的关。

我把这半年攒下来的技能陆续上架到了 WorkBuddy,一共 11 个,这是第 4 篇:公众号全流程发布(v1.0.0,分类:内容创作)。它做的事很单纯——把你写好的稿子,稳稳地送进公众号草稿箱。

一、为什么要做

我给公众号排版用的渲染器是 wenyan。它把 markdown 渲染成微信能吃的内联样式 HTML,稳定、干净,排版这件事基本不用再操心。

但 wenyan 只管渲染。从一篇写好的 markdown,到草稿箱里一份带封面、带配图的草稿,中间还隔着一长串确定性动作:算标题字节、核摘要长度、确认封面文件在不在、把 SVG 配图转成 PNG、上传图片换微信链接、上传封面拿素材 ID、拼请求体建草稿。

这些动作每一条都有明确的判定标准,不该靠人每次手工过一遍。

手工时代的实况是这样的:编辑器里改标题,终端里跑一次渲染,浏览器里粘一次 HTML,发现图裂了再回来重传,来回切三个窗口。顺利的时候十几分钟,不顺利的时候半小时都耗在找那一个多余的标点。更麻烦的是,它不可重复——今天记住的坑,下周发文时多半又忘了。

所以我把它们固化成了一条链路:写稿 → 自检 → 封面 → 配图 → 排版 → 发布 → 核实。七个步骤,每一步都有明确产物,能提前失败的,都在进微信之前先失败。

一句实话放在前面:它不替你写稿。选题、观点、事实核实仍然是人做的事;这个技能负责的,是写完之后到进草稿箱这一段。

二、一条链路

先看全景。

图

七个步骤各自的产物我列一遍,方便你判断它到底交出了什么。

  1. 写稿:frontmatter 四个字段加正文,产物是一篇 markdown。规范在这一步生效:全角标点、章节标题四到五字、句读不放加粗内。

  2. 自检preflight.py 逐项核对字节与图片,产物是一屏结论。

  3. 封面gen_cover.pycover.png,900×383,左文右图,图上不加任何署名。

  4. 配图gen_diagrams.py 把 SVG 源转成 PNG,白底中文标签,产物落在 assets 目录里。

  5. 排版:wenyan 按指定主题渲染成内联样式 HTML,四套主题可选。

  6. 发布:正文图逐张经 media/uploadimg 换成微信链接,封面经 material/add_material 上传成永久素材,最后 draft/add 建草稿,拿到 media_id。

  7. 核实:加 --verifydraft/get 回读草稿,核对图数、中文字数和标题摘要字节。

第六步是整条链路的重点。直接拿 wenyan 的输出喂微信接口,图片一定裂——它输出的是 assets 目录下的本地相对路径,微信服务器读不到。技能的做法是先把每张图上传换链接,再把重写过的 HTML 递进去。

三、先过自检

preflight.py 是这条链路里的守门人,管的全是「错了就没救」的硬约束,逐项检查。

图

  • title 不超过 64 字节:中文按 3 字节算,实际约 21 个中文字封顶,超了微信直接拒。

  • description 不超过 120 字节:这段会渲染成文首的导语引用块,大约 40 字上限。

  • author 不超过 8 字节:两个汉字正好 6 字节,别加后缀。

  • cover 必须真实存在:frontmatter 里写了路径不算数,文件在磁盘上找得到才算。

  • 正文图至少 2 张,且类型合法:只认 PNG、JPG、WebP、GIF,SVG 会被微信拒收

  • 引用路径要和文件一一对上:正文里的每张图,引用路径都得命中 assets 目录下的真实文件,写错一个字母就不过。

自检之外还有两类坑,处理方式不一样。

一类是加粗残留。渲染后如果加粗没被识别,收尾的星号会原样进正文,肉眼在编辑器里几乎看不出来。成因通常是同一个:句读被包进了加粗里。写作规范把这条写死了——句读放在加粗之外,宁可多敲两个星号,也不让星号进正文。

另一类是封面没走素材上传。草稿的封面字段要的是永久素材 ID,不是文件路径;手动拼 ID,基本等于自找 40007。

配图转换还有个很常见的报错:输出目录不存在,转换库直接甩一个写入失败。这类问题的修法笨且有效——先建目录,再跑转换。发布前的清单里,绝大多数报错都对应着一个具体的、可复现的动作缺失,而不是玄学。

自检过了,先跑一次 dry-run 看渲染结果:

python scripts/preflight.py article.md python scripts/publish_wenyan.py article.md --theme blue --dry-run

dry-run 只渲染不发布,会输出一个本地 HTML 文件路径。你不接微信也能用:把它手动粘进公众号后台,同样是一篇排好版的稿子。

四、四个主题

排版这部分,技能内置了四套自定义主题,本质是四份 wenyan 的 CSS 主题文件。

图

  • redwhite:红白,主色 #DC2626,默认的一套。

  • green:摸鱼绿,主色 #059669。

  • blue:科技蓝,主色 #2563EB,这一篇用的就是它。

  • gray:石墨灰,主色 #52525B,最克制的一套。

四套主题之间的差别只有四个色值:强调色管标题、链接和行内代码;淡色标记管加粗下划线、引用左竖条和分割线;极浅底色管引用块和表头;代码浅底管行内代码的背景。正文观感是四套共用的:15px、行高 1.8、深灰,标题居中加粗,重点词用一条淡色下划线标出来——就是你在本文里看到的样子。

选哪套?我的标准很简单:封面是什么调子,正文就用什么主题。这个系列的封面主色是蓝,所以正文固定用 blue;纯文字长文用 gray 最耐看;短评和随笔适合 green;redwhite 最像传统公众号,稳妥但不出彩。

主题不生效,八成是没重新注册。wenyan 的主题是注册制的,改了 CSS 必须重新 add 覆盖一遍,再用 -t 指定名字渲染,否则用的还是旧版。

还有一条容易被忽略的细节:字号只挂在段落上,不要给加粗单独设字号。微信会按自己的规则「纠正」字号混用,结果是排版漂移。技能里把字号统一放段落,加粗只负责一条下划线,两边互不干扰,这也是它在微信端比较稳的原因。

想加自己的配色也不难,复制任意一套主题,换掉那四个色值即可:

wenyan theme --add --name mytheme --path themes/mytheme.css

五、怎么调用

在 WorkBuddy 的技能市场(左侧菜单【专家 · 技能 · 连接器】→【技能】)找到它,点技能右上角的加号安装,之后在对话里直接用自然语言调用:

  • 「帮我把这篇 markdown 发到公众号草稿箱,用蓝主题」

  • 「给这篇文章出一张 900×383 的封面,不要署名」

  • 「检查一下这篇稿子的标题和摘要有没有超字节」

技能的描述里写清了用途和触发场景(公众号发文、写公众号、排版发布、发草稿),AI 会据此判断要不要触发它,不需要你记命令。

如果你想在本地自己跑完整链路,命令是这样:

pip install Pillow cairosvg npm i -g @wenyan-md/cli export WECHAT_APP_ID=wx你的AppID export WECHAT_APP_SECRET=你的AppSecret python scripts/preflight.py article.md python scripts/gen_cover.py --out cover.png \ --eyebrow "栏目 · 日期" --title "主标题" \ --subtitle "副标题" --pills "卖点1,卖点2,卖点3" python scripts/gen_diagrams.py assets/fig1.svg assets/fig2.svg python scripts/publish_wenyan.py article.md --theme blue --dry-run python scripts/publish_wenyan.py article.md --theme blue --verify

把最后一条的 --dry-run 去掉就是正式发布,--verify 会在建完草稿之后调 draft/get 回读核实:图数、中文字数、标题摘要字节,对不上会直接显示出来。

六、边界与注意

这一节认真写,因为这个技能的边界比一般工具更硬。

凭证必须你自备。技能不内置、也不落盘任何 AppID 和 AppSecret,全靠环境变量传入。没有凭证时,它只会执行到自检、封面、配图、渲染为止,然后如实告诉你发不了,不会假装成功。

IP 白名单是硬门槛。微信要求调用方 IP 在公众号后台「设置与开发 → 安全中心」的白名单里,不在就返回 40164。在沙箱或容器环境里跑尤其容易撞上,这时要做的是把当前出口 IP 加进白名单,反复重试没有意义。同类错误码还有 40001(凭证无效)、40007(media_id 非法)、45009(接口频率超限)。

只管草稿箱。建草稿、查草稿、删草稿是它的范围;群发、评论管理、素材库整理都不在里面。也就是说,发布链路的最后一脚——点群发——还是你自己按。

接口有频率限制。草稿接口本身有日配额,短时间反复重发会撞上频率超限;需要批量发多篇时,错开一点时间比反复重试划算。

需要已认证的公众号账号。个人订阅号就能调草稿接口,测试号没有草稿箱能力。

排版有上限。渲染基于 wenyan,对 style 标签支持有限,复杂的交互组件做不了——公众号本身也不支持。它擅长的是把一篇结构清楚的文字稿排得干净、稳定、可预期。

环境依赖两套。wenyan CLI 走 npm 安装,图片处理依赖 Pillow 加 cairosvg;容器里没有中文字体会渲染成方框,得先装 CJK 字体包。

最后一句实话:它不替你写稿,也不替你判断观点。写前核实关键事实、语气和立场,这些仍然是人做的事。它省下的是算字节、传图片、拼请求这些重复劳动,以及每次发文前那种「会不会又裂图」的心慌。


我是文茂,热衷于分享 AI 工具与开发者生态观察。觉得有用欢迎点赞、在看、转发三连。


公众号全流程发布:超一字节,微信直接拒
https://maoyu92.github.io/2026/09/16/07 AI笔记/AI写作与发布/a006_公众号全流程发布:超一字节,微信直接拒/
作者
陈文茂
发布于
2026年9月16日
许可协议