🚀 快速安装

复制以下命令并运行,立即安装此 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/0true/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(或十六进制值)

值优先级

  1. CLI 参数
  2. 前置元数据
  3. EXTEND.md(账户级别 → 全局级别)
  4. 技能默认值

多账户支持

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_methoddefault_authorneed_open_commentonly_fans_can_commentapp_idapp_secretchrome_profile_path

仅全局生效的键(始终在账户间共享):
default_themedefault_color

账户选择 (步骤 0.5)

插入到文章发布工作流的步骤 0 和步骤 1 之间:

如果没有 accounts 块:
    → 单账户模式(当前行为)
否则如果 accounts.length == 1:
    → 自动选择唯一的账户
否则如果提供了 CLI 参数 --account <别名>:
    → 选择匹配的账户
否则如果某个账户设置了 default: true:
    → 预选该账户,显示:"正在使用账户:<名称> (可使用 --account 切换)"
否则:
    → 提示用户:
      "配置了多个微信公众号账户:
       1) <名称1> (<别名1>)
       2) <名称2> (<别名2>)
       请选择账户 [1-N]:"

凭证解析 (API 方法)

对于选定的别名为 {alias} 的账户:

  1. EXTEND.md 账户块中内联的 app_id / app_secret
  2. 环境变量 WECHAT_{ALIAS}_APP_ID / WECHAT_{ALIAS}_APP_SECRET(别名大写,连字符转换为下划线)
  3. .baoyu-skills/.env 中带有前缀 WECHAT_{ALIAS}_APP_ID 的键
  4. ~/.baoyu-skills/.env 中带有前缀的键
  5. 回退到无前缀的 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_author
  • need_open_comment(默认 1
  • only_fans_can_comment(默认 0

步骤 1:确定输入类型

输入类型 检测方式 操作
HTML 文件 路径以 .html 结尾,文件存在 跳转到步骤 3
Markdown 文件 路径以 .md 结尾,文件存在 继续到步骤 2
纯文本 不是文件路径,或文件不存在 保存为 markdown,继续到步骤 2

纯文本处理

  1. 从内容生成别名(前 2-4 个有意义的单词,短横线连接)
  2. 创建目录并保存文件:
mkdir -p "$(pwd)/post-to-wechat/$(date +%Y-%m-%d)"
# 保存内容到:post-to-wechat/yyyy-MM-dd/[别名].md
  1. 作为 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:解析主题/颜色并验证元数据

  1. 解析主题(按顺序匹配第一个,如果已解析则不要询问用户):
    • CLI --theme 参数
    • EXTEND.md default_theme(在步骤 0 中加载)
    • 后备值:default
  2. 解析颜色(按顺序匹配第一个):
    • CLI --color 参数
    • EXTEND.md default_color(在步骤 0 中加载)
    • 如果未设置则省略(使用主题默认值)
  3. 验证元数据,来自前置元数据(markdown)或 HTML 元标签(HTML 输入):
字段 如果缺失
标题 提示:”请输入标题,或按 Enter 键从内容自动生成”
摘要 提示:”请输入摘要,或按 Enter 键自动生成(推荐用于 SEO)”
作者 使用后备链:CLI --author → 前置元数据 author → EXTEND.md default_author

自动生成逻辑

  • 标题:第一个 H1/H2 标题,或第一个句子
  • 摘要:第一段,截断至 120 个字符
  1. 封面图片检查(对于 API article_type=news 是必需的):
    1. 如果提供了 CLI --cover,则使用它。
    2. 否则使用前置元数据(coverImagefeatureImagecoverimage)。
    3. 否则检查文章目录中的默认路径:imgs/cover.png
    4. 否则回退到内容中的第一张内联图片。
    5. 如果仍然缺失,则停止并要求在发布前提供封面图片。

步骤 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_typenews(默认)或 newspic
  • 对于 news 类型,必须包含 thumb_media_id(封面是必需的)
  • 始终解析并发送:
    • need_open_comment(默认 1
    • only_fans_can_comment(默认 0
  • author 解析链:CLI --author → 前置元数据 author → EXTEND.md default_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 浏览器
  • 首次运行:登录微信公众号(会话将被保存)

配置文件位置(优先级顺序):

  1. 环境变量
  2. <当前工作目录>/.baoyu-skills/.env
  3. ~/.baoyu-skills/.env

故障排除

问题 解决方案
缺少 API 凭证 按照步骤 2 中的引导设置
Access token 错误 检查 API 凭证是否有效且未过期
未登录(浏览器方法) 首次运行会打开浏览器 – 扫描二维码登录
未找到 Chrome 设置 WECHAT_BROWSER_CHROME_PATH 环境变量
缺少标题/摘要 使用自动生成功能或手动提供
没有封面图片 在前置元数据中添加封面,或将 imgs/cover.png 放置在文章目录中
评论默认值错误 检查 EXTEND.md 中的 need_open_commentonly_fans_can_comment
粘贴失败 检查系统剪贴板权限

扩展支持

通过 EXTEND.md 进行自定义配置。有关路径和受支持选项,请参阅偏好设置部分。

📄 原始文档

完整文档(英文):

https://skills.sh/jimliu/baoyu-skills/baoyu-post-to-wechat

💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。