openclaw-channel-dingtalk 2.1.1 → 2.2.1
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 +23 -152
- package/dist/index.d.ts +3 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -172
- package/dist/index.js.map +1 -1
- package/openclaw.plugin.json +54 -56
- package/package.json +7 -19
- package/LICENSE +0 -21
package/README.md
CHANGED
|
@@ -1,176 +1,47 @@
|
|
|
1
|
-
#
|
|
1
|
+
# OpenClaw DingTalk Channel Plugin
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
钉钉 Stream 机器人 Channel 插件 for OpenClaw。支持文本、Markdown 消息以及双向通信。
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
- 🔄 **Stream 实时通信** - 基于钉钉 Stream SDK 的双向实时消息
|
|
10
|
-
- 📝 **Markdown 支持** - 自动检测并渲染 Markdown 格式消息
|
|
11
|
-
- 🃏 **ActionCard 卡片** - 支持带交互按钮的卡片消息
|
|
12
|
-
- 👥 **群聊 & 私聊** - 同时支持群聊和单聊场景
|
|
13
|
-
- 🔐 **自动 Token 管理** - Access Token 自动获取和缓存
|
|
14
|
-
- 🔁 **消息去重** - 内置消息去重机制,防止重复处理
|
|
15
|
-
- 📱 **多账号支持** - 可配置多个钉钉机器人账号
|
|
16
|
-
|
|
17
|
-
## 📦 安装
|
|
5
|
+
✨ **功能特性**
|
|
6
|
+
- 使用钉钉 Stream 模式,无需公网 IP/Webhook 地址即可接收消息。
|
|
7
|
+
- 支持文本自动检测并转换为 Markdown 渲染。
|
|
8
|
+
- 支持 OpenClaw 标准配置和向导。
|
|
18
9
|
|
|
10
|
+
📦 **安装**
|
|
11
|
+
在 OpenClaw 安装目录下运行:
|
|
19
12
|
```bash
|
|
20
13
|
npm install openclaw-channel-dingtalk
|
|
21
14
|
```
|
|
22
15
|
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
⚙️ **配置**
|
|
17
|
+
安装后,可以通过 OpenClaw 的配置向导进行配置:
|
|
25
18
|
```bash
|
|
26
|
-
openclaw
|
|
19
|
+
openclaw setup dingtalk
|
|
27
20
|
```
|
|
28
|
-
|
|
29
|
-
## ⚙️ 配置
|
|
30
|
-
|
|
31
|
-
在 OpenClaw 配置文件 `~/.openclaw/openclaw.json` 中添加:
|
|
32
|
-
|
|
21
|
+
或者手动在 `openclaw.config.json` 中配置:
|
|
33
22
|
```json
|
|
34
23
|
{
|
|
35
24
|
"channels": {
|
|
36
25
|
"dingtalk": {
|
|
37
26
|
"accounts": {
|
|
38
|
-
"
|
|
27
|
+
"my-bot": {
|
|
39
28
|
"enabled": true,
|
|
40
|
-
"clientId": "
|
|
41
|
-
"clientSecret": "
|
|
42
|
-
"robotCode": "
|
|
29
|
+
"clientId": "your-app-key",
|
|
30
|
+
"clientSecret": "your-app-secret",
|
|
31
|
+
"robotCode": "your-robot-code"
|
|
43
32
|
}
|
|
44
33
|
}
|
|
45
34
|
}
|
|
46
|
-
},
|
|
47
|
-
"plugins": {
|
|
48
|
-
"load": {
|
|
49
|
-
"paths": ["node_modules/@openclaw/channel-dingtalk"]
|
|
50
|
-
},
|
|
51
|
-
"entries": {
|
|
52
|
-
"dingtalk": {
|
|
53
|
-
"enabled": true
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
35
|
}
|
|
57
36
|
}
|
|
58
37
|
```
|
|
59
38
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
- **clientId (AppKey)**: 应用凭证中的 AppKey
|
|
67
|
-
- **clientSecret (AppSecret)**: 应用凭证中的 AppSecret
|
|
68
|
-
- **robotCode**: 机器人的唯一标识
|
|
69
|
-
|
|
70
|
-
## 🚀 使用
|
|
71
|
-
|
|
72
|
-
### 基本消息
|
|
73
|
-
|
|
74
|
-
配置完成后,机器人会自动接收和响应消息。发送包含 Markdown 语法的回复会自动渲染:
|
|
75
|
-
|
|
76
|
-
```
|
|
77
|
-
**粗体** *斜体* `代码`
|
|
78
|
-
- 列表项1
|
|
79
|
-
- 列表项2
|
|
80
|
-
[链接](https://example.com)
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### ActionCard 卡片消息
|
|
84
|
-
|
|
85
|
-
通过编程方式发送带按钮的卡片:
|
|
86
|
-
|
|
87
|
-
```typescript
|
|
88
|
-
import { sendGroupActionCard } from '@openclaw/channel-dingtalk';
|
|
89
|
-
|
|
90
|
-
await sendGroupActionCard(accessToken, conversationId, {
|
|
91
|
-
title: "任务通知",
|
|
92
|
-
text: "您有一个新任务需要处理",
|
|
93
|
-
buttons: [
|
|
94
|
-
{ title: "查看详情", actionURL: "https://example.com/task/1" },
|
|
95
|
-
{ title: "稍后处理", actionURL: "https://example.com/later" }
|
|
96
|
-
]
|
|
97
|
-
});
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### 检查状态
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
openclaw channel status dingtalk
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
## 📋 消息格式
|
|
107
|
-
|
|
108
|
-
| 格式 | 自动检测 | 说明 |
|
|
109
|
-
|------|----------|------|
|
|
110
|
-
| 纯文本 | ✅ | 普通文本消息 |
|
|
111
|
-
| Markdown | ✅ | 检测到 `**`, `#`, `-` 等语法自动使用 |
|
|
112
|
-
| ActionCard | ❌ | 需通过 API 显式调用 |
|
|
113
|
-
|
|
114
|
-
### 支持的 Markdown 语法
|
|
115
|
-
|
|
116
|
-
- `# 标题` - 一至六级标题
|
|
117
|
-
- `**粗体**` - 加粗文本
|
|
118
|
-
- `*斜体*` - 斜体文本
|
|
119
|
-
- `[链接](url)` - 超链接
|
|
120
|
-
- `- 列表` - 无序列表
|
|
121
|
-
- `1. 列表` - 有序列表
|
|
122
|
-
- `> 引用` - 引用块
|
|
123
|
-
- `` `代码` `` - 行内代码
|
|
124
|
-
|
|
125
|
-
## 🔒 安全提示
|
|
126
|
-
|
|
127
|
-
- ⚠️ `clientSecret` 是敏感信息,请妥善保管
|
|
128
|
-
- 建议使用环境变量注入敏感配置
|
|
129
|
-
- 不要将包含真实密钥的配置文件提交到版本控制
|
|
130
|
-
|
|
131
|
-
```bash
|
|
132
|
-
# 使用环境变量
|
|
133
|
-
export DINGTALK_CLIENT_SECRET="your-secret"
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
## 📖 API 参考
|
|
137
|
-
|
|
138
|
-
### 导出函数
|
|
139
|
-
|
|
140
|
-
```typescript
|
|
141
|
-
// 检测消息格式
|
|
142
|
-
function detectMessageFormat(text: string): 'text' | 'markdown';
|
|
143
|
-
|
|
144
|
-
// 构建消息体
|
|
145
|
-
function buildMessageBody(content: string, forceFormat?: 'text' | 'markdown'): object;
|
|
146
|
-
|
|
147
|
-
// 构建 ActionCard 消息体
|
|
148
|
-
function buildActionCardBody(options: ActionCardOptions): object;
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### ActionCardOptions
|
|
152
|
-
|
|
153
|
-
```typescript
|
|
154
|
-
interface ActionCardOptions {
|
|
155
|
-
title: string; // 卡片标题
|
|
156
|
-
text: string; // 卡片内容 (支持 Markdown)
|
|
157
|
-
singleTitle?: string; // 单按钮标题
|
|
158
|
-
singleURL?: string; // 单按钮链接
|
|
159
|
-
buttons?: Array<{ // 多按钮配置
|
|
160
|
-
title: string;
|
|
161
|
-
actionURL: string;
|
|
162
|
-
}>;
|
|
163
|
-
btnOrientation?: '0' | '1'; // 按钮排列: 0=竖向, 1=横向
|
|
164
|
-
}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
## 📚 参考文档
|
|
168
|
-
|
|
169
|
-
- [钉钉开放平台](https://open.dingtalk.com/)
|
|
170
|
-
- [Stream 模式接入](https://open.dingtalk.com/document/orgapp/stream-mode-introduction)
|
|
171
|
-
- [机器人消息类型](https://open.dingtalk.com/document/orgapp/robot-message-types-and-data-format)
|
|
172
|
-
- [OpenClaw 文档](https://openclaw.dev/)
|
|
173
|
-
|
|
174
|
-
## 📄 License
|
|
39
|
+
🚀 **快速开始**
|
|
40
|
+
1. 在[钉钉开发者后台](https://open-dev.dingtalk.com/)创建机器人。
|
|
41
|
+
2. 开启 **机器人能力**。
|
|
42
|
+
3. 在版本管理与发布中选择 **Stream 模式** 并发布。
|
|
43
|
+
4. 获取 `AppKey` (clientId) 和 `AppSecret` (clientSecret)。
|
|
44
|
+
5. 配置并启动 OpenClaw。
|
|
175
45
|
|
|
46
|
+
📄 **License**
|
|
176
47
|
MIT
|
package/dist/index.d.ts
CHANGED
|
@@ -46,19 +46,7 @@ declare function detectMessageFormat(text: string): MessageFormat;
|
|
|
46
46
|
* 构建消息体 - 根据内容自动选择格式
|
|
47
47
|
*/
|
|
48
48
|
declare function buildMessageBody(content: string, forceFormat?: MessageFormat): object;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
declare function buildActionCardBody(options: ActionCardOptions): object;
|
|
53
|
-
declare const dingtalkPlugin: ChannelPlugin;
|
|
54
|
-
export default function register(api: {
|
|
55
|
-
registerChannel: (opts: {
|
|
56
|
-
plugin: typeof dingtalkPlugin;
|
|
57
|
-
}) => void;
|
|
58
|
-
logger: {
|
|
59
|
-
info: (msg: string) => void;
|
|
60
|
-
error: (msg: string) => void;
|
|
61
|
-
};
|
|
62
|
-
}): void;
|
|
63
|
-
export { detectMessageFormat, buildMessageBody, buildActionCardBody, type MessageFormat, type ActionCardOptions, };
|
|
49
|
+
export declare const plugin: ChannelPlugin;
|
|
50
|
+
export default function register(api: any): void;
|
|
51
|
+
export { detectMessageFormat, buildMessageBody, type MessageFormat, type ActionCardOptions, };
|
|
64
52
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAGA,UAAU,aAAa;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,YAAY,EAAE;QACV,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC;QACnB,cAAc,EAAE,OAAO,CAAC;QACxB,aAAa,EAAE,OAAO,CAAC;QACvB,aAAa,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,MAAM,EAAE;QACJ,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,CAAC;QACvC,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;KACzD,CAAC;IACF,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;CAChB;AAkBD,KAAK,aAAa,GAAG,MAAM,GAAG,UAAU,CAAC;AAEzC,UAAU,iBAAiB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CAC9B;AAED;;GAEG;AACH,iBAAS,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAYxD;AAED;;GAEG;AACH,iBAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,aAAa,GAAG,MAAM,CAkB9E;AA+YD,eAAO,MAAM,MAAM,eAAiB,CAAC;AAGrC,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,GAAG,QAExC;AAED,OAAO,EACH,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACzB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -21,7 +21,6 @@ function detectMessageFormat(text) {
|
|
|
21
21
|
function buildMessageBody(content, forceFormat) {
|
|
22
22
|
const format = forceFormat || detectMessageFormat(content);
|
|
23
23
|
if (format === "markdown") {
|
|
24
|
-
// 提取第一行作为标题(钉钉通知栏显示)
|
|
25
24
|
const firstLine = content.split('\n')[0].replace(/^#+\s*/, '').slice(0, 20);
|
|
26
25
|
return {
|
|
27
26
|
msgtype: "markdown",
|
|
@@ -36,33 +35,10 @@ function buildMessageBody(content, forceFormat) {
|
|
|
36
35
|
text: { content },
|
|
37
36
|
};
|
|
38
37
|
}
|
|
39
|
-
/**
|
|
40
|
-
* 构建 ActionCard 消息体
|
|
41
|
-
*/
|
|
42
|
-
function buildActionCardBody(options) {
|
|
43
|
-
const actionCard = {
|
|
44
|
-
title: options.title,
|
|
45
|
-
text: options.text,
|
|
46
|
-
};
|
|
47
|
-
if (options.buttons && options.buttons.length > 0) {
|
|
48
|
-
// 多按钮模式
|
|
49
|
-
actionCard.btnOrientation = options.btnOrientation || "0";
|
|
50
|
-
actionCard.btns = options.buttons;
|
|
51
|
-
}
|
|
52
|
-
else if (options.singleTitle && options.singleURL) {
|
|
53
|
-
// 单按钮模式
|
|
54
|
-
actionCard.singleTitle = options.singleTitle;
|
|
55
|
-
actionCard.singleURL = options.singleURL;
|
|
56
|
-
}
|
|
57
|
-
return {
|
|
58
|
-
msgtype: "actionCard",
|
|
59
|
-
actionCard,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
38
|
// Token 缓存
|
|
63
39
|
const tokenCache = new Map();
|
|
64
40
|
async function getAccessToken(clientId, clientSecret) {
|
|
65
|
-
const cacheKey =
|
|
41
|
+
const cacheKey = clientId;
|
|
66
42
|
const cached = tokenCache.get(cacheKey);
|
|
67
43
|
if (cached && cached.expiresAt > Date.now() + 5 * 60 * 1000) {
|
|
68
44
|
return cached.token;
|
|
@@ -86,7 +62,6 @@ async function getAccessToken(clientId, clientSecret) {
|
|
|
86
62
|
async function sendGroupMessage(accessToken, openConversationId, content, format) {
|
|
87
63
|
const detectedFormat = format || detectMessageFormat(content);
|
|
88
64
|
const isMarkdown = detectedFormat === "markdown";
|
|
89
|
-
// 钉钉 API 使用 msgKey 区分消息类型:sampleText / sampleMarkdown
|
|
90
65
|
const msgKey = isMarkdown ? "sampleMarkdown" : "sampleText";
|
|
91
66
|
const msgParam = isMarkdown
|
|
92
67
|
? { title: content.split('\n')[0].replace(/^#+\s*/, '').slice(0, 20) || "消息", text: content }
|
|
@@ -133,11 +108,7 @@ async function sendPrivateMessage(accessToken, robotCode, userId, content, forma
|
|
|
133
108
|
throw new Error(`Failed to send private message: ${response.status} ${error}`);
|
|
134
109
|
}
|
|
135
110
|
}
|
|
136
|
-
/**
|
|
137
|
-
* 发送 ActionCard 卡片消息到群
|
|
138
|
-
*/
|
|
139
111
|
async function sendGroupActionCard(accessToken, openConversationId, options) {
|
|
140
|
-
// 钉钉机器人 API 对 ActionCard 使用 sampleActionCard / sampleActionCard2 等 msgKey
|
|
141
112
|
const hasBtns = options.buttons && options.buttons.length > 0;
|
|
142
113
|
const msgKey = hasBtns ? "sampleActionCard2" : "sampleActionCard";
|
|
143
114
|
const msgParam = {
|
|
@@ -175,10 +146,9 @@ async function sendGroupActionCard(accessToken, openConversationId, options) {
|
|
|
175
146
|
}
|
|
176
147
|
// Stream 客户端管理
|
|
177
148
|
const streamClients = new Map();
|
|
178
|
-
// 消息去重缓存
|
|
149
|
+
// 消息去重缓存
|
|
179
150
|
const processedMessages = new Map();
|
|
180
|
-
const DEDUP_WINDOW_MS = 5 * 60 * 1000;
|
|
181
|
-
// 清理过期消息 ID
|
|
151
|
+
const DEDUP_WINDOW_MS = 5 * 60 * 1000;
|
|
182
152
|
function cleanupOldMessageIds() {
|
|
183
153
|
const now = Date.now();
|
|
184
154
|
for (const [msgId, timestamp] of processedMessages) {
|
|
@@ -187,7 +157,6 @@ function cleanupOldMessageIds() {
|
|
|
187
157
|
}
|
|
188
158
|
}
|
|
189
159
|
}
|
|
190
|
-
// 检查消息是否已处理
|
|
191
160
|
function isDuplicateMessage(msgId) {
|
|
192
161
|
cleanupOldMessageIds();
|
|
193
162
|
if (processedMessages.has(msgId)) {
|
|
@@ -236,70 +205,64 @@ const dingtalkPlugin = {
|
|
|
236
205
|
};
|
|
237
206
|
},
|
|
238
207
|
},
|
|
239
|
-
// Gateway 管理 - 启动 Stream 连接
|
|
240
208
|
gateway: {
|
|
241
209
|
startAccount: async (ctx) => {
|
|
242
210
|
const { account, log, cfg } = ctx;
|
|
243
211
|
const accountId = account.accountId;
|
|
244
|
-
log?.info(`[dingtalk:${accountId}] startAccount called`);
|
|
245
|
-
log?.info(`[dingtalk:${accountId}] ctx keys: ${JSON.stringify(Object.keys(ctx))}`);
|
|
246
|
-
log?.info(`[dingtalk:${accountId}] runtime: ${JSON.stringify(Object.keys(ctx.runtime || {}))}`);
|
|
247
|
-
log?.info(`[dingtalk:${accountId}] account object: ${JSON.stringify(Object.keys(account))}`);
|
|
248
|
-
log?.info(`[dingtalk:${accountId}] cfg channels: ${JSON.stringify(Object.keys(cfg.channels || {}))}`);
|
|
249
|
-
// 直接从配置读取账号信息
|
|
250
212
|
const channelConfig = cfg.channels?.dingtalk;
|
|
251
|
-
log?.info(`[dingtalk:${accountId}] channelConfig accounts: ${JSON.stringify(Object.keys(channelConfig?.accounts || {}))}`);
|
|
252
213
|
const config = channelConfig?.accounts?.[accountId];
|
|
253
|
-
log?.info(`[dingtalk:${accountId}] config: ${config ? 'found' : 'NOT FOUND'}`);
|
|
254
214
|
if (!config?.clientId || !config?.clientSecret) {
|
|
255
|
-
log?.error(`[dingtalk:${accountId}] Missing credentials
|
|
215
|
+
log?.error(`[dingtalk:${accountId}] Missing credentials.`);
|
|
256
216
|
throw new Error(`Account ${accountId}: missing clientId or clientSecret`);
|
|
257
217
|
}
|
|
258
|
-
log?.info(`[dingtalk:${accountId}] Starting Stream connection
|
|
218
|
+
log?.info(`[dingtalk:${accountId}] Starting Stream connection...`);
|
|
259
219
|
const client = new DWClient({
|
|
260
220
|
clientId: config.clientId,
|
|
261
221
|
clientSecret: config.clientSecret,
|
|
262
222
|
});
|
|
263
|
-
|
|
264
|
-
client.on("
|
|
265
|
-
|
|
266
|
-
});
|
|
267
|
-
client.on("disconnect", () => {
|
|
268
|
-
log?.info(`[dingtalk:${accountId}] Stream disconnected`);
|
|
269
|
-
});
|
|
270
|
-
client.on("error", (error) => {
|
|
271
|
-
log?.error(`[dingtalk:${accountId}] Stream error: ${error.message}`);
|
|
272
|
-
});
|
|
273
|
-
// 注册消息监听
|
|
223
|
+
client.on("connect", () => log?.info(`[dingtalk:${accountId}] Stream connected`));
|
|
224
|
+
client.on("disconnect", () => log?.info(`[dingtalk:${accountId}] Stream disconnected`));
|
|
225
|
+
client.on("error", (error) => log?.error(`[dingtalk:${accountId}] Stream error: ${error.message}`));
|
|
274
226
|
client.registerCallbackListener("/v1.0/im/bot/messages/get", async (message) => {
|
|
275
|
-
// ⚡ 立即返回 SUCCESS,防止钉钉重试
|
|
276
|
-
// 消息处理改为异步
|
|
277
227
|
(async () => {
|
|
278
228
|
try {
|
|
279
|
-
log?.info(`[dingtalk:${accountId}] Received message callback: ${JSON.stringify(message).slice(0, 200)}...`);
|
|
280
|
-
log?.info(`[dingtalk:${accountId}] Raw message.data: ${message.data?.slice(0, 500)}...`);
|
|
281
229
|
const data = JSON.parse(message.data);
|
|
282
|
-
// 使用钉钉消息的 msgId 进行去重(这是实际的聊天消息 ID)
|
|
283
230
|
const dedupId = data.msgId || `${data.conversationId}-${data.createAt}-${data.senderStaffId}`;
|
|
284
|
-
if (isDuplicateMessage(dedupId))
|
|
285
|
-
log?.info(`[dingtalk:${accountId}] Duplicate message ignored: ${dedupId}`);
|
|
231
|
+
if (isDuplicateMessage(dedupId))
|
|
286
232
|
return;
|
|
287
|
-
}
|
|
288
|
-
log?.info(`[dingtalk:${accountId}] Parsed data: msgtype=${data.msgtype}, text=${JSON.stringify(data.text)?.slice(0, 100)}, senderNick=${data.senderNick}, msgId=${data.msgId}`);
|
|
289
|
-
// 获取文本内容 - 钉钉 Stream API 中文本消息在 text.content 字段
|
|
290
233
|
const textContent = data.text?.content?.trim();
|
|
291
|
-
if (data.msgtype !== "text" || !textContent)
|
|
292
|
-
log?.info(`[dingtalk:${accountId}] Skipping non-text message: msgtype=${data.msgtype}, hasTextContent=${!!textContent}`);
|
|
234
|
+
if (data.msgtype !== "text" || !textContent)
|
|
293
235
|
return;
|
|
294
|
-
}
|
|
295
|
-
log?.info(`[dingtalk:${accountId}] Extracted text content: ${textContent?.slice(0, 100)}`);
|
|
296
|
-
// 构建 SessionKey: dingtalk:<accountId>:<conversationId>
|
|
297
236
|
const sessionKey = `dingtalk:${accountId}:${data.conversationId}`;
|
|
298
237
|
const chatType = data.conversationType === "2" ? "group" : "direct";
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
238
|
+
// 修复:使用更具通用性的导入方式,尝试从 openclaw 包导入
|
|
239
|
+
let dispatcher;
|
|
240
|
+
try {
|
|
241
|
+
// 尝试从 openclaw 导入,使用 any 绕过 TS 检查
|
|
242
|
+
const module = await import("openclaw/dist/auto-reply/reply/provider-dispatcher.js");
|
|
243
|
+
dispatcher = module.dispatchReplyWithBufferedBlockDispatcher;
|
|
244
|
+
}
|
|
245
|
+
catch (e) {
|
|
246
|
+
log?.warn(`[dingtalk:${accountId}] Failed to import from 'openclaw', trying common paths...`);
|
|
247
|
+
// 尝试一些常见的 OpenClaw 安装路径
|
|
248
|
+
const paths = [
|
|
249
|
+
"/usr/local/lib/node_modules/openclaw/dist/auto-reply/reply/provider-dispatcher.js",
|
|
250
|
+
process.env.OPENCLAW_PATH ? `${process.env.OPENCLAW_PATH}/dist/auto-reply/reply/provider-dispatcher.js` : null
|
|
251
|
+
].filter(Boolean);
|
|
252
|
+
for (const p of paths) {
|
|
253
|
+
try {
|
|
254
|
+
const module = await import(p);
|
|
255
|
+
dispatcher = module.dispatchReplyWithBufferedBlockDispatcher;
|
|
256
|
+
if (dispatcher)
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
catch (innerE) { }
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
if (!dispatcher) {
|
|
263
|
+
log?.error(`[dingtalk:${accountId}] Could not find OpenClaw dispatcher. Please ensure OpenClaw is installed.`);
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
303
266
|
const msgContext = {
|
|
304
267
|
Body: textContent,
|
|
305
268
|
BodyForAgent: textContent,
|
|
@@ -318,63 +281,37 @@ const dingtalkPlugin = {
|
|
|
318
281
|
Timestamp: data.createAt,
|
|
319
282
|
CommandAuthorized: true,
|
|
320
283
|
};
|
|
321
|
-
log?.info(`[dingtalk:${accountId}] MsgContext built, calling dispatchReplyWithBufferedBlockDispatcher...`);
|
|
322
|
-
// 存储 webhook 用于回复
|
|
323
284
|
const webhook = data.sessionWebhook;
|
|
324
|
-
|
|
285
|
+
await dispatcher({
|
|
325
286
|
ctx: msgContext,
|
|
326
287
|
cfg,
|
|
327
288
|
dispatcherOptions: {
|
|
328
|
-
deliver: async (payload
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
log?.info(`[dingtalk:${accountId}] Detected format: ${detectedFormat}`);
|
|
338
|
-
const messageBody = buildMessageBody(payload.text);
|
|
339
|
-
log?.info(`[dingtalk:${accountId}] Sending msgtype: ${messageBody.msgtype}`);
|
|
340
|
-
log?.info(`[dingtalk:${accountId}] Body: ${JSON.stringify(messageBody).slice(0, 500)}`);
|
|
341
|
-
const resp = await fetch(webhook, {
|
|
342
|
-
method: "POST",
|
|
343
|
-
headers: { "Content-Type": "application/json" },
|
|
344
|
-
body: JSON.stringify(messageBody),
|
|
345
|
-
});
|
|
346
|
-
const respText = await resp.text();
|
|
347
|
-
if (!resp.ok) {
|
|
348
|
-
log?.error(`[dingtalk:${accountId}] Failed: ${resp.status} ${respText}`);
|
|
349
|
-
}
|
|
350
|
-
else {
|
|
351
|
-
log?.info(`[dingtalk:${accountId}] Success: ${respText}`);
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
catch (err) {
|
|
355
|
-
log?.error(`[dingtalk:${accountId}] Error sending reply: ${err}`);
|
|
356
|
-
}
|
|
289
|
+
deliver: async (payload) => {
|
|
290
|
+
if (payload.text && webhook) {
|
|
291
|
+
try {
|
|
292
|
+
const messageBody = buildMessageBody(payload.text);
|
|
293
|
+
await fetch(webhook, {
|
|
294
|
+
method: "POST",
|
|
295
|
+
headers: { "Content-Type": "application/json" },
|
|
296
|
+
body: JSON.stringify(messageBody),
|
|
297
|
+
});
|
|
357
298
|
}
|
|
358
|
-
|
|
359
|
-
log?.
|
|
299
|
+
catch (err) {
|
|
300
|
+
log?.error(`[dingtalk:${accountId}] Error sending reply: ${err}`);
|
|
360
301
|
}
|
|
361
302
|
}
|
|
362
303
|
},
|
|
363
304
|
},
|
|
364
305
|
});
|
|
365
|
-
log?.info(`[dingtalk:${accountId}] Dispatch result: ${JSON.stringify(result)}`);
|
|
366
306
|
}
|
|
367
307
|
catch (error) {
|
|
368
308
|
log?.error(`[dingtalk:${accountId}] Failed to process message: ${error}`);
|
|
369
309
|
}
|
|
370
310
|
})();
|
|
371
|
-
// 立即返回成功,不让钉钉重试
|
|
372
311
|
return EventAck.SUCCESS;
|
|
373
312
|
});
|
|
374
|
-
// 启动连接
|
|
375
313
|
client.connect();
|
|
376
314
|
streamClients.set(accountId, client);
|
|
377
|
-
log?.info(`[dingtalk:${accountId}] Stream client started`);
|
|
378
315
|
return { ok: true };
|
|
379
316
|
},
|
|
380
317
|
stopAccount: async (ctx) => {
|
|
@@ -384,22 +321,17 @@ const dingtalkPlugin = {
|
|
|
384
321
|
if (client) {
|
|
385
322
|
await client.disconnect();
|
|
386
323
|
streamClients.delete(accountId);
|
|
387
|
-
log?.info(`[dingtalk:${accountId}] Stream client stopped`);
|
|
388
324
|
}
|
|
389
325
|
return { ok: true };
|
|
390
326
|
},
|
|
391
327
|
},
|
|
392
|
-
// 出站消息
|
|
393
328
|
outbound: {
|
|
394
329
|
sendText: async ({ text, config: msgConfig, incoming }) => {
|
|
395
330
|
const accountId = msgConfig.accountId ?? "default";
|
|
396
331
|
const cfg = msgConfig.cfg;
|
|
397
332
|
const account = cfg.channels?.dingtalk?.accounts?.[accountId];
|
|
398
|
-
if (!account) {
|
|
399
|
-
return { ok: false, error:
|
|
400
|
-
}
|
|
401
|
-
if (!account.clientId || !account.clientSecret) {
|
|
402
|
-
return { ok: false, error: `Account '${accountId}' missing credentials` };
|
|
333
|
+
if (!account || !account.clientId || !account.clientSecret) {
|
|
334
|
+
return { ok: false, error: "Account config missing" };
|
|
403
335
|
}
|
|
404
336
|
try {
|
|
405
337
|
const accessToken = await getAccessToken(account.clientId, account.clientSecret);
|
|
@@ -409,61 +341,21 @@ const dingtalkPlugin = {
|
|
|
409
341
|
await sendGroupMessage(accessToken, conversationId, text);
|
|
410
342
|
}
|
|
411
343
|
else {
|
|
412
|
-
if (!account.robotCode)
|
|
413
|
-
return { ok: false, error:
|
|
414
|
-
}
|
|
344
|
+
if (!account.robotCode)
|
|
345
|
+
return { ok: false, error: "Missing robotCode" };
|
|
415
346
|
await sendPrivateMessage(accessToken, account.robotCode, senderStaffId, text);
|
|
416
347
|
}
|
|
417
348
|
}
|
|
418
349
|
else {
|
|
419
|
-
return { ok: false, error: "
|
|
350
|
+
return { ok: false, error: "No context" };
|
|
420
351
|
}
|
|
421
352
|
return { ok: true };
|
|
422
353
|
}
|
|
423
354
|
catch (error) {
|
|
424
|
-
return { ok: false, error:
|
|
425
|
-
}
|
|
426
|
-
},
|
|
427
|
-
// 发送 ActionCard 卡片消息(支持交互按钮)
|
|
428
|
-
sendActionCard: async ({ title, text, buttons, singleTitle, singleURL, config: msgConfig, incoming }) => {
|
|
429
|
-
const accountId = msgConfig.accountId ?? "default";
|
|
430
|
-
const cfg = msgConfig.cfg;
|
|
431
|
-
const account = cfg.channels?.dingtalk?.accounts?.[accountId];
|
|
432
|
-
if (!account) {
|
|
433
|
-
return { ok: false, error: `Account '${accountId}' not found` };
|
|
434
|
-
}
|
|
435
|
-
if (!account.clientId || !account.clientSecret) {
|
|
436
|
-
return { ok: false, error: `Account '${accountId}' missing credentials` };
|
|
437
|
-
}
|
|
438
|
-
try {
|
|
439
|
-
const accessToken = await getAccessToken(account.clientId, account.clientSecret);
|
|
440
|
-
if (incoming?.raw) {
|
|
441
|
-
const { conversationId, conversationType } = incoming.raw;
|
|
442
|
-
if (conversationType === "2") {
|
|
443
|
-
await sendGroupActionCard(accessToken, conversationId, {
|
|
444
|
-
title,
|
|
445
|
-
text,
|
|
446
|
-
buttons,
|
|
447
|
-
singleTitle,
|
|
448
|
-
singleURL,
|
|
449
|
-
});
|
|
450
|
-
}
|
|
451
|
-
else {
|
|
452
|
-
// 私聊暂不支持 ActionCard,降级为 Markdown
|
|
453
|
-
return { ok: false, error: "ActionCard is only supported in group chat" };
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
else {
|
|
457
|
-
return { ok: false, error: "Cannot send proactive message without conversation context" };
|
|
458
|
-
}
|
|
459
|
-
return { ok: true };
|
|
460
|
-
}
|
|
461
|
-
catch (error) {
|
|
462
|
-
return { ok: false, error: error instanceof Error ? error.message : String(error) };
|
|
355
|
+
return { ok: false, error: String(error) };
|
|
463
356
|
}
|
|
464
357
|
},
|
|
465
358
|
},
|
|
466
|
-
// 配置向导
|
|
467
359
|
setup: {
|
|
468
360
|
run: async ({ prompter }) => {
|
|
469
361
|
const clientId = await prompter.text("请输入钉钉机器人 ClientId (AppKey):");
|
|
@@ -483,21 +375,18 @@ const dingtalkPlugin = {
|
|
|
483
375
|
};
|
|
484
376
|
},
|
|
485
377
|
},
|
|
486
|
-
// 状态检查
|
|
487
378
|
status: {
|
|
488
379
|
check: async ({ account }) => {
|
|
489
380
|
const client = streamClients.get(account.accountId);
|
|
490
|
-
|
|
491
|
-
return { ok: true, message: "Stream client is running" };
|
|
492
|
-
}
|
|
493
|
-
return { ok: false, message: "Stream client not connected" };
|
|
381
|
+
return client ? { ok: true, message: "Running" } : { ok: false, message: "Stopped" };
|
|
494
382
|
},
|
|
495
383
|
},
|
|
496
384
|
};
|
|
385
|
+
// OpenClaw v2 标准导出:导出 plugin 对象
|
|
386
|
+
export const plugin = dingtalkPlugin;
|
|
387
|
+
// 同时也提供默认导出以保持兼容性
|
|
497
388
|
export default function register(api) {
|
|
498
389
|
api.registerChannel({ plugin: dingtalkPlugin });
|
|
499
|
-
api.logger.info("[dingtalk] Stream channel plugin registered");
|
|
500
390
|
}
|
|
501
|
-
|
|
502
|
-
export { detectMessageFormat, buildMessageBody, buildActionCardBody, };
|
|
391
|
+
export { detectMessageFormat, buildMessageBody, };
|
|
503
392
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/openclaw.plugin.json
CHANGED
|
@@ -1,63 +1,61 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"type": "object",
|
|
11
|
-
"additionalProperties": false,
|
|
12
|
-
"properties": {
|
|
13
|
-
"accounts": {
|
|
2
|
+
"id": "dingtalk",
|
|
3
|
+
"name": "钉钉机器人 Channel",
|
|
4
|
+
"version": "2.2.0",
|
|
5
|
+
"description": "钉钉群机器人 Channel 插件 for OpenClaw",
|
|
6
|
+
"channels": [
|
|
7
|
+
"dingtalk"
|
|
8
|
+
],
|
|
9
|
+
"configSchema": {
|
|
14
10
|
"type": "object",
|
|
15
|
-
"additionalProperties":
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
11
|
+
"additionalProperties": false,
|
|
12
|
+
"properties": {
|
|
13
|
+
"accounts": {
|
|
14
|
+
"type": "object",
|
|
15
|
+
"additionalProperties": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"properties": {
|
|
18
|
+
"enabled": {
|
|
19
|
+
"type": "boolean",
|
|
20
|
+
"default": true
|
|
21
|
+
},
|
|
22
|
+
"clientId": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"description": "钉钉应用的 AppKey"
|
|
25
|
+
},
|
|
26
|
+
"clientSecret": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"description": "钉钉应用的 AppSecret"
|
|
29
|
+
},
|
|
30
|
+
"robotCode": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"description": "机器人的 robotCode"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"required": [
|
|
36
|
+
"clientId",
|
|
37
|
+
"clientSecret"
|
|
38
|
+
]
|
|
39
|
+
}
|
|
39
40
|
}
|
|
40
|
-
}
|
|
41
41
|
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
"uiHints": {
|
|
46
|
-
"accounts": {
|
|
47
|
-
"label": "账号配置"
|
|
48
|
-
},
|
|
49
|
-
"accounts.*.enabled": {
|
|
50
|
-
"label": "启用"
|
|
51
|
-
},
|
|
52
|
-
"accounts.*.clientId": {
|
|
53
|
-
"label": "ClientId (AppKey)"
|
|
54
42
|
},
|
|
55
|
-
"
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
43
|
+
"uiHints": {
|
|
44
|
+
"accounts": {
|
|
45
|
+
"label": "账号配置"
|
|
46
|
+
},
|
|
47
|
+
"accounts.*.enabled": {
|
|
48
|
+
"label": "启用"
|
|
49
|
+
},
|
|
50
|
+
"accounts.*.clientId": {
|
|
51
|
+
"label": "ClientId (AppKey)"
|
|
52
|
+
},
|
|
53
|
+
"accounts.*.clientSecret": {
|
|
54
|
+
"label": "ClientSecret (AppSecret)",
|
|
55
|
+
"sensitive": true
|
|
56
|
+
},
|
|
57
|
+
"accounts.*.robotCode": {
|
|
58
|
+
"label": "机器人编码 (robotCode)"
|
|
59
|
+
}
|
|
61
60
|
}
|
|
62
|
-
}
|
|
63
61
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openclaw-channel-dingtalk",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "钉钉 Stream 机器人 Channel 插件 for OpenClaw - 支持 Markdown、ActionCard 和双向通信",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -39,32 +39,20 @@
|
|
|
39
39
|
"markdown",
|
|
40
40
|
"actioncard"
|
|
41
41
|
],
|
|
42
|
-
"author": "",
|
|
42
|
+
"author": "Charles311",
|
|
43
43
|
"license": "MIT",
|
|
44
|
-
"repository": {
|
|
45
|
-
"type": "git",
|
|
46
|
-
"url": ""
|
|
47
|
-
},
|
|
48
|
-
"homepage": "",
|
|
49
|
-
"bugs": {
|
|
50
|
-
"url": ""
|
|
51
|
-
},
|
|
52
44
|
"engines": {
|
|
53
45
|
"node": ">=18.0.0"
|
|
54
46
|
},
|
|
55
47
|
"peerDependencies": {
|
|
56
|
-
"openclaw": ">=
|
|
48
|
+
"openclaw": ">=2.0.0"
|
|
57
49
|
},
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"optional": true
|
|
61
|
-
}
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"dingtalk-stream": "^2.1.4"
|
|
62
52
|
},
|
|
63
53
|
"devDependencies": {
|
|
64
54
|
"@types/node": "^20.0.0",
|
|
65
|
-
"typescript": "^5.
|
|
66
|
-
|
|
67
|
-
"dependencies": {
|
|
68
|
-
"dingtalk-stream": "^2.1.4"
|
|
55
|
+
"typescript": "^5.0.0",
|
|
56
|
+
"openclaw": "latest"
|
|
69
57
|
}
|
|
70
58
|
}
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2024
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|