关于 baoyu-post-to-wechat
baoyu-post-to-wechat 是用于制作并发布微信公众号图文和文章的 Agent 技能,支持 API 与浏览器流程,并可配置主题、元数据和评论设置。
主要功能
- 01发布最多含 9 张图片的图文
- 02通过 API 或浏览器发布文章
- 03将 Markdown 转为适配微信的 HTML
- 04配置主题、颜色和作者默认值
- 05设置文章评论选项
适用场景
- 01制作多图微信公众号图文
- 02发布 Markdown 或 HTML 文章
- 03选择 API 或浏览器发布方式
- 04应用作者和评论默认设置
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ideacco/ baoyu-skills-openclaw --skill baoyu-post-to-wechat安装后在 Claude Code 中输入/baoyu-post-to-wechat确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/article-posting.mdimage-text-posting.mdreferences/config/first-time-setup.mdscripts/cdp.tscheck-permissions.tscopy-to-clipboard.tsmd-to-wechat.tsscripts/md/cli.tsscripts/md/code-themes/1c-light.min.cssa11y-dark.min.cssa11y-light.min.cssagate.min.cssan-old-hope.min.cssandroidstudio.min.cssarduino-light.min.cssarta.min.cssascetic.min.cssatom-one-dark-reasonable.min.cssatom-one-dark.min.cssatom-one-light.min.cssbrown-paper.min.csscodepen-embed.min.csscolor-brewer.min.cssdark.min.cssdefault.min.cssdevibeans.min.cssdocco.min.cssfar.min.cssfelipec.min.cssfoundation.min.css详细介绍
发布到微信公众号
语言
匹配用户的语言:使用与用户相同的语言进行回复。用户使用中文时,请用中文回复;用户使用英文时,请用英文回复。
脚本目录
Agent 执行:将此 SKILL.md 所在目录确定为 SKILL_DIR,然后使用 ${SKILL_DIR}/scripts/<name>.ts。
| 脚本 | 用途 |
|---|---|
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)
使用 Bash 按优先顺序检查 EXTEND.md 是否存在:
# Check project-level first
test -f .baoyu-skills/baoyu-post-to-wechat/EXTEND.md && echo "project"
# Then user-level (cross-platform: $HOME works on macOS/Linux/WSL)
test -f "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md" && echo "user"
┌────────────────────────────────────────────────────────┬───────────────────┐ │ 路径 │ 位置 │ ├────────────────────────────────────────────────────────┼───────────────────┤ │ .baoyu-skills/baoyu-post-to-wechat/EXTEND.md │ 项目目录 │ ├────────────────────────────────────────────────────────┼───────────────────┤ │ $HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md │ 用户主目录 │ └────────────────────────────────────────────────────────┴───────────────────┘
┌───────────┬───────────────────────────────────────────────────────────────────────────┐ │ 结果 │ 操作 │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ 找到 │ 读取、解析并应用设置 │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ 未找到 │ 运行首次设置(references/config/first-time-setup.md)→ 保存 → 继续 │ └───────────┴───────────────────────────────────────────────────────────────────────────┘
EXTEND.md 支持:默认主题 | 默认颜色 | 默认发布方式(api/browser)| 默认作者 | 默认开启评论开关 | 默认仅粉丝评论开关 | Chrome 配置文件路径
首次设置:references/config/first-time-setup.md
最低支持的键(不区分大小写,接受 1/0 或 true/false):
| 键 | 默认值 | 映射 |
|---|---|---|
default_author | 空 | CLI/frontmatter 未提供时,作为 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 参数
- Frontmatter
- EXTEND.md
- 技能默认值
预检(可选)
首次使用前,建议运行环境检查。用户可按需跳过。
npx -y bun ${SKILL_DIR}/scripts/check-permissions.ts
检查项:Chrome、配置文件隔离、Bun、辅助功能、剪贴板、粘贴按键、API 凭据、Chrome 冲突。
如果任何检查失败,请针对相应项目提供修复指导:
| 检查项 | 修复方法 |
|---|---|
| Chrome | 安装 Chrome,或设置 WECHAT_BROWSER_CHROME_PATH 环境变量 |
| 配置文件目录 | 确保 ~/.local/share/wechat-browser-profile 可写 |
| Bun 运行时 | curl -fsSL https://bun.sh/install | bash |
| 辅助功能(macOS) | 系统设置 → 隐私与安全性 → 辅助功能 → 启用终端应用 |
| 复制到剪贴板 | 确保 Swift/AppKit 可用(macOS Xcode 命令行工具:xcode-select --install) |
| 粘贴按键(macOS) | 同上方辅助功能修复方法 |
| 粘贴按键(Linux) | 安装 xdotool(X11)或 ydotool(Wayland) |
| API 凭据 | 按照步骤 2 中的引导完成设置,或手动在 .baoyu-skills/.env 中设置 |
图文发布(图文)
用于发布含多张图片(最多 9 张)的短文:
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --markdown article.md --images ./images/
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --title "标题" --content "内容" --image img.png --submit
详情请参见 references/image-text-posting.md。
文章发布工作流(文章)
复制此清单,并在完成各项后勾选:
Publishing Progress:
- [ ] Step 0: Load preferences (EXTEND.md)
- [ ] Step 1: Determine input type
- [ ] Step 2: Select method and configure credentials
- [ ] Step 3: Resolve theme/color and validate metadata
- [ ] Step 4: Publish to WeChat
- [ ] Step 5: Report completion
步骤 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 |
纯文本处理:
- 根据内容生成 slug(取前 2-4 个有意义的词,使用 kebab-case)
- 创建目录并保存文件:
mkdir -p "$(pwd)/post-to-wechat/$(date +%Y-%m-%d)"
# Save content to: post-to-wechat/yyyy-MM-dd/[slug].md
- 继续将其作为 Markdown 文件处理
Slug 示例:
- “Understanding AI Models” →
understanding-ai-models - “人工智能的未来” →
ai-future(将其翻译成英文作为 slug)
步骤 2:选择发布方式并进行配置
询问发布方式(除非已在 EXTEND.md 或 CLI 中指定):
| 方式 | 速度 | 要求 |
|---|---|---|
api(推荐) | 快 | API 凭据 |
browser | 慢 | Chrome、登录会话 |
如果选择 API——检查凭据:
# Check project-level
test -f .baoyu-skills/.env && grep -q "WECHAT_APP_ID" .baoyu-skills/.env && echo "project"
# Check user-level
test -f "$HOME/.baoyu-skills/.env" && grep -q "WECHAT_APP_ID" "$HOME/.baoyu-skills/.env" && echo "user"
如果缺少凭据——引导完成设置:
WeChat API credentials not found.
To obtain credentials:
1. Visit https://mp.weixin.qq.com
2. Go to: 开发 → 基本配置
3. Copy AppID and AppSecret
Where to save?
A) Project-level: .baoyu-skills/.env (this project only)
B) User-level: ~/.baoyu-skills/.env (all projects)
选择位置后,提示用户填写值并写入 .env:
WECHAT_APP_ID=<user_input>
WECHAT_APP_SECRET=<user_input>
步骤 3:解析主题/颜色并验证元数据
-
解析主题(采用首个匹配项;如果已解析出主题,则不要询问用户):
- CLI
--theme参数 - EXTEND.md
default_theme(在步骤 0 中加载) - 回退值:
default
- CLI
-
解析颜色(采用首个匹配项):
- CLI
--color参数 - EXTEND.md
default_color(在步骤 0 中加载) - 如果未设置,则省略(使用主题默认颜色)
- CLI
-
验证 frontmatter(Markdown)或 HTML meta 标签(HTML 输入)中的元数据:
| 字段 | 缺少时 |
|---|---|
| 标题 | 提示:“输入标题,或按 Enter 键根据内容自动生成” |
| 摘要 | 提示:“输入摘要,或按 Enter 键自动生成(建议用于 SEO)” |
| 作者 | 使用回退链:CLI --author → frontmatter author → EXTEND.md default_author |
自动生成逻辑:
- 标题:第一个 H1/H2 标题,或第一句话
- 摘要:第一段,截取至 120 个字符
- 封面图片检查(API 的
article_type=news必填):- 如果提供了 CLI
--cover,则使用该值。 - 否则使用 frontmatter(
coverImage、featureImage、cover、image)。 - 否则检查文章目录中的默认路径:
imgs/cover.png。 - 否则回退为正文中的第一张图片。
- 如果仍然缺少封面,则停止并要求提供封面图片后再发布。
- 如果提供了 CLI
步骤 4:发布到 WeChat
重要:发布脚本会在内部处理 Markdown 转换。不要预先将 Markdown 转换为 HTML——直接传入原始 Markdown 文件。这样可确保 API 方法将图片渲染为 <img> 标签(用于 API 上传),而浏览器方法使用占位符(用于粘贴并替换的工作流)。
API 方法(接受 .md 或 .html):
npx -y bun ${SKILL_DIR}/scripts/wechat-api.ts <file> --theme <theme> [--color <color>] [--title <title>] [--summary <summary>] [--author <author>] [--cover <cover_path>]
重要:始终包含 --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→ frontmatterauthor→ EXTEND.mddefault_author
如果脚本参数未提供这两个评论字段,也要确保最终 API 请求体包含解析后的值。
浏览器方法(接受 --markdown 或 --html):
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --markdown <markdown_file> --theme <theme> [--color <color>]
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --html <html_file>
步骤 5:完成报告
对于 API 方法,包含草稿管理链接:
WeChat Publishing Complete!
Input: [type] - [path]
Method: API
Theme: [theme name] [color if set]
Article:
• Title: [title]
• Summary: [summary]
• Images: [N] inline images
• Comments: [open/closed], [fans-only/all users]
Result:
✓ Draft saved to WeChat Official Account
• media_id: [media_id]
Next Steps:
→ Manage drafts: https://mp.weixin.qq.com (登录后进入「内容管理」→「草稿箱」)
Files created:
[• post-to-wechat/yyyy-MM-dd/slug.md (if plain text)]
[• slug.html (converted)]
对于浏览器方法:
WeChat Publishing Complete!
Input: [type] - [path]
Method: Browser
Theme: [theme name] [color if set]
Article:
• Title: [title]
• Summary: [summary]
• Images: [N] inline images
Result:
✓ Draft saved to WeChat Official Account
Files created:
[• post-to-wechat/yyyy-MM-dd/slug.md (if plain text)]
[• slug.html (converted)]
详细参考
| 主题 | 参考资料 |
|---|---|
| 图文参数、自动压缩 | 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 方法:
- WeChat Official Account API 凭据
- 在步骤 2 中按引导完成设置,或手动设置到
.baoyu-skills/.env
浏览器方法:
- Google Chrome
- 首次运行:登录 WeChat Official Account(会保留会话)
配置文件位置(按优先级排序):
- 环境变量
<cwd>/.baoyu-skills/.env~/.baoyu-skills/.env
故障排查
| 问题 | 解决方案 |
|---|---|
| 缺少 API 凭据 | 按照第 2 步中的引导完成设置 |
| 访问令牌错误 | 检查 API 凭据是否有效且未过期 |
| 未登录(浏览器) | 首次运行时会打开浏览器——扫描二维码登录 |
| 未找到 Chrome | 设置 WECHAT_BROWSER_CHROME_PATH 环境变量 |
| 缺少标题/摘要 | 使用自动生成,或手动提供 |
| 没有封面图片 | 添加 frontmatter 封面,或将 imgs/cover.png 放在文章目录中 |
| 评论默认设置有误 | 检查 EXTEND.md 中的 need_open_comment 和 only_fans_can_comment 键 |
| 粘贴失败 | 检查系统剪贴板权限 |
扩展支持
通过 EXTEND.md 进行自定义配置。路径和支持的选项请参见偏好设置部分。
OpenClaw 迁移说明
- 迁移模式:优先使用 OpenClaw 原生方案
- 保留的目录:
- scripts:是
- references:是
- prompts:否
- 外部依赖:bun、chrome、external-ai-api、social-platform-access
- 风险等级:高
- 检测到的环境变量:
ACCESS_TOKEN、API、HOME、WECHAT_BROWSER_CHROME_PATH - 配置兼容性:保留原有
.baoyu-skills/<skill>/EXTEND.md行为,并在需要时于运行时包装器中添加兼容 OpenClaw 的路径。
OpenClaw 预检
- 当脚本示例使用
npx -y bun ...时,确认bun可用。 - 确认已安装 Chrome,且可启动以用于 CDP/浏览器自动化流程。
- 确认执行前已导出所需的 API 凭据。
- 确认发布或抓取操作前,账号会话/ Cookie 有效。
检测到的环境变量:ACCESS_TOKEN、API、HOME、WECHAT_BROWSER_CHROME_PATH
OpenClaw 故障回退
- 如果缺少运行时依赖,停止执行并返回准确的安装/设置命令。
- 如果 API 调用失败,建议使用明确指定的 provider/model 标志重试,并验证密钥权限范围。
- 如果浏览器自动化失败,则在可用时切换到手动/等待模式。
- 如果平台阻止自动化,则返回手动发布/导出说明,而不是反复重试。
- 对于高风险工作流,在执行不可逆操作前,必须获得用户的明确确认。