OpenClaw 微信插件 v2.0.1 → v2.1.1 差异分析

一句话总结:v2.1.1 主要解决了 CDN URL 服务端直传、扫码登录 IDC 跨区重定向、以及 iLink 协议头规范化三个问题,同时精简了 CLI 工具和配置项。

发布日期: 2026-03-30

变更概览

维度v2.0.1v2.1.1
包体积52,120 bytes52,368 bytes (+248)
文件数4242(1 删 1 增)
peerDependencies`openclaw >=2026.3.22`**已移除**
plugin.json version2.0.02.1.1

新增文件: src/weixin-cli.ts(替代 src/log-upload.ts

删除文件: src/log-upload.ts(149 行 → 37 行,大幅精简)

1. 🔑 CDN URL 服务端直传(最重要的变更)

问题: v2.0.1 中,图片/语音/文件的上传和下载 URL 需要客户端自己拼接(cdnBaseUrl + upload_param/encrypt_query_param)。这依赖客户端正确拼接,且在 CDN 节点变化时容易出错。

v2.1.1 方案: 服务端现在可以直接返回完整 URL(upload_full_url / full_url),客户端优先使用,拼接降级为 fallback。

涉及文件:

影响: 这是一个面向 iLink 协议演进的改动。随着微信 iLink 平台成熟,CDN 调度可能随时切换节点,服务端直传 URL 能确保客户端不需要了解 CDN 拓扑。ENABLE_CDN_URL_FALLBACK = true 保证了向后兼容。

2. 🔄 扫码登录 IDC 重定向(关键稳定性改进)

问题: v2.0.1 的 QR 扫码登录只处理 wait/scaned/confirmed/expired 四种状态。如果用户微信账号归属的 IDC(数据中心)和二维码发起的 IDC 不同,登录会卡住或失败。

v2.1.1 方案: 新增 scaned_but_redirect 状态。当用户扫码后,如果需要跳转到另一个 IDC,服务端返回 redirect_host,客户端将后续轮询切换到新地址。

关键代码(src/auth/login-qr.ts):


// 新增状态
status?: "wait" | "scaned" | "confirmed" | "expired" | "scaned_but_redirect";

// 新增字段
redirect_host?: string;
currentApiBaseUrl?: string;

// 处理重定向
case "scaned_but_redirect": {
  const redirectHost = statusResponse.redirect_host;
  if (redirectHost) {
    const newBaseUrl = `https://${redirectHost}`;
    activeLogin.currentApiBaseUrl = newBaseUrl;
  }
  break;
}

其他登录改进:

影响: 这解决了跨区域用户(如微信号归属广州 IDC 但 QR 发到上海 IDC)的登录失败问题,是一个实际生产环境中会遇到的稳定性 bug。

3. 📡 iLink 协议头规范化

问题: v2.0.1 的 API 请求头缺少标准 iLink 身份标识。

v2.1.1 方案: 所有 API 请求(GET 和 POST)统一携带:


iLink-App-Id: bot          (从 package.json 新增字段 ilink_appid 读取)
iLink-App-ClientVersion: 131329  (版本号编码为 uint32: major<<16 | minor<<8 | patch)

涉及文件:

版本编码示例: 2.1.10x00020101 = 131329

影响: 这是协议合规性改动。iLink 平台可能开始要求这些头来做流量区分、版本兼容路由、或统计分析。不加可能导致未来请求被拒绝。

4. 🧹 CLI 工具精简

删除: src/log-upload.ts(149 行)— 移除了 openclaw openclaw-weixin logs-upload 命令和 logUploadUrl 配置项

新增: src/weixin-cli.ts(37 行)— 只保留 openclaw openclaw-weixin uninstall 命令


// v2.1.1 的完整 CLI,非常精简
root.command("uninstall")
  .description("Uninstall the Weixin plugin (cleans up channel config automatically)")
  .action(async () => {
    // 清理 channels.openclaw-weixin 配置 + 卸载插件
  });

影响: 日志上传功能被移除(可能集成到了平台侧或不再需要)。卸载命令从 log-upload 文件中独立出来,职责更清晰。

5. 📋 其他改动

peerDependencies 移除

v2.0.1 要求 openclaw >=2026.3.22,v2.1.1 删除了这个约束。但 src/compat.ts 中的运行时版本检查仍然存在,所以实际兼容性要求没变——只是从安装时报错改为运行时报错。

兼容性提示信息更新


- `Please upgrade OpenClaw, or install openclaw-weixin@1.x (legacy) for older hosts:\n` +
- `  openclaw plugins install @tencent-weixin/openclaw-weixin@legacy`
+ `Please upgrade OpenClaw, or install the compatible track for older hosts:\n` +
+ `  npx @tencent-weixin/openclaw-weixin-cli install`

降级路径从 @legacy tag 改为独立 CLI 工具安装。

System Prompt 新增 MEDIA 指令格式约束


IMPORTANT: When outputting a MEDIA: directive to send a file,
the MEDIA: tag MUST be on its own line — never inline with other text.

解决了 AI 把 MEDIA: 标签和文字混在一行导致文件发送失败的问题。

配置项移除

升级建议

场景建议
当前用 v1.0.2(Jay 的情况)先升 OpenClaw 到 ≥2026.3.22,再 `openclaw plugins install @tencent-weixin/openclaw-weixin@latest`
当前用 v2.0.1直接升级,无 Breaking Change
跨区域用户登录失败升 v2.1.1 可解决(IDC 重定向)
CDN 下载偶尔 404升 v2.1.1(服务端直传 URL 避免客户端拼接错误)

风险评估: 低风险。所有改动都有 fallback 机制(CDN URL fallback、轮询容错),不会破坏现有功能。

文件变更清单

文件变更类型改动量
`package.json`修改移除 peerDeps,新增 ilink_appid
`openclaw.plugin.json`修改版本号
`index.ts`修改import 路径
`src/api/api.ts`**重构**readPackageJson + iLink 协议头
`src/api/types.ts`修改+upload_full_url, +full_url
`src/auth/login-qr.ts`**重构**IDC 重定向 + 固定 base URL + apiGetFetch
`src/cdn/cdn-upload.ts`修改uploadFullUrl 优先
`src/cdn/cdn-url.ts`修改+ENABLE_CDN_URL_FALLBACK
`src/cdn/pic-decrypt.ts`修改fullUrl 参数
`src/cdn/upload.ts`修改双 URL 源适配
`src/channel.ts`修改+MEDIA 指令格式约束
`src/compat.ts`修改降级提示更新
`src/config/config-schema.ts`修改-logUploadUrl
`src/media/media-download.ts`修改全媒体 fullUrl 适配
`src/messaging/process-message.ts`修改hasDownloadableMedia 统一判断
`src/log-upload.ts`**删除**149 行
`src/weixin-cli.ts`**新增**37 行,仅 uninstall 命令

报告生成: 2026-03-30 | 托尼 for Jay