An OpenClaw channel plugin for DingTalk (钉钉) using Stream Mode for seamless integration.
version
1.0.10support the openclaw now.
- Stream Mode: Uses WebSocket for real-time message receiving (no public IP required)
- Zero Configuration: No webhook setup, ngrok, or firewall configuration needed
- Single/Group Chat: Supports both direct messages and group mentions
- Easy Setup: Just configure your DingTalk app credentials
- Media Support: Send images via markdown format
- Auto Chunking: Automatically splits long messages (2000 char limit)
openclaw plugins install moltbot-dingtalk-streamgit clone https://github.com/your-repo/moltbot-dingtalk-stream.git
cd moltbot-dingtalk-stream
npm install
# optional: typecheck only (no JS build)
npm run typecheck
cp -r . ~/.openclaw/extensions/moltbot-dingtalk-stream
openclaw gateway restartConfigure in your ~/.openclaw/openclaw.json:
{
"channels": {
"moltbot-dingtalk-stream": {
"enabled": true,
"clientId": "YOUR_APP_KEY",
"clientSecret": "YOUR_APP_SECRET"
}
}
}Or use environment variables:
export DINGTALK_CLIENT_ID="YOUR_APP_KEY"
export DINGTALK_CLIENT_SECRET="YOUR_APP_SECRET"{
"channels": {
"moltbot-dingtalk-stream": {
"enabled": true,
"accounts": {
"default": {
"enabled": true,
"clientId": "APP_KEY_1",
"clientSecret": "APP_SECRET_1"
},
"work": {
"enabled": true,
"clientId": "APP_KEY_2",
"clientSecret": "APP_SECRET_2"
}
}
}
}
}- Go to DingTalk Developer Console
- Create an Enterprise Internal Application
- Add Robot capability
- Enable Stream Mode (消息接收模式 → Stream模式)
- Copy the AppKey (as
clientId) and AppSecret (asclientSecret) - Publish and deploy the application
Send messages to DingTalk conversations using the OpenClaw CLI:
# Send to a specific conversation
openclaw send --channel moltbot-dingtalk-stream --to <conversationId> "Hello from CLI"
# The conversationId can be found in logs when a message is received| Issue | Solution |
|---|---|
| No messages received | Check if Stream Mode is enabled in DingTalk app settings |
| Connection failed | Verify clientId and clientSecret are correct |
| Reply not sent | Ensure the bot has been messaged first (webhook is per-session) |
| Permission denied | Check app permissions in DingTalk Developer Console |
openclaw logs --followLook for [default] DingTalk Stream client connected to confirm connection.
┌─────────────────┐ WebSocket ┌──────────────────┐
│ DingTalk API │ ◄─────────────────► │ OpenClaw Plugin │
│ (Stream Mode) │ │ (This Plugin) │
└─────────────────┘ └──────────────────┘
│
▼
┌──────────────────┐
│ OpenClaw Agent │
│ (AI Processing) │
└──────────────────┘
MIT
See CHANGELOG.md for release history.