🚀 快速安装
复制以下命令并运行,立即安装此 Skill:
npx @anthropic-ai/skills install jimliu/baoyu-skills/baoyu-post-to-wechat
💡 提示:需要 Node.js 和 NPM
发布到微信公众号
语言
匹配用户语言:使用与用户相同的语言回复。如果用户使用中文,则回复中文。如果用户使用英文,则回复英文。
脚本目录
代理执行流程:将此 SKILL.md 文件的目录确定为 {baseDir},然后使用 {baseDir}/scripts/<名称>.ts。解析 ${BUN_X} 运行时:如果已安装 bun → 使用 bun;如果 npx 可用 → 使用 npx -y bun;否则建议安装 bun。
| 脚本 | 用途 |
|---|---|
scripts/wechat-browser.ts |
图文发布 |
scripts/wechat-article.ts |
通过浏览器发布文章 |
scripts/wechat-api.ts |
通过 API 发布文章 |
scripts/md-to-wechat.ts |
Markdown → 带有图片占位符的、微信可用的 HTML |
scripts/check-permissions.ts |
验证环境和权限 |
偏好设置 (EXTEND.md)
检查 EXTEND.md 是否存在(优先级顺序):
# macOS, Linux, WSL, Git Bash
test -f .baoyu-skills/baoyu-post-to-wechat/EXTEND.md && echo "project"
test -f "${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-post-to-wechat/EXTEND.md" && echo "xdg"
test -f "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md" && echo "user"
# PowerShell (Windows)
if (Test-Path .baoyu-skills/baoyu-post-to-wechat/EXTEND.md) { "project" }
$xdg = if ($env:XDG_CONFIG_HOME) { $env:XDG_CONFIG_HOME } else { "$HOME/.config" }
if (Test-Path "$xdg/baoyu-skills/baoyu-post-to-wechat/EXTEND.md") { "xdg" }
if (Test-Path "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md") { "user" }
| 路径 | 位置 |
|---|---|
| .baoyu-skills/baoyu-post-to-wechat/EXTEND.md | 项目目录 |
| $HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md | 用户主目录 |
| 结果 | 操作 |
|---|---|
| 找到 | 读取、解析、应用设置 |
| 未找到 | 运行首次设置 → 保存 → 继续 |
EXTEND.md 支持配置:默认主题 | 默认颜色 | 默认发布方式 (api/browser) | 默认作者 | 默认是否打开评论 | 默认是否仅粉丝可评论 | Chrome 配置文件路径
首次设置指南:references/config/first-time-setup.md
最低支持的关键字(不区分大小写,接受 1/0 或 true/false):
| 关键字 | 默认值 | 映射 |
|---|---|---|
default_author |
空 | 当 CLI 或前置元数据未提供 author 时的后备作者 |
need_open_comment |
1 |
映射到 draft/add 请求中的 articles[].need_open_comment |
only_fans_can_comment |
0 |
映射到 draft/add 请求中的 articles[].only_fans_can_comment |
推荐的 EXTEND.md 示例:
default_theme: default
default_color: blue
default_publish_method: api
default_author: 宝玉
need_open_comment: 1
only_fans_can_comment: 0
chrome_profile_path: /path/to/chrome/profile
主题选项:default, grace, simple, modern
颜色预设:blue, green, vermilion, yellow, purple, sky, rose, olive, black, gray, pink, red, orange(或十六进制值)
值优先级:
- CLI 参数
- 前置元数据
- EXTEND.md(账户级别 → 全局级别)
- 技能默认值
多账户支持
EXTEND.md 支持管理多个微信公众号。当存在 accounts: 块时,每个账户可以有自己的凭证、Chrome 配置文件和默认设置。
兼容性规则:
| 条件 | 模式 | 行为 |
|---|---|---|
无 accounts 块 |
单账户 | 当前行为,不变 |
accounts 包含 1 个条目 |
单账户 | 自动选择,无需提示 |
accounts 包含 2 个及以上条目 |
多账户 | 发布前提示选择 |
accounts 中有 default: true 的条目 |
多账户 | 预选默认账户,用户可以切换 |
多账户 EXTEND.md 示例:
default_theme: default
default_color: blue
accounts:
- name: 宝玉的技术分享
alias: baoyu
default: true
default_publish_method: api
default_author: 宝玉
need_open_comment: 1
only_fans_can_comment: 0
app_id: your_wechat_app_id
app_secret: your_wechat_app_secret
- name: AI工具集
alias: ai-tools
default_publish_method: browser
default_author: AI工具集
need_open_comment: 1
only_fans_can_comment: 0
按账户设置的键(可以在账户级别设置,也可以在全局级别设置作为后备):
default_publish_method,default_author,need_open_comment,only_fans_can_comment,app_id,app_secret,chrome_profile_path
仅全局生效的键(始终在账户间共享):
default_theme,default_color
账户选择 (步骤 0.5)
插入到文章发布工作流的步骤 0 和步骤 1 之间:
如果没有 accounts 块:
→ 单账户模式(当前行为)
否则如果 accounts.length == 1:
→ 自动选择唯一的账户
否则如果提供了 CLI 参数 --account <别名>:
→ 选择匹配的账户
否则如果某个账户设置了 default: true:
→ 预选该账户,显示:"正在使用账户:<名称> (可使用 --account 切换)"
否则:
→ 提示用户:
"配置了多个微信公众号账户:
1) <名称1> (<别名1>)
2) <名称2> (<别名2>)
请选择账户 [1-N]:"
凭证解析 (API 方法)
对于选定的别名为 {alias} 的账户:
- EXTEND.md 账户块中内联的
app_id/app_secret - 环境变量
WECHAT_{ALIAS}_APP_ID/WECHAT_{ALIAS}_APP_SECRET(别名大写,连字符转换为下划线) .baoyu-skills/.env中带有前缀WECHAT_{ALIAS}_APP_ID的键~/.baoyu-skills/.env中带有前缀的键- 回退到无前缀的
WECHAT_APP_ID/WECHAT_APP_SECRET
.env 多账户示例:
# 账户:baoyu
WECHAT_BAOYU_APP_ID=your_wechat_app_id
WECHAT_BAOYU_APP_SECRET=your_wechat_app_secret
# 账户:ai-tools
WECHAT_AI_TOOLS_APP_ID=your_ai_tools_wechat_app_id
WECHAT_AI_TOOLS_APP_SECRET=your_ai_tools_wechat_app_secret
Chrome 配置文件 (浏览器方法)
每个账户使用一个隔离的 Chrome 配置文件,以保持独立的登录会话:
| 来源 | 路径 |
|---|---|
EXTEND.md 中账户的 chrome_profile_path |
按原样使用 |
| 根据别名自动生成 | {共享配置文件父目录}/wechat-{别名}/ |
| 单账户回退 | 共享的默认配置文件(当前行为) |
CLI --account 参数
所有发布脚本都接受 --account <别名>:
${BUN_X} {baseDir}/scripts/wechat-api.ts <文件> --theme default --account ai-tools
${BUN_X} {baseDir}/scripts/wechat-article.ts --markdown <文件> --theme default --account baoyu
${BUN_X} {baseDir}/scripts/wechat-browser.ts --markdown <文件> --images ./photos/ --account baoyu
预检检查 (可选)
在首次使用前,建议运行环境检查。如果用户愿意,可以跳过。
${BUN_X} {baseDir}/scripts/check-permissions.ts
检查项:Chrome、配置文件隔离、Bun、辅助功能、剪贴板、粘贴快捷键、API 凭证、Chrome 冲突。
如果任何检查失败,为每个项目提供修复指南:
| 检查项 | 修复方法 |
|---|---|
| Chrome | 安装 Chrome 或设置 WECHAT_BROWSER_CHROME_PATH 环境变量 |
| 配置文件目录 | 共享配置文件位于 baoyu-skills/chrome-profile(参见 CLAUDE.md Chrome 配置文件部分) |
| Bun 运行时 | brew install oven-sh/bun/bun (macOS) 或 npm install -g bun |
| 辅助功能 (macOS) | 系统设置 → 隐私与安全性 → 辅助功能 → 启用终端应用 |
| 复制到剪贴板 | 确保 Swift/AppKit 可用(macOS Xcode 命令行工具:xcode-select --install) |
| 粘贴快捷键 (macOS) | 同上,需要辅助功能权限 |
| 粘贴快捷键 (Linux) | 安装 xdotool (X11) 或 ydotool (Wayland) |
| API 凭证 | 按照步骤 2 中的引导设置,或手动在 .baoyu-skills/.env 中设置 |
图文发布
适用于包含多张图片的短内容(最多 9 张):
${BUN_X} {baseDir}/scripts/wechat-browser.ts --markdown article.md --images ./images/
${BUN_X} {baseDir}/scripts/wechat-browser.ts --title "标题" --content "内容" --image img.png --submit
详细信息请参阅 references/image-text-posting.md。
文章发布工作流
复制此清单并在完成时勾选项目:
发布进度:
- [ ] 步骤 0:加载偏好设置 (EXTEND.md)
- [ ] 步骤 0.5:解析账户(仅多账户模式)
- [ ] 步骤 1:确定输入类型
- [ ] 步骤 2:选择方法并配置凭证
- [ ] 步骤 3:解析主题/颜色并验证元数据
- [ ] 步骤 4:发布到微信
- [ ] 步骤 5:报告完成
步骤 0:加载偏好设置
检查并加载 EXTEND.md 设置(参见上面的偏好设置部分)。
关键:如果未找到,在进行任何其他步骤或提问之前,完成首次设置。
解析并存储这些默认值以供后续步骤使用:
default_theme(默认default)default_color(如果未设置则省略 — 使用主题默认值)default_authorneed_open_comment(默认1)only_fans_can_comment(默认0)
步骤 1:确定输入类型
| 输入类型 | 检测方式 | 操作 |
|---|---|---|
| HTML 文件 | 路径以 .html 结尾,文件存在 |
跳转到步骤 3 |
| Markdown 文件 | 路径以 .md 结尾,文件存在 |
继续到步骤 2 |
| 纯文本 | 不是文件路径,或文件不存在 | 保存为 markdown,继续到步骤 2 |
纯文本处理:
- 从内容生成别名(前 2-4 个有意义的单词,短横线连接)
- 创建目录并保存文件:
mkdir -p "$(pwd)/post-to-wechat/$(date +%Y-%m-%d)"
# 保存内容到:post-to-wechat/yyyy-MM-dd/[别名].md
- 作为 markdown 文件继续处理
别名示例:
- “Understanding AI Models” →
understanding-ai-models - “人工智能的未来” →
ai-future(将标题翻译成英文作为别名)
步骤 2:选择发布方式并配置
询问发布方式(除非在 EXTEND.md 或 CLI 中指定):
| 方式 | 速度 | 要求 |
|---|---|---|
api(推荐) |
快 | API 凭证 |
browser |
慢 | Chrome,已登录会话 |
如果选择 API – 检查凭证:
# macOS, Linux, WSL, Git Bash
test -f .baoyu-skills/.env && grep -q "WECHAT_APP_ID" .baoyu-skills/.env && echo "project"
test -f "$HOME/.baoyu-skills/.env" && grep -q "WECHAT_APP_ID" "$HOME/.baoyu-skills/.env" && echo "user"
# PowerShell (Windows)
if ((Test-Path .baoyu-skills/.env) -and (Select-String -Quiet -Pattern "WECHAT_APP_ID" .baoyu-skills/.env)) { "project" }
if ((Test-Path "$HOME/.baoyu-skills/.env") -and (Select-String -Quiet -Pattern "WECHAT_APP_ID" "$HOME/.baoyu-skills/.env")) { "user" }
如果凭证缺失 – 引导设置:
未找到微信公众号 API 凭证。
获取凭证步骤:
1. 访问 https://mp.weixin.qq.com
2. 进入:开发 → 基本配置
3. 复制 AppID 和 AppSecret
保存到哪里?
A) 项目级别:.baoyu-skills/.env(仅此项目)
B) 用户级别:~/.baoyu-skills/.env(所有项目)
选择保存位置后,提示输入值并写入 .env 文件:
WECHAT_APP_ID=<用户输入>
WECHAT_APP_SECRET=<用户输入>
步骤 3:解析主题/颜色并验证元数据
- 解析主题(按顺序匹配第一个,如果已解析则不要询问用户):
- CLI
--theme参数 - EXTEND.md
default_theme(在步骤 0 中加载) - 后备值:
default
- CLI
- 解析颜色(按顺序匹配第一个):
- CLI
--color参数 - EXTEND.md
default_color(在步骤 0 中加载) - 如果未设置则省略(使用主题默认值)
- CLI
- 验证元数据,来自前置元数据(markdown)或 HTML 元标签(HTML 输入):
| 字段 | 如果缺失 |
|---|---|
| 标题 | 提示:”请输入标题,或按 Enter 键从内容自动生成” |
| 摘要 | 提示:”请输入摘要,或按 Enter 键自动生成(推荐用于 SEO)” |
| 作者 | 使用后备链:CLI --author → 前置元数据 author → EXTEND.md default_author |
自动生成逻辑:
- 标题:第一个 H1/H2 标题,或第一个句子
- 摘要:第一段,截断至 120 个字符
- 封面图片检查(对于 API
article_type=news是必需的):- 如果提供了 CLI
--cover,则使用它。 - 否则使用前置元数据(
coverImage,featureImage,cover,image)。 - 否则检查文章目录中的默认路径:
imgs/cover.png。 - 否则回退到内容中的第一张内联图片。
- 如果仍然缺失,则停止并要求在发布前提供封面图片。
- 如果提供了 CLI
步骤 4:发布到微信
关键:发布脚本会在内部处理 markdown 转换。请勿预先将 markdown 转换为 HTML — 直接传递原始 markdown 文件。这确保 API 方法将图片渲染为 <img> 标签(用于 API 上传),而浏览器方法使用占位符(用于复制粘贴替换的工作流)。
Markdown 引用默认行为:
- 对于 markdown 输入,普通的外部链接默认会转换为底部的引用注释。
- 仅当用户明确希望将普通的外部链接保持在内联状态时,才使用
--no-cite选项。 - 现有的 HTML 输入保持原样;不会应用额外的引用转换。
API 方法(接受 .md 或 .html 文件):
${BUN_X} {baseDir}/scripts/wechat-api.ts <文件> --theme <主题> [--color <颜色>] [--title <标题>] [--summary <摘要>] [--author <作者>] [--cover <封面路径>] [--no-cite]
关键:始终包含 --theme 参数。即使使用 default 主题也绝不能省略。仅当用户或 EXTEND.md 明确设置了颜色时,才包含 --color。
draft/add 请求体规则:
- 使用接口:
POST https://api.weixin.qq.com/cgi-bin/draft/add?access_token=ACCESS_TOKEN article_type:news(默认)或newspic- 对于
news类型,必须包含thumb_media_id(封面是必需的) - 始终解析并发送:
need_open_comment(默认1)only_fans_can_comment(默认0)
author解析链:CLI--author→ 前置元数据author→ EXTEND.mddefault_author
如果脚本参数没有直接暴露这两个评论字段,仍需确保最终的 API 请求体包含解析后的值。
浏览器方法(接受 --markdown 或 --html):
${BUN_X} {baseDir}/scripts/wechat-article.ts --markdown <markdown文件> --theme <主题> [--color <颜色>] [--no-cite]
${BUN_X} {baseDir}/scripts/wechat-article.ts --html <html文件>
步骤 5:完成报告
对于 API 方法,包含草稿管理链接:
微信发布完成!
输入:[类型] - [路径]
方式:API
主题:[主题名称] [如果设置了颜色]
文章:
• 标题:[标题]
• 摘要:[摘要]
• 图片:[N] 张内联图片
• 评论:[开启/关闭],[仅粉丝/所有用户]
结果:
✓ 草稿已保存到微信公众号
• media_id:[media_id]
下一步:
→ 管理草稿:https://mp.weixin.qq.com (登录后进入「内容管理」→「草稿箱」)
创建的文件:
[• post-to-wechat/yyyy-MM-dd/别名.md (如果是纯文本输入)]
[• 别名.html (转换后的文件)]
对于浏览器方法:
微信发布完成!
输入:[类型] - [路径]
方式:浏览器
主题:[主题名称] [如果设置了颜色]
文章:
• 标题:[标题]
• 摘要:[摘要]
• 图片:[N] 张内联图片
结果:
✓ 草稿已保存到微信公众号
创建的文件:
[• post-to-wechat/yyyy-MM-dd/别名.md (如果是纯文本输入)]
[• 别名.html (转换后的文件)]
详细参考
| 主题 | 参考文档 |
|---|---|
| 图文参数,自动压缩 | references/image-text-posting.md |
| 文章主题,图片处理 | references/article-posting.md |
功能对比
| 功能 | 图文 | 文章 (API) | 文章 (浏览器) |
|---|---|---|---|
| 纯文本输入 | ✗ | ✓ | ✓ |
| HTML 输入 | ✗ | ✓ | ✓ |
| Markdown 输入 | 标题/内容 | ✓ | ✓ |
| 多张图片 | ✓ (最多 9 张) | ✓ (内联) | ✓ (内联) |
| 主题 | ✗ | ✓ | ✓ |
| 自动生成元数据 | ✗ | ✓ | ✓ |
默认封面回退 (imgs/cover.png) |
✗ | ✓ | ✗ |
评论控制 (need_open_comment, only_fans_can_comment) |
✗ | ✓ | ✗ |
| 需要 Chrome | ✓ | ✗ | ✓ |
| 需要 API 凭证 | ✗ | ✓ | ✗ |
| 速度 | 中等 | 快 | 慢 |
前提条件
对于 API 方法:
- 微信公众号 API 凭证
- 步骤 2 中的引导设置,或手动在
.baoyu-skills/.env中设置
对于浏览器方法:
- Google Chrome 浏览器
- 首次运行:登录微信公众号(会话将被保存)
配置文件位置(优先级顺序):
- 环境变量
<当前工作目录>/.baoyu-skills/.env~/.baoyu-skills/.env
故障排除
| 问题 | 解决方案 |
|---|---|
| 缺少 API 凭证 | 按照步骤 2 中的引导设置 |
| Access token 错误 | 检查 API 凭证是否有效且未过期 |
| 未登录(浏览器方法) | 首次运行会打开浏览器 – 扫描二维码登录 |
| 未找到 Chrome | 设置 WECHAT_BROWSER_CHROME_PATH 环境变量 |
| 缺少标题/摘要 | 使用自动生成功能或手动提供 |
| 没有封面图片 | 在前置元数据中添加封面,或将 imgs/cover.png 放置在文章目录中 |
| 评论默认值错误 | 检查 EXTEND.md 中的 need_open_comment 和 only_fans_can_comment 键 |
| 粘贴失败 | 检查系统剪贴板权限 |
扩展支持
通过 EXTEND.md 进行自定义配置。有关路径和受支持选项,请参阅偏好设置部分。
📄 原始文档
完整文档(英文):
https://skills.sh/jimliu/baoyu-skills/baoyu-post-to-wechat
💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。

评论(0)