jinghui b5acbed047 init: TriliumNext × WechatSync 多平台发布桥接
- bridge/ 常驻桥接服务器(WebSocket 9600 + HTTP 9601,平台状态缓存)
- patch/ TriliumNext 补丁(publisher 服务、API 路由、发布控制台前端)
- install.sh 一键安装 + Docker 容器 CLI 处理
- 全链路使用 host.docker.internal 解决容器访问宿主机
- mcp/ AI Agent 集成说明
2026-10-17 21:59:00 +08:00

TriliumNext × WechatSync 多平台发布

在 TriliumNext 上集成 WechatSync 文章同步助手,实现一篇笔记一键发布到 20+ 中国内容平台(知乎、微信公众号、CSDN、掘金、B站、头条、百家号、小红书…),并在发布控制台实时显示各平台登录状态、发布结果与草稿编辑链接。

架构

┌──────────────┐   ①HTTP /api/publisher/publish   ┌───────────────────┐
│  浏览器        │ ───────────────────────────────▶ │  TriliumNext 服务  │
│ /publish 页面 │ ◀─────────────────────────────── │  (Docker/裸机)     │
└──────────────┘     发布结果 / 平台状态              └─────────┬─────────┘
                                                            ②HTTP │ (9601)
                                                                 ▼
                                                    ┌───────────────────────┐
                                                    │  桥接服务器 (本仓库)     │
                                                    │  wechatsync-server.mjs │
                                                    │  WS 9600 / HTTP 9601   │
                                                    └───────────┬───────────┘
                                                            ③WS │ (9600)
                                                                 ▼
                                                    ┌───────────────────────┐
                                                    │  Chrome + WechatSync   │
                                                    │  扩展(各平台已登录)   │
                                                    └───────────┬───────────┘
                                                            ④   ▼
                                                      知乎 / 公众号 / CSDN / …

为什么需要桥接? WechatSync CLI 只以 SECONDARY 模式短暂运行;Chrome 后台页约 40s 会被休眠导致 WebSocket 断连。桥接服务器常驻 PRIMARY 模式,扩展连一次即可保持在线(25s 心跳保活),并把平台状态缓存起来。

快速开始

1. 安装桥接(宿主机)

sudo bash install.sh

安装后:

  • WebSocket 监听 :9600(Chrome 扩展连这里)
  • HTTP API 监听 :9601(CLI / Trilium 连这里)
  • 生成 Token 存于 /etc/wechatsync-token.conf

2. 配置 Chrome 扩展

  1. 安装 WechatSync 扩展
  2. 打开扩展设置页
  3. 服务器地址填 ws://<NAS_IP>:9600
  4. Token 填上一步生成的值
  5. 点击连接 → 状态变为「已连接」
  6. 在各平台网页登录(扫码)

3. 给 TriliumNext 打补丁

bash patch/patch.sh /path/to/triliumnext

补丁做三件事:

  • 替换 apps/server/src/services/publisher/wechatsync.ts(桥接检查、重试、URL 提取)
  • 替换 apps/server/src/routes/api/publisher_frontend.ts(新增 platform-status 等接口)
  • 替换 apps/client/public/publish.html(发布控制台前端)
  • 重新构建 pnpm server:build

4. 安装 wechatsync CLI

npm install -g @wechatsync/cli

若 Trilium 在 Docker 容器内,CLI 也要装进容器:

docker exec triliumnext npm install -g @wechatsync/cli

5. 访问发布控制台

打开 http://<your-trilium>:<port>/publish

⚠️ Docker 网络关键点

Trilium 在容器、桥接在宿主机时,容器内的 localhost 指向容器自身,访问不到宿主机服务。必须使用 host.docker.internal(Docker 内置 DNS → 宿主机网关 172.17.0.1)。

本仓库所有代码默认使用 host.docker.internal:

  • wechatsync.ts:checkBridge() 用 http://host.docker.internal:9601/status
  • publisher_frontend.ts:platform-status 用 http://host.docker.internal:9601/platforms
  • CLI 调用注入 SYNC_WS_HOST=host.docker.internal
  • @wechatsync/cli 的 hostname 改为读 SYNC_WS_HOST

宿主机裸跑 Trilium 时,设置环境变量 BRIDGE_HOST=localhost 即可。

修改容器内 main.cjs 后必须重启容器才生效(Node 启动时只加载一次代码到内存,改文件不重载)。

目录结构

trilium-wechatsync/
├── install.sh                     # 桥接一键安装
├── bridge/
│   ├── wechatsync-server.mjs      # 常驻桥接服务器(PRIMARY)
│   ├── wechatsync-bridge.service  # systemd 服务
│   └── wechatsync-bridge-wrapper.sh
├── patch/
│   ├── wechatsync.ts              # → apps/server/.../publisher/wechatsync.ts
│   ├── publisher_frontend.ts      # → apps/server/.../routes/api/publisher_frontend.ts
│   ├── publish.html               # → apps/client/public/publish.html
│   └── patch.sh                   # 应用补丁 + Docker 修正
└── mcp/
    └── MCP_INTEGRATION.md         # MCP Server 集成说明

支持的平台

WechatSync 扩展内置 19 个平台 + 可扩展配置:

知乎 · 掘金 · 微博 · 哔哩哔哩 · 百家号 · CSDN · 语雀 · 豆瓣 · 搜狐号 · 雪球 · 微信公众号 · 人人都是产品经理 · 51CTO · 慕课手记 · 开源中国 · 思否 · 博客园 · Markdown 压缩包 · 东方财富 ·(可加)头条号 · 小红书 · 什么值得买

功能

  • ✅ 平台登录状态实时检测(绿=已登录 / 红=未登录 / 灰=未知)
  • ✅ 未登录平台自动置灰不可选
  • ✅ 桥接/扩展断开时返回缓存状态(标注 📦 缓存),页面不再一片空白
  • ✅ 发布结果按文章分组,成功返回草稿编辑链接
  • ✅ 5 次重试等待扩展连接
  • ✅ 支持多文章批量发布到多平台

已知问题

  • 什么值得买 (SMZDM):扩展侧 CSRF token 缺失,发布报错。其他平台正常。
  • 头条号 / 小红书 / 什么值得买:不在扩展原生 listPlatforms() 中,可发布但登录状态显示「❓ 未知」。

协议

MIT

S
Description
TriliumNext × WechatSync 多平台发布桥接 — 一篇笔记一键发布到 20+ 中国内容平台
Readme
47 KiB
0 Stars 1 Watchers 0 Forks
Languages
HTML 32.5%
TypeScript 30.2%
JavaScript 20.5%
Shell 16.8%