Install
openclaw skills install wx-mp-publish微信公众号文章发布技能。当用户提到发布公众号文章、推送微信公众号、公众号发布、微信公众号发文、将文章发布到公众号、把文章发到公众号、把markdown转成微信公众号格式,或需要将带 YAML frontmatter 的 markdown 文件发布到微信公众号时激活。包含:Markdown → HTML 转换(marked + 内联样式,自动去除 frontmatter)、封面图上传、创建草稿、API 发布或手动发布指引、常见错误处理。
openclaw skills install wx-mp-publishNode.js + marked:微信 API 返回的 JSON 含特殊字符,Python json.loads() 解析失败率高(报错 Invalid \uXXXX escape),Node.js V8 原生 JSON 解析稳定可靠。
Python 版本已废弃删除(scripts/wx-mp/ 目录下仅保留 Node.js)。
用户提供 Markdown 文章(含 YAML frontmatter)
↓
自动去除 frontmatter(re.sub 去掉 --- 之间的内容)
↓
marked.parse() → HTML(gfm 模式)
↓
applyInlineStyles() → 内联 style
↓
上传封面图(≤64KB)
↓
创建草稿 → 手动发布(或 API 发布)
cd ~/.openclaw/workspace/skills/wx-mp-publish/scripts
node wx-publish.js draft <文章.md> \
--title "标题(≤64字符)" \
[--thumb <封面图路径>]
node wx-publish.js publish <文章.md> \
--title "标题" \
[--thumb <封面图路径>]
node wx-publish.js drafts # 列出草稿
node wx-publish.js del <id> # 删除草稿
node wx-publish.js status # 查看配额
创建草稿后,还需在公众号后台手动设置以下选项:
| 设置项 | 位置 | 说明 |
|---|---|---|
| 🤖 AI辅助生成标注 | 文章开头或结尾 | 必须标注「本文包含AI辅助内容」 |
| ✅ 声明原创 | 编辑框下方 | 原创标签按钮 |
| 💰 打开赞赏 | 文章底部 | 赞赏按钮开关 |
| ✍️ 作者 | 文章底部 | 填写"你的名字" |
| ⏰ 定时群发 | 发布设置 | 可选,但订阅号每月只4次,要节省使用 |
后台路径: 内容与创作 → 草稿箱 → 找到草稿 → 编辑 → 发布
publish 命令会报 [48001] api unauthorized
Python json.loads() 对微信 API 返回的某些 JSON 失败(Invalid \uXXXX escape),Node.js 无此问题。
微信文章不需要 frontmatter,若不去除会显示为正文乱码。
wx-publish.js 内置自动去除:content.replace(/^---\n[\s\S]*?\n---\n/, '')
Python markdown 库的 nl2br 扩展把换行符变成裸 <br>,微信编辑器无法正确渲染。正确做法是 paragraphs 自然闭合。
错误:[48001] api unauthorized
订阅号(审核中)只能创建草稿,需手动在公众号后台发布。 后台路径:内容与创作 → 草稿箱 → 找到草稿 → 发布
≤64KB。建议尺寸 900×383 像素(2.35:1)。
⚠️ 每次写文章前必读
写文章涉及外部产品/工具时,必须:
~/workspace/docs/product-facts.md 确认产品事实web_search 主动搜索核实涉及的关键产品:
触发条件: 文章中出现任何不熟悉的概念、产品、技术名词,而 product-facts.md 里没有记载。
执行流程:
web_search 搜索该概念,获取权威来源~/workspace/docs/product-facts.md事实分类标准(存入 facts 文档的分类标签):
| 分类标签 | 包含内容 | 示例 |
|---|---|---|
[产品类] | 产品名称、厂商、定位、界面形态 | Claude Code是Anthropic的产品 |
[技术类] | 技术名词、协议、架构术语 | MCP、Agent架构、Context管理 |
[事件类] | 重大发布、泄露事件、行业动态 | Claude Code源码泄露事件 |
[数据类] | 用户量、stars数、版本号、价格 | GitHub 68k+ stars |
[对比类] | 多个产品的横向对比结论 | OpenCode vs Claude Code的差异 |
记录格式(追加到 product-facts.md 末尾):
## [YYYY-MM-DD] 新增事实
### [产品类] 产品名称
- **事实内容**:...
- **来源**:URL
- **核实日期**:YYYY-MM-DD
自动分类规则:
[产品类] 或 [技术类][事件类][对比类][数据类]示例场景:
文章里要提"Aider",但 facts 文档里没有 → 立刻 web_search → 确认为开源AI编程CLI工具 → 追加到
[工具类]或新建[产品类]→ 继续写文章
禁止在文章正文中出现:
应该用:
—— 或空行分隔> 字数:约XXXX字 | 阅读时间:X分钟
> **"金句内容"**
---
正文(自然分段,不要编号)
如果需要加"中国平替"等提示,直接在正文末尾加一段话即可,不要标注"篇末提示"。
提到自己的项目时:
1. 项目名称保护
2. Google Cloud Code ≠ Claude Code
3. "Cloud Code" vs "Claude Code" 拼写
4. OpenClaw vs OpenCode 对比关系
5. 文章编号规则
6. 封面图规格
convert 原图.png -resize 900x383! -quality 75 输出.jpg文章运营数据记录在 ~/workspace/memory/articles/article-tracker.json。
可获取的数据(每日自动更新):
需手动更新的数据(用户从后台查看后告知):
更新流程:
查运营数据(不用调用API):
直接查看 memory/articles/article-tracker.json,包含:
cd scripts/
npm install marked
wx-mp-publish/
├── SKILL.md # 本文件
├── references/
│ └── best-practices.md # 详细文档
└── scripts/
├── wx-publish.js # Node.js 发布脚本(核心)
├── wx-api.js # 备用 API 工具
├── package.json # npm 依赖
└── node_modules/ # npm 包