☰
用WorkBuddy搭建公众号全自动发布流水线:从Markdown到定时推送的完整实践
2026/10/27 18:00:41 网站建设 项目流程

1. 为什么我想搭一条公众号自动发布流水线

做公众号的人大概都经历过这种状态:文章在本地写到半夜,排版排到眼冒金星,然后还要手动登录后台、复制粘贴、传图、设封面、定时群发。如果一周更新三篇,这套流程每周要重复三次。哪怕你对后台已经熟到闭眼操作,每篇稿子从打开编辑器到最终群发,半小时打底。

我第一次动手用 WorkBuddy 搭全自动发布流水线,其实不是冲着“自动化”这三个字去的,而是被一个更朴素的问题折磨得受不了:我有一堆文章散落在语雀、Notion、公众号后台的草稿箱,还有本地 Markdown,每次要同步到公众号都像在做手工搬运。手动搬运这个问题,本质上不是“发文章”这个动作累,而是“搬运”这个动作又碎又不产生价值。

后面接触到 WorkBuddy,我花了一个周末做了一版发布流水线。说实话,第一版写得很糙,但跑通之后那个爽感,和第一次写完脚本自动关电脑差不多:从那一刻起,我只需要把 Markdown 文件丢进指定目录,剩下的事情——抓取、清洗、排版、上传、定时、发布、回写状态——它全包了。

所以这篇东西不讲虚的,完完整整把我搭建的过程、每一步的参数选择、中间踩过的坑全部摊开。如果你也在运营公众号,或者你手上还有其他内容平台账号,这套思路完全可以照着搬,改成你自己的发布流水线。

2. 流水线的整体设计思路

2.1 发布的本质是“数据的流转”

要搭流水线,先忘掉“发文章”这三个字。把整个过程拆开看,其实就是一条数据流水线:源文件(Markdown)→ 内容清洗 → 格式转换(公众号富文本) → 上传素材(封面、正文图片) → 创建草稿 → 定时发布 → 状态回写。

这一步拆解很重要。很多人一上来就想着“用工具一键发布”,然后被各种接口文档砸晕。实际上你只需要把每个环节当作一个独立的小任务,再让 WorkBuddy 作为编排中枢把它们串起来,整个系统就变得很清晰。哪一环出了问题,你也能很快定位,而不是整条链路上瞎猜。

WorkBuddy 在这套系统里扮演两个角色:一是工作流的调度中心,负责按顺序触发任务;二是一个带记忆的“执行大脑”,它知道你的排版偏好、你的标签规则、你的定时策略,这些都不需要每次重复配置。

2.2 为什么选 WorkBuddy 而不是自研脚本

我最早的想法是自己写 Python 脚本调公众号接口。虽然“微信公众号开发”文档里提供了完整的接口列表,页面、素材、草稿箱、发布能力都有,但自己写脚本有一个很吃亏的地方——公众号接口的鉴权逻辑、素材上传限制、图文排版结构,这些属于“你不踩一遍坑永远不知道”的隐性知识。我自己写的时候光 token 刷新和封面图类型转换就折腾了两个晚上。

WorkBuddy 的优势在于它把这类“隐性知识”沉淀成了预先定义好的能力。它不是简单的低代码平台,更像是一个带上下文的工作台:你可以为它编写技能(skill),每个技能封装一组动作,然后在一次任务里串联多个技能。官方提供常见的接口封装,你只需要填参数、配置触发条件。当然,如果需要更细的定制,它也支持自定义技能,这后面我会详细讲。

另外一点,WorkBuddy 提供插件扩展机制和记忆功能。插件解决“接什么系统”,记忆解决“按什么风格和规则来”。这两个能力叠加起来,流水线就不再是冷冰冰的脚本,而是更接近一个懂你习惯的虚拟运营助理。

2.3 设计目标:最少人工干预,最多可观测

给流水线定目标的时候,我给自己立了三条规矩:

  • 人工只做内容生产。我只负责把 Markdown 写好、丢进指定文件夹。其他环节全自动。
  • 每个任务都要有日志。自动化最怕的是“静默失败”,所以从文章抓取到发布完成,每一步都要有记录,至少能回溯。
  • 发布前留一道可控闸门。全自动不等于不审核,我会在定时触发前留一个检查节点,必要时可以一键取消当次发布。

以这三点为目标,系统搭建完之后的运行逻辑是这样的:每天固定时间,WorkBuddy 检查我的本地文章目录;如果有新文件,按命名规则识别类型(原创、转载、合集),读取 YAML 头信息;随后调用清洗技能处理格式,调用排版技能生成公众号兼容的 HTML;再调用素材上传技能把图片和封面传上去;最后调用发布技能创建草稿,并依据我预设的发布时间表做定时发送;发布完成后,把结果状态回写到一个记录文件里。

3. WorkBuddy 环境准备与基础配置

3.1 安装与初始化的关键选择

WorkBuddy 支持 Windows、Linux 和 macOS。我自己的主力环境是 Windows,后面为了跑定时任务还加了一台 Ubuntu 机器。两个环境都装过,总体体验差别不大。

安装过程本身不复杂,去官网按引导下载就行。不过有几个点值得留意:

  • 安装目录尽量用纯英文路径。这不是玄学,WorkBuddy 内部处理缓存和插件路径时,中文路径偶尔会出编码问题,尤其是 Windows 环境下。
  • 数据目录(缓存目录)提前改到空间大的盘。我自己吃过亏。WorkBuddy 默认把缓存、日志、模型数据都存在 C 盘,公众号文章抓多了以后,C 盘直接飙红。后来我在设置里把缓存目录迁移到了 D:\WorkBuddyData,运行半年基本稳定。不同版本改缓存目录的入口不一样,新版本一般直接在系统设置里可视化修改,老版本可能需要手动改配置文件,建议装完先看一眼设置面板。
  • 账号登录后立刻检查“记忆”功能。WorkBuddy 的跨会话记忆默认是开启的,它会记录你的操作偏好。如果你有多套工作台或者准备换账号用,老账号的记忆不会自动迁移到新账号,官方也没提供直接导出通道,但可以通过导出技能配置和任务模板来保留大部分核心规则。这一点很多人不知道,等你积累了大量技能和记忆以后才意识到要迁移,那时已经晚了。

3.2 把基础技能装配到位

WorkBuddy 本身是一个工作台框架,真正干活的是技能(Skill)。技能可以简单理解成“定义一个任务怎么完成”的步骤模板,里面可以包含提示词、判定逻辑、工具调用清单等。

我跑公众号流水线,核心装配了这几类技能:

技能类别用途关键配置
文章抓取与解析抓取公众号文章页内容,提取标题、正文、封面、作者信息解析规则要按公众号页面结构配置
内容清洗删除无用标签、广告、样式残留,统一段落和标题层级需要配置域名白名单、标签黑名单
Markdown 转公众号 HTML把本地 md 转为公众号编辑器可识别的排版结构代码块、引用、表格要特殊处理
素材上传上传封面和正文图片到公众号素材库注意图片大小限制和格式限制
草稿创建与发布调用公众号接口创建草稿、设置定时发布区分“发布”和“群发”的权限与频次限制
状态回写发布后将结果写入你的记录文档或表格配合记忆功能,自动记录历史文章状态

安装技能的方式有两种:一种是从官方技能市场直接装,另一种是自己编写。官方市场里“内容运营”类目下有一些现成技能,可以先装基础版本再用。但我个人建议,核心发布链路相关的技能最好自己动手写一遍,因为你自己的排版偏好、内容处理规则、标签体系都是个性化的,通用技能只能做到“能用”,谈不上“好用”。

3.3 中文环境下的接口与网络注意事项

公众号接口调用没有特殊网络要求,唯一需要注意的是中国大陆服务器与本地环境调用时的域名校验。如果你把流水线跑在自己的电脑上,要保证网络稳定;如果放在云服务器上,记得把公众号后台的 IP 白名单加上相应服务器 IP。

另外,微信公众号接口的 access_token 有效期是 2 小时,且每天有获取次数限制。WorkBuddy 的技能封装里一般会做 token 缓存,不会每次请求都重新获取。但如果你自己修改了技能、直接用脚本调接口,一定不要忽略 token 缓存,否则刷新太频繁会被接口限流。

4. 微信公众号端的准备工作

4.1 你需要一个什么类型的公众号

个人订阅号、企业订阅号、服务号,这三种类型能调用的接口权限差异很大。搭建自动化流水线之前,先确认你的公众号类型:

  • 个人订阅号:基础接口权限够用,支持素材上传、图文消息创建、草稿箱操作、发布接口。每天有群发次数限制,但“发布”接口和“群发”不太一样。
  • 企业订阅号:在个人订阅号基础上,可以获取更多用户管理、自定义菜单等接口。发布能力与订阅号一致。
  • 服务号:每月只能群发 4 次(新规则后改为每月 4 次),更适合做服务通知而不是内容更新。

我的场景是运营一个个人订阅号,一天最多发一次推送,流水线完全够用。如果你的是服务号,自动发布流水线意义不大,服务号的限制决定了它不适合高频内容发布。

4.2 获取接口凭证:AppID 与 AppSecret

登录公众号后台,在“设置与开发 - 基本配置”里能看到 AppID。AppSecret 需要自己生成,生成时会显示一次,之后不再完整显示,一定要保存好。这两个凭证是调用接口的身份凭证,WorkBuddy 的技能配置里会用到。

特别注意:AppSecret 不要硬编码在技能配置里。WorkBuddy 虽然支持配置文件存储变量,但只要有能力的同事都建议放在环境变量或者密钥管理方案里。因为技能配置有时会分享给团队或上传到自己的 GitHub 仓库做备份,一旦泄露,别人就能用你的公众号接口权限做操作。

4.3 IP 白名单与服务器配置

公众号后台的“基本配置”里有一个 IP 白名单设置。如果你用 WorkBuddy 跑在本地,就把家庭或办公网络的公网 IP 加进去。如果你用云服务器,把服务器的公网 IP 加进去。

这个很容易漏。我当时第一次调接口一直报错“invalid ip”,排查了半天才想起来后台还要配白名单。另外,IP 白名单不是配一次就完了,家庭宽带如果是动态公网 IP,隔段时间 IP 变了又要去更新,比较烦。这也是我把流水线最终放到一台固定 IP 的 Ubuntu 小服务器上的原因之一。

5. 搭建公众号文章采集能力

5.1 公众号文章列表页的获取方法

“微信公众号列表页怎么获得”——这一点我在刚开始的时候也被卡住了。公众号文章和普通网页不同,它的列表页不是简单的静态 URL,而是通过微信公众平台的接口动态加载的。

如果你只是想把自己公众号的历史文章同步到知识库,办法会简单很多。最实用的路径是:在公众号后台的“内容管理 - 草稿箱/已发表”列表页,通过浏览器开发者工具观察网络请求,找到加载文章列表的接口。WorkBuddy 的技能可以模拟这个请求,带上必要的 Cookie 或 Token,拿到文章数据。

这里要特别强调:

一定要遵平台规则。自动化采集仅应服务于你自己的账号内容管理,比如整理自己的历史文章、同步自己的草稿箱。不要对非授权内容做批量抓取。

我自己用的是“已发表”列表接口,拿到文章 id 列表,再配合文章详情接口拿到正文。整个流程完全限定在自己的公众号内容范围内,目的就是内容归档和二次发布。

5.2 文章正文图片不能下载的问题

热词里有个很典型的问题:“微信公众号里的图片有的为什么不能下载”。这背后实际是两个问题:

一是防盗链限制。公众号图片的 CDN 会检查 Referer,如果你不是从公众号页面发起的图片请求,会被拒绝。解决办法是在采集技能里设置 Referer 为公众号页面地址,或者下载时直接忽略 Referer 校验。WorkBuddy 技能里我一般用浏览器上下文的请求方式,天然带上正确的 Referer。

二是图片格式或大小限制。公众号后台的正文图片有格式要求,通常是 jpg、png、gif。如果原文是 WebP 格式,公众号编辑器很可能不识别。处理办法是在清洗环节增加格式转换:WebP 统一转成 jpg 或 png。我自己在这上面栽过一次:一篇文章里有两张动图是 WebP 格式,素材上传接口不报错,但发布后图裂了,最后排查发现是格式问题。

5.3 从公众号文章反解 Markdown 源文件

反向场景也有:你收到的文章是从别处复制来的富文本,想转回 Markdown 方便二次编辑。WorkBuddy 技能里可以用一个反向解析步骤:把 HTML 转成 Markdown,去掉多余样式,保留标题层级和超链接。

这一步我用了一个比较取巧的办法:先把 HTML 存成文件,用 WorkBuddy 调用一个内容解析技能,配置了转换规则(哪些标签需要丢弃、哪些标签要转成 Markdown 语法),输出的纯净版 Markdown 再进入发布流水线。整个转换质量看解析规则配的细不细,常见的问题是无序列表识别成普通文本,代码块丢失缩进。多调试几次,规则稳定后,基本可以做到一篇带复杂排版的文章转换后结构完整。

6. 核心环节:内容清洗与排版生成

6.1 清洗规则:把“杂乱的富文本”变成“干净的 Markdown”

文章从任何地方拿过来,都不会是干净的。公众号后台直接复制来的内容带大量行内样式,语雀导出的 Markdown 会带语雀自定义语法,Notion 导出的 HTML 更是一堆 div 嵌套。不清洗直接去发,排出来的版面就是灾难。

我给 WorkBuddy 配的清洗技能,核心是三步:

  1. 标签白名单。只保留 p、h1-h3、blockquote、pre、code、ul、ol、li、img、a 这些基础标签,其余全部剥掉。
  2. 样式清理。删除全部 style、class、id 属性,防止外部样式污染。微信公众号编辑器有自己的样式体系,外部样式进去基本是乱的。
  3. 链接外链化。把文章里引用的外部链接统一转成可跳转的超链接,避免正文中裸露一长串 URL,影响阅读体验。

这套规则最大的好处是稳定。本地编辑时用再多语法特性,经过清洗后统一收束成一个基础的 Markdown 子集,下游的排版技能处理起来就非常省心。

6.2 公众号排版:如何做到“不像用工具排的”

“workbuddy减少ai味”这个热词,放在公众号排版场景里,其实意思是不要让排出来的文章看起来像模板批量生产。全自动流水线最大的风险就是“机器味”。

我自己总结了几条实战规律:

  • 段落别太整齐。公众号排版最怕每段都两三行,从头到尾长度一致,一眼假。自动排版的段落拆分规则里,我加了一个“随机适度拆分”的逻辑:长段落按语义拆,短段落不强行并,让文章自然呼吸。
  • 小标题层级控制。公众号文章不推荐四级标题,最多到三级。清洗和排版环节我设置了最大三级标题,且三级标题自动加粗、调间距,避免正文层级太深导致阅读负担。
  • 重点强调不要泛滥。原创文章里我可能文内加粗几十处,但转发到公众号之前,自动排版技能会做一个文本密度分析,加粗文字比例超过全文 8%,就自动把一部分降级为普通文本。这是我个人的审美阈值,你也可以调。

另外,公众号图文消息里封面图的比例是 2.35:1,正文配图建议统一为 16:9 或 4:3。我的做法是:在素材上传之前先经过一次图片预处理技能,自动检测图片宽高比,不合规的按“填充背景色”或“居中裁剪”补成目标比例。这里不要用“拉伸”,拉伸出来的图会变形,一眼就能看出来。

6.3 代码块与表格的特殊处理

公众号编辑器对代码块的支持非常弱。Markdown 里正常的代码缩进,粘进公众号编辑器之后会丢缩进、丢高亮。我的处理方法是:代码内容一律用<pre>标签包起来,并且内部空格转成&nbsp;,换行转成<br>,这样发布后不会塌缩。虽然代码块的背景色和字体没那么美观,但至少内容完整、可读。

表格也是坑。公众号编辑器支持表格,但样式很丑。我的建议是复杂表格直接截图为图片,简单表格保留 HTML 表格结构。自动流水线里我加了一个判断:表格超过三行五列,自动渲染为图片并替换正文。

7. 实现自动发布:从草稿到定时推送

7.1 素材上传与图片校验

发布链路里,素材上传是最容易“不报错但实际失败”的环节。公众号素材接口对图片有严格限制:

  • 图片大小不能超过 10MB(不同接口限制不同);
  • 图片格式仅支持 jpg、png、gif;
  • 封面图建议尺寸 900x383 像素,比例 2.35:1。

WorkBuddy 技能里我在上传前设置了一个校验节点:循环检查正文里所有图片 URL,先下载到本地,再用脚本读取尺寸、格式、大小,全部合规才上传。你不做这层校验就会遇到一种情况:上传接口返回了 media_id,草稿也建成功了,等发布之后图片裂了,而且往往要过很久才被发现。

7.2 草稿创建、定时发布与状态回写

微信公众号的发布链路是:先创建一个图文消息草稿(draft),然后对草稿执行发布操作。WorkBuddy 的技能编排就是按这个链路走的。

创建草稿时,我把前面生成的 HTML 内容、封面 media_id、标题、作者、摘要统一组装成图文消息结构。这里有一个细节:摘要字段如果不填,公众号会自动抓取正文开头作为摘要,经常截得莫名其妙,所以我一般在 YAML 头信息里就写好摘要。

定时发布这块,公众号接口本身支持指定发布时间(通常是四小时内可选的发布时间)。WorkBuddy 技能里我配置的是“检查文章头部的 scheduled_time 字段,若存在则调用定时发布,否则走立即发布”。这样我可以在文章里指定时间,实现前文说的“留一道闸门”:定时发布之前的草稿阶段,我可以登录后台看到草稿预览,如果排版或内容有问题,直接删草稿就行,不影响后续。

状态回写我落在一个本地 SQLite 文件里,记录每篇文章的标题、发布时间、草稿 id、发布结果、失败原因。这个习惯救了我好几次:有次第三方工具误判发布成功,我一看回写日志立刻发现是草稿创建成功但发布接口返回失败,及时做了补救。

7.3 定时任务的触发方式

WorkBuddy 支持定时计划,我把它当“总闸”:每天早上 9 点检查文章目录,有新文件就启动流水线。这个“目录检查”比“每天固定发布”更灵活——因为内容更新频率不是固定的,有文章就处理,没文章就空转。

目录结构我建议这样设计:

articles/ ├── draft/ # 待处理的草稿文章 ├── processed/ # 已清洗排版的中间产物 ├── published/ # 已发布文章(含回写信息) └── failed/ # 失败的文章,等待人工处理

这套目录划分让整个流水线的状态一目了然。哪篇文章卡在哪个环节,看目录就能知道,不需要打开日志翻。

8. 踩坑记录与排查手册

8.1 高频问题速查表

以下问题是我在实际搭建和使用中真实遇到过的,按出现频率排序:

问题现象根因解决办法
接口报错 invalid ip后台 IP 白名单未配置或 IP 变动登录公众号后台确认白名单,更新为当前出口 IP
图片发布后裂图图片为 WebP 格式,或 Referer 校验失败上传前统一转换格式,下载时补充 Referer 头
排版后代码块缩进全丢公众号编辑器识别不了 Markdown 缩进代码块转 pre + + br
定时发布没触发定时时间超出接口允许范围接口要求发布时间为当前时间 4 小时之后,提前设置
access_token 频繁失效多任务并发时各自刷新 token全局 token 缓存,刷新加锁
抓取文章列表为空列表页请求缺少 Cookie 或 Token从浏览器开发者工具中提取最新认证信息
摘要乱截未显式设置摘要在文章 YAML 头信息里明确写摘要

8.2 本地缓存目录膨胀的处理

跑流水线半年后,我遇到了缓存目录越来越大的问题。排查发现 WorkBuddy 在处理素材时会保留原始下载图片和中间转换文件的副本,日积月累占了几十个 GB。

处理方案:在技能里给每一个处理环节加“产物清理”步骤,加工完成后的临时文件只保留最近 7 天,原图可以保留,中间格式(比如临时转换的 PNG)直接删掉。另外,配置 WorkBuddy 的数据目录时,把它放到单独一个大分区,和系统盘分离,这样即便膨胀也不会影响系统运行。

8.3 自动化“太顺”带来的问题

有一条坑比较隐蔽,很难用报错信息发现。全自动流水线跑顺了以后,你会不知不觉降低对内容质量的敏感度。因为发布链路太顺,有时候文章里的逻辑错误、事实错误,会像流水线上的一件瑕疵品一样,毫无波澜地被机器送上发布队列。

我的补救方法是:在草稿创建之后加一个延迟发送节点,默认延迟 30 分钟。这 30 分钟里,WorkBuddy 会做一次“模拟读者扫描”,自动检查文章中是否有:连续相同的段落开头、未替换的 TODO 标记、图片缺失提示、明显的重复词。虽然这不能替代人工审校,但它作为最后一道机械防线,确实挡掉过几次低级错误。

8.4 记忆与技能管理

WorkBuddy 的记忆功能很方便,但也需要维护。运营一段时间后,记忆里会积累很多过时的排版偏好或废弃规则,反而干扰新任务。我每月会清理一次记忆库:删除无效偏好,保留核心规则。技能配置建议用 Git 管理,每次修改提交一次,出问题能回滚。这也是我把技能配置上传到私有仓库管理的原因,和代码维护一个思路。

9. 这套流水线还能扩展成什么

流水线搭建完成之后,能扩展的方向很多。我目前已经加上了两个小能力:一个是历史文章归档到知识库,定期把已发布文章同步到自己的语雀/Notion,方便二次创作;另一个是定时生成内容周报,基于发布记录统计阅读数据来源、发布时间与阅读量之间的关系。

如果你运营多个平台,这套逻辑完全迁移:换掉发布技能,把内容清洗成对应平台要求的格式即可。我见过有人把同样的流水线接到了多个内容平台,一次编写,多处分发。核心思路始终是那句话:发布不是单一动作,而是一条数据流水线。把每个环节拆清,自动化就成功了一半。

拿我自己来说,这套流水线稳定运行之后,我基本没有再手动登录过公众号后台。偶尔需要调排版细节,也只是去改技能规则,而不是去复制粘贴每一篇文章。这种“改一次规则,长期生效”的模式,比任何一键发布工具都更贴合实际运营场景。如果你也准备搭一套,我建议从今天开始,先把“文章目录 + 清洗规则 + 素材上传”这三段跑通,剩下的再逐步加。流水线这东西,最怕一步到位,最亲的是小步快跑。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询