全部技能 / 内容创作 / baoyu-post-to-wechat
内容创作 · JimLiu/baoyu-skills

baoyu-post-to-wechat

Posts content to WeChat Official Account (微信公众号) via API or Chrome CDP. Supports article posting (文章) with HTML, markdown, or plain text input, and image-text posting (贴图, formerly 图文) with multiple images. Markdown article workflows default to converting ordinary external links into bottom citations for WeChat-friendly output. Use when user mentions "发布公众号", "post to wechat", "微信公众号", or "贴图/图文/文章".

风险提醒:红色 · 谨慎使用AI 侦查报告
作者 JimLiuGitHub JimLiu/baoyu-skills ↗Stars 25926许可 MIT(仓库根 LICENSE,Copyright (c) 2026 Jim Liu;GitHub API spdx_id=MIT)commit 1567581c26
agent 宿主通常会约束 skill 执行权限;风险提醒为 AI 侦查观点,不构成质量或安全保证。第三方 skill 仅作拆解与展示,安装使用风险自负,版权归原作者。

1实现原理 · 为什么它能做到

三条发布路线共存:官方 API(快、需凭证)、浏览器 CDP(慢、复用登录态)、remote-api(本地渲染 + SSH SOCKS5 隧道让白名单服务器 IP 出站)。

skills/baoyu-post-to-wechat/SKILL.md
| `scripts/wechat-api.ts` | Article posting via API (文章) |
注:SKILL.md 的 Step 2 表格给出三者所需条件(API 凭证是否在 IP 白名单内、是否需要 Chrome、是否需要 SSH 可达服务器)。

凭证解析链是显式的多来源优先级:EXTEND.md 账户块 → 带前缀环境变量 → WECHAT_APP_ID/WECHAT_APP_SECRET(process.env、<cwd>/.baoyu-skills/.env、~/.baoyu-skills/.env)。

skills/baoyu-post-to-wechat/scripts/wechat-extend-config.ts
buildCredentialSource("process.env", process.env, "WECHAT_APP_ID", "WECHAT_APP_SECRET"),
注:缺失时抛错并提示三种配置方式(EXTEND.md account / 环境变量 / .baoyu-skills/.env);前缀形式用于多账号(accounts 块每账号一套 app_id/app_secret)。

API 路线按微信官方流程四步走:取 access_token → uploadimg(正文图)→ material/add_material(封面素材)→ draft/add(建草稿)。

skills/baoyu-post-to-wechat/scripts/wechat-api.ts
const DRAFT_URL = "https://api.weixin.qq.com/cgi-bin/draft/add";
注:SKILL.md 的 draft/add payload rules 写明必填字段(article_type news/newspic、thumb_media_id、need_open_comment、only_fans_can_comment、可选 content_source_url)。

正文图片有微信侧硬限制,脚本先转码/压缩再上传,并用 magic bytes 纠正声明格式与实际格式不符的情况。

skills/baoyu-post-to-wechat/scripts/wechat-image-processor.ts
export const WECHAT_BODY_IMAGE_MAX_SIZE = 1024 * 1024; // 1MB
注:使用 jimp 与 @jsquash/webp(wasm 解码);wechat-image-loader.ts 里对不一致的 contentType 会据实改正文件名与 MIME。

remote-api 的机制是本地完成渲染/图片处理/草稿组装,只把通往 api.weixin.qq.com 的 HTTPS 出站经 SSH 动态端口转发(SOCKS5)出去。

skills/baoyu-post-to-wechat/SKILL.md
are tunneled through an SSH SOCKS5 dynamic port forward (`ssh -N -D`)
注:实现侧:wechat-remote-publish.ts 组装 `-N -T -D 127.0.0.1:<port>` 等 ssh 参数(可带 -i 身份文件、KnownHosts、StrictHostKeyChecking、ConnectTimeout、-J 跳板),再由 wechat-socks-http.ts 用 socks 包 + tls 手搓出站请求;SKILL.md 自述 `No files are written to the remote host; `AppSecret` never leaves the local process.`

浏览器路线的登录态来自持久化共享 Chrome profile,且启动参数强制关闭 Chrome 的自动化特征标记(--disable-blink-features=AutomationControlled)——技术性反自动化检测绕过的典型手法。

skills/baoyu-post-to-wechat/scripts/cdp.ts
extraArgs: ['--disable-blink-features=AutomationControlled', '--start-maximized'],
注:launchChromeBase 另带 --remote-debugging-port 与 --user-data-dir(profile 默认 baoyu-skills/chrome-profile,可由 EXTEND.md chrome_profile_path 覆盖),登录一次后长期复用。

同目录还带一个『真实按键粘贴』助手,其用途被明确写成绕过网站可检测的合成事件。

skills/baoyu-post-to-wechat/scripts/paste-from-clipboard.ts
This bypasses CDP's synthetic events which websites can detect and ignore.
注:程度说明:本 commit 里 wechat-browser.ts / wechat-article.ts 实际用 CDP 的 Input.dispatchKeyEvent 发粘贴键(wechat-article.ts 的 pasteInEditor/sendPaste),这个 OS 级助手脚本未被主流程引用,但它的存在与文案与 cdp.ts 的启动参数同指一个目的。

登录态获取有外发通道:未登录时抓取登录二维码,可选经 Telegram Bot 发到指定聊天。

skills/baoyu-post-to-wechat/scripts/wechat-article.ts
const tgResp = await fetch(`https://api.telegram.org/bot${botToken}/sendPhoto`, {
注:触发条件是同时设置 TELEGRAM_BOT_TOKEN 与 TELEGRAM_CHAT_ID(前置 `if (!botToken || !chatId) return;`);二维码优先从 DOM 取 data:/canvas,失败再整页截图。

工程化配套:多账号 EXTEND.md 块与账号解析,外加一个前置环境/权限自检脚本。

skills/baoyu-post-to-wechat/SKILL.md
EXTEND.md supports an `accounts:` block for managing multiple Official Accounts.
注:check-permissions.ts 逐项检查 Chrome、profile 隔离、Bun、macOS 辅助功能授权、剪贴板、粘贴按键(osascript / xdotool / ydotool / PowerShell SendKeys)、API 凭证与 Chrome 进程冲突。

2核心能力

01官方 API 发文章到公众号草稿箱(access_token → uploadimg/add_material → draft/add)
02浏览器 CDP 发文章(复用登录态,HTML/Markdown/纯文本三种输入)
03图文(贴图)短内容发布,最多 9 图
04Markdown → 微信友好 HTML(默认把普通外链转底部引用,可 --no-cite)
05正文图片自动压缩/转码以满足微信上传限制(jimp + wasm webp 解码 + 格式嗅探)
06remote-api:仅把微信出站流量经 SSH SOCKS5 隧道转发到白名单 IP 的服务器
07多账号(EXTEND.md accounts 块 + --account 选择 + 每账号独立 Chrome profile)
08前置环境/权限自检(Chrome、profile、Bun、辅助功能、剪贴板、粘贴按键、API 凭证、Chrome 冲突)

3外部依赖

类型依赖
api微信公众平台 access_token
api正文图片上传(uploadimg)
api永久素材/封面上传(add_material)
api建草稿(draft/add,含 need_open_comment / only_fans_can_comment 等字段)
apiTelegram Bot API(可选:把登录二维码发到指定聊天)
network浏览器访问 mp.weixin.qq.com(公众号后台登录与发文界面)
clissh(-N -D SOCKS5 动态端口转发;仅密钥认证)
cli本地 Chrome/Chromium(--remote-debugging-port 启动,带 AutomationControlled 关闭参数)
cli系统剪贴板工具(macOS: swift/osascript;Linux: wl-copy 或 xclip;Windows: powershell.exe)
cli粘贴按键工具(macOS osascript System Events;Linux xdotool/ydotool;Windows PowerShell SendKeys)
packagejimp / @jsquash/webp / socks / baoyu-md / baoyu-chrome-cdp
clibun(内部以 npx -y bun 调起同目录脚本)

4风险提醒 风险提醒:红色 · 谨慎使用

风险提醒:红色 · 谨慎使用
  • 反自动化检测绕过(判红主因) — 浏览器流程强制关闭 Chrome 自动化特征标记,并配有『真实按键绕过合成事件』的助手脚本(后者在本 commit 未接主流程)。此类行为可能违反平台条款并触发账号风控,后果由使用者承担;建议只在自有账号、自有内容上使用。
  • 账号凭证与登录态的高价值接触面 — AppSecret、SSH 私钥、Telegram token 与共享 Chrome profile 登录态集中在本地;共享 profile 同时被同仓其他浏览器类脚本使用,任一环节被篡改都可能影响公众号后台。
  • 登录二维码可经 Telegram 外发 — 启用 TELEGRAM_BOT_TOKEN/CHAT_ID 后,未登录时会把公众号登录二维码(等同登录凭证)发到该聊天;若 bot token 泄露,第三方可抢先扫码登录。
  • 会真实改动线上账号内容 — API 路线会创建草稿(draft/add);浏览器/图文路线可带 --submit 提交。草稿也会出现在账号内容管理里,误操作需人工清理。
风险提醒:红色,谨慎使用。判红属『能力/策略级』,红线在本 skill 目录内:①【技术性反自动化检测绕过】scripts/cdp.ts 启动 Chrome 时强制传 `extraArgs: ['--disable-blink-features=AutomationControlled', '--start-maximized'],`(第 125 行,是所有浏览器流程的启动路径),同目录 scripts/paste-from-clipboard.ts 自述用途为 `This bypasses CDP's synthetic events which websites can detect and ignore.`(程度说明:本 commit 里 wechat-browser/wechat-article 主流程实际用 CDP 的 Input.dispatchKeyEvent 发粘贴键,该 OS 级助手未被主流程引用)。对照站内先例:notebooklm-skill 判红即因同类 `--disable-blink-features=AutomationControlled`。②【凭据面】为自身声明用途读取账号凭证 WECHAT_APP_ID/WECHAT_APP_SECRET(EXTEND.md/env/.env 多来源)、可选 SSH 身份私钥与 Telegram bot token,并复用含登录态的共享 Chrome profile;③【外部副作用】draft/add 会在公众号后台建草稿,浏览器/图文路线可 --submit 提交,未登录时可选把登录二维码外发到 Telegram。收尾:无 TLS 降级、无沙箱降级、无未转义插值、无客户端冒充;红线来自反自动化检测绕过本身。

5第二遍独立确认

  • [ok] 反自动化检测绕过(判红主因) — scripts/cdp.ts:125 `extraArgs: ['--disable-blink-features=AutomationControlled', '--start-maximized'],` 由 launchChromeBase 传给 Chrome(浏览器脚本共用);scripts/paste-from-clipboard.ts:5-7 明写 'This bypasses CDP's synthetic events which websites can detect and ignore.'
  • [ok] 该绕过是否真的在发布路径上 — cdp.ts 的 Chrome 启动函数是 wechat-browser.ts 与 wechat-article.ts 的入口(两者都从 cdp.ts 导入并把自动化参数交给 launchChromeBase);paste 助手本身在本 commit 未被这两个主流程引用,已在 reason/injection_surface 如实标注程度。
  • [ok] 凭证读取链 — wechat-extend-config.ts 的 loadCredentials 依次尝试 EXTEND.md account → 前缀 env/.env → WECHAT_APP_ID/WECHAT_APP_SECRET(process.env、cwd .env、home .env),与 SKILL.md 描述一致。
  • [ok] 微信 API 端点与 payload 规则 — wechat-api.ts 常量区四个 URL 与 SKILL.md 的 draft/add payload rules(article_type/thumb_media_id/need_open_comment/only_fans_can_comment/content_source_url)逐项对应。
  • [ok] remote-api 的隧道实现与承诺 — wechat-remote-publish.ts 组装 `-N -T -D 127.0.0.1:<port>` 等参数且仅用密钥(`if (config.identityFile) args.push("-i", …)`);SKILL.md 承诺不在远端落文件、AppSecret 不出本机——源码内确无远端文件写入路径(只建隧道与本地 SOCKS 出站)。
  • [ok] Telegram 二维码外发为可选 — wechat-article.ts sendQrToTelegram 在 `if (!botToken || !chatId) return;` 之后才发请求;未配置即完全不走该路径。
  • [ok] 依赖与剪贴板工具链 — package.json/bun.lock 声明 jimp、@jsquash/webp、socks、baoyu-md、baoyu-chrome-cdp;copy-to-clipboard.ts 分别用 swift/osascript、wl-copy/xclip、powershell.exe,与 check-permissions.ts 的检查项一致。
  • [ok] 无其他安全降级 — 全目录 grep no-sandbox / rejectUnauthorized / insecure / NODE_TLS_REJECT_UNAUTHORIZED 零命中;Chrome 启动参数仅常规项 + AutomationControlled。

6结论

  • 三条路线覆盖真实约束:有凭证走快 API,IP 不在白名单走 remote-api 隧道,没凭证也能用登录态走浏览器。
  • remote-api 的设计克制:本地渲染 + 仅微信出站走 SOCKS5,AppSecret 不出本机、不在远端落文件。
  • 面向平台限制做工程:正文图 1MB/格式限制自动转码,封面缺失有 fallback 链,外链默认转底部引用。
  • 输入形态与元数据校验完整:HTML/Markdown/纯文本分流,标题/摘要/作者/来源缺失时的自动生成规则明确。
  • 运维配套齐全:权限自检脚本、首次配置引导、多账号文档、远程发布排错表(含 40164 白名单提示)。
  • 适合:适合需要把写好的文章/图文稳定发到自有公众号的自媒体与团队:有 IP 白名单服务器时用 remote-api,没凭证时用浏览器路线;Markdown 写作者可直接接 markdown-to-html 的产物,多账号可用 accounts 块切号。
    不适合:不适合不愿在本地保存 AppSecret 或不愿复用浏览器登录态的场景;不适合代他人账号发布或与平台风控对抗(本 skill 含反自动化检测绕过,判红);不适合把发布动作完全交给 agent 自动执行的合规敏感场景(建议只用 API 草稿路径,不用浏览器路线的 --submit)。
    安装 agent 直装可复制
    ① 本站镜像 更新 2026-09-15
    方式 A · 人下载镜像包下载 baoyu-post-to-wechat.tar.gz
    sha256: 1f149b01778641d8…
    方式 B · JSON 格式安装指南,复制给 agent
    安装指南
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② 上游 GitHub · 原始来源
    能访问 GitHub?直接去上游安装(实时版,可能已更新)GitHub 原始 ↗
    本页镜像锁定 commit 1567581c26;上游为实时仓库。
    来源信息 GitHub 原始
    作者 / 仓库JimLiu / JimLiu/baoyu-skills
    Stars25926
    最近推送2026-09-10
    本 skill commit1567581c26
    许可MIT(仓库根 LICENSE,Copyright (c) 2026 Jim Liu;GitHub API spdx_id=MIT)
    本站信息
    收录日期2026-09-06
    分类内容创作
    侦查报告AI 侦查 · 2 遍 · 2026-09-06
    本站镜像与 GitHub 原始是不同来源:本站锁定 commit 快照经 /r2 分发;GitHub 为实时上游,内容可能已更新。
    同分类邻近