moltbot-dingtalk-stream 1.0.7 → 1.0.9
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 +20 -0
- package/README.md +114 -41
- package/clawdbot.plugin.json +1 -1
- package/dist/index.d.ts +162 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +347 -249
- package/dist/index.js.map +1 -1
- package/dist/runtime.d.ts +142 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +106 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema.d.ts +137 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +235 -0
- package/dist/schema.js.map +1 -0
- package/package.json +4 -3
- package/src/index.ts +574 -305
- package/src/runtime.ts +227 -0
- package/src/schema.ts +316 -0
- package/dist/clawdbot.plugin.json +0 -59
- package/dist/package.json +0 -11
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.0.8] - 2026-01-29
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- All Chinese comments and log messages converted to English for better international support
|
|
12
|
+
- Improved code organization and readability
|
|
13
|
+
- Updated README with comprehensive documentation
|
|
14
|
+
- Added CHANGELOG
|
|
15
|
+
|
|
16
|
+
## [1.0.7] - 2026-01-29
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
- Fixed webhook lookup issue where reply messages couldn't find the correct session webhook
|
|
20
|
+
- Webhook is now stored with multiple keys (conversationId, senderId, prefixed formats) for flexible lookup
|
package/README.md
CHANGED
|
@@ -1,61 +1,134 @@
|
|
|
1
|
-
# DingTalk Channel for
|
|
1
|
+
# DingTalk Channel for Clawdbot
|
|
2
2
|
|
|
3
|
-
A
|
|
3
|
+
A Clawdbot channel plugin for DingTalk (钉钉) using **Stream Mode** for seamless integration.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
- **Stream Mode**: Uses WebSocket for receiving
|
|
7
|
+
- **Stream Mode**: Uses WebSocket for real-time message receiving (no public IP required)
|
|
8
8
|
- **Zero Configuration**: No webhook setup, ngrok, or firewall configuration needed
|
|
9
9
|
- **Single/Group Chat**: Supports both direct messages and group mentions
|
|
10
10
|
- **Easy Setup**: Just configure your DingTalk app credentials
|
|
11
|
+
- **Media Support**: Send images via markdown format
|
|
12
|
+
- **Auto Chunking**: Automatically splits long messages (2000 char limit)
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
### Option 1: From npm (recommended)
|
|
17
|
+
```bash
|
|
18
|
+
clawdbot plugins install moltbot-dingtalk-stream
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Option 2: Manual installation
|
|
22
|
+
```bash
|
|
23
|
+
git clone https://github.com/your-repo/moltbot-dingtalk-stream.git
|
|
24
|
+
cd moltbot-dingtalk-stream
|
|
25
|
+
npm install && npm run build
|
|
26
|
+
cp -r . ~/.clawdbot/extensions/moltbot-dingtalk-stream
|
|
27
|
+
clawdbot gateway restart
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Configuration
|
|
31
|
+
|
|
32
|
+
Configure in your `~/.clawdbot/clawdbot.json`:
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"channels": {
|
|
37
|
+
"moltbot-dingtalk-stream": {
|
|
38
|
+
"enabled": true,
|
|
39
|
+
"clientId": "YOUR_APP_KEY",
|
|
40
|
+
"clientSecret": "YOUR_APP_SECRET"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Or use environment variables:
|
|
47
|
+
```bash
|
|
48
|
+
export DINGTALK_CLIENT_ID="YOUR_APP_KEY"
|
|
49
|
+
export DINGTALK_CLIENT_SECRET="YOUR_APP_SECRET"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Multi-Account Setup
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"channels": {
|
|
57
|
+
"moltbot-dingtalk-stream": {
|
|
58
|
+
"enabled": true,
|
|
59
|
+
"accounts": {
|
|
60
|
+
"default": {
|
|
61
|
+
"enabled": true,
|
|
62
|
+
"clientId": "APP_KEY_1",
|
|
63
|
+
"clientSecret": "APP_SECRET_1"
|
|
64
|
+
},
|
|
65
|
+
"work": {
|
|
66
|
+
"enabled": true,
|
|
67
|
+
"clientId": "APP_KEY_2",
|
|
68
|
+
"clientSecret": "APP_SECRET_2"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## DingTalk App Setup
|
|
77
|
+
|
|
78
|
+
1. Go to [DingTalk Developer Console](https://open.dingtalk.com/)
|
|
79
|
+
2. Create an **Enterprise Internal Application**
|
|
80
|
+
3. Add **Robot** capability
|
|
81
|
+
4. Enable **Stream Mode** (消息接收模式 → Stream模式)
|
|
82
|
+
5. Copy the **AppKey** (as `clientId`) and **AppSecret** (as `clientSecret`)
|
|
83
|
+
6. Publish and deploy the application
|
|
11
84
|
|
|
12
85
|
## Proactive Messaging (CLI)
|
|
13
86
|
|
|
14
|
-
|
|
87
|
+
Send messages to DingTalk conversations using the Clawdbot CLI:
|
|
15
88
|
|
|
16
89
|
```bash
|
|
90
|
+
# Send to a specific conversation
|
|
17
91
|
clawdbot send --channel moltbot-dingtalk-stream --to <conversationId> "Hello from CLI"
|
|
92
|
+
|
|
93
|
+
# The conversationId can be found in logs when a message is received
|
|
18
94
|
```
|
|
19
95
|
|
|
20
96
|
## Troubleshooting
|
|
21
97
|
|
|
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
|
-
- Create an enterprise internal app at [DingTalk Developer Console](https://open.dingtalk.com/)
|
|
52
|
-
- Add Robot capability with **Stream Mode** enabled
|
|
53
|
-
- Use the AppKey as `clientId` and AppSecret as `clientSecret`
|
|
54
|
-
|
|
55
|
-
## Documentation
|
|
56
|
-
|
|
57
|
-
See [DEVELOPMENT.md](./DEVELOPMENT.md) for detailed setup and configuration.
|
|
98
|
+
| Issue | Solution |
|
|
99
|
+
|-------|----------|
|
|
100
|
+
| No messages received | Check if Stream Mode is enabled in DingTalk app settings |
|
|
101
|
+
| Connection failed | Verify `clientId` and `clientSecret` are correct |
|
|
102
|
+
| Reply not sent | Ensure the bot has been messaged first (webhook is per-session) |
|
|
103
|
+
| Permission denied | Check app permissions in DingTalk Developer Console |
|
|
104
|
+
|
|
105
|
+
### Debug Logs
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
clawdbot logs --follow
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Look for `[default] DingTalk Stream client connected` to confirm connection.
|
|
112
|
+
|
|
113
|
+
## Architecture
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
┌─────────────────┐ WebSocket ┌──────────────────┐
|
|
117
|
+
│ DingTalk API │ ◄─────────────────► │ Clawdbot Plugin │
|
|
118
|
+
│ (Stream Mode) │ │ (This Plugin) │
|
|
119
|
+
└─────────────────┘ └──────────────────┘
|
|
120
|
+
│
|
|
121
|
+
▼
|
|
122
|
+
┌──────────────────┐
|
|
123
|
+
│ Clawdbot Agent │
|
|
124
|
+
│ (AI Processing) │
|
|
125
|
+
└──────────────────┘
|
|
126
|
+
```
|
|
58
127
|
|
|
59
128
|
## License
|
|
60
129
|
|
|
61
|
-
MIT
|
|
130
|
+
MIT
|
|
131
|
+
|
|
132
|
+
## Changelog
|
|
133
|
+
|
|
134
|
+
See [CHANGELOG.md](./CHANGELOG.md) for release history.
|
package/clawdbot.plugin.json
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -1,38 +1,179 @@
|
|
|
1
|
+
import { type ClawdbotCoreRuntime } from "./runtime.js";
|
|
2
|
+
import { DingTalkConfigSchema, type ClawdbotConfig, type ResolvedDingTalkAccount } from "./schema.js";
|
|
1
3
|
interface ClawdbotPluginApi {
|
|
2
4
|
config: ClawdbotConfig;
|
|
3
|
-
logger:
|
|
4
|
-
runtime:
|
|
5
|
-
postMessage(params: any): Promise<void>;
|
|
5
|
+
logger: Console;
|
|
6
|
+
runtime: ClawdbotCoreRuntime;
|
|
6
7
|
registerChannel(opts: {
|
|
7
|
-
plugin:
|
|
8
|
+
plugin: ChannelPlugin;
|
|
8
9
|
}): void;
|
|
9
|
-
registerService(service:
|
|
10
|
+
registerService?(service: unknown): void;
|
|
10
11
|
}
|
|
11
|
-
interface
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
interface GatewayContext {
|
|
13
|
+
account: ResolvedDingTalkAccount;
|
|
14
|
+
cfg: ClawdbotConfig;
|
|
15
|
+
runtime: ClawdbotCoreRuntime;
|
|
16
|
+
abortSignal?: AbortSignal;
|
|
17
|
+
log?: {
|
|
18
|
+
info: (msg: string) => void;
|
|
19
|
+
warn: (msg: string) => void;
|
|
20
|
+
error: (msg: string) => void;
|
|
21
|
+
debug?: (msg: string) => void;
|
|
22
|
+
};
|
|
23
|
+
setStatus?: (status: Record<string, unknown>) => void;
|
|
24
|
+
statusSink?: (patch: {
|
|
25
|
+
lastInboundAt?: number;
|
|
26
|
+
lastOutboundAt?: number;
|
|
27
|
+
}) => void;
|
|
28
|
+
}
|
|
29
|
+
interface ChannelPlugin {
|
|
30
|
+
id: string;
|
|
31
|
+
meta: {
|
|
32
|
+
id: string;
|
|
33
|
+
label: string;
|
|
34
|
+
selectionLabel: string;
|
|
35
|
+
docsPath: string;
|
|
36
|
+
docsLabel: string;
|
|
37
|
+
blurb: string;
|
|
38
|
+
order: number;
|
|
39
|
+
aliases: string[];
|
|
40
|
+
};
|
|
41
|
+
capabilities: {
|
|
42
|
+
chatTypes: readonly string[];
|
|
43
|
+
media?: boolean;
|
|
44
|
+
threads?: boolean;
|
|
45
|
+
};
|
|
46
|
+
reload: {
|
|
47
|
+
configPrefixes: string[];
|
|
48
|
+
};
|
|
49
|
+
configSchema: typeof DingTalkConfigSchema;
|
|
50
|
+
config: {
|
|
51
|
+
listAccountIds: (cfg: ClawdbotConfig) => string[];
|
|
52
|
+
resolveAccount: (cfg: ClawdbotConfig, accountId?: string) => ResolvedDingTalkAccount;
|
|
53
|
+
defaultAccountId: (cfg: ClawdbotConfig) => string;
|
|
54
|
+
setAccountEnabled: (opts: {
|
|
55
|
+
cfg: ClawdbotConfig;
|
|
56
|
+
accountId: string;
|
|
57
|
+
enabled: boolean;
|
|
58
|
+
}) => ClawdbotConfig;
|
|
59
|
+
deleteAccount: (opts: {
|
|
60
|
+
cfg: ClawdbotConfig;
|
|
61
|
+
accountId: string;
|
|
62
|
+
}) => ClawdbotConfig;
|
|
63
|
+
isConfigured: (account: ResolvedDingTalkAccount) => boolean;
|
|
64
|
+
describeAccount: (account: ResolvedDingTalkAccount) => Record<string, unknown>;
|
|
65
|
+
};
|
|
66
|
+
security?: {
|
|
67
|
+
resolveDmPolicy: (opts: {
|
|
68
|
+
cfg: ClawdbotConfig;
|
|
69
|
+
accountId?: string;
|
|
70
|
+
account: ResolvedDingTalkAccount;
|
|
71
|
+
}) => {
|
|
72
|
+
policy: string;
|
|
73
|
+
allowFrom: string[];
|
|
74
|
+
allowFromPath: string;
|
|
75
|
+
normalizeEntry: (raw: string) => string;
|
|
17
76
|
};
|
|
18
|
-
|
|
77
|
+
};
|
|
78
|
+
mentions?: {
|
|
79
|
+
stripPatterns: () => string[];
|
|
80
|
+
};
|
|
81
|
+
groups?: {
|
|
82
|
+
resolveRequireMention: (opts: {
|
|
83
|
+
cfg: ClawdbotConfig;
|
|
84
|
+
accountId?: string;
|
|
85
|
+
}) => boolean;
|
|
86
|
+
};
|
|
87
|
+
messaging?: {
|
|
88
|
+
normalizeTarget: (target: string) => string;
|
|
89
|
+
targetResolver?: {
|
|
90
|
+
looksLikeId: (id: string) => boolean;
|
|
91
|
+
hint: string;
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
setup?: {
|
|
95
|
+
resolveAccountId: (opts: {
|
|
96
|
+
accountId?: string;
|
|
97
|
+
}) => string;
|
|
98
|
+
applyAccountName: (opts: {
|
|
99
|
+
cfg: ClawdbotConfig;
|
|
100
|
+
accountId: string;
|
|
101
|
+
name?: string;
|
|
102
|
+
}) => ClawdbotConfig;
|
|
103
|
+
validateInput: (opts: {
|
|
104
|
+
accountId: string;
|
|
105
|
+
input: SetupInput;
|
|
106
|
+
}) => string | null;
|
|
107
|
+
applyAccountConfig: (opts: {
|
|
108
|
+
cfg: ClawdbotConfig;
|
|
109
|
+
accountId: string;
|
|
110
|
+
input: SetupInput;
|
|
111
|
+
}) => ClawdbotConfig;
|
|
112
|
+
};
|
|
113
|
+
outbound: {
|
|
114
|
+
deliveryMode: "direct";
|
|
115
|
+
textChunkLimit?: number;
|
|
116
|
+
sendText: (opts: {
|
|
117
|
+
to: string;
|
|
118
|
+
text: string;
|
|
119
|
+
accountId?: string;
|
|
120
|
+
deps?: Record<string, unknown>;
|
|
121
|
+
replyToId?: string;
|
|
122
|
+
}) => Promise<{
|
|
123
|
+
channel: string;
|
|
124
|
+
ok: boolean;
|
|
125
|
+
error?: string;
|
|
126
|
+
}>;
|
|
127
|
+
sendMedia?: (opts: {
|
|
128
|
+
to: string;
|
|
129
|
+
text: string;
|
|
130
|
+
mediaUrl: string;
|
|
131
|
+
accountId?: string;
|
|
132
|
+
}) => Promise<{
|
|
133
|
+
channel: string;
|
|
134
|
+
ok: boolean;
|
|
135
|
+
error?: string;
|
|
136
|
+
}>;
|
|
137
|
+
};
|
|
138
|
+
status?: {
|
|
139
|
+
defaultRuntime: {
|
|
140
|
+
accountId: string;
|
|
141
|
+
running: boolean;
|
|
142
|
+
lastStartAt: null;
|
|
143
|
+
lastStopAt: null;
|
|
144
|
+
lastError: null;
|
|
145
|
+
};
|
|
146
|
+
probeAccount: (opts: {
|
|
147
|
+
account: ResolvedDingTalkAccount;
|
|
148
|
+
timeoutMs?: number;
|
|
149
|
+
}) => Promise<{
|
|
150
|
+
ok: boolean;
|
|
151
|
+
error?: string;
|
|
152
|
+
bot?: {
|
|
153
|
+
name?: string;
|
|
154
|
+
};
|
|
155
|
+
}>;
|
|
156
|
+
buildAccountSnapshot: (opts: {
|
|
157
|
+
account: ResolvedDingTalkAccount;
|
|
158
|
+
runtime?: Record<string, unknown>;
|
|
159
|
+
probe?: Record<string, unknown>;
|
|
160
|
+
}) => Record<string, unknown>;
|
|
161
|
+
};
|
|
162
|
+
gateway: {
|
|
163
|
+
startAccount: (ctx: GatewayContext) => Promise<void>;
|
|
19
164
|
};
|
|
20
165
|
}
|
|
21
|
-
interface
|
|
22
|
-
enabled?: boolean;
|
|
23
|
-
clientId: string;
|
|
24
|
-
clientSecret: string;
|
|
25
|
-
webhookUrl?: string;
|
|
166
|
+
interface SetupInput {
|
|
26
167
|
name?: string;
|
|
168
|
+
clientId?: string;
|
|
169
|
+
clientSecret?: string;
|
|
170
|
+
useEnv?: boolean;
|
|
27
171
|
}
|
|
172
|
+
export declare const dingtalkPlugin: ChannelPlugin;
|
|
28
173
|
declare const plugin: {
|
|
29
174
|
id: string;
|
|
30
175
|
name: string;
|
|
31
176
|
description: string;
|
|
32
|
-
configSchema: {
|
|
33
|
-
type: "object";
|
|
34
|
-
properties: {};
|
|
35
|
-
};
|
|
36
177
|
register(api: ClawdbotPluginApi): void;
|
|
37
178
|
};
|
|
38
179
|
export default plugin;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|