@marshulll/openclaw-wecom 0.1.4
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.en.md +98 -0
- package/README.md +98 -0
- package/README.zh.md +98 -0
- package/docs/INSTALL.md +103 -0
- package/docs/wecom.config.example.json +19 -0
- package/docs/wecom.config.full.example.json +55 -0
- package/openclaw.plugin.json +9 -0
- package/package.json +60 -0
- package/wecom/index.ts +23 -0
- package/wecom/openclaw.plugin.json +9 -0
- package/wecom/package.json +45 -0
- package/wecom/src/accounts.ts +136 -0
- package/wecom/src/channel.ts +221 -0
- package/wecom/src/commands.ts +96 -0
- package/wecom/src/config-schema.ts +96 -0
- package/wecom/src/crypto.ts +129 -0
- package/wecom/src/format.ts +58 -0
- package/wecom/src/monitor.ts +72 -0
- package/wecom/src/runtime.ts +14 -0
- package/wecom/src/types.ts +140 -0
- package/wecom/src/wecom-api.ts +366 -0
- package/wecom/src/wecom-app.ts +635 -0
- package/wecom/src/wecom-bot.ts +645 -0
package/README.en.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# OpenClaw WeCom Plugin (Dual Mode)
|
|
2
|
+
|
|
3
|
+
English | [中文](README.zh.md)
|
|
4
|
+
|
|
5
|
+
OpenClaw WeCom plugin supporting **Bot API mode** and **Internal App mode** with multi-account, media, and group chat.
|
|
6
|
+
|
|
7
|
+
> `docs/TECHNICAL.md` is the source of truth. Read it before development.
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
- Dual mode: Bot API (JSON callback + stream) / App (XML callback + ACK + proactive send)
|
|
11
|
+
- Multi-account: `channels.wecom.accounts`
|
|
12
|
+
- Message types: text / image / voice / video / file (send & receive)
|
|
13
|
+
- Commands: `/help`, `/status`, `/clear`
|
|
14
|
+
- Stability: signature verification, AES decrypt, token cache, rate limit & retries
|
|
15
|
+
- Group chat: uses `appchat/send` when `chatId` is present
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
### npm
|
|
19
|
+
```bash
|
|
20
|
+
openclaw plugins install @marshulll/openclaw-wecom
|
|
21
|
+
openclaw plugins enable openclaw-wecom
|
|
22
|
+
openclaw gateway restart
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Local path
|
|
26
|
+
```bash
|
|
27
|
+
openclaw plugins install --link /path/to/openclaw-wecom
|
|
28
|
+
openclaw plugins enable wecom
|
|
29
|
+
openclaw gateway restart
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Configuration
|
|
33
|
+
Write config to `~/.openclaw/openclaw.json`.
|
|
34
|
+
Recommended: use main config only; env vars are fallback.
|
|
35
|
+
|
|
36
|
+
Minimal example: `docs/wecom.config.example.json`
|
|
37
|
+
Full example: `docs/wecom.config.full.example.json`
|
|
38
|
+
Install guide: `docs/INSTALL.md`
|
|
39
|
+
|
|
40
|
+
### Minimal config
|
|
41
|
+
```json5
|
|
42
|
+
{
|
|
43
|
+
"channels": {
|
|
44
|
+
"wecom": {
|
|
45
|
+
"enabled": true,
|
|
46
|
+
"mode": "both",
|
|
47
|
+
"webhookPath": "/wecom",
|
|
48
|
+
"token": "BOT_TOKEN",
|
|
49
|
+
"encodingAESKey": "BOT_AES",
|
|
50
|
+
"receiveId": "BOT_ID",
|
|
51
|
+
"corpId": "CORP_ID",
|
|
52
|
+
"corpSecret": "CORP_SECRET",
|
|
53
|
+
"agentId": 1000001,
|
|
54
|
+
"callbackToken": "CALLBACK_TOKEN",
|
|
55
|
+
"callbackAesKey": "CALLBACK_AES"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Key notes
|
|
62
|
+
- Bot mode `receiveId`: recommended to set **Bot ID (aibotid)** for strict crypto validation
|
|
63
|
+
- App mode decryption uses **CorpID** (`corpId`)
|
|
64
|
+
|
|
65
|
+
## Webhook setup (WeCom Admin)
|
|
66
|
+
### Bot mode
|
|
67
|
+
- URL: `https://your-domain/wecom`
|
|
68
|
+
- Token: custom string
|
|
69
|
+
- EncodingAESKey: generated in admin
|
|
70
|
+
- Bot ID (aibotid): map to `receiveId`
|
|
71
|
+
|
|
72
|
+
### App mode
|
|
73
|
+
- URL: `https://your-domain/wecom`
|
|
74
|
+
- Token / EncodingAESKey: map to `callbackToken` / `callbackAesKey`
|
|
75
|
+
- CorpID / AgentID / Secret: map to `corpId` / `agentId` / `corpSecret`
|
|
76
|
+
|
|
77
|
+
> HTTPS is required. Restart OpenClaw gateway after enabling the plugin.
|
|
78
|
+
|
|
79
|
+
## Modes
|
|
80
|
+
- `mode: "bot"`: Bot API only
|
|
81
|
+
- `mode: "app"`: App only
|
|
82
|
+
- `mode: "both"`: both modes (default)
|
|
83
|
+
|
|
84
|
+
## Media handling
|
|
85
|
+
- App mode: downloads inbound media to local temp dir (`media.tempDir`)
|
|
86
|
+
- Bot mode media bridge: if reply payload includes `mediaUrl + mediaType`,
|
|
87
|
+
and App credentials are present, media will be uploaded and sent
|
|
88
|
+
|
|
89
|
+
## Troubleshooting
|
|
90
|
+
- Callback verification failed: check Token / AESKey / URL
|
|
91
|
+
- No reply: ensure plugin enabled and gateway restarted
|
|
92
|
+
- Media too large: adjust `media.maxBytes` or send smaller files
|
|
93
|
+
- invalid access_token: verify `corpId/corpSecret/agentId`
|
|
94
|
+
|
|
95
|
+
## Docs
|
|
96
|
+
- Dev doc: `docs/TECHNICAL.md`
|
|
97
|
+
- Install: `docs/INSTALL.md`
|
|
98
|
+
- Examples: `docs/wecom.config.example.json` / `docs/wecom.config.full.example.json`
|
package/README.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# OpenClaw 企业微信插件(双模式)
|
|
2
|
+
|
|
3
|
+
中文 | [English](README.en.md)
|
|
4
|
+
|
|
5
|
+
OpenClaw WeCom 插件,支持 **智能机器人 API 模式** 与 **自建应用模式**(双模式),并支持多账户、媒体消息与群聊。
|
|
6
|
+
|
|
7
|
+
> 以 `docs/TECHNICAL.md` 为准;开发前请先阅读。
|
|
8
|
+
|
|
9
|
+
## 功能概览
|
|
10
|
+
- 双模式:Bot API(JSON 回调 + stream)/ App(XML 回调 + ACK + 主动发送)
|
|
11
|
+
- 多账户:`channels.wecom.accounts`
|
|
12
|
+
- 消息类型:文本 / 图片 / 语音 / 视频 / 文件(收发均支持)
|
|
13
|
+
- 机器人命令:`/help`、`/status`、`/clear`
|
|
14
|
+
- 稳定性:签名校验、AES 解密、token 缓存、限流与重试
|
|
15
|
+
- 群聊:自动识别 `chatId` 并使用 `appchat/send`
|
|
16
|
+
|
|
17
|
+
## 安装
|
|
18
|
+
### npm 安装
|
|
19
|
+
```bash
|
|
20
|
+
openclaw plugins install @marshulll/openclaw-wecom
|
|
21
|
+
openclaw plugins enable openclaw-wecom
|
|
22
|
+
openclaw gateway restart
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 本地路径加载
|
|
26
|
+
```bash
|
|
27
|
+
openclaw plugins install --link /path/to/openclaw-wecom
|
|
28
|
+
openclaw plugins enable wecom
|
|
29
|
+
openclaw gateway restart
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 配置
|
|
33
|
+
主配置写入:`~/.openclaw/openclaw.json`
|
|
34
|
+
推荐仅使用主配置;环境变量仅作为兜底。
|
|
35
|
+
|
|
36
|
+
最小示例:`docs/wecom.config.example.json`
|
|
37
|
+
全量示例:`docs/wecom.config.full.example.json`
|
|
38
|
+
安装与配置说明:`docs/INSTALL.md`
|
|
39
|
+
|
|
40
|
+
### 最小配置示例
|
|
41
|
+
```json5
|
|
42
|
+
{
|
|
43
|
+
"channels": {
|
|
44
|
+
"wecom": {
|
|
45
|
+
"enabled": true,
|
|
46
|
+
"mode": "both",
|
|
47
|
+
"webhookPath": "/wecom",
|
|
48
|
+
"token": "BOT_TOKEN",
|
|
49
|
+
"encodingAESKey": "BOT_AES",
|
|
50
|
+
"receiveId": "BOT_ID",
|
|
51
|
+
"corpId": "CORP_ID",
|
|
52
|
+
"corpSecret": "CORP_SECRET",
|
|
53
|
+
"agentId": 1000001,
|
|
54
|
+
"callbackToken": "CALLBACK_TOKEN",
|
|
55
|
+
"callbackAesKey": "CALLBACK_AES"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 关键字段说明
|
|
62
|
+
- Bot 模式 `receiveId`:建议填写 **Bot ID(aibotid)**,用于回调加解密校验
|
|
63
|
+
- App 模式回调解密使用 **CorpID**(`corpId`)
|
|
64
|
+
|
|
65
|
+
## 回调配置(企业微信后台)
|
|
66
|
+
### Bot 模式
|
|
67
|
+
- URL:`https://你的域名/wecom`
|
|
68
|
+
- Token:自定义
|
|
69
|
+
- EncodingAESKey:后台生成
|
|
70
|
+
- Bot ID(aibotid):填写到 `receiveId`
|
|
71
|
+
|
|
72
|
+
### App 模式
|
|
73
|
+
- URL:`https://你的域名/wecom`
|
|
74
|
+
- Token / EncodingAESKey:后台生成,对应 `callbackToken` / `callbackAesKey`
|
|
75
|
+
- CorpID / AgentID / Secret:分别对应 `corpId` / `agentId` / `corpSecret`
|
|
76
|
+
|
|
77
|
+
> 两种模式都要求公网 HTTPS;配置完成后请重启 OpenClaw gateway。
|
|
78
|
+
|
|
79
|
+
## 模式说明
|
|
80
|
+
- `mode: "bot"`:只启用智能机器人 API 模式
|
|
81
|
+
- `mode: "app"`:只启用自建应用模式
|
|
82
|
+
- `mode: "both"`:同时启用两种模式(默认)
|
|
83
|
+
|
|
84
|
+
## 媒体处理说明
|
|
85
|
+
- App 模式:收到媒体会下载到本地临时目录(可配置 `media.tempDir`)
|
|
86
|
+
- Bot 模式媒体桥接:当 reply payload 含 `mediaUrl + mediaType` 时,
|
|
87
|
+
若已配置 App 凭据,会自动上传并发送媒体
|
|
88
|
+
|
|
89
|
+
## 常见问题
|
|
90
|
+
- 回调验证失败:检查 Token / AESKey / URL 是否一致
|
|
91
|
+
- 没有回复:确认已启用插件并重启 gateway
|
|
92
|
+
- 媒体过大:调整 `media.maxBytes` 或发送更小文件
|
|
93
|
+
- invalid access_token:检查 `corpId/corpSecret/agentId`
|
|
94
|
+
|
|
95
|
+
## 资料入口
|
|
96
|
+
- 开发文档:`docs/TECHNICAL.md`
|
|
97
|
+
- 安装配置:`docs/INSTALL.md`
|
|
98
|
+
- 配置示例:`docs/wecom.config.example.json` / `docs/wecom.config.full.example.json`
|
package/README.zh.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# OpenClaw 企业微信插件(双模式)
|
|
2
|
+
|
|
3
|
+
中文 | [English](README.en.md)
|
|
4
|
+
|
|
5
|
+
OpenClaw WeCom 插件,支持 **智能机器人 API 模式** 与 **自建应用模式**(双模式),并支持多账户、媒体消息与群聊。
|
|
6
|
+
|
|
7
|
+
> 以 `docs/TECHNICAL.md` 为准;开发前请先阅读。
|
|
8
|
+
|
|
9
|
+
## 功能概览
|
|
10
|
+
- 双模式:Bot API(JSON 回调 + stream)/ App(XML 回调 + ACK + 主动发送)
|
|
11
|
+
- 多账户:`channels.wecom.accounts`
|
|
12
|
+
- 消息类型:文本 / 图片 / 语音 / 视频 / 文件(收发均支持)
|
|
13
|
+
- 机器人命令:`/help`、`/status`、`/clear`
|
|
14
|
+
- 稳定性:签名校验、AES 解密、token 缓存、限流与重试
|
|
15
|
+
- 群聊:自动识别 `chatId` 并使用 `appchat/send`
|
|
16
|
+
|
|
17
|
+
## 安装
|
|
18
|
+
### npm 安装
|
|
19
|
+
```bash
|
|
20
|
+
openclaw plugins install @marshulll/openclaw-wecom
|
|
21
|
+
openclaw plugins enable openclaw-wecom
|
|
22
|
+
openclaw gateway restart
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 本地路径加载
|
|
26
|
+
```bash
|
|
27
|
+
openclaw plugins install --link /path/to/openclaw-wecom
|
|
28
|
+
openclaw plugins enable wecom
|
|
29
|
+
openclaw gateway restart
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 配置
|
|
33
|
+
主配置写入:`~/.openclaw/openclaw.json`
|
|
34
|
+
推荐仅使用主配置;环境变量仅作为兜底。
|
|
35
|
+
|
|
36
|
+
最小示例:`docs/wecom.config.example.json`
|
|
37
|
+
全量示例:`docs/wecom.config.full.example.json`
|
|
38
|
+
安装与配置说明:`docs/INSTALL.md`
|
|
39
|
+
|
|
40
|
+
### 最小配置示例
|
|
41
|
+
```json5
|
|
42
|
+
{
|
|
43
|
+
"channels": {
|
|
44
|
+
"wecom": {
|
|
45
|
+
"enabled": true,
|
|
46
|
+
"mode": "both",
|
|
47
|
+
"webhookPath": "/wecom",
|
|
48
|
+
"token": "BOT_TOKEN",
|
|
49
|
+
"encodingAESKey": "BOT_AES",
|
|
50
|
+
"receiveId": "BOT_ID",
|
|
51
|
+
"corpId": "CORP_ID",
|
|
52
|
+
"corpSecret": "CORP_SECRET",
|
|
53
|
+
"agentId": 1000001,
|
|
54
|
+
"callbackToken": "CALLBACK_TOKEN",
|
|
55
|
+
"callbackAesKey": "CALLBACK_AES"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 关键字段说明
|
|
62
|
+
- Bot 模式 `receiveId`:建议填写 **Bot ID(aibotid)**,用于回调加解密校验
|
|
63
|
+
- App 模式回调解密使用 **CorpID**(`corpId`)
|
|
64
|
+
|
|
65
|
+
## 回调配置(企业微信后台)
|
|
66
|
+
### Bot 模式
|
|
67
|
+
- URL:`https://你的域名/wecom`
|
|
68
|
+
- Token:自定义
|
|
69
|
+
- EncodingAESKey:后台生成
|
|
70
|
+
- Bot ID(aibotid):填写到 `receiveId`
|
|
71
|
+
|
|
72
|
+
### App 模式
|
|
73
|
+
- URL:`https://你的域名/wecom`
|
|
74
|
+
- Token / EncodingAESKey:后台生成,对应 `callbackToken` / `callbackAesKey`
|
|
75
|
+
- CorpID / AgentID / Secret:分别对应 `corpId` / `agentId` / `corpSecret`
|
|
76
|
+
|
|
77
|
+
> 两种模式都要求公网 HTTPS;配置完成后请重启 OpenClaw gateway。
|
|
78
|
+
|
|
79
|
+
## 模式说明
|
|
80
|
+
- `mode: "bot"`:只启用智能机器人 API 模式
|
|
81
|
+
- `mode: "app"`:只启用自建应用模式
|
|
82
|
+
- `mode: "both"`:同时启用两种模式(默认)
|
|
83
|
+
|
|
84
|
+
## 媒体处理说明
|
|
85
|
+
- App 模式:收到媒体会下载到本地临时目录(可配置 `media.tempDir`)
|
|
86
|
+
- Bot 模式媒体桥接:当 reply payload 含 `mediaUrl + mediaType` 时,
|
|
87
|
+
若已配置 App 凭据,会自动上传并发送媒体
|
|
88
|
+
|
|
89
|
+
## 常见问题
|
|
90
|
+
- 回调验证失败:检查 Token / AESKey / URL 是否一致
|
|
91
|
+
- 没有回复:确认已启用插件并重启 gateway
|
|
92
|
+
- 媒体过大:调整 `media.maxBytes` 或发送更小文件
|
|
93
|
+
- invalid access_token:检查 `corpId/corpSecret/agentId`
|
|
94
|
+
|
|
95
|
+
## 资料入口
|
|
96
|
+
- 开发文档:`docs/TECHNICAL.md`
|
|
97
|
+
- 安装配置:`docs/INSTALL.md`
|
|
98
|
+
- 配置示例:`docs/wecom.config.example.json` / `docs/wecom.config.full.example.json`
|
package/docs/INSTALL.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# OpenClaw WeCom 插件安装与配置
|
|
2
|
+
|
|
3
|
+
## 安装
|
|
4
|
+
|
|
5
|
+
### 方式一:npm 安装
|
|
6
|
+
```bash
|
|
7
|
+
openclaw plugins install @marshulll/openclaw-wecom
|
|
8
|
+
openclaw plugins enable openclaw-wecom
|
|
9
|
+
openclaw gateway restart
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
### 方式二:本地路径加载
|
|
13
|
+
```bash
|
|
14
|
+
openclaw plugins install --link /path/to/openclaw-wecom
|
|
15
|
+
openclaw plugins enable wecom
|
|
16
|
+
openclaw gateway restart
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 配置
|
|
20
|
+
|
|
21
|
+
将配置写入 OpenClaw 配置文件(通常在 `~/.openclaw/openclaw.json`):
|
|
22
|
+
|
|
23
|
+
- 配置模板(最小):`docs/wecom.config.example.json`
|
|
24
|
+
- 配置模板(全量):`docs/wecom.config.full.example.json`
|
|
25
|
+
|
|
26
|
+
> 推荐仅使用 `~/.openclaw/openclaw.json` 作为主配置来源;`env.vars` 与系统环境变量仅作为兜底。
|
|
27
|
+
|
|
28
|
+
最小示例(单账户):
|
|
29
|
+
```json5
|
|
30
|
+
{
|
|
31
|
+
"channels": {
|
|
32
|
+
"wecom": {
|
|
33
|
+
"enabled": true,
|
|
34
|
+
"mode": "both",
|
|
35
|
+
"webhookPath": "/wecom",
|
|
36
|
+
|
|
37
|
+
"token": "BOT_TOKEN",
|
|
38
|
+
"encodingAESKey": "BOT_AES",
|
|
39
|
+
"receiveId": "BOT_ID",
|
|
40
|
+
|
|
41
|
+
"corpId": "CORP_ID",
|
|
42
|
+
"corpSecret": "CORP_SECRET",
|
|
43
|
+
"agentId": 1000001,
|
|
44
|
+
"callbackToken": "CALLBACK_TOKEN",
|
|
45
|
+
"callbackAesKey": "CALLBACK_AES"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 环境变量示例(可选)
|
|
52
|
+
|
|
53
|
+
如果你更希望用环境变量,也可以写在 `~/.openclaw/openclaw.json` 的 `env.vars` 中(优先级低于 `channels.wecom` 配置):
|
|
54
|
+
|
|
55
|
+
```json5
|
|
56
|
+
{
|
|
57
|
+
"env": {
|
|
58
|
+
"vars": {
|
|
59
|
+
"WECOM_TOKEN": "BOT_TOKEN",
|
|
60
|
+
"WECOM_ENCODING_AES_KEY": "BOT_AES",
|
|
61
|
+
"WECOM_RECEIVE_ID": "BOT_ID",
|
|
62
|
+
"WECOM_CORP_ID": "CORP_ID",
|
|
63
|
+
"WECOM_CORP_SECRET": "CORP_SECRET",
|
|
64
|
+
"WECOM_AGENT_ID": "1000001",
|
|
65
|
+
"WECOM_CALLBACK_TOKEN": "CALLBACK_TOKEN",
|
|
66
|
+
"WECOM_CALLBACK_AES_KEY": "CALLBACK_AES",
|
|
67
|
+
"WECOM_WEBHOOK_PATH": "/wecom"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
多账户示例(ACCOUNT 为大写):
|
|
74
|
+
|
|
75
|
+
```json5
|
|
76
|
+
{
|
|
77
|
+
"env": {
|
|
78
|
+
"vars": {
|
|
79
|
+
"WECOM_SALES_TOKEN": "BOT_TOKEN",
|
|
80
|
+
"WECOM_SALES_ENCODING_AES_KEY": "BOT_AES",
|
|
81
|
+
"WECOM_SALES_RECEIVE_ID": "BOT_ID",
|
|
82
|
+
"WECOM_SALES_CORP_ID": "CORP_ID",
|
|
83
|
+
"WECOM_SALES_CORP_SECRET": "CORP_SECRET",
|
|
84
|
+
"WECOM_SALES_AGENT_ID": "1000002",
|
|
85
|
+
"WECOM_SALES_CALLBACK_TOKEN": "CALLBACK_TOKEN",
|
|
86
|
+
"WECOM_SALES_CALLBACK_AES_KEY": "CALLBACK_AES",
|
|
87
|
+
"WECOM_SALES_WEBHOOK_PATH": "/wecom/sales"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 字段说明
|
|
94
|
+
- Bot 模式 `receiveId`:建议填写 **Bot ID(aibotid)**,用于回调加解密校验;不填也可通过,但会降低校验严格性。
|
|
95
|
+
- App 模式回调解密使用 **CorpID**(即 `corpId`),与 Bot 模式的 `receiveId` 无关。
|
|
96
|
+
|
|
97
|
+
## Webhook 验证
|
|
98
|
+
- Bot 模式与 App 模式都要求公网 HTTPS。
|
|
99
|
+
- 在企业微信后台配置回调 URL。
|
|
100
|
+
|
|
101
|
+
## 常见问题
|
|
102
|
+
- 回调验证失败:检查 Token / AESKey / URL 是否一致
|
|
103
|
+
- 没有回复:检查 OpenClaw 是否已启用插件并重启 gateway
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"channels": {
|
|
3
|
+
"wecom": {
|
|
4
|
+
"enabled": true,
|
|
5
|
+
"mode": "both",
|
|
6
|
+
"webhookPath": "/wecom",
|
|
7
|
+
|
|
8
|
+
"token": "BOT_TOKEN",
|
|
9
|
+
"encodingAESKey": "BOT_AES",
|
|
10
|
+
"receiveId": "BOT_ID",
|
|
11
|
+
|
|
12
|
+
"corpId": "CORP_ID",
|
|
13
|
+
"corpSecret": "CORP_SECRET",
|
|
14
|
+
"agentId": 1000001,
|
|
15
|
+
"callbackToken": "CALLBACK_TOKEN",
|
|
16
|
+
"callbackAesKey": "CALLBACK_AES"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"channels": {
|
|
3
|
+
"wecom": {
|
|
4
|
+
"enabled": true,
|
|
5
|
+
"mode": "both",
|
|
6
|
+
"webhookPath": "/wecom",
|
|
7
|
+
|
|
8
|
+
"token": "BOT_TOKEN",
|
|
9
|
+
"encodingAESKey": "BOT_AES",
|
|
10
|
+
"receiveId": "BOT_ID",
|
|
11
|
+
|
|
12
|
+
"corpId": "CORP_ID",
|
|
13
|
+
"corpSecret": "CORP_SECRET",
|
|
14
|
+
"agentId": 1000001,
|
|
15
|
+
"callbackToken": "CALLBACK_TOKEN",
|
|
16
|
+
"callbackAesKey": "CALLBACK_AES",
|
|
17
|
+
|
|
18
|
+
"media": {
|
|
19
|
+
"tempDir": "/tmp/openclaw-wecom",
|
|
20
|
+
"retentionHours": 72,
|
|
21
|
+
"cleanupOnStart": true,
|
|
22
|
+
"maxBytes": 10485760
|
|
23
|
+
},
|
|
24
|
+
"botMediaBridge": true,
|
|
25
|
+
|
|
26
|
+
"dm": {
|
|
27
|
+
"policy": "pairing",
|
|
28
|
+
"allowFrom": []
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
"defaultAccount": "default",
|
|
32
|
+
"accounts": {
|
|
33
|
+
"default": {
|
|
34
|
+
"mode": "both",
|
|
35
|
+
"webhookPath": "/wecom",
|
|
36
|
+
"token": "BOT_TOKEN",
|
|
37
|
+
"encodingAESKey": "BOT_AES",
|
|
38
|
+
"receiveId": "BOT_ID",
|
|
39
|
+
"corpId": "CORP_ID",
|
|
40
|
+
"corpSecret": "CORP_SECRET",
|
|
41
|
+
"agentId": 1000001,
|
|
42
|
+
"callbackToken": "CALLBACK_TOKEN",
|
|
43
|
+
"callbackAesKey": "CALLBACK_AES",
|
|
44
|
+
"media": {
|
|
45
|
+
"tempDir": "/tmp/openclaw-wecom",
|
|
46
|
+
"retentionHours": 72,
|
|
47
|
+
"cleanupOnStart": true,
|
|
48
|
+
"maxBytes": 10485760
|
|
49
|
+
},
|
|
50
|
+
"botMediaBridge": true
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@marshulll/openclaw-wecom",
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "OpenClaw WeCom channel plugin (intelligent bot + internal app)",
|
|
6
|
+
"author": "OpenClaw",
|
|
7
|
+
"main": "wecom/index.ts",
|
|
8
|
+
"openclaw": {
|
|
9
|
+
"extensions": [
|
|
10
|
+
"./wecom/index.ts"
|
|
11
|
+
],
|
|
12
|
+
"channel": {
|
|
13
|
+
"id": "wecom",
|
|
14
|
+
"label": "WeCom",
|
|
15
|
+
"selectionLabel": "WeCom (plugin)",
|
|
16
|
+
"detailLabel": "WeCom",
|
|
17
|
+
"docsPath": "/channels/wecom",
|
|
18
|
+
"docsLabel": "wecom",
|
|
19
|
+
"blurb": "Enterprise WeCom: bot API + internal app (dual mode).",
|
|
20
|
+
"aliases": [
|
|
21
|
+
"wechatwork",
|
|
22
|
+
"wework",
|
|
23
|
+
"qywx",
|
|
24
|
+
"企微",
|
|
25
|
+
"企业微信"
|
|
26
|
+
],
|
|
27
|
+
"order": 85
|
|
28
|
+
},
|
|
29
|
+
"install": {
|
|
30
|
+
"npmSpec": "@marshulll/openclaw-wecom",
|
|
31
|
+
"localPath": ".",
|
|
32
|
+
"defaultChoice": "npm"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"openclaw": ">=2026.1.25"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"fast-xml-parser": "^4.3.6",
|
|
40
|
+
"zod": "^3.23.8"
|
|
41
|
+
},
|
|
42
|
+
"keywords": [
|
|
43
|
+
"openclaw",
|
|
44
|
+
"wecom",
|
|
45
|
+
"wechat-work",
|
|
46
|
+
"channel",
|
|
47
|
+
"plugin"
|
|
48
|
+
],
|
|
49
|
+
"license": "ISC",
|
|
50
|
+
"files": [
|
|
51
|
+
"wecom/**",
|
|
52
|
+
"docs/INSTALL.md",
|
|
53
|
+
"docs/wecom.config.example.json",
|
|
54
|
+
"docs/wecom.config.full.example.json",
|
|
55
|
+
"openclaw.plugin.json",
|
|
56
|
+
"README.md",
|
|
57
|
+
"README.zh.md",
|
|
58
|
+
"README.en.md"
|
|
59
|
+
]
|
|
60
|
+
}
|
package/wecom/index.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WeCom dual-mode plugin (bot API + internal app)
|
|
3
|
+
*/
|
|
4
|
+
import type { ClawdbotPluginApi } from "openclaw/plugin-sdk";
|
|
5
|
+
import { emptyPluginConfigSchema } from "openclaw/plugin-sdk";
|
|
6
|
+
|
|
7
|
+
import { handleWecomWebhookRequest } from "./src/monitor.js";
|
|
8
|
+
import { setWecomRuntime } from "./src/runtime.js";
|
|
9
|
+
import { wecomPlugin } from "./src/channel.js";
|
|
10
|
+
|
|
11
|
+
const plugin = {
|
|
12
|
+
id: "openclaw-wecom",
|
|
13
|
+
name: "OpenClaw WeCom",
|
|
14
|
+
description: "OpenClaw WeCom channel plugin (bot API + internal app)",
|
|
15
|
+
configSchema: emptyPluginConfigSchema(),
|
|
16
|
+
register(api: ClawdbotPluginApi) {
|
|
17
|
+
setWecomRuntime(api.runtime);
|
|
18
|
+
api.registerChannel({ plugin: wecomPlugin });
|
|
19
|
+
api.registerHttpHandler(handleWecomWebhookRequest);
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export default plugin;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@marshulll/openclaw-wecom",
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "OpenClaw WeCom channel plugin (intelligent bot + internal app)",
|
|
6
|
+
"author": "OpenClaw",
|
|
7
|
+
"openclaw": {
|
|
8
|
+
"extensions": [
|
|
9
|
+
"./index.ts"
|
|
10
|
+
],
|
|
11
|
+
"channel": {
|
|
12
|
+
"id": "wecom",
|
|
13
|
+
"label": "WeCom",
|
|
14
|
+
"selectionLabel": "WeCom (plugin)",
|
|
15
|
+
"detailLabel": "WeCom",
|
|
16
|
+
"docsPath": "/channels/wecom",
|
|
17
|
+
"docsLabel": "wecom",
|
|
18
|
+
"blurb": "Enterprise WeCom: bot API + internal app (dual mode).",
|
|
19
|
+
"aliases": [
|
|
20
|
+
"wechatwork",
|
|
21
|
+
"wework",
|
|
22
|
+
"qywx",
|
|
23
|
+
"企微",
|
|
24
|
+
"企业微信"
|
|
25
|
+
],
|
|
26
|
+
"order": 85
|
|
27
|
+
},
|
|
28
|
+
"install": {
|
|
29
|
+
"npmSpec": "@marshulll/openclaw-wecom",
|
|
30
|
+
"localPath": ".",
|
|
31
|
+
"defaultChoice": "npm"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"openclaw": ">=2026.1.25"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"openclaw",
|
|
39
|
+
"wecom",
|
|
40
|
+
"wechat-work",
|
|
41
|
+
"channel",
|
|
42
|
+
"plugin"
|
|
43
|
+
],
|
|
44
|
+
"license": "ISC"
|
|
45
|
+
}
|