
最近我把公众号更新这条流水线整个交给了 WorkBuddy从选题抓取、内容改写、图片转存、草稿创建到定时发布全程自动处理真正需要我动手的只剩最后看一眼发布卡片。这套用 WorkBuddy 搭建的“微信公众号全自动发布流水线”跑了一个多月稳定发布了几十篇文章省出来的时间非常可观。这篇文章会从需求拆解讲起把工作流结构、微信接口配置、关键参数和踩过的坑全部捋一遍适合正准备给公众号搭建自动化发布方案的运营、后端开发或独立创作者参考。1. 先想清楚全自动发布流水线到底要解决什么问题1.1 我为什么要做这条流水线先说背景。我自己同时维护好几个内容号最早每天最耗时间的不是写文章而是发文章的流程找封面图、复制正文、清格式、填摘要、定时、手机预览、改格式、再预览。一篇稿子本身可能写了两个小时发布环节还能再吃掉四十分钟。这种重复劳动完全没有创造性但又不能不做。后来接触到 WorkBuddy它是一个图形化 AI 工作流平台可以把各类任务拆成节点再按顺序编排起来执行。比较打动我的点在于它内置了 AI 处理节点、HTTP 请求节点、定时触发节点、人工审核节点并且有可视化日志。也就是说写代码脚本能做的事它基本都能做而且每一步执行情况都看得见出了问题可以单独重跑某个节点不用整个流程推倒再来。我搭建这条流水线的目标非常明确把“内容准备”和“内容发布”这两个环节尽量自动化同时保留人工控制权。毕竟公众号是自己的门面不能真的全无人值守。所以最后做出来的方案是“全自动准备半自动发布”——工作流自动抓取素材、自动改写排版、自动建草稿推送到手机审核我确认之后才真正发布。1.2 方案选型为什么选 WorkBuddy 而不是自己写脚本在定方案之前我其实对比了几条技术路线。最传统的方式是用 Python 写脚本配合 cron 或 APScheduler 定时跑直接调微信公众平台接口。这条路的问题是每次改逻辑都要改代码而且失败重试、日志排查、人工审核环节都要自己实现对非全职开发的人不太友好。GitHub Actions 也能做定时任务但公众号接口需要访问公网测试起来不如本地方便而且 Actions 的日志界面对于非程序员来说还是偏硬。Coze、Dify 这类平台也能搭建 Agent 工作流但它们对“审批节点”和“复杂 HTTP 请求”的支持不一定那么顺手尤其是要处理微信接口的 token 刷新、草稿创建、发布状态回查这些都相对麻烦。WorkBuddy 胜在三个地方第一节点编排是拖拽式的看得见摸得着团队成员也能看懂第二内置的 Skill 机制可以把“上传图片到微信”“创建草稿”“生成摘要”这些常用能力封装成独立模块多个工作流复用第三它会保留每次运行的任务日志节点执行顺序和参数传递都清清楚楚。这几条正好戳中我维护多个账号、需要频繁调整流程的痛点。1.3 整体工作流设计采集、改写、审核、发布四段式我最终把流水线拆成了四个阶段每个阶段对应一组节点节点之间通过变量传递数据。这样做最大的好处是“故障隔离”抓取失败不会影响后面的改写状态改写不满意可以单独重跑发布出问题也能定位到具体接口调用。四个阶段分别是内容采集、内容改写、人工审核、自动发布。内容采集负责从指定源抓取文章素材保存标题、正文 HTML、封面图和摘要内容改写阶段调用 AI 节点把素材改写成符合自己账号语气的文章顺便做降 AI 味处理人工审核阶段把预览推送到钉钉或者飞书由管理员确认自动发布阶段则是调用微信公众号接口完成图片转存、草稿创建和发布动作。实际执行顺序大概是定时触发节点到时间后启动 → HTTP 抓取节点读取外部内容源 → 清洗节点把 HTML 转成纯文本和结构化字段 → AI 改写节点生成正文 → 人工审核节点推送预览卡片 → 审核通过后调用微信接口依次上传封面、上传正文图片、创建草稿、提交发布。这套结构从搭建到现在基本没做过大改只是不断在节点里补充细节参数。2. 微信公众号开发准备拿到发布接口的“钥匙”2.1 账号权限与前置条件想通过接口自动发布公众号文章第一步不是写工作流而是确保账号有接口权限。微信公众平台的接口能力跟账号类型和认证状态强相关个人订阅号能调用的接口非常有限至少要完成微信认证的订阅号或服务号才能正常使用素材库、草稿箱和发布接口。登录公众平台后台之后在“设置与开发 - 基本配置”里可以找到 AppID 和 AppSecret。AppID 相当于账号的公开标识AppSecret 是调用接口时的密钥这两个值后续都要填进 WorkBuddy 的配置变量里。另外还要在“IP 白名单”中把发起请求的服务器公网 IP 加进去否则微信会直接拒绝获取 access_token 的请求。这一点新手特别容易漏明明 AppID 和 AppSecret 都填对了却一直报 40164 或 invalid ip。还有一点需要注意AppSecret 只显示一次重置之后旧的立即失效。我在早期调试时手滑重置过一次导致工作流全线报错排查半天才发现是密钥对不上。建议把 AppID、AppSecret、白名单 IP 这三项单独记录在一个安全的位置不要直接明文写在工作流的日志里。2.2 access_token 的获取与缓存策略微信公众号接口绝大多数请求都要带 access_token微信返回的 access_token 有效期是 7200 秒也就是两个小时。获取方式很简单调用GET https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credentialappidAPPIDsecretSECRET就能拿到。但这个 token 有一个非常关键的特性微信侧维护的是全局唯一 token每次调用获取接口都会生成新 token旧 token 会立刻失效。如果在 WorkBuddy 里同时跑好几个节点都各自去获取 token就会出现“后来者把前面的 token 挤掉”的情况然后前面的请求全部报 42001 token expired。所以在工作流里必须设计一个“缓存 token”的机制把 token 存成全局变量同时记录获取时间每次要调用接口前先判断是否快过期。我自己常用的做法是单独的 token 刷新节点负责判断如果当前全局变量里的 token 已经超过 6900 秒也就是提前 5 分钟才重新请求否则直接复用旧值。这样既避免频繁刷新又能保证请求时 token 大概率有效。换算下来两个小时的有效期实际可用时间控制在一个小时五十五分钟左右留出足够的时间余量。2.3 草稿箱、发布接口与图片上传公众号自动发布的核心接口有三个图片上传、新建草稿、提交发布。先说图片上传公众号正文章节里的图片不能直接引用外部 URL否则在手机端很容易被拦截或者显示异常。正确做法是先调用素材接口把图片上传到微信服务器拿到微信自己的 URL再把这些 URL 嵌入正文 HTML 里。封面图则要使用永久素材接口上传拿到thumb_media_id后续创建草稿时要用这个 ID。新建草稿接口是cgi-bin/draft/add关键字段包括title标题、author作者、digest摘要、content正文 HTML、thumb_media_id封面图素材 ID、need_open_comment是否开启评论等。创建成功后会返回media_id这是草稿的唯一标识。最后一步是发布调用cgi-bin/freepublish/submit传入刚才创建的草稿media_id。这里要特别弄清楚“发布”和“群发”的区别群发推送会触达所有关注者有次数限制而发布接口只是把文章发布到公众号的发表记录里不会强制推送频率限制也宽松得多。我这条流水线主要用的是发布接口适合每天更新多篇、但不希望频繁打扰读者的运营场景。如果你打算自动做群发推送那还需要额外确认自己账号类型的群发次数配额并做好定时控制。3. WorkBuddy 工作流搭建从触发到发布的完整链路3.1 触发节点定时与手动双通道WorkBuddy 里的工作流可以配置多种触发方式我用得最多的是两个定时触发和手动触发。手动触发主要用于调试建工作流时先手动跑一遍确认每个节点都正常定时触发则负责每天自动启动整个流水线。定时配置支持 cron 表达式我设置的每天上午 10 点 30 分启动。cron 表达式本身不复杂但第一个坑很快就来了WorkBuddy 的定时任务时区默认不一定是中国标准时间。我最初按北京时间写好了0 30 10 * * ?结果第一天实际触发时间是凌晨 2 点 30 分整整早了 8 小时。后来在配置里显式指定了Asia/Shanghai时区并让触发节点在启动时不走旧缓存逻辑重新抓取这才稳定下来。建议所有用到 cron 的朋友第一件事先确认时区并且跑完后检查一下日志里的触发时间。3.2 内容采集节点抓素材与图片防盗链采集节点负责把文章素材抓进工作流。我的素材来源主要是自己的选题池和部分已授权的信息源通过 HTTP 请求拉取列表页或 API 返回的 JSON 数据。这里可以顺带回答一个问题微信公众号列表页怎么获得对于自己有权限的账号可以调用公众号后台的数据接口对于外部页面通常需要用浏览器自动化工具打开页面解析列表结构的节点再逐条抓取标题和链接。WorkBuddy 里可以通过 HTTP 节点加上网页解析节点来完成也可以把浏览器操作封装成一个 Skill 复用。抓正文的时候还要处理图片问题这也就是热搜词里常问的“微信公众号里的图片有的为什么不能下载”。核心原因一般是防盗链直接爬图片 URL 时微信服务器会检查 Referer 或 User-Agent如果来源不对就返回 403。解决办法有两个方向一是下载图片时带上必要的请求头二是直接把图片 URL 交给后续的微信上传节点通过素材接口转存到微信侧。我自己用的是第二种省掉本地存储环节也避免了外链失效问题。顺便说一句合规问题采集内容一定要确保自己有权处理这些素材尤其是转载类内容别碰未经授权的全文抓取和洗稿。自动化的前提是内容来源合法否则流水线越稳定风险越大。3.3 AI 改写节点内容润色与“去 AI 味”素材抓回来之后原始文本通常比较粗糙需要 AI 节点进行改写。WorkBuddy 的 AI 节点可以直接调用大模型也可以挂载自己配置的模型服务。我把改写提示词写得比较细要求模型“以公众号编辑身份重写保留原文事实和结构但换用口语化、有个人判断的表达方式”同时明确要求禁止出现“首先、其次、最后”“综上所述”“值得注意的是”这类固定句式。说到“减少 AI 味”这其实是可以从流程上硬性控制的。我会在提示词里加入一两段我自己写的旧文章作为示例让模型模仿语气而不是模仿模板同时要求模型在改完后再删掉任何可以替换成具体案例的抽象表述。实际效果上看加了 few-shot 示例之后文章读起来比直接让模型自由发挥要自然很多。如果你也经常被读者吐槽“一眼 AI”建议把这一条写进提示词里。AI 节点还有一个容易被忽略的用法生成摘要。微信公众号草稿的 digest 字段可以不填但填了之后搜索和分享卡片的效果都更好。我单独建了一个 Skill用来从正文里提炼 60 字以内的摘要并在人工审核卡片上一并展示。这样审核人不用点开全文也能判断内容是否符合预期。3.4 人工审核节点保留最后的控制权自动化做得再顺我也坚持保留一个人工审核节点。这个节点做的事很简单把 AI 改写后的标题、摘要、正文预览推送到飞书或钉钉机器人然后挂起等待审批结果。审批通过就继续走发布节点审批拒绝就整个流程终止并用日志记录拒绝原因。这个设计帮我避免了好几次事故。比如有一次抓取源返回了一篇标题与正文完全不匹配的稿件如果直接发布用户点进来发现文不对题影响很糟糕。有了人工审核卡片我只在手机上瞄一眼就能发现问题直接把流程停掉。对团队协作场景来说这个节点还能做“多人审批”不同角色确认后才会发布权限控制也更安全。3.5 发布节点串行调用微信接口发布节点是整个流水线的最后一公里也是出错概率最高的一环。我把它拆成四个小步骤严格按照顺序串行执行刷新 token → 上传封面图 → 上传正文图片并替换 HTML 里的原图 URL → 创建草稿 → 提交发布。不能在同一个节点里并行执行因为微信接口的 token 全局唯一并行请求容易互相挤掉会话。每一步都要校验返回码。微信返回的 JSON 里errcode为 0 才算成功其他数值都要走异常分支。WorkBuddy 的 HTTP 节点支持在返回结果里提取字段我会把errcode和errmsg写入日志变量方便事后排查。发布成功后再把微信返回的文章链接回写到变量里在通知群里发送“已发布 链接”这样整个闭环就完整了。4. 实操过程与关键参数详解附配置表4.1 从零配置一条可用的发布流水线下面是我从零开始配置这条流水线的简化过程可以直接照着走。第一步在 WorkBuddy 里新建一个“公众号自动发布”工作台命名尽量带上账号标识因为多账号场景下工作台多了容易混。第二步添加定时触发节点配置 cron 表达式和时区。第三步添加 HTTP 请求节点拉取素材源并把返回的 JSON 结果解析成变量。第四步添加 AI 改写节点把抓到的正文内容传入提示词模板输出改写后文本。第五步添加人工审核节点配置飞书或钉钉机器人的 Webhook 地址。第六步添加微信接口调用节点组按发布顺序依次上传图片、创建草稿、提交发布。这里我整理了一份简化的配置表方便你对照调整。注意其中的参数值以我自己的账号环境为准不同的公众号类型和套餐可能有差异。节点类型关键配置说明定时触发trigger0 30 10 * * ?时区Asia/Shanghai每天早上 10:30 启动素材抓取HTTP 请求URL、请求头、JSONPath 解析获取文章标题、正文、图片列表内容清洗文本处理白名单标签过滤、去除 script/style避免微信公众号不支持的标签AI 改写AI 节点系统提示词 few-shot 示例改写成口语化风格并生成摘要人工审核审批节点飞书机器人 Webhook预览卡片确认或拒绝图片转存HTTP 请求media/uploadimg接口上传正文图片替换旧 URL封面上传HTTP 请求material/add_material接口获取thumb_media_id创建草稿HTTP 请求draft/add接口传入标题、摘要、正文、封面 ID提交发布HTTP 请求freepublish/submit接口传入草稿media_id通知HTTP 请求群机器人 Webhook发布成功后发送文章链接4.2 关键参数计算token 刷新、频率控制与定时配置表里的数值看着简单实际推导过程值得说一下。access_token 有效期 7200 秒我不会等到最后 10 秒才刷新万一网络抖动就赶不上了。保守做法是设置 6900 秒的阈值也就是至少提前 300 秒刷新。这样即使刷新接口耗时几秒也有充足余量。接口频率控制也需要算一笔账。微信的很多内容接口有每分钟调用次数限制比如素材上传接口在高峰期容易触发频率限制。假设一篇文章里有 5 张图片需要上传每次上传耗时 1 秒左右再加上创建草稿和发布各一次整条流程预计调用接口 8 次左右。如果素材池里有 3 篇文章排队总调用次数接近 25 次。这个量级一般不会触顶但一旦某个步骤重试次数过多就可能撞上频率限制。我的策略是设置“每步失败后等待 30 秒再重试最多重试 3 次”避免连续请求把频率打满。定时发布时间同样值得计算。很多人以为自动发布放在凌晨流量低的时候就行但实际上公众号内容的打开率和发布时间强相关我观察自己账号的后台数据午休前和晚间这两个时段打开率相对更高。所以我把每天 10 点 30 分作为默认时间正好在午休流量起来之前完成发布。如果你有周末复盘类的栏目也可以再单独建一条周六 9 点触发的分支工作流。4.3 调试顺序先手动、再定时、后观察调试顺序比你想的更影响效率。我第一次搭建时直接开定时触发结果每天早上醒来看到一堆失败日志排查成本非常高。后来改成三步走先用手动触发跑通全流程确保每个节点都能执行成功再关闭部分节点的重试机制用模拟数据验证异常分支最后才开启定时触发并让它先跑一周看看稳定性。WorkBuddy 的日志系统在这个阶段帮了大忙。每个节点执行完都会有输入输出预览我可以直接看到 HTTP 请求的返回内容判断是哪一步出了问题。建议在配置 HTTP 节点时把请求体的关键字段写入日志的 debug 级别方便回看。我一般会关注三个值返回的errcode、节点的执行耗时、以及每次运行时 token 是否发生了刷新。这三个值正常流水线基本就稳了。5. 踩坑记录我在这条流水线上踩过的 7 个坑5.1 坑一多个节点并发刷新导致 token 互相挤掉第一次跑通后我为了提高效率把步骤拆成了“并行执行”结果微信接口频繁报42001 access_token expired。排查之后才发现多个节点同时调用 token 接口每个节点拿到的都是新 token后请求的节点把先请求的挤掉了于是先请求的接口再发起调用时 token 已经失效。解决办法是把 token 刷新收敛到单个节点并把 token 和获取时间写入全局变量后续所有节点都从全局变量读取。同时加上“仅当剩余有效期小于 300 秒才刷新”的判断。这个坑几乎是所有微信接口自动化项目的必经之路提前设计好缓存策略能省很多事。5.2 坑二微信公众号图片防盗链导致正文图片全部裂开正文图片最开始直接沿用了抓取源里返回的 URL结果预览时图片全部不显示。公众号后台对图片来源做了一定限制外部 URL 在部分网络环境下会被拦截。这也就是很多人问“公众号里的图片为什么不能下载”的根源之一。后来我把所有图片 URL 先走一遍微信的media/uploadimg接口转存成微信自己的 URL再写回 HTML 正文。虽然多了一步请求但图片显示稳定性高了很多。这个步骤还顺带解决了“原图被删导致文章裂图”的问题因为图片已经存到了微信素材体系里。5.3 坑三HTML 标签与公众号编辑器不兼容抓取源的文章 HTML 里经常带着script、iframe、五花八门的class和行内样式直接塞给公众号草稿接口会发现样式丢失甚至内容错乱。微信编辑器支持的 HTML 标签是有限集很多标签会被静默过滤。我在清洗节点里加了白名单机制只保留p、img、h2、h3、blockquote、a、strong、em这些常用标签其余全部剔除并且把标题层级统一成公众号常见的样式。经过这层过滤后正文在手机端的可读性明显提升也避免了一部分排版混乱问题。5.4 坑四定时任务时区错误导致每天早发 8 小时这个坑前面提过但还是值得单独记录。配置 cron 时如果时区不对实际触发时间会完全偏离预期。我当时以为平台默认是中国时区结果第一天凌晨 2 点半流水线就跑了差点发出去一篇未经人工审核的文章。现在我的习惯是每个定时触发节点都在名称上标注“北京时间 10:30”配置里显式填写Asia/Shanghai并且首次开启定时后盯两三天日志确认触发时间与预期一致再放手。5.5 坑五接口频率限制导致大批量发布失败有段时间我一次导入 10 篇文章流水线连续调用上传和发布接口结果在第五篇左右触发了频率限制后面的文章全部排队失败。微信接口在短时间高频调用时会返回45009 reach max api daily quota limit之类的错误码。现在的做法是在素材上传节点和发布节点之间插入一个“速率控制”节点每次调用前主动等待 5 到 10 秒并且把单批发布数量限制在 5 篇以内。虽然整体耗时变长但成功率稳定很多。对于一天只发一两篇的账号这个限制基本不用担心。5.6 坑六AI 改写改出“正确但空洞”的文章自动化最怕的不是出错而是看起来很顺但是内容质量塌了。早期我的提示词写得过于开放AI 把原文事实全部打散重组结果文章结构工整、逻辑正确读起来却没有细节和温度评论区直接有人问“是不是 AI 写的”。调整思路后我限制了 AI 的“重写权限”保留原文中的时间、地点、数字、案例等具体信息只做润色不改动核心事实同时在提示词里加入“用具体细节替换抽象表述”的强制要求。这之后产出的内容质量才真正能打也顺带缓解了“AI 味”的问题。你可以把这套思路复用在自己账号的提示词里效果立竿见影。5.7 坑七发布超时重试导致同一篇稿子重复发表最后一次大坑发生在网络抖动时提交发布接口返回超时WorkBuddy 自动重试结果实际上第一次请求已经成功重试又发了一次同一篇文章出现在两条发表记录里。处理方案分两层。第一层在发布节点前增加幂等标记为每篇文章生成一个唯一的request_id写入全局变量发布前检查这个标记如果已经存在就不再提交。第二层微信发布后有轮询接口可以查询发布状态我会在重试前先查询一次确认草稿是否已经转为已发布再做下一步判断。现在这套逻辑已经跑了两周没再出现过重复发布。6. 常见问题快查表与可直接抄的模板6.1 工作流跑不起来时的快速排查表我把这段时间遇到的高频问题整理成一张速查表下次如果工作流出问题可以先对照着看。报错或现象可能原因解决办法40164 invalid ip服务器 IP 未加入白名单在公众号后台添加出口 IP42001 access_token expiredtoken 被并发刷新挤掉统一缓存 token加有效期判断图片全部不显示外链图片防盗链先调用media/uploadimg转存正文样式丢失HTML 标签不兼容清洗节点只保留白名单标签定时触发时间不对cron 时区设置错误显式配置Asia/Shanghai发布后出现两条记录超时重试未做幂等增加发布前的幂等标记审核节点一直卡住Webhook 地址未生效检查飞书/钉钉机器人配置某节点反复失败接口频率限制加入速率控制节点并限制重试次数6.2 几个 WorkBuddy 里容易被忽略的配置使用 WorkBuddy 过程中还有一些非腾讯接口之外的细节同样值得留个心眼。比如系统缓存目录默认在 C 盘或系统盘跑多了之后日志和临时文件会占用不少空间。搜索热词里常有人问“WorkBuddy 缓存目录怎么更改”在设置里可以手动指定一个新的缓存路径建议放在剩余空间较大的数据盘避免影响系统盘性能。还有一个使用习惯问题换账号登录后之前的工作流和知识库并不会自动同步到新账号很多人以为数据丢了其实只是没注意账号切换的提示。如果你有多个团队账号记得在切换前导出工作流模板或者让管理员在新账号里重新授权一下相关资源。“WorkBuddy 换账号如何获得原来账号的记忆”这类问题的本质其实是“工作流和知识库资产如何跨账号迁移”做好导出导入基本就能解决。最后强烈建议把常用能力封装成 Skill。比如“生成摘要”“上传封面图”“创建草稿”这些节点封装后可以在多个工作流里复用。我后来新建另一个账号的发布流水线时直接在 Skill 仓库里调用了之前封装好的模块前后只花了几分钟就搭好一整套新的发布流程。这些坑我踩过之后最大的感受是自动化流水线并不是“越全自动越好”而是在关键节点留好人工控制的缝隙在容易重复执行的环节做足幂等。WorkBuddy 帮我把发布这件事变成了可监控、可重跑、可复制的流程而不是一堆孤立的脚本。如果你也在搭自己的微信公众号发布流水线建议先把 token 刷新、图片转存、幂等发布这三个点处理好整条链路就成功了一大半。