内容创作来源:腾讯云开发者社区·行者全栈架构师 · 2026-09-09 · 原文:https://cloud.tencent.com/developer/article/2739586

作者:行者全栈架构师
来源:腾讯云开发者社区
发布日期:2026-09-09


概述

微信公众号技术文章的发布链路——从 Markdown 排版到图片上传、再到推送草稿箱,通常一篇要 90 分钟。本文记录如何用 WorkBuddy 把这条链路沉淀成可复用技能 wechat-mp-publisher:首次约 40 分钟跑通技能创建、示例稿件和凭据配置,之后每篇只要 7 分钟。全程 19 张实操截图、3 个真实踩坑,最终产出是后台草稿箱里可验收的一篇文章。

1. 场景开篇

2026 年 9 月 8 日,22:05,我坐在家里电脑前。

我运营着一个技术公众号「行者架构谈」,文章都是本地 Markdown 写的。写是快,但每次发稿都要经历一遍发布链路:

一篇 4000 字带 8 个代码块的文章,上次我花了 1 个半小时,其中排版就占 40 多分钟。

排版完还有图片环节:2 张正文图加 1 张封面图,全部手动上传、手动插入。封面还得先裁成 2.35:1。预览发现代码块溢出,重新来,而且这次排出来的效果和上次不完全一样。

上个月我发了 8 篇稿子,累计在"排版 + 传图 + 推草稿箱"上花了 11 个小时左右。这类工作机械但费时间,更难受的是排版质量看状态——同样的文章类型,排出来的样子每次都有细微差别,账号的视觉一致性受影响。

我当时就想:这条链路是固定的——Markdown 进,HTML 出,图片上传,草稿箱推送。如果把它沉淀成一个技能,下次说一句"发这篇"就够了。

WorkBuddy 有技能体系,我决定用它把"微信公众号内容排版并发布到草稿箱"从零跑通一遍。

2. 技能创建:wechat-mp-publisher

2.1 技能结构

技能本质是一个带说明文档的脚本包,WorkBuddy 在对话中自动识别并调用。核心文件:

wechat-mp-publisher/
├── SKILL.md          # 技能描述与调用契约
├── scripts/
│   ├── md2wx.py      # Markdown → 微信公众号 HTML 转换
│   ├── upload_image.py # 图片上传至公众号素材库
│   └── push_draft.py  # 推送至草稿箱
└── config.json       # 公众号 AppID/Secret 等凭据

2.2 Markdown 转公众号 HTML 的关键规则

微信公众号编辑器对 HTML 有限制,转换时需要处理:

原始 Markdown 元素 公众号支持情况 处理方式
代码块 无语法高亮 用 <pre><code> 包裹,手动着色
表格 有限支持 转为图片或用 <table> 简化样式
引用 支持 转为 <blockquote> 并加边框样式
图片 需先上传 本地路径 → 调用素材库 API → 替换 URL
标题 H1-H6 支持 映射为公众号对应标签

2.3 图片上传与替换流程

本地 Markdown 中的图片路径
    ↓
调用 upload_image.py(需配置 AppID/Secret)
    ↓
获取公众号素材库 media_id 或 URL
    ↓
替换 Markdown 中的本地路径
    ↓
最终 HTML 中所有图片均为可访问 URL

3. 三个真实踩坑

踩坑 1:IP 不在白名单

现象:调用接口返回 1:40164 — IP 不在白名单

根因:微信公众号 API 要求服务器 IP 加入白名单,WorkBuddy 本地运行时的出口 IP 与备案 IP 不一致。

解法:登录微信公众平台 → 开发管理 → 基本配置 → IP 白名单,将当前出口 IP 添加进去。

踩坑 2:封面图比例不对导致上传失败

现象:封面图上传后显示异常

根因:公众号要求封面图比例为 2.35:1,直接传原图会出错

解法:上传前自动裁剪:

from PIL import Image

def crop_cover(src: str, dst: str, ratio: float = 2.35):
    img = Image.open(src)
    w, h = img.size
    target_w = int(h * ratio)
    if target_w > w:
        # 太宽,居中裁剪
        left = (w - target_w) // 2
        img = img.crop((left, 0, left + target_w, h))
    img.save(dst, quality=85)

踩坑 3:代码块排版溢出

现象:长代码行在公众号里横向溢出,无法换行

根因:公众号 <pre> 标签默认不换行,代码块内无 white-space: pre-wrap

解法:在生成的 CSS 中加入:

pre {
    white-space: pre-wrap !important;
    word-break: break-all;
}

4. 最终效果

5. 技能目录与调用方式

在 WorkBuddy 对话中直接说:

用微信公众号技能发布这篇稿件:/path/to/article.md

WorkBuddy 会自动加载 wechat-mp-publisher 技能,执行完整链路,完成后给出草稿箱链接供人工验收。


本文由腾讯云开发者社区收录,作者:行者全栈架构师

← 返回社区贡献