名称: baoyu-post-to-wechat 描述: 通过API或Chrome CDP向微信公众号发布内容。支持文章发布(文章)输入HTML、Markdown或纯文本,以及图文发布(贴图,原图文)支持多张图片。当用户提到“发布公众号”、“post to wechat”、“微信公众号”或“贴图/图文/文章”时使用。
发布到微信公众号
语言
匹配用户语言:以用户使用的语言回应。如果用户用中文,用中文回应;如果用户用英文,用英文回应。
脚本目录
代理执行:确定此SKILL.md目录为SKILL_DIR,然后使用${SKILL_DIR}/scripts/<name>.ts。
| 脚本 | 用途 |
|---|---|
scripts/wechat-browser.ts |
图文发布(图文) |
scripts/wechat-article.ts |
通过浏览器发布文章(文章) |
scripts/wechat-api.ts |
通过API发布文章(文章) |
scripts/check-permissions.ts |
验证环境和权限 |
偏好设置(EXTEND.md)
使用Bash检查EXTEND.md存在性(优先级顺序):
# 先检查项目级
test -f .baoyu-skills/baoyu-post-to-wechat/EXTEND.md && echo "项目"
# 然后用户级(跨平台:$HOME在macOS/Linux/WSL上有效)
test -f "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md" && echo "用户"
┌────────────────────────────────────────────────────────┬───────────────────┐ │ 路径 │ 位置 │ ├────────────────────────────────────────────────────────┼───────────────────┤ │ .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/浏览器) | 默认作者 | 默认开启评论开关 | 默认仅粉丝可评论开关 | 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_publish_method: api
default_author: 宝玉
need_open_comment: 1
only_fans_can_comment: 0
chrome_profile_path: /path/to/chrome/profile
值优先级:
- CLI参数
- 前文
- 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 CLI工具:xcode-select --install) |
| 粘贴按键(macOS) | 同上辅助功能修复 |
| 粘贴按键(Linux) | 安装xdotool(X11)或ydotool(Wayland) |
| API凭证 | 跟随第5步的引导设置,或手动在.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。
文章发布工作流(文章)
复制此检查清单并在完成时勾选项目:
发布进度:
- [ ] 步骤0:加载偏好设置(EXTEND.md)
- [ ] 步骤1:确定输入类型
- [ ] 步骤2:检查markdown-to-html技能
- [ ] 步骤3:转换为HTML
- [ ] 步骤4:验证元数据(标题、摘要、封面)
- [ ] 步骤5:选择方法并配置凭证
- [ ] 步骤6:发布到微信
- [ ] 步骤7:报告完成
步骤0:加载偏好设置
检查并加载EXTEND.md设置(见上文偏好设置部分)。
关键:如果未找到,在其他步骤或问题之前完成首次设置。
解析并存储这些默认值供后续步骤使用:
default_authorneed_open_comment(默认1)only_fans_can_comment(默认0)
步骤1:确定输入类型
| 输入类型 | 检测 | 操作 |
|---|---|---|
| HTML文件 | 路径以.html结尾,文件存在 |
跳到步骤4 |
| Markdown文件 | 路径以.md结尾,文件存在 |
继续到步骤2 |
| 纯文本 | 不是文件路径,或文件不存在 | 保存为markdown,然后步骤2 |
纯文本处理:
- 从内容生成slug(前2-4个有意义的词,短横线分隔)
- 创建目录并保存文件:
mkdir -p "$(pwd)/post-to-wechat/$(date +%Y-%m-%d)"
# 保存内容到:post-to-wechat/yyyy-MM-dd/[slug].md
- 继续作为markdown文件处理
Slug示例:
- “Understanding AI Models” →
understanding-ai-models - “人工智能的未来” →
ai-future(slug翻译为英文)
步骤2:检查Markdown-to-HTML技能
跳过如果:输入是.html文件
技能发现:
# 检查baoyu-markdown-to-html是否存在
test -f skills/baoyu-markdown-to-html/SKILL.md && echo "找到"
| 结果 | 操作 |
|---|---|
| 找到 | 读取其SKILL.md,继续到步骤3 |
| 多个技能 | 询问用户问题以选择 |
| 未找到 | 显示安装建议 |
当未找到时:
未找到markdown-to-html技能。
建议安装:
https://github.com/JimLiu/baoyu-skills/blob/main/skills/baoyu-markdown-to-html/SKILL.md
选项:
A) 取消 - 先安装技能
B) 继续 - 手动提供HTML文件
步骤3:转换Markdown到HTML
跳过如果:输入是.html文件
- 询问主题偏好(除非在EXTEND.md或CLI中指定):
| 主题 | 描述 |
|---|---|
default |
经典主题 - 传统排版,标题居中带底边,二级标题白字彩底 |
grace |
优雅主题 - 文字阴影,圆角卡片,精致引用块 |
simple |
简洁主题 - 现代极简风,不对称圆角,清爽留白 |
- 执行转换(使用发现的技能):
npx -y bun ${MD_TO_HTML_SKILL_DIR}/scripts/main.ts <markdown_file> --theme <theme>
- 解析JSON输出获取:
htmlPath、title、author、summary、contentImages
步骤4:验证元数据
检查从步骤3提取的元数据(或如果直接HTML输入,则检查HTML元标签)。
| 字段 | 如果缺失 |
|---|---|
| 标题 | 提示:“输入标题,或按Enter自动从内容生成” |
| 摘要 | 提示:“输入摘要,或按Enter自动生成(推荐用于SEO)” |
| 作者 | 使用后备链:CLI --author → 前文 author → EXTEND.md default_author |
自动生成逻辑:
- 标题:第一个H1/H2标题,或第一句话
- 摘要:第一段,截断到120字符
封面图像检查(article_type=news需要):
- 使用CLI
--cover如果提供。 - 否则使用前文(
coverImage、featureImage、cover、image)。 - 否则检查文章目录默认路径:
imgs/cover.png。 - 否则后备到第一个内联内容图像。
- 如果仍缺失,停止并在发布前请求封面图像。
步骤5:选择发布方法并配置
询问发布方法(除非在EXTEND.md或CLI中指定):
| 方法 | 速度 | 要求 |
|---|---|---|
api(推荐) |
快 | API凭证 |
browser |
慢 | Chrome,登录会话 |
如果选择API - 检查凭证:
# 检查项目级
test -f .baoyu-skills/.env && grep -q "WECHAT_APP_ID" .baoyu-skills/.env && echo "项目"
# 检查用户级
test -f "$HOME/.baoyu-skills/.env" && grep -q "WECHAT_APP_ID" "$HOME/.baoyu-skills/.env" && echo "用户"
如果凭证缺失 - 引导设置:
未找到微信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=<用户输入>
步骤6:发布到微信
API方法:
npx -y bun ${SKILL_DIR}/scripts/wechat-api.ts <html_file> [--title <title>] [--summary <summary>] [--author <author>] [--cover <cover_path>]
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请求体包含解析的值。
浏览器方法:
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --html <html_file>
步骤7:完成报告
对于API方法,包括草稿管理链接:
微信发布完成!
输入:[类型] - [路径]
方法:API
主题:[主题名称]
文章:
• 标题:[标题]
• 摘要:[摘要]
• 图片:[N]张内联图片
• 评论:[开启/关闭],[仅粉丝/所有用户]
结果:
✓ 草稿已保存到微信公众号
• media_id:[media_id]
下一步:
→ 管理草稿:https://mp.weixin.qq.com(登录后进入“内容管理”→“草稿箱”)
创建的文件:
[• post-to-wechat/yyyy-MM-dd/slug.md(如果纯文本)]
[• slug.html(已转换)]
对于浏览器方法:
微信发布完成!
输入:[类型] - [路径]
方法:浏览器
主题:[主题名称]
文章:
• 标题:[标题]
• 摘要:[摘要]
• 图片:[N]张内联图片
结果:
✓ 草稿已保存到微信公众号
创建的文件:
[• post-to-wechat/yyyy-MM-dd/slug.md(如果纯文本)]
[• slug.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凭证
- 第5步的引导设置,或手动在
.baoyu-skills/.env中设置
对于浏览器方法:
- Google Chrome
- 首次运行:登录微信公众号(会话保留)
对于Markdown转换:
- 一个markdown-to-html技能(例如
baoyu-markdown-to-html) - 如果未安装,工作流将建议安装
配置文件位置(优先级顺序):
- 环境变量
<cwd>/.baoyu-skills/.env~/.baoyu-skills/.env
故障排除
| 问题 | 解决方案 |
|---|---|
| 无markdown-to-html技能 | 从建议URL安装baoyu-markdown-to-html |
| 缺少API凭证 | 跟随第5步的引导设置 |
| 访问令牌错误 | 检查API凭证是否有效且未过期 |
| 未登录(浏览器) | 首次运行打开浏览器 - 扫描二维码登录 |
| Chrome未找到 | 设置WECHAT_BROWSER_CHROME_PATH环境变量 |
| 标题/摘要缺失 | 使用自动生成或手动提供 |
| 无封面图像 | 添加前文封面或在文章目录放置imgs/cover.png |
| 评论默认错误 | 检查EXTEND.md键need_open_comment和only_fans_can_comment |
| 粘贴失败 | 检查系统剪贴板权限 |
扩展支持
通过EXTEND.md自定义配置。见偏好设置部分获取路径和支持选项。