Install
openclaw skills install wechat-md-publisher-skill发布 Markdown 文章到微信公众号,支持草稿管理、多主题、智能图片处理、自动封面图。推荐与 news-to-markdown-skill 配合使用实现一键转载(支持本地图片)。
openclaw skills install wechat-md-publisher-skill全功能微信公众号 Markdown 发布工具 - 让 AI 能够直接将内容发布到微信公众号。
推荐使用方式:
news-to-markdown-skill 配合使用,实现一键转载新闻到微信公众号WECHAT_APP_ID 和 WECHAT_APP_SECRET 环境变量或通过命令行配置关键要求:
安装与执行模型(请先阅读):
scripts/run.js) 不会执行任何子进程,也不会通过 npx 在运行时从 registry 拉取代码。import 调用 本机已经全局安装 的 wechat-md-publisher 包。npm install -g wechat-md-publisher@1.0.7。import 之前会读取已解析包的 package.json,校验 name 与 version 精确等于内置 pin;任何不匹配(含同名替身、未审计的新版本)都会被拒绝。node_modules 与 Skill 自身 node_modules;CWD 下的 node_modules 已被显式排除,避免从含未审计依赖的工作目录启动时被恶意本地包劫持。必须审计的上游代码(首次安装前):
凭证存储:账号凭证存储在 ~/.config/wechat-md-publisher-nodejs/,使用 AES-256 加密。本 skill 不直接处理加密,安全性依赖上游 npm 包的实现 —— 必须在审计上述 account.ts 之后再写入真实凭证。
凭证传递的最佳实践:
WECHAT_APP_ID / WECHAT_APP_SECRET,避免 --app-secret 出现在 ps 进程列表中。AppSecret,都应立即去微信公众平台重置。远程主题风险:如果使用 theme add-remote 添加远程主题,第三方端点可能接收文章正文 / 标题。请只使用受信任的主题源;本 Skill 默认网络白名单不包含任意第三方主题端点。
沙箱建议:若你无法或不愿审计上游 npm 包,请在隔离环境(专用 VM / 容器 / 沙箱账号)中运行;不要把生产微信公众号的 AppSecret 直接交给未审计的工具链。
推荐方式(使用环境变量,避免命令行暴露凭证):
# 设置环境变量(不会出现在进程列表中)
export WECHAT_APP_ID="wx_your_app_id"
export WECHAT_APP_SECRET="your_app_secret"
# 添加账号
wechat-pub account add \
--name "我的公众号" \
--default
备选方式(命令行传参,注意:可能暴露在进程列表中):
# ⚠️ 警告:--app-secret 会出现在 ps 进程列表中
wechat-pub account add \
--name "我的公众号" \
--app-id "wx_your_app_id" \
--app-secret "your_app_secret" \
--default
wechat-pub publish create \
--file article.md \
--theme orangesun
# 一键转载新闻到微信公众号(推荐:下载图片到本地)
# news-to-markdown 会自动下载图片到本地,避免远程 URL 过期问题
convert-url --url "https://www.toutiao.com/article/123" \
--output /tmp/article.md \
--download-images \
--output-dir /tmp/article
# wechat-md-publisher 会自动读取本地图片并上传
wechat-pub publish create --file /tmp/article/article.md --theme orangesun
图片处理最佳实践(v0.8.3+):
--download-images 下载图片到本地
./images/ 目录,Markdown 使用相对路径当用户需要以下操作时,应触发此 Skill:
触发关键词:
用户必须拥有微信公众号并获取:
获取方式:
curl ifconfig.me本 Skill 要求在首次使用前显式全局安装底层 npm 包,以便用户审计源码并避免运行时从 registry 拉代码:
# 一次性安装(请先阅读上文 "安全风险与审计要点" 完成审计;必须使用精确版本)
npm install -g wechat-md-publisher@1.0.7
# 验证可用且版本精确等于 1.0.7
wechat-pub --version
# 查看帮助
wechat-pub --help
⚠️ 不要在含有未审计
node_modules的工作目录下运行 Skill。启动器只在受信路径解析包;CWD 下的node_modules已被显式排除。
安装完成后,Skill 启动器(scripts/run.js)会通过 in-process 动态 import 调用本机已安装的 wechat-md-publisher,不再触发任何 npx 网络请求或子进程。
publish create 与 publish submit 会让文章对公众号粉丝立即可见。错误的标题、抓取错误的正文、未压缩的图片,或被远程主题污染的渲染,一旦发布即对外暴露,可能造成公众号违规、品牌或合规风险。
因此当此 Skill 在 AI / 自动化流程中被调用时,默认行为必须是:
draft create(不是 publish create),把内容创建为草稿。publish create 或 publish submit。delete、wrapper set、account add 等会改变线上或本地状态的操作,同样要求用户明确确认。直接 publish create 仅在用户**显式要求"立即发布"**且 AI 已经完整复述(标题/主题/正文要点/图片)并获得"确认发布"回复后才允许执行。
场景:首次使用或添加新账号
步骤:
wechat-pub account add \
--name "账号名称" \
--app-id "wx_your_app_id" \
--app-secret "your_app_secret" \
--default
wechat-pub account list
输出示例:
┌────────────┬──────────────┬────────────────┬─────────┐
│ ID │ 名称 │ AppID │ 默认 │
├────────────┼──────────────┼────────────────┼─────────┤
│ acc_xxx │ 我的公众号 │ wx123456 │ ✓ │
└────────────┴──────────────┴────────────────┴─────────┘
异常处理:
场景:用户提供 Markdown 内容,并已明确要求立即发布到公众号(如果未明确要求,请走"操作 3:创建草稿")
步骤:
cat > /tmp/article.md << 'EOF'
---
title: 文章标题
author: 作者名
---
# 文章内容
这里是正文...
EOF
wechat-pub publish create \
--file /tmp/article.md \
--theme orangesun
publish_id输出示例:
✓ 渲染完成
✓ 图片处理完成
✓ 创建草稿成功
✓ 发布成功
发布 ID: 2247483647_1
可用主题:
default - 默认主题(简洁清爽)orangesun - Orange Sun(温暖明亮)redruby - Red Ruby(优雅醒目)greenmint - Green Mint(清新舒适)purplerain - Purple Rain(梦幻柔和)blackink - Black Ink(深色模式)异常处理:
场景:用户想先创建草稿,稍后再发布
步骤:
wechat-pub draft create \
--file /tmp/article.md \
--theme default
media_id输出示例:
✓ 草稿创建成功
Media ID: 3_abcdefghijk123456
后续操作:
wechat-pub publish submit <media-id>场景:用户想查看所有草稿
命令:
wechat-pub draft list --page 1 --size 10
输出示例:
共 15 个草稿
┌──────────────────┬────────────────┬────────────────┐
│ Media ID │ 标题 │ 更新时间 │
├──────────────────┼────────────────┼────────────────┤
│ 3_abc123 │ 测试文章 │ 2026-03-19 │
│ 3_def456 │ 产品介绍 │ 2026-03-18 │
└──────────────────┴────────────────┴────────────────┘
场景:用户想查看已发布的文章
命令:
wechat-pub publish list --page 1 --size 10
输出示例:
共 8 篇已发布文章
┌──────────────┬────────────────┬────────────────┬──────────────────┐
│ Article ID │ 标题 │ 发布时间 │ URL │
├──────────────┼────────────────┼────────────────┼──────────────────┤
│ 2247483647_1 │ 最新文章 │ 2026-03-19 │ https://mp.we... │
└──────────────┴────────────────┴────────────────┴──────────────────┘
删除草稿:
wechat-pub draft delete <media-id>
删除已发布文章:
wechat-pub publish delete <article-id>
命令:
wechat-pub theme list
输出示例:
可用主题:
┌─────────────┬──────────────┬────────────────────┐
│ ID │ 名称 │ 描述 │
├─────────────┼──────────────┼────────────────────┤
│ default │ 默认主题 │ 简洁清爽风格 │
│ orangesun │ Orange Sun │ 温暖明亮风格 │
│ redruby │ Red Ruby │ 优雅醒目风格 │
│ greenmint │ Green Mint │ 清新舒适风格 │
│ purplerain │ Purple Rain │ 梦幻柔和风格 │
│ blackink │ Black Ink │ 深色模式风格 │
└─────────────┴──────────────┴────────────────────┘
在发布文章时自动在开头和结尾添加固定的图文内容(如关注引导、底部二维码等)。
开启功能:
wechat-pub wrapper on
设置内容:
wechat-pub wrapper set \
--header "<div>欢迎关注我们的公众号</div>" \
--footer "<div>觉得有帮助请点赞+收藏</div>"
查看状态:
wechat-pub wrapper status
查看历史版本:
wechat-pub wrapper history
回滚到指定版本:
wechat-pub wrapper rollback 1
关闭功能:
wechat-pub wrapper off
注意事项:
set 会创建新版本,支持历史回滚data/wmp.db如果需要在代码中集成:
const { container } = require('wechat-md-publisher');
async function publishArticle(markdown, theme) {
await container.initialize();
const publishService = await container.getPublishService();
const result = await publishService.createAndPublish({
markdown: markdown,
theme: theme || 'default',
});
return result.publish_id;
}
# 批量创建草稿
for file in articles/*.md; do
wechat-pub draft create --file "$file" --theme default
done
Markdown 文件格式:
---
title: 文章标题(必需)
author: 作者名(可选)
cover: ./cover.jpg(可选,封面图路径)
---
# 正文标题
正文内容...

支持的图片格式:
成功响应:
{
"success": true,
"publish_id": "2247483647_1",
"message": "发布成功"
}
错误响应:
{
"success": false,
"error": "错误信息",
"code": "ERROR_CODE"
}
症状:提示"access_token 无效"
解决:Token 会自动刷新,如果仍有问题,重新配置账号
症状:提示"图片上传失败"
原因:
解决:
症状:提示"主题不存在"
解决:使用 wechat-pub theme list 查看可用主题
症状:提示"没有权限"
原因:AppID/AppSecret 错误或权限不足
解决:
~/Library/Preferences/wechat-md-publisher-nodejs/config.json~/.config/wechat-md-publisher-nodejs/config.json%APPDATA%\wechat-md-publisher-nodejs\Config\config.jsonapi.weixin.qq.com / mp.weixin.qq.com)。~/.config/wechat-md-publisher-nodejs/ 权限设为 0700,并排除在备份/容器镜像/同步盘之外。WECHAT_APP_ID / WECHAT_APP_SECRET)而非 --app-secret 命令行参数,避免出现在 ps、shell history、CI 日志中。AppSecret 并删除本地缓存目录。theme add-remote,会把文章正文 / 标题 / 图片 URL 发送到该第三方端点,构成新的数据边界,请仅使用受信任的主题源;AI 自动化流程不应在未经用户授权的情况下启用远程主题。用户:帮我把这篇文章发布到微信公众号
AI:好的,我来帮你发布。请提供文章的 Markdown 内容。
用户:[提供内容]
AI:收到!我将使用 orangesun 主题发布。正在处理...
[执行命令]
AI:✅ 文章已成功发布到微信公众号!
scripts/run.js) 在 import 之前读取已解析包的 package.json,校验 name 与 version 精确等于内置 pin(当前 1.0.7),否则拒绝加载。可阻止同名替身包 / 未审计的新版本静默接管 WeChat 凭证。process.cwd()/node_modules,只在 Node 全局 node_modules 与 Skill 自身 node_modules 中解析;从含未审计依赖的目录启动 Skill 不再可能被恶意本地包劫持。^1.0.7 / 未版本化的 npm install 改为 wechat-md-publisher@1.0.7(含 references/quick-start.md、ip-whitelist-guide.md)。config.json 标记 permissions.publishing.autoPublishWithoutConfirmation: false,明确 AI 默认走 draft create + 人工确认路径。~/.config/wechat-md-publisher-nodejs/ 目录权限收紧、最小权限/测试公众号、泄露应急流程。theme add-remote 警告 — 内置/本地主题为默认,AI 不应在未授权情况下启用远程主题。新用户应该能在 5 分钟内完成:
wechat-pub --versionwechat-pub account add ...wechat-pub publish create --file test.md --theme default如果以上步骤都能顺利完成,说明 Skill 已正确配置!
推荐组合:news-to-markdown-skill + wechat-md-publisher-skill = 一键转载新闻到微信公众号
将网络上的新闻文章快速转载到微信公众号,实现内容聚合和分发。
场景 1:转载单篇新闻(推荐方式)
# 步骤 1: 使用 news-to-markdown 提取新闻并下载图片
convert-url --url "https://www.toutiao.com/article/123" \
--output /tmp/article/article.md \
--download-images \
--output-dir /tmp/article \
--verbose
# 步骤 2: 使用 wechat-md-publisher 发布到微信
wechat-pub publish create \
--file /tmp/article/article.md \
--theme orangesun
为什么要下载图片到本地?
场景 2:批量转载新闻
# 新闻 URL 列表
urls=(
"https://www.toutiao.com/article/123"
"https://mp.weixin.qq.com/s/abc"
"https://www.xiaohongshu.com/explore/xyz"
)
# 批量处理
for i in "${!urls[@]}"; do
url="${urls[$i]}"
output_dir="/tmp/article-$i"
# 提取新闻并下载图片
convert-url --url "$url" \
--output "$output_dir/article.md" \
--download-images \
--output-dir "$output_dir"
# 发布到微信(创建草稿)
wechat-pub draft create \
--file "$output_dir/article.md" \
--theme default
echo "✓ 已处理: $url"
done
场景 3:AI 自动化工作流
用户对 AI 说:
"帮我把这篇头条文章转载到我的微信公众号"
AI 执行流程:
news-to-markdown-skill 提取文章内容wechat-md-publisher-skill 发布到微信✅ 智能内容提取
✅ 多平台支持
#js_content 区域.note-content 内容✅ 三层抓取策略
✅ 精美主题渲染
1. 内容审核
# 先创建草稿,人工审核后再发布
convert-url --url "$news_url" --output /tmp/article.md
wechat-pub draft create --file /tmp/article.md --theme default
# 审核通过后发布
wechat-pub publish submit <media-id>
2. 添加来源声明
# 提取时保留元数据
convert-url --url "$news_url" --output /tmp/article.md
# 元数据会自动包含在 Markdown 中:
# ---
# title: 文章标题
# author: 原作者
# 来源: https://...
# ---
3. 选择合适主题
default、blackink(深色模式)orangesun(橙色阳光)、greenmint(薄荷绿)default、greenmintpurplerain(紫色雨)、orangesunredruby(宝石红)blackink用户:把这篇头条文章转到我的微信公众号 https://www.toutiao.com/article/7000000000000000000/
AI:好的,我来帮你处理:
正在提取文章内容...
[INFO] 开始抓取: https://www.toutiao.com/article/...
[INFO] 检测到平台: toutiao
[INFO] 提取成功
正在发布到微信公众号...
✓ 渲染完成
✓ 图片处理完成
✓ 创建草稿成功
✓ 发布成功
✅ 完成!
npm install -g news-to-markdown新闻网站
↓
news-to-markdown (提取 + 转换)
↓
Markdown 文件
↓
wechat-md-publisher (渲染 + 发布)
↓
微信公众号