@workclaw/openclaw-workclaw 1.0.0 → 1.0.11
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/README.md +325 -325
- package/package.json +43 -43
- package/src/config-schema.ts +1 -1
- package/src/gateway/tools-list-handler.ts +162 -162
- package/src/media/upload.ts +12 -12
- package/src/outbound/index.ts +183 -183
- package/src/outbound/workclaw-sender.ts +2 -2
- package/src/tools/openclaw-workclaw-cron/api/index.ts +321 -321
- package/src/types.ts +2 -2
- package/src/utils/content.ts +5 -5
- package/templates/IDENTITY.md +1 -1
package/README.md
CHANGED
|
@@ -1,325 +1,325 @@
|
|
|
1
|
-
# openclaw-workclaw
|
|
2
|
-
|
|
3
|
-
OpenClaw WorkClaw 通道插件,用于集成智小途企业通讯平台。
|
|
4
|
-
|
|
5
|
-
## 📖 项目概述
|
|
6
|
-
|
|
7
|
-
openclaw-workclaw 是一个基于 OpenClaw 插件架构的通道插件,用于与智小途企业通讯平台进行深度集成,实现消息收发、定时任务管理等功能。
|
|
8
|
-
|
|
9
|
-
## 📁 项目结构
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
openclaw-workclaw/
|
|
13
|
-
├── src/
|
|
14
|
-
│ ├── index.ts # 插件入口
|
|
15
|
-
│ ├── channel.ts # 通道定义
|
|
16
|
-
│ ├── runtime.ts # 运行时状态管理
|
|
17
|
-
│ ├── accounts.ts # 账号管理
|
|
18
|
-
│ ├── types.ts # 类型定义
|
|
19
|
-
│ ├── config-schema.ts # 配置 Schema
|
|
20
|
-
│ ├── send.ts # 消息发送导出
|
|
21
|
-
│ │
|
|
22
|
-
│ ├── api/ # HTTP API 接口
|
|
23
|
-
│ │ ├── accounts-api.ts # 账号管理 API
|
|
24
|
-
│ │ ├── prompts-api.ts # 提示词管理 API
|
|
25
|
-
│ │ ├── session-api.ts # 会话管理 API
|
|
26
|
-
│ │ ├── skills-api.ts # 技能列表 API
|
|
27
|
-
│ │ └── workspace.ts # 工作区路径解析
|
|
28
|
-
│ │
|
|
29
|
-
│ ├── connection/ # 连接管理
|
|
30
|
-
│ │ └── workclaw-client.ts # WorkClaw API 客户端
|
|
31
|
-
│ │
|
|
32
|
-
│ ├── gateway/ # 网关处理
|
|
33
|
-
│ │ ├── workclaw-gateway.ts # WebSocket 网关
|
|
34
|
-
│ │ ├── message-dispatcher.ts # 消息分发器
|
|
35
|
-
│ │ ├── message-context.ts # 消息上下文解析
|
|
36
|
-
│ │ ├── agent-handlers.ts # 智能体事件处理
|
|
37
|
-
│ │ ├── skills-handler.ts # 技能事件处理
|
|
38
|
-
│ │ ├── skills-list-handler.ts # 技能列表处理
|
|
39
|
-
│ │ ├── tools-list-handler.ts # 工具列表处理
|
|
40
|
-
│ │ ├── config-writer.ts # 配置写入
|
|
41
|
-
│ │ └── reconnect.ts # 重连机制
|
|
42
|
-
│ │
|
|
43
|
-
│ ├── outbound/ # 出站消息
|
|
44
|
-
│ │ ├── index.ts # 出站消息导出
|
|
45
|
-
│ │ └── workclaw-sender.ts # WorkClaw 消息发送
|
|
46
|
-
│ │
|
|
47
|
-
│ ├── tools/ # 内置工具
|
|
48
|
-
│ │ └── openclaw-workclaw-cron/
|
|
49
|
-
│ │ ├── index.ts # 工具注册入口
|
|
50
|
-
│ │ ├── api/ # 工具 API
|
|
51
|
-
│ │ ├── src/
|
|
52
|
-
│ │ │ ├── add/ # 创建定时任务
|
|
53
|
-
│ │ │ ├── update/ # 修改定时任务
|
|
54
|
-
│ │ │ ├── remove/ # 删除定时任务
|
|
55
|
-
│ │ │ ├── enable/ # 启用定时任务
|
|
56
|
-
│ │ │ ├── disable/ # 禁用定时任务
|
|
57
|
-
│ │ │ └── notify/ # 定时触发通知
|
|
58
|
-
│ │ ├── types/ # 类型定义
|
|
59
|
-
│ │ └── utils/ # 工具函数
|
|
60
|
-
│ │
|
|
61
|
-
│ ├── media/ # 媒体处理
|
|
62
|
-
│ │ └── upload.ts # 媒体上传
|
|
63
|
-
│ │
|
|
64
|
-
│ └── utils/ # 工具函数
|
|
65
|
-
│ └── content.ts # 内容处理
|
|
66
|
-
│
|
|
67
|
-
├── skills/ # 技能定义
|
|
68
|
-
│ └── openclaw-workclaw-cron/
|
|
69
|
-
│ └── SKILL.md # 定时任务技能说明
|
|
70
|
-
│
|
|
71
|
-
├── templates/ # 模板文件
|
|
72
|
-
│ ├── IDENTITY.md # 智能体身份定义
|
|
73
|
-
│ └── SOUL.md # 智能体灵魂配置
|
|
74
|
-
│
|
|
75
|
-
├── openclaw.plugin.json # 插件元数据
|
|
76
|
-
├── package.json # 包配置
|
|
77
|
-
└── tsconfig.json # TypeScript 配置
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
## ✨ 功能特性
|
|
81
|
-
|
|
82
|
-
- **WebSocket 实时通信**:支持通过 WebSocket 与智小途平台保持长连接
|
|
83
|
-
- **多账号支持**:支持 per-account 和 per-appKey 两种连接策略
|
|
84
|
-
- **消息收发**:支持文本消息、图片消息、语音消息的发送与接收
|
|
85
|
-
- **定时任务**:内置定时任务管理工具,支持创建、修改、删除、启用/禁用定时任务
|
|
86
|
-
- **流式响应**:支持流式消息输出
|
|
87
|
-
- **心跳保活**:支持配置心跳检测机制
|
|
88
|
-
- **自动重连**:连接断开后自动重连
|
|
89
|
-
- **会话管理**:支持会话重置和会话信息查询
|
|
90
|
-
- **技能管理**:支持动态加载和管理 AI 技能
|
|
91
|
-
|
|
92
|
-
## 📝 配置项说明
|
|
93
|
-
|
|
94
|
-
### 基础配置
|
|
95
|
-
|
|
96
|
-
| 配置项 | 类型 | 必填 | 说明 |
|
|
97
|
-
|--------|------|------|------|
|
|
98
|
-
| enabled | boolean | 否 | 是否启用通道,默认 true |
|
|
99
|
-
| connectionMode | string | 否 | 连接模式,支持 `websocket`,默认 `websocket` |
|
|
100
|
-
| wsConnectionStrategy | string | 否 | WebSocket 连接策略,默认 `per-account` |
|
|
101
|
-
| baseUrl | string | 是 | API 基础地址 |
|
|
102
|
-
| websocketUrl | string | 否 | WebSocket 地址,默认根据 baseUrl 自动生成 |
|
|
103
|
-
| appKey | string | 是 | 应用 Key |
|
|
104
|
-
| appSecret | string | 是 | 应用密钥 |
|
|
105
|
-
| agentId | string/number | 是 | 智能体 ID |
|
|
106
|
-
|
|
107
|
-
### 安全策略配置
|
|
108
|
-
|
|
109
|
-
| 配置项 | 类型 | 必填 | 说明 |
|
|
110
|
-
|--------|------|------|------|
|
|
111
|
-
| dmPolicy | string | 否 | 私信策略,默认 `pairing` |
|
|
112
|
-
| allowFrom | array | 否 | 允许发送消息的用户 ID 列表 |
|
|
113
|
-
| requireMention | boolean | 否 | 是否需要 @ 机器人 |
|
|
114
|
-
|
|
115
|
-
### 消息配置
|
|
116
|
-
|
|
117
|
-
| 配置项 | 类型 | 必填 | 说明 |
|
|
118
|
-
|--------|------|------|------|
|
|
119
|
-
| historyLimit | number | 否 | 历史消息条数限制,默认 0 |
|
|
120
|
-
| dmHistoryLimit | number | 否 | 私信历史消息条数限制,默认 0 |
|
|
121
|
-
| textChunkLimit | number | 否 | 文本分片大小限制 |
|
|
122
|
-
| chunkMode | string | 否 | 分片模式:`length` 或 `newline` |
|
|
123
|
-
| mediaMaxMb | number | 否 | 媒体文件大小限制(MB) |
|
|
124
|
-
| heartbeat | object | 否 | 心跳配置 |
|
|
125
|
-
| renderMode | string | 否 | 渲染模式:`auto`、`raw`、`card` |
|
|
126
|
-
|
|
127
|
-
### 网络配置
|
|
128
|
-
|
|
129
|
-
| 配置项 | 类型 | 必填 | 说明 |
|
|
130
|
-
|--------|------|------|------|
|
|
131
|
-
| localIp | string | 否 | 本地 IP 地址 |
|
|
132
|
-
| allowInsecureTls | boolean | 否 | 允许不安全的 TLS 连接 |
|
|
133
|
-
| requestTimeout | number | 否 | 请求超时时间(毫秒) |
|
|
134
|
-
| uploadUrl | string | 否 | 媒体上传地址 |
|
|
135
|
-
| replyEndpoint | string | 否 | 回复消息端点 |
|
|
136
|
-
| pushEndpoint | string | 否 | 推送消息端点 |
|
|
137
|
-
|
|
138
|
-
### dmPolicy 选项说明
|
|
139
|
-
|
|
140
|
-
| 值 | 说明 |
|
|
141
|
-
|----|------|
|
|
142
|
-
| `open` | 开放策略,允许所有用户发送消息 |
|
|
143
|
-
| `pairing` | 配对策略,需要用户先配对才能发送消息(默认) |
|
|
144
|
-
| `allowlist` | 白名单策略,只允许 allowFrom 列表中的用户发送消息 |
|
|
145
|
-
|
|
146
|
-
### wsConnectionStrategy 选项说明
|
|
147
|
-
|
|
148
|
-
| 值 | 说明 |
|
|
149
|
-
|----|------|
|
|
150
|
-
| `per-account` | 每个账号独立建立 WebSocket 连接(默认) |
|
|
151
|
-
| `per-appKey` | 多个账号共享一个 WebSocket 连接 |
|
|
152
|
-
|
|
153
|
-
## 👥 多账号配置
|
|
154
|
-
|
|
155
|
-
```json
|
|
156
|
-
{
|
|
157
|
-
"channels": {
|
|
158
|
-
"openclaw-workclaw": {
|
|
159
|
-
"baseUrl": "https://open.workbrain.cn",
|
|
160
|
-
"appKey": "your-app-key",
|
|
161
|
-
"appSecret": "your-app-secret",
|
|
162
|
-
"accounts": {
|
|
163
|
-
"default": {
|
|
164
|
-
"agentId": "agent-001",
|
|
165
|
-
"userId": "user-001"
|
|
166
|
-
},
|
|
167
|
-
"agent-002": {
|
|
168
|
-
"agentId": "agent-002",
|
|
169
|
-
"userId": "user-002"
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
## ⏰ 定时任务
|
|
178
|
-
|
|
179
|
-
插件内置定时任务管理工具,支持以下操作:
|
|
180
|
-
|
|
181
|
-
### 工具列表
|
|
182
|
-
|
|
183
|
-
| 工具 | 说明 | 用途 |
|
|
184
|
-
|------|------|------|
|
|
185
|
-
| `openclaw-workclaw-cron-add-params` | 生成创建提醒参数 | 获取创建定时任务的 CLI 参数 |
|
|
186
|
-
| `openclaw-workclaw-cron-add-sync` | 同步创建提醒到后端 | 将创建结果同步到智小途后端 |
|
|
187
|
-
| `openclaw-workclaw-cron-update-params` | 生成修改提醒参数 | 获取修改定时任务的 CLI 参数 |
|
|
188
|
-
| `openclaw-workclaw-cron-update-sync` | 同步修改提醒到后端 | 将修改结果同步到智小途后端 |
|
|
189
|
-
| `openclaw-workclaw-cron-remove-params` | 生成删除提醒参数 | 获取删除定时任务的 CLI 参数 |
|
|
190
|
-
| `openclaw-workclaw-cron-remove-sync` | 同步删除提醒到后端 | 将删除结果同步到智小途后端 |
|
|
191
|
-
| `openclaw-workclaw-cron-enable-params` | 生成启用提醒参数 | 获取启用定时任务的 CLI 参数 |
|
|
192
|
-
| `openclaw-workclaw-cron-enable-sync` | 同步启用提醒到后端 | 将启用结果同步到智小途后端 |
|
|
193
|
-
| `openclaw-workclaw-cron-disable-params` | 生成禁用提醒参数 | 获取禁用定时任务的 CLI 参数 |
|
|
194
|
-
| `openclaw-workclaw-cron-disable-sync` | 同步禁用提醒到后端 | 将禁用结果同步到智小途后端 |
|
|
195
|
-
| `openclaw-workclaw-cron-notify-sync` | 定时触发通知后端 | 定时任务触发时通知后端 |
|
|
196
|
-
|
|
197
|
-
### 时间格式
|
|
198
|
-
|
|
199
|
-
**相对时间**:
|
|
200
|
-
|
|
201
|
-
| 格式 | 说明 | 示例 |
|
|
202
|
-
|------|------|------|
|
|
203
|
-
| `5m` | 5 分钟后 | `"5m"` |
|
|
204
|
-
| `1h` | 1 小时后 | `"1h"` |
|
|
205
|
-
| `1h30m` | 1.5 小时后 | `"1h30m"` |
|
|
206
|
-
| `2d` | 2 天后 | `"2d"` |
|
|
207
|
-
|
|
208
|
-
**注意**:提醒时间不能少于 30 秒
|
|
209
|
-
|
|
210
|
-
**Cron 表达式**:
|
|
211
|
-
|
|
212
|
-
| 表达式 | 说明 | 示例 |
|
|
213
|
-
|--------|------|------|
|
|
214
|
-
| `0 8 * * *` | 每天早上 8 点 | `"0 8 * * *"` |
|
|
215
|
-
| `0 22 * * *` | 每天晚上 10 点 | `"0 22 * * *"` |
|
|
216
|
-
| `0 9 * * 1-5` | 工作日早上 9 点 | `"0 9 * * 1-5"` |
|
|
217
|
-
|
|
218
|
-
### 使用流程
|
|
219
|
-
|
|
220
|
-
```
|
|
221
|
-
用户:"5分钟后提醒我喝水"
|
|
222
|
-
|
|
223
|
-
步骤1:调用 add-params 生成参数
|
|
224
|
-
调用:openclaw-workclaw-cron-add-params({ time: "5m", name: "喝水提醒", message: "该喝水了" })
|
|
225
|
-
|
|
226
|
-
步骤2:使用返回的 cronParams 调用 OpenClaw cron 工具
|
|
227
|
-
|
|
228
|
-
步骤3:从 cron 工具返回值中提取 jobId(如 "7382945612345")
|
|
229
|
-
|
|
230
|
-
步骤4:调用后端同步
|
|
231
|
-
调用:openclaw-workclaw-cron-add-sync({ jobId: "7382945612345", name: "喝水提醒", kind: "cron", message: "该喝水了" })
|
|
232
|
-
|
|
233
|
-
回复:"⏰ 好的,5分钟后提醒你喝水~"
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
## 🌐 HTTP API
|
|
237
|
-
|
|
238
|
-
插件提供以下 HTTP API 接口:
|
|
239
|
-
|
|
240
|
-
### 账号管理 API
|
|
241
|
-
|
|
242
|
-
```
|
|
243
|
-
GET /openclaw-workclaw/accounts # 获取所有账号列表
|
|
244
|
-
GET /openclaw-workclaw/accounts?id=xxx # 获取指定账号信息
|
|
245
|
-
POST /openclaw-workclaw/accounts # 创建新账号
|
|
246
|
-
PUT /openclaw-workclaw/accounts # 更新账号
|
|
247
|
-
DELETE /openclaw-workclaw/accounts?id=xxx # 删除账号
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
### 提示词管理 API
|
|
251
|
-
|
|
252
|
-
```
|
|
253
|
-
GET /openclaw-workclaw/workspace/prompts # 获取所有提示词
|
|
254
|
-
GET /openclaw-workclaw/workspace/prompts?name=xxx # 获取指定提示词
|
|
255
|
-
PUT /openclaw-workclaw/workspace/prompts # 创建/更新提示词
|
|
256
|
-
POST /openclaw-workclaw/workspace/prompts # 创建/更新提示词
|
|
257
|
-
DELETE /openclaw-workclaw/workspace/prompts?name=xxx # 删除提示词
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
### 会话管理 API
|
|
261
|
-
|
|
262
|
-
```
|
|
263
|
-
GET /openclaw-workclaw/sessions # 获取 API 信息
|
|
264
|
-
GET /openclaw-workclaw/sessions?sessionKey=xxx # 获取指定会话信息
|
|
265
|
-
POST /openclaw-workclaw/sessions/reset # 重置会话
|
|
266
|
-
GET /openclaw-workclaw/sessions/store-path # 获取会话存储路径
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
### 技能列表 API
|
|
270
|
-
|
|
271
|
-
```
|
|
272
|
-
GET /openclaw-workclaw/skills # 获取所有已注册的技能
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
## 📄 模板文件
|
|
276
|
-
|
|
277
|
-
插件会自动释放以下模板文件到工作区:
|
|
278
|
-
|
|
279
|
-
| 文件 | 说明 |
|
|
280
|
-
|------|------|
|
|
281
|
-
| `IDENTITY.md` | 智能体身份定义,包含核心定位、身份铁则等 |
|
|
282
|
-
| `SOUL.md` | 智能体灵魂配置,包含系统提示词等 |
|
|
283
|
-
|
|
284
|
-
## 🔧 开发指南
|
|
285
|
-
|
|
286
|
-
### 代码规范
|
|
287
|
-
|
|
288
|
-
- 所有代码使用 TypeScript
|
|
289
|
-
- 使用 Zod 进行配置验证
|
|
290
|
-
- 使用 ESLint 进行代码检查
|
|
291
|
-
- 函数注释使用 JSDoc 规范
|
|
292
|
-
|
|
293
|
-
### 模块说明
|
|
294
|
-
|
|
295
|
-
| 模块 | 说明 |
|
|
296
|
-
|------|------|
|
|
297
|
-
| `src/gateway/` | WebSocket 连接和消息处理 |
|
|
298
|
-
| `src/connection/` | API 客户端和认证 |
|
|
299
|
-
| `src/outbound/` | 出站消息发送 |
|
|
300
|
-
| `src/tools/` | 内置定时任务工具 |
|
|
301
|
-
| `src/api/` | HTTP API 处理器 |
|
|
302
|
-
|
|
303
|
-
### 调试
|
|
304
|
-
|
|
305
|
-
插件内置详细的日志输出,可通过 `api.logger` 查看:
|
|
306
|
-
|
|
307
|
-
```typescript
|
|
308
|
-
api.logger.info('信息日志')
|
|
309
|
-
api.logger.warn('警告日志')
|
|
310
|
-
api.logger.error('错误日志')
|
|
311
|
-
```
|
|
312
|
-
|
|
313
|
-
## 📦 依赖
|
|
314
|
-
|
|
315
|
-
| 依赖 | 版本 | 说明 |
|
|
316
|
-
|------|------|------|
|
|
317
|
-
| openclaw | ^2026.3.13 | OpenClaw 核心框架 |
|
|
318
|
-
| undici | ^7.16.0 | HTTP 客户端和 WebSocket |
|
|
319
|
-
| ws | ^8.19.0 | WebSocket 支持 |
|
|
320
|
-
| zod | ^4.3.6 | 配置验证 |
|
|
321
|
-
| typescript | ^5.6.3 | TypeScript 编译器 |
|
|
322
|
-
|
|
323
|
-
## 📄 许可证
|
|
324
|
-
|
|
325
|
-
MIT
|
|
1
|
+
# openclaw-workclaw
|
|
2
|
+
|
|
3
|
+
OpenClaw WorkClaw 通道插件,用于集成智小途企业通讯平台。
|
|
4
|
+
|
|
5
|
+
## 📖 项目概述
|
|
6
|
+
|
|
7
|
+
openclaw-workclaw 是一个基于 OpenClaw 插件架构的通道插件,用于与智小途企业通讯平台进行深度集成,实现消息收发、定时任务管理等功能。
|
|
8
|
+
|
|
9
|
+
## 📁 项目结构
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
openclaw-workclaw/
|
|
13
|
+
├── src/
|
|
14
|
+
│ ├── index.ts # 插件入口
|
|
15
|
+
│ ├── channel.ts # 通道定义
|
|
16
|
+
│ ├── runtime.ts # 运行时状态管理
|
|
17
|
+
│ ├── accounts.ts # 账号管理
|
|
18
|
+
│ ├── types.ts # 类型定义
|
|
19
|
+
│ ├── config-schema.ts # 配置 Schema
|
|
20
|
+
│ ├── send.ts # 消息发送导出
|
|
21
|
+
│ │
|
|
22
|
+
│ ├── api/ # HTTP API 接口
|
|
23
|
+
│ │ ├── accounts-api.ts # 账号管理 API
|
|
24
|
+
│ │ ├── prompts-api.ts # 提示词管理 API
|
|
25
|
+
│ │ ├── session-api.ts # 会话管理 API
|
|
26
|
+
│ │ ├── skills-api.ts # 技能列表 API
|
|
27
|
+
│ │ └── workspace.ts # 工作区路径解析
|
|
28
|
+
│ │
|
|
29
|
+
│ ├── connection/ # 连接管理
|
|
30
|
+
│ │ └── workclaw-client.ts # WorkClaw API 客户端
|
|
31
|
+
│ │
|
|
32
|
+
│ ├── gateway/ # 网关处理
|
|
33
|
+
│ │ ├── workclaw-gateway.ts # WebSocket 网关
|
|
34
|
+
│ │ ├── message-dispatcher.ts # 消息分发器
|
|
35
|
+
│ │ ├── message-context.ts # 消息上下文解析
|
|
36
|
+
│ │ ├── agent-handlers.ts # 智能体事件处理
|
|
37
|
+
│ │ ├── skills-handler.ts # 技能事件处理
|
|
38
|
+
│ │ ├── skills-list-handler.ts # 技能列表处理
|
|
39
|
+
│ │ ├── tools-list-handler.ts # 工具列表处理
|
|
40
|
+
│ │ ├── config-writer.ts # 配置写入
|
|
41
|
+
│ │ └── reconnect.ts # 重连机制
|
|
42
|
+
│ │
|
|
43
|
+
│ ├── outbound/ # 出站消息
|
|
44
|
+
│ │ ├── index.ts # 出站消息导出
|
|
45
|
+
│ │ └── workclaw-sender.ts # WorkClaw 消息发送
|
|
46
|
+
│ │
|
|
47
|
+
│ ├── tools/ # 内置工具
|
|
48
|
+
│ │ └── openclaw-workclaw-cron/
|
|
49
|
+
│ │ ├── index.ts # 工具注册入口
|
|
50
|
+
│ │ ├── api/ # 工具 API
|
|
51
|
+
│ │ ├── src/
|
|
52
|
+
│ │ │ ├── add/ # 创建定时任务
|
|
53
|
+
│ │ │ ├── update/ # 修改定时任务
|
|
54
|
+
│ │ │ ├── remove/ # 删除定时任务
|
|
55
|
+
│ │ │ ├── enable/ # 启用定时任务
|
|
56
|
+
│ │ │ ├── disable/ # 禁用定时任务
|
|
57
|
+
│ │ │ └── notify/ # 定时触发通知
|
|
58
|
+
│ │ ├── types/ # 类型定义
|
|
59
|
+
│ │ └── utils/ # 工具函数
|
|
60
|
+
│ │
|
|
61
|
+
│ ├── media/ # 媒体处理
|
|
62
|
+
│ │ └── upload.ts # 媒体上传
|
|
63
|
+
│ │
|
|
64
|
+
│ └── utils/ # 工具函数
|
|
65
|
+
│ └── content.ts # 内容处理
|
|
66
|
+
│
|
|
67
|
+
├── skills/ # 技能定义
|
|
68
|
+
│ └── openclaw-workclaw-cron/
|
|
69
|
+
│ └── SKILL.md # 定时任务技能说明
|
|
70
|
+
│
|
|
71
|
+
├── templates/ # 模板文件
|
|
72
|
+
│ ├── IDENTITY.md # 智能体身份定义
|
|
73
|
+
│ └── SOUL.md # 智能体灵魂配置
|
|
74
|
+
│
|
|
75
|
+
├── openclaw.plugin.json # 插件元数据
|
|
76
|
+
├── package.json # 包配置
|
|
77
|
+
└── tsconfig.json # TypeScript 配置
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## ✨ 功能特性
|
|
81
|
+
|
|
82
|
+
- **WebSocket 实时通信**:支持通过 WebSocket 与智小途平台保持长连接
|
|
83
|
+
- **多账号支持**:支持 per-account 和 per-appKey 两种连接策略
|
|
84
|
+
- **消息收发**:支持文本消息、图片消息、语音消息的发送与接收
|
|
85
|
+
- **定时任务**:内置定时任务管理工具,支持创建、修改、删除、启用/禁用定时任务
|
|
86
|
+
- **流式响应**:支持流式消息输出
|
|
87
|
+
- **心跳保活**:支持配置心跳检测机制
|
|
88
|
+
- **自动重连**:连接断开后自动重连
|
|
89
|
+
- **会话管理**:支持会话重置和会话信息查询
|
|
90
|
+
- **技能管理**:支持动态加载和管理 AI 技能
|
|
91
|
+
|
|
92
|
+
## 📝 配置项说明
|
|
93
|
+
|
|
94
|
+
### 基础配置
|
|
95
|
+
|
|
96
|
+
| 配置项 | 类型 | 必填 | 说明 |
|
|
97
|
+
|--------|------|------|------|
|
|
98
|
+
| enabled | boolean | 否 | 是否启用通道,默认 true |
|
|
99
|
+
| connectionMode | string | 否 | 连接模式,支持 `websocket`,默认 `websocket` |
|
|
100
|
+
| wsConnectionStrategy | string | 否 | WebSocket 连接策略,默认 `per-account` |
|
|
101
|
+
| baseUrl | string | 是 | API 基础地址 |
|
|
102
|
+
| websocketUrl | string | 否 | WebSocket 地址,默认根据 baseUrl 自动生成 |
|
|
103
|
+
| appKey | string | 是 | 应用 Key |
|
|
104
|
+
| appSecret | string | 是 | 应用密钥 |
|
|
105
|
+
| agentId | string/number | 是 | 智能体 ID |
|
|
106
|
+
|
|
107
|
+
### 安全策略配置
|
|
108
|
+
|
|
109
|
+
| 配置项 | 类型 | 必填 | 说明 |
|
|
110
|
+
|--------|------|------|------|
|
|
111
|
+
| dmPolicy | string | 否 | 私信策略,默认 `pairing` |
|
|
112
|
+
| allowFrom | array | 否 | 允许发送消息的用户 ID 列表 |
|
|
113
|
+
| requireMention | boolean | 否 | 是否需要 @ 机器人 |
|
|
114
|
+
|
|
115
|
+
### 消息配置
|
|
116
|
+
|
|
117
|
+
| 配置项 | 类型 | 必填 | 说明 |
|
|
118
|
+
|--------|------|------|------|
|
|
119
|
+
| historyLimit | number | 否 | 历史消息条数限制,默认 0 |
|
|
120
|
+
| dmHistoryLimit | number | 否 | 私信历史消息条数限制,默认 0 |
|
|
121
|
+
| textChunkLimit | number | 否 | 文本分片大小限制 |
|
|
122
|
+
| chunkMode | string | 否 | 分片模式:`length` 或 `newline` |
|
|
123
|
+
| mediaMaxMb | number | 否 | 媒体文件大小限制(MB) |
|
|
124
|
+
| heartbeat | object | 否 | 心跳配置 |
|
|
125
|
+
| renderMode | string | 否 | 渲染模式:`auto`、`raw`、`card` |
|
|
126
|
+
|
|
127
|
+
### 网络配置
|
|
128
|
+
|
|
129
|
+
| 配置项 | 类型 | 必填 | 说明 |
|
|
130
|
+
|--------|------|------|------|
|
|
131
|
+
| localIp | string | 否 | 本地 IP 地址 |
|
|
132
|
+
| allowInsecureTls | boolean | 否 | 允许不安全的 TLS 连接 |
|
|
133
|
+
| requestTimeout | number | 否 | 请求超时时间(毫秒) |
|
|
134
|
+
| uploadUrl | string | 否 | 媒体上传地址 |
|
|
135
|
+
| replyEndpoint | string | 否 | 回复消息端点 |
|
|
136
|
+
| pushEndpoint | string | 否 | 推送消息端点 |
|
|
137
|
+
|
|
138
|
+
### dmPolicy 选项说明
|
|
139
|
+
|
|
140
|
+
| 值 | 说明 |
|
|
141
|
+
|----|------|
|
|
142
|
+
| `open` | 开放策略,允许所有用户发送消息 |
|
|
143
|
+
| `pairing` | 配对策略,需要用户先配对才能发送消息(默认) |
|
|
144
|
+
| `allowlist` | 白名单策略,只允许 allowFrom 列表中的用户发送消息 |
|
|
145
|
+
|
|
146
|
+
### wsConnectionStrategy 选项说明
|
|
147
|
+
|
|
148
|
+
| 值 | 说明 |
|
|
149
|
+
|----|------|
|
|
150
|
+
| `per-account` | 每个账号独立建立 WebSocket 连接(默认) |
|
|
151
|
+
| `per-appKey` | 多个账号共享一个 WebSocket 连接 |
|
|
152
|
+
|
|
153
|
+
## 👥 多账号配置
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"channels": {
|
|
158
|
+
"openclaw-workclaw": {
|
|
159
|
+
"baseUrl": "https://open.workbrain.cn",
|
|
160
|
+
"appKey": "your-app-key",
|
|
161
|
+
"appSecret": "your-app-secret",
|
|
162
|
+
"accounts": {
|
|
163
|
+
"default": {
|
|
164
|
+
"agentId": "agent-001",
|
|
165
|
+
"userId": "user-001"
|
|
166
|
+
},
|
|
167
|
+
"agent-002": {
|
|
168
|
+
"agentId": "agent-002",
|
|
169
|
+
"userId": "user-002"
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## ⏰ 定时任务
|
|
178
|
+
|
|
179
|
+
插件内置定时任务管理工具,支持以下操作:
|
|
180
|
+
|
|
181
|
+
### 工具列表
|
|
182
|
+
|
|
183
|
+
| 工具 | 说明 | 用途 |
|
|
184
|
+
|------|------|------|
|
|
185
|
+
| `openclaw-workclaw-cron-add-params` | 生成创建提醒参数 | 获取创建定时任务的 CLI 参数 |
|
|
186
|
+
| `openclaw-workclaw-cron-add-sync` | 同步创建提醒到后端 | 将创建结果同步到智小途后端 |
|
|
187
|
+
| `openclaw-workclaw-cron-update-params` | 生成修改提醒参数 | 获取修改定时任务的 CLI 参数 |
|
|
188
|
+
| `openclaw-workclaw-cron-update-sync` | 同步修改提醒到后端 | 将修改结果同步到智小途后端 |
|
|
189
|
+
| `openclaw-workclaw-cron-remove-params` | 生成删除提醒参数 | 获取删除定时任务的 CLI 参数 |
|
|
190
|
+
| `openclaw-workclaw-cron-remove-sync` | 同步删除提醒到后端 | 将删除结果同步到智小途后端 |
|
|
191
|
+
| `openclaw-workclaw-cron-enable-params` | 生成启用提醒参数 | 获取启用定时任务的 CLI 参数 |
|
|
192
|
+
| `openclaw-workclaw-cron-enable-sync` | 同步启用提醒到后端 | 将启用结果同步到智小途后端 |
|
|
193
|
+
| `openclaw-workclaw-cron-disable-params` | 生成禁用提醒参数 | 获取禁用定时任务的 CLI 参数 |
|
|
194
|
+
| `openclaw-workclaw-cron-disable-sync` | 同步禁用提醒到后端 | 将禁用结果同步到智小途后端 |
|
|
195
|
+
| `openclaw-workclaw-cron-notify-sync` | 定时触发通知后端 | 定时任务触发时通知后端 |
|
|
196
|
+
|
|
197
|
+
### 时间格式
|
|
198
|
+
|
|
199
|
+
**相对时间**:
|
|
200
|
+
|
|
201
|
+
| 格式 | 说明 | 示例 |
|
|
202
|
+
|------|------|------|
|
|
203
|
+
| `5m` | 5 分钟后 | `"5m"` |
|
|
204
|
+
| `1h` | 1 小时后 | `"1h"` |
|
|
205
|
+
| `1h30m` | 1.5 小时后 | `"1h30m"` |
|
|
206
|
+
| `2d` | 2 天后 | `"2d"` |
|
|
207
|
+
|
|
208
|
+
**注意**:提醒时间不能少于 30 秒
|
|
209
|
+
|
|
210
|
+
**Cron 表达式**:
|
|
211
|
+
|
|
212
|
+
| 表达式 | 说明 | 示例 |
|
|
213
|
+
|--------|------|------|
|
|
214
|
+
| `0 8 * * *` | 每天早上 8 点 | `"0 8 * * *"` |
|
|
215
|
+
| `0 22 * * *` | 每天晚上 10 点 | `"0 22 * * *"` |
|
|
216
|
+
| `0 9 * * 1-5` | 工作日早上 9 点 | `"0 9 * * 1-5"` |
|
|
217
|
+
|
|
218
|
+
### 使用流程
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
用户:"5分钟后提醒我喝水"
|
|
222
|
+
|
|
223
|
+
步骤1:调用 add-params 生成参数
|
|
224
|
+
调用:openclaw-workclaw-cron-add-params({ time: "5m", name: "喝水提醒", message: "该喝水了" })
|
|
225
|
+
|
|
226
|
+
步骤2:使用返回的 cronParams 调用 OpenClaw cron 工具
|
|
227
|
+
|
|
228
|
+
步骤3:从 cron 工具返回值中提取 jobId(如 "7382945612345")
|
|
229
|
+
|
|
230
|
+
步骤4:调用后端同步
|
|
231
|
+
调用:openclaw-workclaw-cron-add-sync({ jobId: "7382945612345", name: "喝水提醒", kind: "cron", message: "该喝水了" })
|
|
232
|
+
|
|
233
|
+
回复:"⏰ 好的,5分钟后提醒你喝水~"
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## 🌐 HTTP API
|
|
237
|
+
|
|
238
|
+
插件提供以下 HTTP API 接口:
|
|
239
|
+
|
|
240
|
+
### 账号管理 API
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
GET /openclaw-workclaw/accounts # 获取所有账号列表
|
|
244
|
+
GET /openclaw-workclaw/accounts?id=xxx # 获取指定账号信息
|
|
245
|
+
POST /openclaw-workclaw/accounts # 创建新账号
|
|
246
|
+
PUT /openclaw-workclaw/accounts # 更新账号
|
|
247
|
+
DELETE /openclaw-workclaw/accounts?id=xxx # 删除账号
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### 提示词管理 API
|
|
251
|
+
|
|
252
|
+
```
|
|
253
|
+
GET /openclaw-workclaw/workspace/prompts # 获取所有提示词
|
|
254
|
+
GET /openclaw-workclaw/workspace/prompts?name=xxx # 获取指定提示词
|
|
255
|
+
PUT /openclaw-workclaw/workspace/prompts # 创建/更新提示词
|
|
256
|
+
POST /openclaw-workclaw/workspace/prompts # 创建/更新提示词
|
|
257
|
+
DELETE /openclaw-workclaw/workspace/prompts?name=xxx # 删除提示词
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### 会话管理 API
|
|
261
|
+
|
|
262
|
+
```
|
|
263
|
+
GET /openclaw-workclaw/sessions # 获取 API 信息
|
|
264
|
+
GET /openclaw-workclaw/sessions?sessionKey=xxx # 获取指定会话信息
|
|
265
|
+
POST /openclaw-workclaw/sessions/reset # 重置会话
|
|
266
|
+
GET /openclaw-workclaw/sessions/store-path # 获取会话存储路径
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### 技能列表 API
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
GET /openclaw-workclaw/skills # 获取所有已注册的技能
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## 📄 模板文件
|
|
276
|
+
|
|
277
|
+
插件会自动释放以下模板文件到工作区:
|
|
278
|
+
|
|
279
|
+
| 文件 | 说明 |
|
|
280
|
+
|------|------|
|
|
281
|
+
| `IDENTITY.md` | 智能体身份定义,包含核心定位、身份铁则等 |
|
|
282
|
+
| `SOUL.md` | 智能体灵魂配置,包含系统提示词等 |
|
|
283
|
+
|
|
284
|
+
## 🔧 开发指南
|
|
285
|
+
|
|
286
|
+
### 代码规范
|
|
287
|
+
|
|
288
|
+
- 所有代码使用 TypeScript
|
|
289
|
+
- 使用 Zod 进行配置验证
|
|
290
|
+
- 使用 ESLint 进行代码检查
|
|
291
|
+
- 函数注释使用 JSDoc 规范
|
|
292
|
+
|
|
293
|
+
### 模块说明
|
|
294
|
+
|
|
295
|
+
| 模块 | 说明 |
|
|
296
|
+
|------|------|
|
|
297
|
+
| `src/gateway/` | WebSocket 连接和消息处理 |
|
|
298
|
+
| `src/connection/` | API 客户端和认证 |
|
|
299
|
+
| `src/outbound/` | 出站消息发送 |
|
|
300
|
+
| `src/tools/` | 内置定时任务工具 |
|
|
301
|
+
| `src/api/` | HTTP API 处理器 |
|
|
302
|
+
|
|
303
|
+
### 调试
|
|
304
|
+
|
|
305
|
+
插件内置详细的日志输出,可通过 `api.logger` 查看:
|
|
306
|
+
|
|
307
|
+
```typescript
|
|
308
|
+
api.logger.info('信息日志')
|
|
309
|
+
api.logger.warn('警告日志')
|
|
310
|
+
api.logger.error('错误日志')
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
## 📦 依赖
|
|
314
|
+
|
|
315
|
+
| 依赖 | 版本 | 说明 |
|
|
316
|
+
|------|------|------|
|
|
317
|
+
| openclaw | ^2026.3.13 | OpenClaw 核心框架 |
|
|
318
|
+
| undici | ^7.16.0 | HTTP 客户端和 WebSocket |
|
|
319
|
+
| ws | ^8.19.0 | WebSocket 支持 |
|
|
320
|
+
| zod | ^4.3.6 | 配置验证 |
|
|
321
|
+
| typescript | ^5.6.3 | TypeScript 编译器 |
|
|
322
|
+
|
|
323
|
+
## 📄 许可证
|
|
324
|
+
|
|
325
|
+
MIT
|