Skill · 一键推送公众号草稿

何时用:写完一篇博客想顺便发到公众号上去。

解决什么:把"打开公众号后台 → 复制粘贴 → 调样式 → 上传图片"这一整套手工活省掉,留下"人工审核 + 一键发布"这两件事。

工作模型

插件只把内容推到草稿箱,永远不替你发布。最终的发布按钮只能你自己在 mp.weixin.qq.com 上点。这是设计选择,不是限制——人工审核环节强制保留。

Obsidian 命令面板
   │
   │  Gobog Sync: Push active post to WeChat (公众号) as draft
   ▼
插件:
   1. 拿当前文件 markdown
   2. 扫所有图片引用(标准 ![]() + Obsidian ![[]] 都识别)
   3. 每张本地图片上传成微信永久素材,拿回 CDN URL
   4. 把 markdown 里的图片路径替换成 CDN URL
   5. marked 渲染成 HTML
   6. 内联样式(公众号会剥 <style> 块)
   7. POST /cgi-bin/draft/add,拿到 media_id
   ▼
mp.weixin.qq.com → 草稿箱 → 你看到一篇新草稿
   │
   │  你预览,调整封面 / 摘要(如果需要),点发布
   ▼
公众号读者看到

一次性配置

1. 公众号后台

  • 必须是认证过 / 有 API 权限的服务号或订阅号。个人订阅号没有 API 权限。
  • 后台 → 开发 → 基本配置:
    • 拿到 AppID 和 AppSecret
    • 把本机公网出口 IP 加到 IP 白名单(不加的话所有 API 调用都会 errcode 40164)

不知道自己的出口 IP?终端跑:

curl https://api.ipify.org

2. 插件设置

设置 → Gobog Sync → WeChat 公众号 (草稿):

字段 值 说明
启用 WeChat 推送 ✅ 打开后命令面板里出现推送命令
AppID wx... 公众号后台拿的
AppSecret *** 公众号后台拿的;本地 data.json 加密前明文存储
默认作者 sbraveyoung 显示在 WeChat 文章顶部
默认封面 thumb_media_id (留空 OK) 留空时插件用文章里第一张图作为封面

用

  1. Obsidian 里打开你想推的那篇文章。
  2. 命令面板(Cmd+P)→ Gobog Sync: Push active post to WeChat (公众号) as draft。
  3. 等几秒(图片越多等越久——每张都要上传)。
  4. 弹出 Notice:"WeChat draft created (media_id ...). Open https://mp.weixin.qq.com/ → 草稿箱 to review and publish"。
  5. 浏览器打开公众号后台,去草稿箱预览。

HTML 转换的一些限制

公众号编辑器对 HTML 很挑:

  • 不接受 <style> 块——所有样式必须 inline。插件已经处理:headings / p / li / pre / code / blockquote / table / img 都被注入了 inline 的 style。
  • 不接受外部 CSS 引用。
  • 不接受复杂选择器、media query、CSS 变量。
  • <script> 直接被剥。
  • 数学公式(MathJax / KaTeX)不渲染——只能截图或者用图片代替。

如果你写的文章重度依赖某些 markdown 特性(mermaid 图、math、可折叠 details),公众号端的呈现会跟博客不完全一致。这是公众号生态的限制,不是插件的。

排查

  • errcode 40164:IP 白名单没加。前面 #1 那一步重做。
  • errcode 40001 invalid credential:AppSecret 错了 / AppSecret 在公众号后台被重置过。重新填一遍设置里的 AppSecret,插件会自动刷新 access_token。
  • 报错 "WeChat draft needs a cover image":文章里没有任何本地图片,且没设默认 thumb_media_id。要么文章里加张图,要么去设置里填个默认封面 ID。
  • 草稿创建成功但封面不是我想要的:插件用的是文章里第一张本地图。想换 → 改文章里图片顺序,或者去公众号后台手动换。