@yaoyuanchao/dingtalk 1.5.0 → 1.5.2
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/CHANGELOG.md +236 -224
- package/README.md +93 -303
- package/openclaw.plugin.json +9 -0
- package/package.json +79 -52
- package/src/api.ts +955 -955
- package/src/monitor.ts +1382 -1382
package/README.md
CHANGED
|
@@ -1,303 +1,93 @@
|
|
|
1
|
-
# DingTalk
|
|
2
|
-
|
|
3
|
-
[](https://opensource.org/licenses/MIT)
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
2.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
- `clientId`: 钉钉应用的 AppKey
|
|
95
|
-
- `clientSecret`: 钉钉应用的 AppSecret
|
|
96
|
-
- `dm.policy`: 私聊策略
|
|
97
|
-
- `"pairing"`: 需要明确允许的用户才能使用(推荐)
|
|
98
|
-
- `"open"`: 任何人都可以私聊
|
|
99
|
-
- `"disabled"`: 禁用私聊
|
|
100
|
-
- `dm.allowFrom`: 允许私聊的 staffId 列表(当 policy 为 pairing 时生效)
|
|
101
|
-
- `groupPolicy`: 群聊策略
|
|
102
|
-
- `"allowlist"`: 仅允许列表中的群
|
|
103
|
-
- `"open"`: 允许所有群
|
|
104
|
-
- `"disabled"`: 禁用群聊
|
|
105
|
-
- `groupAllowlist`: 允许的群聊 conversationId 列表(当 groupPolicy 为 allowlist 时生效)
|
|
106
|
-
- `requireMention`: 是否要求在群聊中 @机器人(推荐 true)
|
|
107
|
-
- `messageFormat`: 消息格式(可选)
|
|
108
|
-
- `"text"`: 纯文本格式(默认,推荐)
|
|
109
|
-
- `"markdown"`: Markdown 格式(⚠️ 钉钉仅支持有限的 Markdown 语法,**不支持表格**)
|
|
110
|
-
|
|
111
|
-
**Markdown 格式说明**:
|
|
112
|
-
- ✅ 支持:标题、粗体、斜体、链接、图片、引用、列表、代码块
|
|
113
|
-
- ❌ 不支持:**表格**、复杂嵌套列表、HTML 标签、任务列表
|
|
114
|
-
- 📝 自动转换:插件会自动将 Markdown 表格转换为纯文本代码块显示
|
|
115
|
-
- ⏰ 仅 SessionWebhook 可用:REST API 兜底时自动降级为纯文本
|
|
116
|
-
|
|
117
|
-
**配置示例**:
|
|
118
|
-
```json
|
|
119
|
-
{
|
|
120
|
-
"messageFormat": "markdown"
|
|
121
|
-
}
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
### 4. 启动 clawdbot gateway
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
# 如果已经在运行,需要重启
|
|
128
|
-
clawdbot gateway restart
|
|
129
|
-
|
|
130
|
-
# 或者首次启动
|
|
131
|
-
clawdbot gateway
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### 5. 查看日志验证
|
|
135
|
-
|
|
136
|
-
```bash
|
|
137
|
-
# 查看实时日志
|
|
138
|
-
tail -f /tmp/clawdbot/clawdbot-$(date +%Y-%m-%d).log | grep dingtalk
|
|
139
|
-
|
|
140
|
-
# 成功的标志:
|
|
141
|
-
# [dingtalk:default] Starting Stream...
|
|
142
|
-
# [dingtalk:default] Stream connected
|
|
143
|
-
# [dingtalk] Stream connection started successfully
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
## 获取你的 staffId
|
|
147
|
-
|
|
148
|
-
首次使用时,机器人会告诉你的 staffId:
|
|
149
|
-
|
|
150
|
-
1. 在钉钉中找到机器人
|
|
151
|
-
2. 发送任意消息
|
|
152
|
-
3. 机器人会回复:"Access denied. Your staffId: XXXXXXXXXXXXXXXXXXXX Ask admin to add you."
|
|
153
|
-
4. 将这个 staffId 添加到配置文件的 `dm.allowFrom` 数组中
|
|
154
|
-
5. 重启 gateway
|
|
155
|
-
|
|
156
|
-
## 获取群聊 conversationId
|
|
157
|
-
|
|
158
|
-
如果使用 `groupPolicy: "allowlist"`,需要获取群聊的 conversationId:
|
|
159
|
-
|
|
160
|
-
**方法1: 查看日志**
|
|
161
|
-
1. 在群聊中 @机器人发送消息
|
|
162
|
-
2. 查看 gateway 日志:
|
|
163
|
-
```bash
|
|
164
|
-
tail -f /tmp/clawdbot/clawdbot-$(date +%Y-%m-%d).log | grep "dingtalk.*Group"
|
|
165
|
-
```
|
|
166
|
-
3. 日志会显示:`[dingtalk] Group from XXX: ...` 以及相关的 conversationId
|
|
167
|
-
4. 或者查看日志中的 "Group not in allowlist" 消息获取 conversationId
|
|
168
|
-
|
|
169
|
-
**方法2: 临时设置为 open**
|
|
170
|
-
1. 临时修改配置为 `groupPolicy: "open"`
|
|
171
|
-
2. 重启 gateway
|
|
172
|
-
3. 在群聊中 @机器人发送消息
|
|
173
|
-
4. 查看日志获取 conversationId(格式类似 `cidXXXXXXXXXXXXXXXXXX==`)
|
|
174
|
-
5. 将 conversationId 添加到 `groupAllowlist` 数组
|
|
175
|
-
6. 改回 `groupPolicy: "allowlist"` 并重启
|
|
176
|
-
|
|
177
|
-
**配置示例**:
|
|
178
|
-
```json
|
|
179
|
-
{
|
|
180
|
-
"groupPolicy": "allowlist",
|
|
181
|
-
"groupAllowlist": [
|
|
182
|
-
"cidXXXXXXXXXXXXXXXXXX==",
|
|
183
|
-
"cidYYYYYYYYYYYYYYYYYY=="
|
|
184
|
-
],
|
|
185
|
-
"requireMention": true
|
|
186
|
-
}
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
## 钉钉应用配置
|
|
190
|
-
|
|
191
|
-
### 创建应用
|
|
192
|
-
|
|
193
|
-
1. 登录 [钉钉开发者平台](https://open-dev.dingtalk.com)
|
|
194
|
-
2. 进入 **应用开发** → **企业内部开发**
|
|
195
|
-
3. 点击 **创建应用**
|
|
196
|
-
4. 添加 **机器人** 能力
|
|
197
|
-
5. 消息接收模式选择 **Stream 模式**
|
|
198
|
-
|
|
199
|
-
### 配置权限
|
|
200
|
-
|
|
201
|
-
应用需要以下权限:
|
|
202
|
-
- `qyapi_chat_manage`(企业会话管理)
|
|
203
|
-
- `qyapi_robot_sendmsg`(机器人发送消息)
|
|
204
|
-
|
|
205
|
-
### 获取凭证
|
|
206
|
-
|
|
207
|
-
在应用详情页面:
|
|
208
|
-
- **AppKey** → 这是你的 `clientId`
|
|
209
|
-
- **AppSecret** → 点击查看并复制,这是你的 `clientSecret`
|
|
210
|
-
|
|
211
|
-
### 发布应用
|
|
212
|
-
|
|
213
|
-
配置完成后,点击 **发布** 使应用生效。
|
|
214
|
-
|
|
215
|
-
## 故障排查
|
|
216
|
-
|
|
217
|
-
### Stream 连接失败
|
|
218
|
-
|
|
219
|
-
```
|
|
220
|
-
[dingtalk] Failed to start Stream
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
**可能原因**:
|
|
224
|
-
1. clientId 或 clientSecret 错误
|
|
225
|
-
2. 应用未选择 Stream 模式
|
|
226
|
-
3. 应用未发布
|
|
227
|
-
|
|
228
|
-
**解决方法**:
|
|
229
|
-
- 检查配置文件中的凭证是否正确
|
|
230
|
-
- 确认钉钉应用已选择 Stream 模式并发布
|
|
231
|
-
|
|
232
|
-
### 发送消息无响应
|
|
233
|
-
|
|
234
|
-
**可能原因**:
|
|
235
|
-
1. staffId 未添加到 allowFrom 列表
|
|
236
|
-
2. 群聊未 @机器人(requireMention 为 true 时)
|
|
237
|
-
|
|
238
|
-
**解决方法**:
|
|
239
|
-
- 查看日志获取 staffId 并添加到配置
|
|
240
|
-
- 在群聊中使用 @机器人名称 来触发
|
|
241
|
-
|
|
242
|
-
### 配置修改未生效
|
|
243
|
-
|
|
244
|
-
**原因**:配置修改需要重启 gateway
|
|
245
|
-
|
|
246
|
-
**解决方法**:
|
|
247
|
-
```bash
|
|
248
|
-
clawdbot gateway restart
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
## 技术细节
|
|
252
|
-
|
|
253
|
-
### 核心实现
|
|
254
|
-
|
|
255
|
-
- **Stream SDK**: `dingtalk-stream@2.1.4`
|
|
256
|
-
- **消息处理**: 通过 `DWClient` 建立 WebSocket 长连接
|
|
257
|
-
- **配置加载**: 自动调用 `cfg.loadConfig()` 获取实际配置(重要修复)
|
|
258
|
-
- **回复策略**: SessionWebhook (35分钟内) → REST API (兜底)
|
|
259
|
-
|
|
260
|
-
### 关键文件
|
|
261
|
-
|
|
262
|
-
| 文件 | 作用 |
|
|
263
|
-
|------|------|
|
|
264
|
-
| `src/monitor.ts` | Stream 连接 + 消息处理核心逻辑 |
|
|
265
|
-
| `src/api.ts` | 钉钉 REST API 封装 |
|
|
266
|
-
| `src/channel.ts` | ChannelPlugin 接口实现 |
|
|
267
|
-
| `src/accounts.ts` | 账号凭证解析 |
|
|
268
|
-
|
|
269
|
-
### 已知限制
|
|
270
|
-
|
|
271
|
-
- **Markdown 有限支持**:钉钉不支持 Markdown 表格,插件会自动转换为纯文本代码块
|
|
272
|
-
- **消息格式**:默认纯文本,可选 Markdown(但有语法限制)
|
|
273
|
-
- **媒体消息**:暂不支持文件、图片等媒体消息发送
|
|
274
|
-
- **钉钉限流**:20条/分钟/群,超限后10分钟限流
|
|
275
|
-
|
|
276
|
-
## 更新日志
|
|
277
|
-
|
|
278
|
-
查看 [CHANGELOG.md](./CHANGELOG.md) 获取详细的版本历史。
|
|
279
|
-
|
|
280
|
-
### v1.2.0 (2026-01-28) - 官方插件发布
|
|
281
|
-
|
|
282
|
-
- ✅ **官方 NPM 安装支持** - `clawdbot plugins install @yaoyuanchao/dingtalk`
|
|
283
|
-
- ✅ **交互式配置向导** - `clawdbot onboard --channel dingtalk`
|
|
284
|
-
- ✅ **Zod 配置验证** - 类型安全、自动错误提示
|
|
285
|
-
- ✅ **健康检查** - 自动探测连接状态和延迟
|
|
286
|
-
- ✅ 保留所有 v0.1.0 功能
|
|
287
|
-
|
|
288
|
-
### v0.1.0 (2026-01-26)
|
|
289
|
-
|
|
290
|
-
- ✅ 初始版本发布
|
|
291
|
-
- ✅ Stream 模式连接
|
|
292
|
-
- ✅ 私聊 + 群聊支持
|
|
293
|
-
- ✅ Pairing 访问控制
|
|
294
|
-
- ✅ 群聊白名单(groupAllowlist)
|
|
295
|
-
- ✅ Markdown 消息格式支持(自动转换表格为纯文本)
|
|
296
|
-
|
|
297
|
-
## 许可证
|
|
298
|
-
|
|
299
|
-
MIT License - 查看 [LICENSE](./LICENSE) 文件获取详细信息。
|
|
300
|
-
|
|
301
|
-
## 贡献
|
|
302
|
-
|
|
303
|
-
发现问题或有改进建议?欢迎提交 Issue 或 Pull Request。
|
|
1
|
+
# 🤖 DingTalk Plugin for Clawdbot
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@yaoyuanchao/dingtalk)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
让你的 AI 助手住进钉钉。**无需公网域名,3 分钟搞定。**
|
|
7
|
+
|
|
8
|
+
## ✨ 特性
|
|
9
|
+
|
|
10
|
+
- 🚀 **Stream 模式** — 无需公网域名,内网即可用
|
|
11
|
+
- 💬 **私聊 + 群聊** — 完整的消息收发支持
|
|
12
|
+
- 🖼️ **富媒体** — 图片、语音、视频、文件接收
|
|
13
|
+
- ⏳ **思考中提示** — 自动显示处理状态,完成后消失
|
|
14
|
+
- 🔒 **访问控制** — 灵活的用户/群组白名单
|
|
15
|
+
|
|
16
|
+
## 🚀 快速开始
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# 1. 安装
|
|
20
|
+
clawdbot plugins install @yaoyuanchao/dingtalk
|
|
21
|
+
|
|
22
|
+
# 2. 配置(交互式向导)
|
|
23
|
+
clawdbot onboard --channel dingtalk
|
|
24
|
+
|
|
25
|
+
# 3. 启动
|
|
26
|
+
clawdbot gateway
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
完事!去钉钉找机器人聊天吧。
|
|
30
|
+
|
|
31
|
+
## ⚙️ 配置示例
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"channels": {
|
|
36
|
+
"dingtalk": {
|
|
37
|
+
"enabled": true,
|
|
38
|
+
"clientId": "dingXXXXXXXXXXXX",
|
|
39
|
+
"clientSecret": "YOUR_SECRET",
|
|
40
|
+
"dm": {
|
|
41
|
+
"policy": "pairing",
|
|
42
|
+
"allowFrom": ["YOUR_STAFF_ID"]
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
<details>
|
|
50
|
+
<summary>📋 完整配置项</summary>
|
|
51
|
+
|
|
52
|
+
| 配置项 | 说明 | 默认值 |
|
|
53
|
+
|--------|------|--------|
|
|
54
|
+
| `clientId` | 钉钉应用 AppKey | - |
|
|
55
|
+
| `clientSecret` | 钉钉应用 AppSecret | - |
|
|
56
|
+
| `dm.policy` | 私聊策略: `pairing`/`open`/`disabled` | `pairing` |
|
|
57
|
+
| `dm.allowFrom` | 允许私聊的 staffId 列表 | `[]` |
|
|
58
|
+
| `groupPolicy` | 群聊策略: `allowlist`/`open`/`disabled` | `allowlist` |
|
|
59
|
+
| `groupAllowlist` | 允许的群 conversationId 列表 | `[]` |
|
|
60
|
+
| `requireMention` | 群聊是否需要 @机器人 | `true` |
|
|
61
|
+
| `messageFormat` | 消息格式: `text`/`markdown`/`auto` | `auto` |
|
|
62
|
+
| `typingIndicator` | 显示"思考中"提示 | `true` |
|
|
63
|
+
| `longTextMode` | 长文本处理: `chunk`/`file` | `chunk` |
|
|
64
|
+
|
|
65
|
+
</details>
|
|
66
|
+
|
|
67
|
+
## 🔑 获取凭证
|
|
68
|
+
|
|
69
|
+
1. 打开 [钉钉开发者平台](https://open-dev.dingtalk.com)
|
|
70
|
+
2. 创建企业内部应用 → 添加机器人能力
|
|
71
|
+
3. 消息接收模式选 **Stream 模式**
|
|
72
|
+
4. 复制 AppKey (clientId) 和 AppSecret (clientSecret)
|
|
73
|
+
5. 发布应用
|
|
74
|
+
|
|
75
|
+
## 💡 获取 staffId
|
|
76
|
+
|
|
77
|
+
首次私聊机器人时会返回:
|
|
78
|
+
```
|
|
79
|
+
Access denied. Your staffId: 050914XXXXXXXXX
|
|
80
|
+
```
|
|
81
|
+
把这个 ID 加到 `dm.allowFrom` 里,重启 gateway 即可。
|
|
82
|
+
|
|
83
|
+
## 📝 更新日志
|
|
84
|
+
|
|
85
|
+
**v1.5.0** — 新增 Typing Indicator(思考中提示,自动撤回)
|
|
86
|
+
|
|
87
|
+
**v1.4.x** — 媒体消息支持、长文本文件发送
|
|
88
|
+
|
|
89
|
+
查看完整 [CHANGELOG](./CHANGELOG.md)
|
|
90
|
+
|
|
91
|
+
## 📄 License
|
|
92
|
+
|
|
93
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,52 +1,79 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@yaoyuanchao/dingtalk",
|
|
3
|
-
"version": "1.5.
|
|
4
|
-
"type": "module",
|
|
5
|
-
"description": "DingTalk channel plugin for
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"author": "Yao Yuanchao",
|
|
8
|
-
"keywords": [
|
|
9
|
-
"clawdbot",
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@yaoyuanchao/dingtalk",
|
|
3
|
+
"version": "1.5.2",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "DingTalk channel plugin for ClawdBot/OpenClaw with Stream Mode support",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Yao Yuanchao",
|
|
8
|
+
"keywords": [
|
|
9
|
+
"clawdbot",
|
|
10
|
+
"openclaw",
|
|
11
|
+
"dingtalk",
|
|
12
|
+
"channel-plugin",
|
|
13
|
+
"stream-mode",
|
|
14
|
+
"ai-assistant"
|
|
15
|
+
],
|
|
16
|
+
"clawdbot": {
|
|
17
|
+
"extensions": [
|
|
18
|
+
"./index.ts"
|
|
19
|
+
],
|
|
20
|
+
"channel": {
|
|
21
|
+
"id": "dingtalk",
|
|
22
|
+
"label": "DingTalk",
|
|
23
|
+
"selectionLabel": "DingTalk (钉钉)",
|
|
24
|
+
"detailLabel": "DingTalk Stream Mode",
|
|
25
|
+
"docsPath": "/channels/dingtalk",
|
|
26
|
+
"docsLabel": "dingtalk",
|
|
27
|
+
"blurb": "DingTalk bot via Stream Mode (WebSocket) - No public domain required",
|
|
28
|
+
"aliases": [
|
|
29
|
+
"dingding",
|
|
30
|
+
"dd"
|
|
31
|
+
],
|
|
32
|
+
"order": 75,
|
|
33
|
+
"quickstartAllowFrom": true
|
|
34
|
+
},
|
|
35
|
+
"install": {
|
|
36
|
+
"npmSpec": "@yaoyuanchao/dingtalk",
|
|
37
|
+
"localPath": ".",
|
|
38
|
+
"defaultChoice": "npm"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"openclaw": {
|
|
42
|
+
"extensions": [
|
|
43
|
+
"./index.ts"
|
|
44
|
+
],
|
|
45
|
+
"channel": {
|
|
46
|
+
"id": "dingtalk",
|
|
47
|
+
"label": "DingTalk",
|
|
48
|
+
"selectionLabel": "DingTalk (钉钉)",
|
|
49
|
+
"detailLabel": "DingTalk Stream Mode",
|
|
50
|
+
"docsPath": "/channels/dingtalk",
|
|
51
|
+
"docsLabel": "dingtalk",
|
|
52
|
+
"blurb": "DingTalk bot via Stream Mode (WebSocket) - No public domain required",
|
|
53
|
+
"aliases": [
|
|
54
|
+
"dingding",
|
|
55
|
+
"dd"
|
|
56
|
+
],
|
|
57
|
+
"order": 75,
|
|
58
|
+
"quickstartAllowFrom": true
|
|
59
|
+
},
|
|
60
|
+
"install": {
|
|
61
|
+
"npmSpec": "@yaoyuanchao/dingtalk",
|
|
62
|
+
"localPath": ".",
|
|
63
|
+
"defaultChoice": "npm"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"dingtalk-stream": "^2.1.4",
|
|
68
|
+
"zod": "^4.3.6"
|
|
69
|
+
},
|
|
70
|
+
"files": [
|
|
71
|
+
"index.ts",
|
|
72
|
+
"src/**/*.ts",
|
|
73
|
+
"clawdbot.plugin.json",
|
|
74
|
+
"openclaw.plugin.json",
|
|
75
|
+
"README.md",
|
|
76
|
+
"CHANGELOG.md",
|
|
77
|
+
"LICENSE"
|
|
78
|
+
]
|
|
79
|
+
}
|