@rowger_go/chatu 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +30 -0
- package/.github/workflows/publish.yml +55 -0
- package/INSTALL.md +285 -0
- package/INSTALL.zh.md +285 -0
- package/LICENSE +21 -0
- package/README.md +293 -0
- package/README.zh.md +293 -0
- package/dist/index.d.ts +96 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1381 -0
- package/dist/index.js.map +1 -0
- package/dist/index.test.d.ts +5 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +334 -0
- package/dist/index.test.js.map +1 -0
- package/dist/sdk/adapters/cache.d.ts +94 -0
- package/dist/sdk/adapters/cache.d.ts.map +1 -0
- package/dist/sdk/adapters/cache.js +158 -0
- package/dist/sdk/adapters/cache.js.map +1 -0
- package/dist/sdk/adapters/cache.test.d.ts +14 -0
- package/dist/sdk/adapters/cache.test.d.ts.map +1 -0
- package/dist/sdk/adapters/cache.test.js +178 -0
- package/dist/sdk/adapters/cache.test.js.map +1 -0
- package/dist/sdk/adapters/default.d.ts +24 -0
- package/dist/sdk/adapters/default.d.ts.map +1 -0
- package/dist/sdk/adapters/default.js +151 -0
- package/dist/sdk/adapters/default.js.map +1 -0
- package/dist/sdk/adapters/webhub.d.ts +336 -0
- package/dist/sdk/adapters/webhub.d.ts.map +1 -0
- package/dist/sdk/adapters/webhub.js +663 -0
- package/dist/sdk/adapters/webhub.js.map +1 -0
- package/dist/sdk/adapters/websocket.d.ts +133 -0
- package/dist/sdk/adapters/websocket.d.ts.map +1 -0
- package/dist/sdk/adapters/websocket.js +314 -0
- package/dist/sdk/adapters/websocket.js.map +1 -0
- package/dist/sdk/core/channel.d.ts +104 -0
- package/dist/sdk/core/channel.d.ts.map +1 -0
- package/dist/sdk/core/channel.js +158 -0
- package/dist/sdk/core/channel.js.map +1 -0
- package/dist/sdk/index.d.ts +27 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +33 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/types/adapters.d.ts +128 -0
- package/dist/sdk/types/adapters.d.ts.map +1 -0
- package/dist/sdk/types/adapters.js +10 -0
- package/dist/sdk/types/adapters.js.map +1 -0
- package/dist/sdk/types/channel.d.ts +270 -0
- package/dist/sdk/types/channel.d.ts.map +1 -0
- package/dist/sdk/types/channel.js +36 -0
- package/dist/sdk/types/channel.js.map +1 -0
- package/docs/channel/01-overview.md +117 -0
- package/docs/channel/02-configuration.md +138 -0
- package/docs/channel/03-capabilities.md +86 -0
- package/docs/channel/04-api-reference.md +394 -0
- package/docs/channel/05-message-protocol.md +194 -0
- package/docs/channel/06-security.md +83 -0
- package/docs/channel/README.md +30 -0
- package/docs/sdk/README.md +13 -0
- package/docs/sdk/v2026.1.29-v2026.2.19.md +630 -0
- package/jest.config.js +19 -0
- package/openclaw.plugin.json +113 -0
- package/package.json +74 -0
- package/run-poll.mjs +209 -0
- package/scripts/reload-plugin.sh +78 -0
- package/src/index.test.ts +432 -0
- package/src/index.ts +1638 -0
- package/src/sdk/adapters/cache.test.ts +205 -0
- package/src/sdk/adapters/cache.ts +193 -0
- package/src/sdk/adapters/default.ts +196 -0
- package/src/sdk/adapters/webhub.ts +857 -0
- package/src/sdk/adapters/websocket.ts +378 -0
- package/src/sdk/core/channel.ts +230 -0
- package/src/sdk/index.ts +36 -0
- package/src/sdk/types/adapters.ts +169 -0
- package/src/sdk/types/channel.ts +346 -0
- package/tsconfig.json +31 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/******************************************************************
|
|
3
|
+
* Channel SDK - Channel Types
|
|
4
|
+
*
|
|
5
|
+
* OpenClaw Channel SDK 的核心类型定义
|
|
6
|
+
*
|
|
7
|
+
* @see https://github.com/chatu-ai/openclaw-web-hub-channel
|
|
8
|
+
******************************************************************/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.TargetType = exports.MessageType = void 0;
|
|
11
|
+
/**
|
|
12
|
+
* 消息类型 [Channel SDK 标准]
|
|
13
|
+
*/
|
|
14
|
+
var MessageType;
|
|
15
|
+
(function (MessageType) {
|
|
16
|
+
MessageType["TEXT"] = "text";
|
|
17
|
+
MessageType["IMAGE"] = "image";
|
|
18
|
+
MessageType["VIDEO"] = "video";
|
|
19
|
+
MessageType["AUDIO"] = "audio";
|
|
20
|
+
MessageType["FILE"] = "file";
|
|
21
|
+
MessageType["LOCATION"] = "location";
|
|
22
|
+
/** Plugin-Channel Realtime: operation/command type */
|
|
23
|
+
MessageType["ACTION"] = "action";
|
|
24
|
+
/** Plugin-Channel Realtime: unrecognised type, frontend renders placeholder */
|
|
25
|
+
MessageType["UNKNOWN"] = "unknown";
|
|
26
|
+
})(MessageType || (exports.MessageType = MessageType = {}));
|
|
27
|
+
/**
|
|
28
|
+
* 目标类型 [Channel SDK 标准]
|
|
29
|
+
*/
|
|
30
|
+
var TargetType;
|
|
31
|
+
(function (TargetType) {
|
|
32
|
+
TargetType["USER"] = "user";
|
|
33
|
+
TargetType["GROUP"] = "group";
|
|
34
|
+
TargetType["CHANNEL"] = "channel";
|
|
35
|
+
})(TargetType || (exports.TargetType = TargetType = {}));
|
|
36
|
+
//# sourceMappingURL=channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../../src/sdk/types/channel.ts"],"names":[],"mappings":";AAAA;;;;;;oEAMoE;;;AAWpE;;GAEG;AACH,IAAY,WAWX;AAXD,WAAY,WAAW;IACrB,4BAAa,CAAA;IACb,8BAAe,CAAA;IACf,8BAAe,CAAA;IACf,8BAAe,CAAA;IACf,4BAAa,CAAA;IACb,oCAAqB,CAAA;IACrB,sDAAsD;IACtD,gCAAiB,CAAA;IACjB,+EAA+E;IAC/E,kCAAmB,CAAA;AACrB,CAAC,EAXW,WAAW,2BAAX,WAAW,QAWtB;AAED;;GAEG;AACH,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,6BAAe,CAAA;IACf,iCAAmB,CAAA;AACrB,CAAC,EAJW,UAAU,0BAAV,UAAU,QAIrB"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Chatu Channel Plugin - 架构概述
|
|
2
|
+
|
|
3
|
+
> **下一节**:[02-configuration.md](02-configuration.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. 什么是 Chatu 插件?
|
|
8
|
+
|
|
9
|
+
Chatu 是一个 OpenClaw 频道插件,让 OpenClaw AI 能与任意基于 HTTP/WebSocket 的 **WebHub 后端服务**通信。典型场景是将网站聊天窗口接入 OpenClaw AI。
|
|
10
|
+
|
|
11
|
+
### 角色说明
|
|
12
|
+
|
|
13
|
+
| 角色 | 说明 |
|
|
14
|
+
|------|------|
|
|
15
|
+
| **Browser / 前端** | 用户所在的网页,发送消息的源 |
|
|
16
|
+
| **WebHub 后端服务** | 中间层,管理频道和消息队列,需要开发者实现 |
|
|
17
|
+
| **Chatu 插件** | OpenClaw 内运行,连接 WebHub 后端服务 |
|
|
18
|
+
| **OpenClaw AI** | 处理消息、生成回复 |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 2. 系统架构
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Browser (用户)
|
|
26
|
+
│ POST /api/webhub/channels/:id/messages
|
|
27
|
+
▼
|
|
28
|
+
WebHub 后端服务
|
|
29
|
+
│ WebSocket ws://... /api/channel/ws
|
|
30
|
+
│ (或 HTTP 轮询 fallback)
|
|
31
|
+
▼
|
|
32
|
+
Chatu 插件 (本插件)
|
|
33
|
+
│ 调用 OpenClaw AI 流水线
|
|
34
|
+
▼
|
|
35
|
+
OpenClaw AI
|
|
36
|
+
│ POST /api/channel/messages (AI 回复)
|
|
37
|
+
▼
|
|
38
|
+
WebHub 后端服务
|
|
39
|
+
│ WebSocket push
|
|
40
|
+
▼
|
|
41
|
+
Browser (用户收到 AI 回复)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 3. 消息流向
|
|
47
|
+
|
|
48
|
+
### 3.1 入站(用户 → AI)
|
|
49
|
+
|
|
50
|
+
1. 浏览器发消息到 WebHub 后端
|
|
51
|
+
2. WebHub 后端通过 WebSocket 推送消息到 Chatu 插件
|
|
52
|
+
3. 插件解析消息,调用 OpenClaw AI 流水线
|
|
53
|
+
4. AI 生成回复,插件通过 `POST /api/channel/messages` 回传给 WebHub
|
|
54
|
+
5. WebHub 通过 WebSocket 将 AI 回复推送给浏览器
|
|
55
|
+
|
|
56
|
+
### 3.2 出站(AI → 用户)
|
|
57
|
+
|
|
58
|
+
AI 回复通过以下 HTTP 请求发送:
|
|
59
|
+
|
|
60
|
+
```http
|
|
61
|
+
POST {apiUrl}/api/channel/messages
|
|
62
|
+
X-Channel-Token: {accessToken}
|
|
63
|
+
X-Channel-ID: {channelId}
|
|
64
|
+
Content-Type: application/json
|
|
65
|
+
|
|
66
|
+
{
|
|
67
|
+
"messageId": "msg_1234567_abc",
|
|
68
|
+
"target": { "type": "user", "id": "user-123" },
|
|
69
|
+
"content": { "text": "AI 回复内容", "format": "plain" },
|
|
70
|
+
"timestamp": 1708139100000,
|
|
71
|
+
"role": "ai"
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 4. 连接机制
|
|
78
|
+
|
|
79
|
+
### 4.1 主连接:WebSocket
|
|
80
|
+
|
|
81
|
+
插件优先使用 WebSocket 实时连接:
|
|
82
|
+
|
|
83
|
+
- 连接地址:`{apiUrl}/api/channel/ws`(自动将 http 转为 ws)
|
|
84
|
+
- 认证:请求头携带 `accessToken` 和 `channelId`
|
|
85
|
+
- 断线自动重连(指数退避,最大 30 秒)
|
|
86
|
+
- 重连后自动重发断线期间缓存的未送达回复
|
|
87
|
+
|
|
88
|
+
### 4.2 兜底:HTTP 轮询(已废弃)
|
|
89
|
+
|
|
90
|
+
早期版本使用 HTTP 轮询(`GET /api/channel/messages/pending`,每 2 秒),当前版本已切换为 WebSocket,轮询逻辑保留仅供参考。
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## 5. 生命周期
|
|
95
|
+
|
|
96
|
+
插件通过 OpenClaw 的 Gateway 生命周期管理连接:
|
|
97
|
+
|
|
98
|
+
1. **启动**:通过 `quick-register`(环境变量方式)或手动配置获取凭证,然后调用 `POST /api/channel/connect` 通知后端
|
|
99
|
+
2. **运行**:维持 WebSocket 长连接,持续接收消息并派发给 AI
|
|
100
|
+
3. **停止**:调用 `POST /api/channel/disconnect` 通知后端,断开 WebSocket
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 6. 快速注册(环境变量方式)
|
|
105
|
+
|
|
106
|
+
如果设置了以下环境变量,插件启动时会自动向 WebHub 后端注册:
|
|
107
|
+
|
|
108
|
+
| 环境变量 | 说明 |
|
|
109
|
+
|----------|------|
|
|
110
|
+
| `CHATU_KEY` | 注册密钥 |
|
|
111
|
+
| `CHATU_URL` 或 `CHATU_API_URL` | WebHub 后端地址 |
|
|
112
|
+
|
|
113
|
+
自动注册调用:`POST {apiUrl}/api/channel/quick-register`,获取 `channelId` 和 `accessToken` 后写入配置。
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
*最后更新: 2026-02-25*
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Chatu Channel Plugin - 配置说明
|
|
2
|
+
|
|
3
|
+
> **上一节**:[01-overview.md](01-overview.md)
|
|
4
|
+
> **下一节**:[03-capabilities.md](03-capabilities.md)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. 配置项完整列表
|
|
9
|
+
|
|
10
|
+
| 配置项 | 类型 | 必填 | 默认值 | 说明 |
|
|
11
|
+
|--------|------|------|--------|------|
|
|
12
|
+
| `enabled` | boolean | 否 | `true` | 是否启用此频道 |
|
|
13
|
+
| `apiUrl` | string | **是** | — | WebHub 后端服务的 HTTP 地址 |
|
|
14
|
+
| `channelId` | string | **是** | — | 频道 ID(从 WebHub 后端管理页获取,如 `wh_ch_xxxxx`) |
|
|
15
|
+
| `secret` | string | 二选一 | — | 频道密钥(`wh_secret_xxx`),用于初次注册 |
|
|
16
|
+
| `accessToken` | string | 二选一 | — | 访问凭证(`wh_xxxxxxx`),注册后自动写入或手动填写 |
|
|
17
|
+
| `timeout` | number | 否 | `30000` | HTTP/WS 请求超时时间(毫秒) |
|
|
18
|
+
|
|
19
|
+
> **说明**:`secret` 和 `accessToken` 二选一。建议通过 WebHub 管理界面获取 `accessToken` 后直接配置,`secret` 仅在需要通过 API 注册时使用。
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 2. CLI 快速配置
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# 设置 WebHub 后端地址
|
|
27
|
+
openclaw config set channels.chatu.apiUrl "https://your-webhub.example.com"
|
|
28
|
+
|
|
29
|
+
# 设置频道 ID
|
|
30
|
+
openclaw config set channels.chatu.channelId "wh_ch_xxxxxx"
|
|
31
|
+
|
|
32
|
+
# 设置访问凭证(推荐)
|
|
33
|
+
openclaw config set channels.chatu.accessToken "wh_xxxxxxxxxxxxxxxx"
|
|
34
|
+
|
|
35
|
+
# 或者设置密钥(用于自动注册)
|
|
36
|
+
openclaw config set channels.chatu.secret "wh_secret_xxxxxxxxxx"
|
|
37
|
+
|
|
38
|
+
# 重启网关使配置生效
|
|
39
|
+
openclaw gateway restart
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 3. 配置文件示例
|
|
45
|
+
|
|
46
|
+
编辑 `~/.openclaw/openclaw.json`:
|
|
47
|
+
|
|
48
|
+
### 3.1 单账户配置(推荐)
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"channels": {
|
|
53
|
+
"chatu": {
|
|
54
|
+
"enabled": true,
|
|
55
|
+
"apiUrl": "https://your-webhub.example.com",
|
|
56
|
+
"channelId": "wh_ch_xxxxxx",
|
|
57
|
+
"accessToken": "wh_xxxxxxxxxxxxxxxx",
|
|
58
|
+
"timeout": 30000
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 3.2 多账户配置
|
|
65
|
+
|
|
66
|
+
当需要同时连接多个 WebHub 服务时:
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"channels": {
|
|
71
|
+
"chatu": {
|
|
72
|
+
"accounts": {
|
|
73
|
+
"site-a": {
|
|
74
|
+
"accountId": "site-a",
|
|
75
|
+
"apiUrl": "https://webhub-a.example.com",
|
|
76
|
+
"channelId": "wh_ch_aaaaaa",
|
|
77
|
+
"accessToken": "wh_aaaaaaaaaaaaaaa"
|
|
78
|
+
},
|
|
79
|
+
"site-b": {
|
|
80
|
+
"accountId": "site-b",
|
|
81
|
+
"apiUrl": "https://webhub-b.example.com",
|
|
82
|
+
"channelId": "wh_ch_bbbbbb",
|
|
83
|
+
"accessToken": "wh_bbbbbbbbbbbbbbb"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
配置优先级:账户级 > 频道级(`channels.chatu.*`)> 插件级(`plugins.entries.chatu.config.*`)
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 4. 环境变量(快速注册)
|
|
96
|
+
|
|
97
|
+
如果需要在部署时自动完成频道注册,可以使用环境变量:
|
|
98
|
+
|
|
99
|
+
| 变量名 | 说明 |
|
|
100
|
+
|--------|------|
|
|
101
|
+
| `CHATU_KEY` | 注册密钥(由 WebHub 后端提供) |
|
|
102
|
+
| `CHATU_URL` | WebHub 后端地址(与 `apiUrl` 等效) |
|
|
103
|
+
| `CHATU_API_URL` | 同上,备用名 |
|
|
104
|
+
| `CHATU_CACHE_MAX` | 本地缓存队列最大容量(默认 1000) |
|
|
105
|
+
| `CHATU_CACHE_FILE` | 缓存文件路径前缀(用于持久化未送达消息) |
|
|
106
|
+
|
|
107
|
+
当 `CHATU_KEY` 和 `CHATU_URL` 都设置时,插件启动时自动调用 `POST /api/channel/quick-register` 获取 `channelId` 和 `accessToken`,无需手动配置。
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
export CHATU_KEY="your-registration-key"
|
|
111
|
+
export CHATU_URL="https://your-webhub.example.com"
|
|
112
|
+
openclaw gateway restart
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 5. 验证配置
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# 查看当前 chatu 配置
|
|
121
|
+
openclaw config get channels.chatu
|
|
122
|
+
|
|
123
|
+
# 查看插件加载状态
|
|
124
|
+
openclaw plugins list | grep chatu
|
|
125
|
+
|
|
126
|
+
# 检查连接状态
|
|
127
|
+
openclaw health
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
期望输出(插件已正确加载):
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
│ Chatu │ chatu │ loaded │ .../dist/index.js │ 0.1.0 │
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
*最后更新: 2026-02-25*
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Chatu Channel Plugin - 功能支持矩阵
|
|
2
|
+
|
|
3
|
+
> **上一节**:[02-configuration.md](02-configuration.md)
|
|
4
|
+
> **下一节**:[04-api-reference.md](04-api-reference.md)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. 核心能力
|
|
9
|
+
|
|
10
|
+
| 能力 | 支持状态 | 说明 |
|
|
11
|
+
|------|----------|------|
|
|
12
|
+
| 私聊(Direct Message) | ✅ 支持 | 与单个用户对话 |
|
|
13
|
+
| 群聊(Group) | ✅ 支持 | 多人会话 |
|
|
14
|
+
| 回复 | ✅ 支持 | 回复指定消息,携带 `replyTo` |
|
|
15
|
+
| 消息编辑 | ✅ 支持 | 编辑已发送的消息 |
|
|
16
|
+
| 消息撤回 | ✅ 支持 | 删除已发送的消息 |
|
|
17
|
+
| 表情反应 | ✅ 支持 | Emoji 反应(需后端实现) |
|
|
18
|
+
| 媒体附件 | ✅ 支持 | 图片、文件等(通过 URL 引用) |
|
|
19
|
+
| 消息线程 | ✅ 支持 | 将回复关联到原消息 |
|
|
20
|
+
| 流式输出 | ✅ 支持 | 分块推送 AI 回复(通过 `/stream/chunk` 端点) |
|
|
21
|
+
| 投票 | ❌ 不支持 | — |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 2. 消息内容
|
|
26
|
+
|
|
27
|
+
| 内容类型 | 支持状态 | 说明 |
|
|
28
|
+
|----------|----------|------|
|
|
29
|
+
| 纯文本 | ✅ 支持 | `content.format = "plain"` |
|
|
30
|
+
| 媒体 URL | ✅ 支持 | 图片、文件以 URL 引用,`media[].url` |
|
|
31
|
+
| 回复引用 | ✅ 支持 | `replyTo.id` 携带被回复的消息 ID |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 3. 会话管理
|
|
36
|
+
|
|
37
|
+
| 功能 | 支持状态 | 说明 |
|
|
38
|
+
|------|----------|------|
|
|
39
|
+
| 会话重置 | ✅ 支持 | 通过 WebHub 后端下发 `reset` 命令清空对话历史 |
|
|
40
|
+
| 会话切换 | ✅ 支持 | 通过 `switch` 命令切换到指定历史会话 |
|
|
41
|
+
| Slash 命令 | ✅ 支持 | 以 `/` 开头的消息自动授权为命令 |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 4. 跨频道中继
|
|
46
|
+
|
|
47
|
+
| 功能 | 支持状态 | 说明 |
|
|
48
|
+
|------|----------|------|
|
|
49
|
+
| 跨频道消息同步 | ✅ 支持 | 将其他 OpenClaw 频道(如 WhatsApp、TUI)的消息同步显示到 WebHub 前端 |
|
|
50
|
+
|
|
51
|
+
通过 `POST /api/channel/cross-channel-messages` 实现,消息携带原始频道标识和方向(入站/出站)。
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 5. 连接可靠性
|
|
56
|
+
|
|
57
|
+
| 特性 | 说明 |
|
|
58
|
+
|------|------|
|
|
59
|
+
| 自动重连 | WebSocket 断线后指数退避重连(2s → 4s → 8s → … 上限 30s) |
|
|
60
|
+
| 失败重发 | 断线期间的未送达 AI 回复缓存在内存(可配置持久化到文件),重连后自动重发 |
|
|
61
|
+
| 消息去重 | 内存维护已处理消息 ID 集合,防止 same-ms 消息重复处理(容量 500) |
|
|
62
|
+
| 心跳探测 | 定期 `GET {apiUrl}/health` 检查后端可达性 |
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 6. 声明的能力(代码)
|
|
67
|
+
|
|
68
|
+
以下是插件向 OpenClaw 注册的 `capabilities` 声明(来自 `src/index.ts`):
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
capabilities: {
|
|
72
|
+
chatTypes: ['direct', 'group'],
|
|
73
|
+
reply: true,
|
|
74
|
+
edit: true,
|
|
75
|
+
unsend: true,
|
|
76
|
+
reactions: true,
|
|
77
|
+
polls: false,
|
|
78
|
+
media: true,
|
|
79
|
+
threads: true,
|
|
80
|
+
blockStreaming: false,
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
*最后更新: 2026-02-25*
|