|
1 | | -# wechat-access-unqclawed |
| 1 | +# wechat-openclaw-channel |
2 | 2 |
|
3 | | -OpenClaw 微信通路插件 — 通过 WeChat OAuth 扫码登录获取 token,连接 AGP WebSocket 网关收发消息。 |
| 3 | +> **v1.1.0 — 现已支持 WorkBuddy 模式!** 无需内测码,通过 WorkBuddy 账号即可登录使用。 |
| 4 | +
|
| 5 | +OpenClaw 微信通路插件 — 支持 QClaw 和 WorkBuddy 双模式。 |
4 | 6 |
|
5 | 7 | ## 安装 |
6 | 8 |
|
7 | 9 | ```bash |
8 | | -openclaw plugins install @henryxiaoyang/wechat-access-unqclawed |
| 10 | +openclaw plugins install @henryxiaoyang/wechat-openclaw-channel |
9 | 11 | ``` |
10 | 12 |
|
11 | | -启用渠道: |
| 13 | +## 快速开始 |
12 | 14 |
|
13 | | -```bash |
14 | | -openclaw config set channels.wechat-access-unqclawed.enabled true |
15 | | -``` |
16 | | - |
17 | | -## 首次登录 |
| 15 | +### 1. 登录 |
18 | 16 |
|
19 | 17 | ```bash |
20 | | -openclaw channels login --channel wechat-access-unqclawed |
| 18 | +openclaw wechat login |
21 | 19 | ``` |
22 | 20 |
|
23 | | -终端会显示微信二维码(或浏览器链接),用微信扫码并确认后,浏览器会跳转到新页面,地址栏 URL 形如: |
| 21 | +交互式选择登录模式: |
24 | 22 |
|
25 | | -``` |
26 | | -https://security.guanjia.qq.com/login?code=001j6y000...&state=64c077c4e078... |
27 | | -``` |
| 23 | +- **QClaw** — 微信扫码登录 **目前需要内测码。** |
| 24 | +- **WorkBuddy** — CodeBuddy OAuth 登录 |
28 | 25 |
|
29 | | -复制 `code=` 后面的值(到 `&` 之前),在**另一个终端窗口**写入临时文件: |
| 26 | +### 2. 启动 Gateway |
30 | 27 |
|
31 | 28 | ```bash |
32 | | -echo "001j6y0000MiZV1uYB300cEYDG1j6y0x" > ~/.openclaw/wechat-auth-code.tmp |
| 29 | +openclaw gateway restart |
33 | 30 | ``` |
34 | 31 |
|
35 | | -也可以直接粘贴完整 URL,会自动提取 `code`: |
| 32 | +### 3. 设备绑定(首次使用) |
36 | 33 |
|
37 | 34 | ```bash |
38 | | -echo "https://security.guanjia.qq.com/login?code=001j6y0000MiZV1uYB300cEYDG1j6y0x&state=64c077..." > ~/.openclaw/wechat-auth-code.tmp |
| 35 | +openclaw wechat bind |
39 | 36 | ``` |
40 | 37 |
|
41 | | -原窗口会自动检测并完成登录,token 自动保存。然后重启 Gateway: |
| 38 | +在微信中打开返回的链接完成绑定,绑定后即可通过微信对话。 |
42 | 39 |
|
43 | | -```bash |
44 | | -openclaw gateway restart |
45 | | -``` |
| 40 | +## 登录模式 |
| 41 | + |
| 42 | +### QClaw 模式 |
| 43 | + |
| 44 | +通过微信平台 OAuth 获取 token,连接 WebSocket 网关。**目前需要内测码。** |
| 45 | + |
| 46 | +### WorkBuddy 模式 (推荐) |
| 47 | + |
| 48 | +通过 CodeBuddy OAuth 获取 token,连接 WebSocket 网关。不需要内测码。 |
46 | 49 |
|
47 | | -## 功能 |
| 50 | +## CLI 命令 |
48 | 51 |
|
49 | | -- 微信扫码登录(终端二维码 + 浏览器链接) |
50 | | -- Token 自动持久化,重启免登录 |
51 | | -- AGP 协议 WebSocket 双向通信(流式文本、工具调用) |
52 | | -- 邀请码验证(可配置跳过) |
53 | | -- 支持生产/测试环境切换 |
| 52 | +| 命令 | 说明 | |
| 53 | +|------|------| |
| 54 | +| `openclaw wechat login` | 交互式登录(选择 QClaw 或 WorkBuddy) | |
| 55 | +| `openclaw wechat logout` | 清除登录态 | |
| 56 | +| `openclaw wechat bind` | 获取设备绑定链接 | |
54 | 57 |
|
55 | 58 | ## 配置 |
56 | 59 |
|
57 | | -在 OpenClaw 配置文件的 `channels.wechat-access-unqclawed` 下: |
| 60 | +凭证统一存储在 `~/.openclaw/openclaw.json` 的 `channels.wechat-openclaw-channel` 下: |
58 | 61 |
|
59 | 62 | ```json |
60 | 63 | { |
61 | 64 | "channels": { |
62 | | - "wechat-access-unqclawed": { |
63 | | - "enabled": true, |
64 | | - "token": "", |
65 | | - "wsUrl": "", |
66 | | - "bypassInvite": false, |
67 | | - "environment": "production" |
| 65 | + "wechat-openclaw-channel": { |
| 66 | + "loginMode": "workbuddy", |
| 67 | + "environment": "production", |
| 68 | + "qclaw": { |
| 69 | + "jwtToken": "...", |
| 70 | + "channelToken": "...", |
| 71 | + "apiKey": "...", |
| 72 | + "guid": "...", |
| 73 | + "userId": "...", |
| 74 | + "wsUrl": "...", |
| 75 | + "userInfo": {} |
| 76 | + }, |
| 77 | + "workbuddy": { |
| 78 | + "accessToken": "...", |
| 79 | + "refreshToken": "...", |
| 80 | + "userId": "...", |
| 81 | + "hostId": "...", |
| 82 | + "baseUrl": "https://copilot.tencent.com", |
| 83 | + "userInfo": {} |
| 84 | + } |
68 | 85 | } |
69 | 86 | } |
70 | 87 | } |
71 | 88 | ``` |
72 | 89 |
|
73 | | -| 字段 | 类型 | 说明 | |
74 | | -|------|------|------| |
75 | | -| `enabled` | boolean | 启用渠道(必须设为 `true`) | |
76 | | -| `token` | string | 手动指定 channel token(留空则走扫码登录) | |
77 | | -| `wsUrl` | string | WebSocket 网关地址(留空使用环境默认值) | |
78 | | -| `bypassInvite` | boolean | 跳过邀请码验证 | |
79 | | -| `environment` | string | `production` 或 `test` | |
80 | | -| `authStatePath` | string | 自定义 token 持久化路径 | |
81 | | - |
82 | | -## Token 获取策略 |
83 | | - |
84 | | -1. 读取配置中的 `token` — 如果有,直接使用 |
85 | | -2. 读取本地保存的登录态(`~/.openclaw/wechat-access-auth.json`) |
86 | | -3. 以上都没有 — 运行 `openclaw channels login --channel wechat-access-unqclawed` 手动登录 |
| 90 | +| 字段 | 说明 | |
| 91 | +|------|------| |
| 92 | +| `loginMode` | 当前登录模式:`qclaw` 或 `workbuddy` | |
| 93 | +| `environment` | 环境:`production`(默认)或 `test` | |
| 94 | +| `qclaw` | QClaw 模式凭证(登录后自动写入) | |
| 95 | +| `workbuddy` | WorkBuddy 模式凭证(登录后自动写入) | |
87 | 96 |
|
88 | 97 | ## 项目结构 |
89 | 98 |
|
90 | 99 | ``` |
91 | | -index.ts # 插件入口,注册渠道、CLI、启停 WebSocket |
| 100 | +index.ts # 插件入口,注册渠道、CLI、启停 WebSocket |
92 | 101 | auth/ |
93 | | - types.ts # 认证相关类型 |
94 | | - environments.ts # 生产/测试环境配置 |
95 | | - device-guid.ts # 设备 GUID 生成(随机,持久化) |
96 | | - qclaw-api.ts # QClaw JPRX 网关 API 客户端 |
97 | | - state-store.ts # Token 持久化 |
98 | | - wechat-login.ts # 扫码登录流程编排(交互式) |
99 | | - wechat-qr-poll.ts # QR 码生成与轮询 |
| 102 | + types.ts # 认证相关类型(LoginMode, QClawCredentials, WorkBuddyCredentials) |
| 103 | + environments.ts # 生产/测试环境配置 |
| 104 | + device-guid.ts # 设备 GUID 生成 |
| 105 | + qclaw-api.ts # QClaw JPRX 网关 API 客户端 |
| 106 | + codebuddy-api.ts # CodeBuddy (copilot.tencent.com) API 客户端 |
| 107 | + wechat-login.ts # QClaw 扫码登录流程(交互式) |
| 108 | + wechat-qr-poll.ts # QR 码 URL 生成 |
| 109 | + device-bind.ts # 设备绑定流程 |
100 | 110 | websocket/ |
101 | | - types.ts # AGP 协议类型 |
102 | | - websocket-client.ts # WebSocket 客户端(连接、心跳、重连) |
103 | | - message-handler.ts # 消息处理(调用 Agent) |
104 | | - message-adapter.ts # AGP <-> OpenClaw 消息适配 |
| 111 | + types.ts # AGP 协议类型 |
| 112 | + websocket-client.ts # QClaw WebSocket 客户端 |
| 113 | + centrifuge-client.ts # WorkBuddy Centrifuge WebSocket 客户端 |
| 114 | + message-handler.ts # 消息处理(调用 Agent) |
| 115 | + message-adapter.ts # AGP ↔ OpenClaw 消息适配 |
105 | 116 | common/ |
106 | | - runtime.ts # OpenClaw 运行时单例 |
107 | | - agent-events.ts # Agent 事件订阅 |
108 | | - message-context.ts # 消息上下文构建 |
109 | | -http/ # HTTP webhook 通道(备用) |
| 117 | + runtime.ts # OpenClaw 运行时单例 |
| 118 | + agent-events.ts # Agent 事件订阅 |
| 119 | + message-context.ts # 消息上下文构建 |
110 | 120 | ``` |
111 | 121 |
|
112 | | -## 协议 |
113 | | - |
114 | | -AGP (Agent Gateway Protocol) — 基于 WebSocket Text 帧的 JSON 消息协议,详见 `websocket.md`。 |
115 | | - |
116 | 122 | ## License |
117 | 123 |
|
118 | 124 | MIT |
0 commit comments