{"_id":"@caoruhua/cc-dingtalk","_rev":"2-d702a5c0faff09952ba6cf1f68c197ac","name":"@caoruhua/cc-dingtalk","dist-tags":{"latest":"1.2.0"},"versions":{"1.1.0":{"name":"@caoruhua/cc-dingtalk","version":"1.1.0","keywords":["dingtalk","claude-code","bridge","ai-card","stream"],"author":{"name":"DingTalk Real Team"},"license":"MIT","_id":"@caoruhua/cc-dingtalk@1.1.0","maintainers":[{"name":"caoruhua","email":"tangzh.tom@gmail.com"}],"bin":{"cc-dingtalk":"dist/cli.js"},"dist":{"shasum":"be51a7bbde4e76e69b5da3878a6d08338410d676","tarball":"https://registry.npmjs.org/@caoruhua/cc-dingtalk/-/cc-dingtalk-1.1.0.tgz","fileCount":8,"integrity":"sha512-MjTubZRAPrK21jywBhAzbEO7bW60A2aVyFPZy7x/vn5qT/OGA0kuAXwmgY8f1myEsXQDhz0j7GZoKLDxeysEnw==","signatures":[{"sig":"MEUCIBUBlMwg1O1zb9I5P8KgDThQKchlCJEjUoP1qA08RIrkAiEAh2u5k1HUEmz0t80fWLNlWdLj8HXyO8a9Ig08Nf/tWtk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7481148},"main":"index.ts","type":"module","engines":{"node":">=18.0.0"},"gitHead":"6f18e72f2940b5befca9b712282dabffb62397e2","scripts":{"dev":"node --import jiti/register index.ts","stop":"node --import jiti/register src/cli.ts stop","test":"vitest run","build":"tsup","clean":"rm -rf node_modules package-lock.json dist","start":"node --import jiti/register index.ts","prepare":"git config core.hooksPath hooks","restart":"node --import jiti/register src/cli.ts restart","test:ui":"vitest --ui","test:all":"vitest run && vitest run --config tests/e2e/vitest.config.e2e.ts","test:e2e":"vitest run --config tests/e2e/vitest.config.e2e.ts","test:unit":"vitest run","test:watch":"vitest watch","type-check":"npx tsc --noEmit","install:fresh":"npm run clean && npm install","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","test:e2e:watch":"vitest watch --config tests/e2e/vitest.config.e2e.ts"},"_npmUser":{"name":"caoruhua","email":"tangzh.tom@gmail.com"},"_npmVersion":"11.6.2","description":"DingTalk-Claude Code bridge service — Stream mode with AI Card streaming","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^4.3.6","yaml":"^2.7.0","axios":"1.6.0","form-data":"^4.0.0","dingtalk-stream":"2.1.4"},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.4.0","tsup":"^8.5.1","vitest":"^2.1.9","@vitest/ui":"^2.1.9","typescript":"^5.6.0","@types/node":"^20.19.37","@vitest/coverage-v8":"^2.0.0"},"optionalDependencies":{"mammoth":"^1.8.0"},"_npmOperationalInternal":{"tmp":"tmp/cc-dingtalk_1.1.0_1775487570364_0.825952073321458","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@caoruhua/cc-dingtalk","version":"1.2.0","description":"DingTalk-Claude Code bridge service — Stream mode with AI Card streaming","main":"index.ts","type":"module","bin":{"cc-dingtalk":"dist/cli.js"},"engines":{"node":">=18.0.0"},"scripts":{"start":"node --import jiti/register index.ts","stop":"node --import jiti/register src/cli.ts stop","restart":"node --import jiti/register src/cli.ts restart","dev":"node --import jiti/register index.ts","build":"tsup","prepublishOnly":"npm run build","test":"vitest run","test:unit":"vitest run","test:e2e":"vitest run --config tests/e2e/vitest.config.e2e.ts","test:e2e:watch":"vitest watch --config tests/e2e/vitest.config.e2e.ts","test:all":"vitest run && vitest run --config tests/e2e/vitest.config.e2e.ts","test:watch":"vitest watch","test:ui":"vitest --ui","test:coverage":"vitest run --coverage","type-check":"npx tsc --noEmit","prepare":"git config core.hooksPath hooks","clean":"rm -rf node_modules package-lock.json dist","install:fresh":"npm run clean && npm install"},"keywords":["dingtalk","claude-code","bridge","ai-card","stream"],"author":{"name":"DingTalk Real Team"},"license":"MIT","dependencies":{"axios":"1.6.0","dingtalk-stream":"2.1.4","form-data":"^4.0.0","yaml":"^2.7.0","zod":"^4.3.6"},"optionalDependencies":{"mammoth":"^1.8.0"},"devDependencies":{"@types/node":"^20.19.37","@vitest/coverage-v8":"^2.0.0","@vitest/ui":"^2.1.9","jiti":"^2.4.0","tsup":"^8.5.1","typescript":"^5.6.0","vitest":"^2.1.9"},"gitHead":"cefe8a34b6ecd53e623c8af45bb404f8789266e7","_id":"@caoruhua/cc-dingtalk@1.2.0","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-+dHLRGHUhXXMo48f7/y4FYp4CgNFFyxHcpuemGfTxvTRv0riHX4OPEa0cwOjG+iesm5CJeun5kuarU39Np+0mg==","shasum":"5af747282884d0cb835b6f5321440da0815129ce","tarball":"https://registry.npmjs.org/@caoruhua/cc-dingtalk/-/cc-dingtalk-1.2.0.tgz","fileCount":8,"unpackedSize":7501314,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCIrBtoRHxlby2fh6BiYYogr5dy4KqBIttcfQ8MOadoMQIgD9sbbx3GjtOeIouUGIgLNjyxfnrj0Fukv+UHKK5WKOU="}]},"_npmUser":{"name":"caoruhua","email":"tangzh.tom@gmail.com"},"directories":{},"maintainers":[{"name":"caoruhua","email":"tangzh.tom@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cc-dingtalk_1.2.0_1775489149024_0.8129392405607403"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-06T14:59:30.265Z","modified":"2026-04-06T15:25:49.426Z","1.1.0":"2026-04-06T14:59:30.531Z","1.2.0":"2026-04-06T15:25:49.315Z"},"author":{"name":"DingTalk Real Team"},"license":"MIT","keywords":["dingtalk","claude-code","bridge","ai-card","stream"],"description":"DingTalk-Claude Code bridge service — Stream mode with AI Card streaming","maintainers":[{"name":"caoruhua","email":"tangzh.tom@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- **关键词召唤工作区** - 通过自然语言关键词切换工作区（如\"呼叫小蜜\"），支持粘性会话\n- **主动消息触达** - 支持 DM、群消息、@提醒，回复自动路由回发起方会话\n- **跨用户协作** - 机器人处理任务时可主动向其他用户请求信息，支持会话中断/恢复栈\n- **Markdown 表格转换** - 自动将 Markdown 表格转换为钉钉兼容格式\n- **异步模式** - 立即确认消息，后台处理（可选）\n- **全局并发控制** - 限制同时处理的任务数，超出上限时正式回复繁忙提示\n- **会话持久化** - 关键会话状态（会话 ID、中断栈、工作区映射）持久化到磁盘，进程重启后自动恢复\n- **优雅关停** - 收到 SIGTERM/SIGINT 时分阶段关停：保存状态 → 中止任务 → 清理子进程，新消息收到维护提示\n- **群聊发言者标识** - 群聊共享会话模式下自动在消息前注入发言者姓名，帮助 AI 区分不同用户\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| `maxConcurrentSessions` | `10` | 全局最大并发处理数，超出时返回繁忙提示 |\n| `sessionStorePath` | `~/.cc-dingtalk/sessions.json` | 会话持久化文件路径，重启后自动恢复会话 |\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| `logging.level` | `CC_DINGTALK_LOG_LEVEL` | `info` | 日志级别：`debug` / `info` / `warn` / `error` |\n| `logging.dir` | `CC_DINGTALK_LOG_DIR` | `~/.cc-dingtalk/logs` | 日志文件目录 |\n| `logging.maxFileSizeMb` | — | `10` | 单个日志文件最大大小（MB），超出后自动轮转 |\n| `logging.maxFiles` | — | `5` | 保留的轮转文件数量 |\n| `logging.console` | — | `true` | 是否同时输出到控制台（daemon 模式可设为 `false`） |\n\n日志分为两个文件：`app.log`（全量日志）和 `error.log`（仅 WARN/ERROR 级别），均支持按大小自动轮转。\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- `/back`、`返回` — 恢复之前被中断的会话（协作模式下使用）\n\n### 工作区召唤\n\n在多工作区模式下，用户可以通过以下方式切换工作区：\n\n- **命令切换**：`/workspace <name>`\n- **关键词召唤**：在消息中包含配置的关键词（如\"呼叫小蜜\"）即可自动切换\n- **切换问候**：仅发送关键词时，机器人会回复配置的 `greeting` 消息（如\"小蜜已上线，有什么可以帮你的？\"）；关键词后附带问题则直接处理\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"}