{"_id":"@duckduck-cocode/dingtalk-connector","_rev":"4-f765f042c56e070c5ce4b5577539ff05","name":"@duckduck-cocode/dingtalk-connector","dist-tags":{"latest":"0.8.7"},"versions":{"0.7.1":{"name":"@duckduck-cocode/dingtalk-connector","version":"0.7.1","keywords":["dingtalk","channel","stream","ai-card","connector"],"author":{"name":"DingTalk Real Team"},"license":"MIT","_id":"@duckduck-cocode/dingtalk-connector@0.7.1","maintainers":[{"name":"lvgj","email":"lvgj1998@gmail.com"}],"homepage":"https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector#readme","bugs":{"url":"https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/issues"},"dist":{"shasum":"0217e4c1bff728e1f2abc2c38a7273b72ff2ee5a","tarball":"https://registry.npmjs.org/@duckduck-cocode/dingtalk-connector/-/dingtalk-connector-0.7.1.tgz","fileCount":10,"integrity":"sha512-WRHrSMBkSctoMiJvgcmTlMhizMlS9NTG9wFHqWn86tDb9z5KkGKYE1pCwCSbnUjnEH0Ng3TAllKDkg2PmpJTBw==","signatures":[{"sig":"MEUCIQCMLKVpfCHnvfGQLeYGqVBTloZmPzkrqTdfv21i7gDcNwIgXuMWYjIignPOob2UXRvSrpGK9MLnehLUVn+fDXP9cnI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":295911},"main":"plugin.ts","type":"module","gitHead":"55f7a9b08c037650ef5a87952aab4b9daac5fa2f","scripts":{"build":"echo 'No build needed - jiti loads TS at runtime'"},"_npmUser":{"name":"lvgj","email":"lvgj1998@gmail.com"},"openclaw":{"channels":["dingtalk-connector"],"extensions":["./plugin.ts"],"installDependencies":true},"repository":{"url":"git+https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector.git","type":"git"},"_npmVersion":"10.9.2","description":"DingTalk (钉钉) channel connector — Stream mode with AI Card streaming","directories":{},"_nodeVersion":"22.17.1","dependencies":{"axios":"^1.6.0","mammoth":"^1.8.0","pdf-parse":"^1.1.1","fluent-ffmpeg":"^2.1.3","dingtalk-stream":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dingtalk-connector_0.7.1_1772776498870_0.30938370523547953","host":"s3://npm-registry-packages-npm-production"}},"0.7.2-0":{"name":"@duckduck-cocode/dingtalk-connector","version":"0.7.2-0","keywords":["dingtalk","channel","stream","ai-card","connector"],"author":{"name":"DingTalk Real Team"},"license":"MIT","_id":"@duckduck-cocode/dingtalk-connector@0.7.2-0","maintainers":[{"name":"lvgj","email":"lvgj1998@gmail.com"}],"homepage":"https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector#readme","bugs":{"url":"https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/issues"},"dist":{"shasum":"a85a93a393e1a608679923c80074fd7ce504e925","tarball":"https://registry.npmjs.org/@duckduck-cocode/dingtalk-connector/-/dingtalk-connector-0.7.2-0.tgz","fileCount":13,"integrity":"sha512-g2GY/G/53CTww6eNg9q6+4kB00YZMbWlUdjpjF+lP9pttsU3e+u/wC+kO3/JdHwxh5fPzsYfnJc0bvl2BTGy2Q==","signatures":[{"sig":"MEYCIQD2jzutBxmkvEOQSTb+nNTmuQbC8uNFd283iACeNJO/rgIhAKoh5BmdKkwJIwvzhKpsuMthDtZpmNgb4OIxnYS/3cki","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1507066},"main":"plugin.ts","type":"module","gitHead":"55f7a9b08c037650ef5a87952aab4b9daac5fa2f","scripts":{"build":"echo 'No build needed - jiti loads TS at runtime'"},"_npmUser":{"name":"lvgj","email":"lvgj1998@gmail.com"},"openclaw":{"channels":["dingtalk-connector"],"extensions":["./plugin.ts"],"installDependencies":true},"repository":{"url":"git+https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector.git","type":"git"},"_npmVersion":"10.9.2","description":"DingTalk (钉钉) channel connector — Stream mode with AI Card streaming","directories":{},"_nodeVersion":"22.17.1","dependencies":{"axios":"^1.6.0","mammoth":"^1.8.0","pdf-parse":"^1.1.1","fluent-ffmpeg":"^2.1.3","dingtalk-stream":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dingtalk-connector_0.7.2-0_1772777346031_0.43443904390750077","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@duckduck-cocode/dingtalk-connector","version":"0.7.3","keywords":["dingtalk","channel","stream","ai-card","connector"],"author":{"name":"DingTalk Real Team"},"license":"MIT","_id":"@duckduck-cocode/dingtalk-connector@0.7.3","maintainers":[{"name":"lvgj","email":"lvgj1998@gmail.com"}],"homepage":"https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector#readme","bugs":{"url":"https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/issues"},"dist":{"shasum":"a081c79cfbfd33833201b2e7620a578dda3155b3","tarball":"https://registry.npmjs.org/@duckduck-cocode/dingtalk-connector/-/dingtalk-connector-0.7.3.tgz","fileCount":11,"integrity":"sha512-Id17UbYE0cBfRpQU0L0OUPeJ9TRlj2+81wlcP2Fent0rXokyUSRHBn2q2KPrnM1f+iYSUncOP0RU9UBDWPSGIQ==","signatures":[{"sig":"MEUCIQDP2EcbPFOJS8sXh2twjUG5KZHE2o/LGYeDSHYHjzI1egIgaSFh2nfMQeyc8WjXfD6tsr1GQwcLH037d9cAdwCxpzw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":236757},"main":"plugin.ts","type":"module","gitHead":"6bb744a47f30750ce1727989fd3897d45b49732d","scripts":{"dev":"echo 'Run: openclaw start'","lint":"echo 'Lint check skipped'","test":"echo 'Tests skipped'","build":"echo 'No build needed - jiti loads TS at runtime'","clean":"rm -rf node_modules package-lock.json","lint:fix":"echo 'Lint fix skipped'","validate":"npm run lint && npm run type-check && npm run version:check","test:watch":"echo 'Tests skipped'","type-check":"npx tsc --noEmit","install:fresh":"npm run clean && npm install","version:check":"echo 'Version check skipped'","release:verify":"npm view @dingtalk-real-ai/dingtalk-connector version","release:prepare":"echo 'Release prepare skipped'","release:publish":"npm publish --access public"},"_npmUser":{"name":"lvgj","email":"lvgj1998@gmail.com"},"openclaw":{"channels":["dingtalk-connector"],"extensions":["./plugin.ts"],"installDependencies":true},"repository":{"url":"git+https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector.git","type":"git"},"_npmVersion":"10.9.2","description":"DingTalk (钉钉) channel connector — Stream mode with AI Card streaming","directories":{},"_nodeVersion":"22.17.1","dependencies":{"axios":"^1.6.0","mammoth":"^1.8.0","pdf-parse":"^1.1.1","fluent-ffmpeg":"^2.1.3","dingtalk-stream":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dingtalk-connector_0.7.3_1773071946733_0.3738561793238677","host":"s3://npm-registry-packages-npm-production"}},"0.8.7":{"name":"@duckduck-cocode/dingtalk-connector","version":"0.8.7","description":"DingTalk (钉钉) channel connector — Stream mode with AI Card streaming","main":"index.ts","type":"module","scripts":{"build":"echo 'No build needed - jiti loads TS at runtime'","lint":"echo 'Lint check skipped'","lint:fix":"echo 'Lint fix skipped'","test":"vitest run tests/gateway-methods.unit.test.ts","test:unit":"vitest run tests/gateway-methods.unit.test.ts","test:integration":"vitest run tests/gateway-methods.unit.test.ts","test:all":"vitest run","test:watch":"vitest watch","test:ui":"vitest --ui","test:coverage":"vitest run --coverage --exclude tests/gateway-methods.test.ts","type-check":"npx tsc --noEmit","version:check":"echo 'Version check skipped'","release:prepare":"echo 'Release prepare skipped'","release:publish":"npm publish --access public","release:verify":"npm view @dingtalk-real-ai/dingtalk-connector version","clean":"rm -rf node_modules package-lock.json","install:fresh":"npm run clean && npm install","dev":"echo 'Run: openclaw start'","validate":"npm run lint && npm run type-check && npm run version:check"},"keywords":["dingtalk","channel","stream","ai-card","connector"],"author":{"name":"DingTalk Real Team"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector.git"},"homepage":"https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector#readme","bugs":{"url":"https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/issues"},"publishConfig":{"access":"public"},"dependencies":{"@ffmpeg-installer/ffmpeg":"^1.1.0","@ffprobe-installer/ffprobe":"^2.1.2","axios":"^1.6.0","dingtalk-stream":"2.1.4","fluent-ffmpeg":"^2.1.3","form-data":"^4.0.0","mammoth":"^1.8.0","openclaw":"^2026.3.23-2","pako":"^2.1.0","pdf-parse":"^1.1.1","zod":"^3.22.0"},"devDependencies":{"@types/node":"^20.19.37","@vitest/coverage-v8":"^2.0.0","@vitest/ui":"^2.1.9","typescript":"^5.6.0","vitest":"^2.1.9"},"openclaw":{"extensions":["./index.ts"],"channels":["dingtalk-connector"],"installDependencies":true},"_id":"@duckduck-cocode/dingtalk-connector@0.8.7","gitHead":"f79f3da657dfd7cca77bfc95d5ed74be36393806","_nodeVersion":"24.7.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-N5uXnGuVOlb4e5ukzfbQwFlZDdd4iQnP0savu2MoDHI2nMHWutLQWyGU4Ew715E7wCn6MTdVKyQ3cdb+beuGzA==","shasum":"30468009d2828cd05c89249601ee495fc92ce665","tarball":"https://registry.npmjs.org/@duckduck-cocode/dingtalk-connector/-/dingtalk-connector-0.8.7.tgz","fileCount":64,"unpackedSize":13727220,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC0fRClmAWG3X/5owL03U7Lzv7zhXtX1UfAy7On8EOenwIgB+zSYFbOy7rF5UPNzu/allG14kldDHhg+ZrmLfPM/0o="}]},"_npmUser":{"name":"lvgj","email":"lvgj1998@gmail.com"},"directories":{},"maintainers":[{"name":"lvgj","email":"lvgj1998@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dingtalk-connector_0.8.7_1774797831204_0.7355353413087964"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-06T05:54:58.790Z","modified":"2026-03-29T15:23:51.836Z","0.7.1":"2026-03-06T05:54:59.078Z","0.7.2-0":"2026-03-06T06:09:06.333Z","0.7.3":"2026-03-09T15:59:06.940Z","0.8.7":"2026-03-29T15:23:51.718Z"},"bugs":{"url":"https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/issues"},"author":{"name":"DingTalk Real Team"},"license":"MIT","homepage":"https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector#readme","keywords":["dingtalk","channel","stream","ai-card","connector"],"repository":{"type":"git","url":"git+https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector.git"},"description":"DingTalk (钉钉) channel connector — Stream mode with AI Card streaming","maintainers":[{"name":"lvgj","email":"lvgj1998@gmail.com"}],"readme":"<div align=\"center\">\n  <img alt=\"DingTalk\" src=\"docs/images/dingtalk.svg\" width=\"72\" height=\"72\" />\n  <h1>钉钉 OpenClaw 官方连接器</h1>\n  <p>将钉钉机器人连接到 OpenClaw Gateway，支持 AI Card 流式响应和会话管理</p>\n  \n  <p>\n    <a href=\"README.en.md\">English</a> •\n    <a href=\"CHANGELOG.md\">更新日志</a>\n  </p>\n</div>\n\n---\n\n## 📋 目录\n\n- [前置要求](#前置要求)\n- [快速开始](#快速开始)\n- [功能特性](#功能特性)\n- [配置说明](#配置说明)\n- [常见问题](#常见问题)\n- [进阶主题](#进阶主题)\n- [钉钉 DEAP Agent 集成](docs/DEAP_AGENT_GUIDE.md)\n- [许可证](#许可证)\n\n---\n\n## 前置要求\n\n开始之前，请确保你已经：\n\n> 本插件作为 OpenClaw Gateway 插件使用，一般无需你单独安装或管理 Node.js 运行时。\n\n### 1. OpenClaw Gateway\n\n- **官方网站**：https://openclaw.ai/\n- **安装说明**：按照官方指南安装 OpenClaw\n- **验证安装**：\n  ```bash\n  openclaw gateway status\n  ```\n  预期输出：`✓ Gateway is running on http://127.0.0.1:18789`\n\n### ⚠️ 版本兼容性要求\n\n**重要**：dingtalk-connector v0.8.4+ 需要 **OpenClaw SDK v2026.3.22 或更高版本**。\n\n| dingtalk-connector 版本 | 最低 OpenClaw SDK 版本 | 说明 |\n|------------------------|----------------------|------|\n| v0.8.4+ | v2026.3.22+ | 使用新版 SDK API，支持更完善的路由和会话管理 |\n| v0.8.3 及以下 | v2026.3.x | 兼容旧版 SDK |\n\n**如何检查版本**：\n```bash\n# 检查 OpenClaw 版本\nopenclaw --version\n\n# 检查插件版本\nopenclaw plugins list\n```\n\n**如何升级**：\n```bash\n# 升级 OpenClaw 到最新版本\nnpm install -g openclaw@latest\n\n# 或使用 yarn\nyarn global add openclaw@latest\n```\n\n**版本不兼容时的表现**：\n- 插件加载时会显示详细的错误提示\n- 提示信息会包含升级命令和降级方案\n- 插件会自动停止加载，不影响其他插件\n\n### 2. 钉钉企业账号\n\n- 你需要一个钉钉企业账号来创建企业内部应用\n- 官方网站：https://www.dingtalk.com/\n\n---\n\n## 快速开始\n\n> 💡 **目标**：5 分钟内让你的钉钉机器人运行起来\n\n### 操作系统支持\n\n- macOS / Linux：使用默认的 Shell 终端（zsh、bash 等）。\n- Windows：\n  - 推荐使用 **PowerShell** 或 **Windows Terminal**。\n  - OpenClaw 配置文件路径默认为：`C:\\Users\\<你的用户名>\\.openclaw\\openclaw.json`。\n\n下文中出现的 `~/.openclaw/openclaw.json`，在 Windows 上等价于以上路径。\n\n### 步骤 1：安装插件\n\n#### 方法 A：通过 npm 包安装（推荐）\n\n```bash\nopenclaw plugins install @dingtalk-real-ai/dingtalk-connector\n```\n\n#### 方法 B：通过本地源码安装\n\n如果你想对插件进行二次开发，可以先克隆仓库：\n\n```bash\n# 1. 克隆插件仓库\ngit clone https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector.git\ncd dingtalk-openclaw-connector\n\n# 2. 安装依赖（必需）\nnpm install\n\n# 3. 以链接模式安装（方便修改代码后实时生效）\nopenclaw plugins install -l .\n```\n\n#### 方法 C：手动安装\n\n1. 将本仓库下载或复制到 `~/.openclaw/extensions/dingtalk-connector`。\n2. 确保包含 `index.ts`、`openclaw.plugin.json` 和 `package.json`。\n3. 在该目录下运行 `npm install` 安装依赖。\n\n#### 方法 D：国内网络环境安装（npm 镜像源）\n\n如果你在国内网络环境下执行 `openclaw plugins install` 时卡在 `Installing plugin dependencies...` 或出现 `npm install failed`，可临时为该次安装指定镜像源：\n\n```bash\nNPM_CONFIG_REGISTRY=https://registry.npmmirror.com openclaw plugins install @dingtalk-real-ai/dingtalk-connector\n```\n\n如果插件已处于半安装状态（例如扩展目录存在但依赖未装全），可进入插件目录手动补装依赖：\n\n```bash\ncd ~/.openclaw/extensions/dingtalk-connector\nrm -rf node_modules package-lock.json\nNPM_CONFIG_REGISTRY=https://registry.npmmirror.com npm install\n```\n\n如果希望长期生效，可设置 npm 默认镜像：\n\n```bash\nnpm config set registry https://registry.npmmirror.com\n```\n\n或写入 `~/.npmrc`：\n\n```\nregistry=https://registry.npmmirror.com\n```\n\n**验证安装**：\n```bash\nopenclaw plugins list\n```\n你应该看到 `✓ DingTalk Channel (v0.8.6) - loaded`\n\n---\n\n### 步骤 2：创建钉钉机器人\n\n#### 3.1 创建应用\n\n1. 访问 [钉钉开放平台](https://open-dev.dingtalk.com/)\n2. 点击 **\"应用开发\"**\n\n![创建应用](docs/images/image-1.png)\n\n#### 3.2 添加机器人能力\n\n1. 在应用详情页，点击 一键创建OpenClaw机器人应用\n\n![创建OpenClaw机器人应用](docs/images/image-2.png)\n\n#### 3.3 获取凭证\n\n1. 完成创建并获取 **\"凭证与基础信息\"**\n2. 复制你的 **AppKey**（Client ID）\n3. 复制你的 **AppSecret**（Client Secret）\n\n![完成创建](docs/images/image-3.png)\n\n![获取凭证](docs/images/image-4.png)\n\n> ⚠️ **重要**：Client ID和 Client Secret是机器人的唯一凭证。请合理保存。\n\n---\n\n### 步骤 3：配置 OpenClaw\n\n你有三种方式配置连接器：\n\n#### 方式 A：配置向导（推荐新手使用）\n\n> 你可以直接复制粘贴下面的命令，在终端中运行配置向导。\n\n```bash\nopenclaw channels add\n```\n\n选择 **\"DingTalk (钉钉)\"**，然后按提示输入：\n- `clientId`（AppKey）\n- `clientSecret`（AppSecret）\n\n#### 方式 B：编辑配置文件\n\n编辑配置文件：\n\n- macOS / Linux：`~/.openclaw/openclaw.json`\n- Windows：`C:\\Users\\<你的用户名>\\.openclaw\\openclaw.json`\n\n```json\n{\n  \"channels\": {\n    \"dingtalk-connector\": {\n      \"enabled\": true,\n      \"clientId\": \"dingxxxxxxxxx\",\n      \"clientSecret\": \"your_app_secret\"\n    }\n  }\n}\n```\n\n> 💡 **提示**：如果文件已有内容，在 `channels` 节点下添加 `dingtalk-connector` 部分即可。\n\n---\n\n### 步骤 4：重启并测试\n\n```bash\n# 重启 OpenClaw Gateway\nopenclaw gateway restart\n\n# 实时查看日志\nopenclaw logs --follow\n```\n\n**测试你的机器人**：\n1. 打开钉钉 App\n2. 在联系人列表中找到你的机器人\n3. 发送消息：`你好`\n4. 你应该在 10 秒内收到回复\n\n---\n\n## 功能特性\n\n### ✅ 核心功能\n\n- **AI Card 流式响应** - 打字机效果，实时流式显示回复\n- **会话管理** - 多轮对话，保持上下文\n- **会话隔离** - 私聊、群聊、不同群之间会话独立\n- **自动会话重置** - 30 分钟无活动后自动开启新会话\n- **手动会话重置** - 发送 `/new` 或 `新会话` 清空对话历史\n- **图片自动上传** - 本地图片路径自动上传到钉钉\n- **主动发送消息** - 程序化地向用户或群发送消息\n- **富媒体接收** - 接收并处理 JPEG/PNG 图片，传递给视觉模型\n- **文件附件提取** - 解析 .docx、.pdf、文本文件和二进制文件\n- **音频消息支持** - 发送多种格式的音频消息（mp3、wav、amr、ogg）\n- **钉钉文档 API** - 创建、追加、搜索和列举钉钉文档\n- **多 Agent 路由** - 将多个机器人连接到不同的 Agent，实现专业化服务\n- **Markdown 表格转换** - 自动将 Markdown 表格转换为钉钉兼容格式\n- **异步模式** - 立即确认消息，后台处理（可选）\n\n---\n\n## 配置说明\n\n### 基础配置\n\n| 选项 | 环境变量 | 说明 |\n|------|---------|------|\n| `clientId` | — | 钉钉 AppKey |\n| `clientSecret` | — | 钉钉 AppSecret |\n\n### 会话管理\n\n| 选项 | 默认值 | 说明 |\n|------|--------|------|\n| `separateSessionByConversation` | `true` | 私聊/群聊分别维护会话 |\n| `groupSessionScope` | `group` | 群聊会话范围：`group`（共享）或 `group_sender`（每人独立） |\n| `sharedMemoryAcrossConversations` | `false` | 是否在不同会话间共享记忆 |\n\n### 会话路由策略（`pmpolicy` / `groupPolicy`）\n\n当前版本已支持会话路由/消息策略相关配置（包含 `pmpolicy`、`groupPolicy`），**无需删除**。如你在历史配置中已经设置了这些字段，可以继续保留并按需调整。\n\n> 说明：不同版本/上游可能对字段命名有差异；本连接器侧同时支持并会按策略生效（如 `dmPolicy`/`groupPolicy` 的默认值为 `open`）。\n\n### 异步模式\n\n| 选项 | 默认值 | 说明 |\n|------|--------|------|\n| `asyncMode` | `false` | 启用异步模式处理长时间任务 |\n| `ackText` | `🫡 任务已接收，处理中...` | 确认消息文本 |\n\n\n---\n\n## 常见问题\n\n### 机器人不回复\n\n**症状**：机器人不回复消息\n\n**解决方案**：\n1. 检查插件状态：`openclaw plugins list`\n2. 检查网关状态：`openclaw gateway status`\n3. 查看日志：`openclaw logs --follow`\n4. 确认应用已在钉钉开放平台发布\n\n---\n\n### HTTP 401 错误\n\n**症状**：错误信息显示 \"401 Unauthorized\"\n\n**原因**：Gateway 认证失败\n\n**解决方案**：\n\n升级到最新版本\n\n---\n\n### Stream 连接 400 错误\n\n**症状**：日志显示 \"Request failed with status code 400\"\n\n**常见原因**：\n\n| 原因 | 解决方案 |\n|------|----------|\n| 应用未发布 | 前往钉钉开放平台 → 版本管理 → 发布 |\n| 凭证错误 | 检查 `clientId`/`clientSecret` 是否有拼写错误或多余空格 |\n| 非 Stream 模式 | 确认机器人配置为 Stream 模式（不是 Webhook） |\n| IP 白名单限制 | 检查应用是否设置了 IP 白名单 |\n\n**验证步骤**：\n\n1. **检查应用状态**：\n   - 登录 [钉钉开放平台](https://open-dev.dingtalk.com/)\n   - 确认应用已发布\n   - 确认机器人已启用且为 Stream 模式\n\n2. **重新发布应用**：\n   - 修改任何配置后，必须点击 **保存** → **发布**\n\n---\n\n## 进阶主题\n\n### 多 Agent 配置\n\n配置多个机器人连接到不同的 Agent：\n\n```json5\n{\n  \"agents\": {\n    \"list\": [\n      {\n        \"id\": \"ding-bot1\",\n        \"name\": \"钉钉客服机器人\",\n        \"model\": \"your-model-config\",\n        \"workspace\": \"~/.openclaw/workspace-bot1\",\n        \"identity\": {\n          \"name\": \"客服小助手\",\n          \"theme\": \"专业客服\",\n          \"emoji\": \"🤝\"\n        }\n        // 其他 agent 配置...\n      },\n      {\n        \"id\": \"ding-bot2\",\n        \"name\": \"钉钉技术支持机器人\",\n        \"model\": \"your-model-config\",\n        \"workspace\": \"~/.openclaw/workspace-bot2\",\n        \"identity\": {\n          \"name\": \"技术专家\",\n          \"theme\": \"技术支持\",\n          \"emoji\": \"🔧\"\n        }\n        // 其他 agent 配置...\n      }\n    ]\n  },\n  \"channels\": {\n    \"dingtalk-connector\": {\n      \"enabled\": true,\n      \"accounts\": {\n        \"bot1\": {\n          \"enabled\": true,\n          \"clientId\": \"ding_bot1_app_key\",\n          \"clientSecret\": \"bot1_secret\"\n        },\n        \"bot2\": {\n          \"enabled\": true,\n          \"clientId\": \"ding_bot2_app_key\",\n          \"clientSecret\": \"bot2_secret\"\n        }\n      }\n    }\n  },\n  \"bindings\": [\n    {\n      \"agentId\": \"ding-bot1\",\n      \"match\": {\n        \"channel\": \"dingtalk-connector\",\n        \"accountId\": \"bot1\"\n      }\n    },\n    {\n      \"agentId\": \"ding-bot2\",\n      \"match\": {\n        \"channel\": \"dingtalk-connector\",\n        \"accountId\": \"bot2\"\n      }\n    }\n  ]\n}\n```\n\n更多详情请参考 [OpenClaw 多 Agent 配置指南](https://gist.github.com/smallnest/c5c13482740fd179e40070e620f66a52)。\n\n---\n\n### 会话命令\n\n用户可以发送以下命令清理对话历史，重新开始会话：\n\n- `/new`、`/reset`、`/clear`\n- `新会话`、`重新开始`、`清空对话`\n\n---\n\n### 钉钉文档（Docs）与 MCP（`docs.*`）\n\n钉钉文档能力（`docs.*`，包含 `docs.create` / `docs.append` / `docs.search` / `docs.list` / `docs.read`）依赖 MCP（Model Context Protocol）提供底层 tool。你需要先在 OpenClaw 的 Gateway/Agent 侧启用对应的 MCP Server/Tool，然后上述 `docs.*` 才能正常工作。\n\n- **获取 MCP Server/Tool**：可通过 [钉钉 MCP 市场](https://mcp.dingtalk.com/) 安装启用（或你们团队维护的 MCP 市场）；也可以选择同类的“DingTalk Docs Read / DingTalk Docs Reader”能力并接入到 OpenClaw。\n- **配置位置**：通常在 **Gateway 或 Agent 的工具配置**中完成（而不是在连接器里）。\n- **生效方式**：配置完成后重启 Gateway，并确认该 tool 已对目标 Agent 暴露。\n\n参考（OpenClaw 官方配置文档）：\n- `https://docs.openclaw.ai/configuration`\n- `https://docs.openclaw.ai/gateway/configuration-reference`\n\n从你的 Agent 中创建和管理钉钉文档：\n\n```javascript\n// 创建文档\ndingtalk-connector.docs.create({\n  spaceId: \"your-space-id\",\n  title: \"测试文档\",\n  content: \"# 测试内容\"\n})\n\n// 追加内容\ndingtalk-connector.docs.append({\n  docId: \"your-doc-id\",\n  markdownContent: \"\\n## 追加的内容\"\n})\n\n// 搜索文档\ndingtalk-connector.docs.search({\n  keyword: \"搜索关键词\"\n})\n\n// 列举文档\ndingtalk-connector.docs.list({\n  spaceId: \"your-space-id\"\n})\n```\n\n---\n\n## 项目结构\n\n```\ndingtalk-openclaw-connector/\n├── src/\n│   ├── core/           # Core connector logic\n│   ├── services/       # DingTalk API services\n│   ├── utils/          # Utility functions\n│   └── types/          # TypeScript type definitions\n├── docs/\n│   └── images/         # Documentation images\n├── openclaw.plugin.json # Plugin manifest\n├── package.json        # npm dependencies\n└── LICENSE\n```\n\n---\n\n## 依赖\n\n| 包 | 用途 |\n|----|------|\n| `dingtalk-stream` | 钉钉 Stream 协议客户端 |\n| `axios` | HTTP 客户端 |\n| `mammoth` | Word 文档（.docx）解析 |\n| `pdf-parse` | PDF 文档解析 |\n\n---\n\n## 钉钉 DEAP Agent 集成\n\n通过钉钉 DEAP Agent 与 OpenClaw Gateway 连接，实现自然语言驱动的本地设备操作能力。详见 **[钉钉 DEAP Agent 集成指南](docs/DEAP_AGENT_GUIDE.md)**。\n\n---\n\n## 许可证\n\n[MIT](LICENSE)\n\n---\n\n## 支持\n\n- **问题反馈**：[GitHub Issues](https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/issues)\n- **更新日志**：[CHANGELOG.md](CHANGELOG.md)\n","readmeFilename":"README.md"}