baoyu-post-to-wechat

baoyu-post-to-wechat

热门

将内容发布到微信公众号,支持通过 API 或 Chrome CDP 发布文章(支持 HTML、Markdown 或纯文本输入)和贴图(多张图片)。Markdown 文章工作流默认将普通外部链接转换为底部引用,以生成适合微信的输出。当用户提到“发布公众号”、“post to wechat”、“微信公众号”或“贴图/图文/文章”时使用。

2.2万Star
2606Fork
更新于 2026/6/18
SKILL.md
readonly只读
name
baoyu-post-to-wechat
description

将内容发布到微信公众号,支持通过 API 或 Chrome CDP 发布文章(支持 HTML、Markdown 或纯文本输入)和贴图(多张图片)。Markdown 文章工作流默认将普通外部链接转换为底部引用,以生成适合微信的输出。当用户提到“发布公众号”、“post to wechat”、“微信公众号”或“贴图/图文/文章”时使用。

version
1.118.2

发布到微信公众号

用户输入工具

当此技能提示用户时,请遵循以下工具选择规则(按优先级):

  1. 优先使用当前 Agent 运行时内置的用户输入工具,例如 AskUserQuestionrequest_user_inputclarifyask_user 或任何等效工具。
  2. 回退方案:如果没有此类工具,则发送编号的纯文本消息,并让用户回复所选编号/答案。
  3. 批量处理:如果工具支持一次调用多个问题,则将所有适用问题合并为一次调用;如果仅支持单个问题,则按优先级顺序逐个询问。

以下具体的 AskUserQuestion 引用仅为示例——在其他运行时中请替换为本地等效工具。

语言

使用用户的语言回复。如果用户使用中文,则用中文回复;如果使用英文,则用英文回复。技术性标记(路径、标志、字段名)保持英文。

脚本目录

{baseDir} = 此 SKILL.md 文件所在目录。解析 ${BUN_X}:优先使用 bun;否则使用 npx -y bun;否则建议 brew install oven-sh/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

按顺序检查以下路径,第一个找到的生效:

路径 范围
.baoyu-skills/baoyu-post-to-wechat/EXTEND.md 项目
${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-post-to-wechat/EXTEND.md XDG
$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md 用户主目录

找到 → 读取、解析、应用。未找到 → 在执行其他操作前运行首次设置(references/config/first-time-setup.md)。

最小键值(不区分大小写,接受 1/0true/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: browser
default_author: 宝玉
need_open_comment: 1
only_fans_can_comment: 0
chrome_profile_path: /path/to/chrome/profile

# 远程 API 发布(可选)——仅当微信 IP 白名单
# 排除本地机器时设置。参见下方“远程 API 方法”。
# remote_publish_host: server.example.com
# remote_publish_user: deploy
# remote_publish_port: 22
# remote_publish_identity_file: ~/.ssh/id_ed25519
# remote_publish_known_hosts_file: ~/.ssh/known_hosts
# remote_publish_strict_host_key_checking: accept-new
# remote_publish_connect_timeout: 10
# remote_publish_proxy_jump: bastion.example.com

有意不支持原始 ssh/scp 选项;仅识别上述类型化键。认证仅支持 SSH 密钥(无密码)。

主题选项:default, grace, simple, modern。颜色预设:blue, green, vermilion, yellow, purple, sky, rose, olive, black, gray, pink, red, orange(或十六进制颜色)。

值优先级:CLI 参数 → frontmatter → EXTEND.md(账户级别 → 全局)→ 技能默认值。

多账户支持

EXTEND.md 支持 accounts: 块来管理多个公众号。当有 2 个及以上条目时,工作流会插入第 0.5 步来提示选择账户(或根据 default: true--account <alias> 自动选择)。

完整详情——兼容性规则、每个账户的键、凭据解析、每个账户的 Chrome 配置文件、CLI 用法——请参见 references/multi-account.md

环境检查(可选)

首次使用前,建议进行环境检查(用户可跳过):

${BUN_X} {baseDir}/scripts/check-permissions.ts

检查项:Chrome、配置文件隔离、Bun、辅助功能、剪贴板、粘贴按键、API 凭据、Chrome 冲突。

检查失败 修复方法
Chrome 安装 Chrome 或设置 WECHAT_BROWSER_CHROME_PATH
配置文件目录 共享配置文件位于 baoyu-skills/chrome-profile
Bun 运行时 brew install oven-sh/bun/bunnpm install -g bun
辅助功能(macOS) 系统设置 → 隐私与安全性 → 辅助功能 → 启用终端应用
剪贴板复制 确保 Swift/AppKit(macOS:xcode-select --install
粘贴按键(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 步:解析账户(仅多账户——参见 references/multi-account.md)
- [ ] 第 1 步:确定输入类型
- [ ] 第 2 步:选择方法并配置凭据
- [ ] 第 3 步:解析主题/颜色并验证元数据
- [ ] 第 4 步:发布到微信
- [ ] 第 5 步:报告完成

第 0 步:加载偏好设置

检查并加载 EXTEND.md(参见上方“偏好设置”)。如果未找到,则在提出任何其他问题前完成首次设置。解析并缓存以下值供后续步骤使用:default_themedefault_colordefault_authorneed_open_commentonly_fans_can_comment

第 1 步:确定输入类型

输入 检测 下一步
HTML 文件 路径以 .html 结尾,文件存在 跳至第 3 步
Markdown 文件 路径以 .md 结尾,文件存在 第 2 步
纯文本 不是文件路径,或文件不存在 保存为 markdown,然后第 2 步

纯文本处理

  1. 生成 slug(前 2-4 个有意义的单词,kebab-case;将中文翻译为英文用于 slug)。
  2. 保存到 post-to-wechat/YYYY-MM-DD/<slug>.md(如需要则创建目录)。
  3. 继续作为 markdown 文件处理。

第 2 步:选择发布方法并配置

询问方法,除非在 EXTEND.md 或 CLI 中已指定:

方法 速度 要求
api(推荐) API 凭据(本地 IP 已加入白名单)
browser Chrome + 已登录会话
remote-api API 凭据 + 一个可通过 SSH 访问且 IP 在微信白名单中的服务器

选择 API 但缺少凭据 → 按照 references/api-setup.md 运行引导设置(写入 .baoyu-skills/.env)。

remote-api 方法:微信的“公众号设置 → IP 白名单”通常将 API 访问限制在一两个固定 IP。如果本地机器的 IP 不在该列表中,但云服务器的 IP 在,则使用 remote-api:所有 markdown 渲染、图片处理、草稿组装和 HTML 重写仍在本地进行,只有向 api.weixin.qq.com(token、uploadimg、add_material、draft/add)的出站 HTTPS 调用通过 SSH SOCKS5 动态端口转发(ssh -N -D)隧道传输,使微信将远程服务器视为源 IP。不会向远程主机写入任何文件;AppSecret 永远不会离开本地进程。远程主机仅需 sshd 和出站网络——无需 Python,无需 Agent 进程。参见下方“远程 API 方法”。

第 3 步:解析主题/颜色并验证元数据

  1. 主题:CLI --themeEXTEND.md default_themedefault(第一个匹配项生效;如果已解析则不再询问)。
  2. 颜色:CLI --colorEXTEND.md default_color → 省略(应用主题默认颜色)。
  3. 验证元数据(markdown 的 frontmatter,HTML 的 meta 标签):
字段 缺失时 →
标题 询问,或按回车从内容自动生成
摘要 Frontmatter descriptionsummary → 询问或自动生成
作者 CLI --author → frontmatter authorEXTEND.md default_author
来源 URL CLI --source-url → frontmatter sourceUrl/contentSourceUrl/content_source_url

自动生成:标题 = 第一个 H1/H2 或第一句话;摘要 = 第一段,截断至 120 字符。

  1. 封面图片(API article_type=news 必需):CLI --cover → frontmatter(coverImage / featureImage / cover / image)→ imgs/cover.png → 第一张内联图片 → 如果仍缺失则停止并要求提供。

第 4 步:发布

重要——切勿预先将 markdown 转换为 HTML。 发布脚本内部处理转换,两种方法渲染图片的方式不同:API 渲染 <img> 标签以上传,浏览器使用占位符以粘贴替换。传递预先转换的 HTML 会破坏其中一种方法。

Markdown 引用默认:对于 markdown 输入,默认将普通外部链接转换为底部引用。仅当用户明确希望保留内联链接时使用 --no-cite。现有 HTML 输入保持不变。

API 方法(接受 .md.html):

${BUN_X} {baseDir}/scripts/wechat-api.ts <file> --theme <theme> [--color <color>] [--title <title>] [--summary <summary>] [--author <author>] [--cover <cover_path>] [--source-url <url>] [--no-cite]

始终传递 --theme,即使它是 default。仅当用户或 EXTEND.md 明确设置时才传递 --color

远程 API 方法(相同脚本,添加 --remote):

${BUN_X} {baseDir}/scripts/wechat-api.ts <file> --theme <theme> --remote [--remote-host <host>] [--remote-user <user>] [--remote-port <port>] [--remote-identity-file <path>] [--remote-known-hosts-file <path>] [--remote-strict-host-key-checking yes|no|accept-new] [--remote-connect-timeout <s>] [--remote-proxy-jump <spec>]

任何 --remote-* 标志都隐含 --remote。CLI 值覆盖账户级别,然后覆盖 EXTEND.md 中的全局 remote_publish_* 键。设置 default_publish_method: remote-api 也会启用远程模式,无需 --remote

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),即使 CLI 未暴露它们
  • 对于 news,可选包含 content_source_url(原文链接,显示为“阅读原文”链接,最大 1KB)。通过 --source-url CLI 标志或 frontmatter sourceUrl/contentSourceUrl/content_source_url 提供

浏览器方法(接受 --markdown--html):

${BUN_X} {baseDir}/scripts/wechat-article.ts --markdown <markdown_file> --theme <theme> [--color <color>] [--no-cite]
${BUN_X} {baseDir}/scripts/wechat-article.ts --html <html_file>

第 5 步:完成报告

微信发布完成!

输入:[类型] - [路径]
方法:[API | Browser]
主题:[theme] [color if set]

文章:
• 标题:[title]
• 摘要:[summary]
• 图片:[N] 张内联
• 评论:[open/closed],[fans-only/all]    ← 仅 API 方法

结果:
✓ 草稿已保存到微信公众号
• media_id:[media_id]                         ← 仅 API 方法

后续步骤(API):
→ 管理草稿:https://mp.weixin.qq.com(登录后进入「内容管理」→「草稿箱」)

创建的文件:
[• post-to-wechat/YYYY-MM-DD/slug.md(如果输入为纯文本)]
[• slug.html(已转换)]

功能对比

功能 贴图 文章(API) 文章(远程 API) 文章(浏览器)
纯文本输入
HTML 输入
Markdown 输入 标题/内容
多张图片 ✓(最多 9 张) ✓(内联) ✓(内联) ✓(内联)
主题
自动生成元数据
默认封面回退(imgs/cover.png
评论控制
需要 Chrome
需要 API 凭据
需要可通过 SSH 访问且 IP 已加入白名单的服务器
速度 中等

故障排除

问题 修复方法
缺少 API 凭据 按照第 2 步的引导设置
Access token 错误 验证凭据有效且未过期
未登录(浏览器) 首次运行会打开浏览器——扫描二维码登录。设置 TELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_ID 以通过 Telegram 接收二维码图片
未找到 Chrome 设置 WECHAT_BROWSER_CHROME_PATH
标题/摘要缺失 使用自动生成或手动提供
无封面图片 添加 frontmatter 封面或将 imgs/cover.png 放置在文章目录中
评论默认值错误 检查 EXTEND.md 中的 need_open_comment / only_fans_can_comment
粘贴失败 检查系统剪贴板权限
Remote publish host is required 设置 --remote-hostEXTEND.md 中的 remote_publish_host
SOCKS proxy on 127.0.0.1:… not ready SSH 无法启动隧道——检查密钥、主机、StrictHostKeyChecking,或使用 --remote-connect-timeout
远程发布时 ssh exited early 验证用户可以通过非交互方式 ssh 到服务器;如果链接慢则增加 --remote-connect-timeout
远程 API 调用返回 errcode 40164(无效 IP) 远程服务器的出口 IP 不在微信白名单中;在“公众号设置 → IP 白名单”中添加

参考资料

文件 内容
references/image-text-posting.md 贴图参数、自动压缩
references/article-posting.md 文章主题、图片处理
references/multi-account.md 多账户兼容性、凭据、Chrome 配置文件、CLI
references/api-setup.md 引导式凭据设置
references/config/first-time-setup.md 首次 EXTEND.md 设置

扩展支持

通过 EXTEND.md 进行自定义配置。参见“偏好设置”了解路径和受支持的选项。