用途
wechat-mp-publisher 用于完成微信公众号文章的智能发布全流程,覆盖从内容转换、排版、封面与摘要处理,到草稿保存或群发的完整环节。它面向需要将 Markdown 或其他内容转化为公众号格式并发布到微信公众号的场景。
主要能力
- Markdown→微信 HTML 转换:可使用 mdnice.com 转换或脚本内置转换器。
- UEditor 排版:正文 15px、颜色 #3f3f3f(非纯黑)、行距 1.75 倍、段间距 15px、页边距 15-20px;标题 18-22px;引用 #8c8c8c。
- 封面图处理:头条 900×500px,次条 200×200px;配图宽 640px 适配手机,每 300-500 字配一图。
- 摘要:≤120 字,不填则取正文前 54 字。
- 两种发布模式:草稿模式(默认安全)与群发模式。
- 两种发布方式:API 发布(需服务号 access_token)与 Playwright 浏览器发布(默认)。
使用方式
发布前确认流程
在点击保存草稿/群发之前,必须执行以下步骤:
- 截图确认:所有内容(标题、摘要、正文、封面)填写完毕后,使用 browser(action="screenshot") 截图当前编辑页面。
- 发送到群:将截图发到群里(telegram 群: -1003890797239)供 Daniel 确认。
- 等待确认:不要自动发布,必须等待用户在群里确认「可以发布」或类似明确指令。
- 执行发布:收到确认后,才点击「保存草稿」或「群发」按钮。
未收到确认前禁止点击发布按钮。
方式 A:Browser 自动化(默认)
python scripts/publish.py \
--title "文章标题" \
--content /path/to/article.md \
--cover /path/to/cover.jpg \
--digest "文章摘要120字以内" \
--screenshots /tmp/wechat_screenshots
特点:需要微信扫码登录(首次);cookies 自动保存到 ~/.openclaw/skills/wechat-mp-smart-publish/cookies.json;截图目录可选,用于调试。
方式 B:API 发布(需服务号 access_token)
python scripts/api_publish.py \
--title "文章标题" \
--content /path/to/article.html \
--cover /path/to/cover.jpg \
--digest "摘要"
特点:需要 AppID + AppSecret;封面图需提前上传为永久素材;支持草稿模式和发布模式。
API 端点:
- 获取 Token:GET /cgi-bin/token
- 上传素材:POST /cgi-bin/material/add_material
- 新建草稿:POST /cgi-bin/draft/add
- 发布:POST /cgi-bin/freepublish/submit
草稿模式与群发模式
所有发布默认 --mode draft,在公众号后台草稿箱确认后再群发。--mode publish 直接群发。订阅号每天仅 1 次群发机会,服务号每月 4 次。
排版 HTML 样式示例
<section style="font-size:15px;color:#3f3f3f;line-height:1.75;letter-spacing:1px;padding:0 15px;">
<h2 style="font-size:20px;font-weight:bold;color:#1a1a1a;margin:30px 0 15px;">标题</h2>
<p style="margin-bottom:15px;">正文段落</p>
<blockquote style="border-left:3px solid #07c160;background:#f7f7f7;padding:10px 15px;color:#666;font-size:14px;">
引用块
</blockquote>
<p style="color:#888;font-size:12px;text-align:center;">图片说明</p>
</section>
文末标准模板
---
👆 点击关注,每周更新
💬 评论区聊聊你的看法
👇 觉得有用?转发给朋友
适用场景
- 将 Markdown 文章转换为公众号格式并发布。
- 需要按固定排版规范(字号、颜色、行距)生成公众号文章。
- 需要自动处理封面图尺寸与摘要。
- 需要草稿保存或群发两种发布模式。
- 需要 API 或浏览器自动化两种发布方式。
限制
- 标题 ≤64 字,建议 13-22 字,少用 emoji。
- 摘要 ≤120 字。
- 正文 ≤20,000 字,建议 1500-3000 字。
- 图片需上传到微信素材库,外链不可用。
- 排版需使用行内 style,不依赖 class。
- 群发次数受限:订阅号每天 1 次,服务号每月 4 次。
- API 模式需服务号 access_token、AppID + AppSecret,封面图需提前上传为永久素材。
- 发布前必须截图确认并等待用户明确指令,否则禁止发布。
错误处理
- 登录过期:提示重新扫码,保存新 cookie。
- 标题超 64 字:截断并警告。
- 封面尺寸错误:自动调整为 900×500。
- 图片不显示:检查是否上传到微信素材库(外链不可用)。
- 排版错乱:使用行内 style,不依赖 class。
- API 频率限制:等待 60 秒重试,最多 3 次。
- 敏感词拦截:返回具体敏感词位置,提示修改。
- 未收到确认就发布:严重错误,必须重新执行完整确认流程。
发布前检查清单
- 标题 ≤64 字
- 摘要 ≤120 字
- 首图 900×500px
- 排版:15px 字号、#3f3f3f 色、1.75 倍行距
- 图片已全部上传(外链不可用)
- 无敏感词/违禁词
- 手机端预览正常
- 已截图发送到群里等待确认
- 已收到 Daniel 明确确认后才能发布
文件结构
wechat-mp-publisher/
├── SKILL.md # 本文件
├── scripts/
│ ├── publish.py # Playwright 浏览器发布(默认)
│ └── api_publish.py # API 发布(需access_token)
├── references/
│ └── platform-rules.md # 完整平台规则
└── templates/
├── tech-article.html # 技术文排版模板
└── general-article.html # 通用文排版模板