监控钉钉未读会话,单聊用 AI 以本人身份自动回复(普通员工口吻、平级回同事),群聊/指定名单只发微信提醒(不代发,防社死)。覆盖 dws 未读接口、CodeBuddy Agent SDK 生成回复的 SERVER__PORT 端口冲突坑、自报家门坑、回复自己坑。当用户要求「钉钉自动回复/钉钉代回/监听钉钉未读+AI回复」时使用。
编程
huo15-dingtalk-agent-isolation
试用火一五钉钉智能体隔离 - 为每个钉钉用户创建独立 Agent 工作空间、记忆和会话历史。支持手动绑定和动态创建两种模式。触发词:钉钉Agent隔离、钉钉用户隔离、动态Agent创建、dingtalk agent isolation。
它能做什么
火一五钉钉智能体隔离 - 为每个钉钉用户创建独立 Agent 工作空间、记忆和会话历史。支持手动绑定和动态创建两种模式。触发词:钉钉Agent隔离、钉钉用户隔离、动态Agent创建、dingtalk agent isolation。
技能文档
🔒 火一五钉钉智能体隔离 (huo15-dingtalk-agent-isolation)
作者: 火一五信息科技有限公司 版本: v1.0.0 适用:
@dingtalk-real-ai/dingtalk-connector>= 0.8.24 参考: OpenClaw Feishudynamic-agent.ts实现
一、概述
为每个钉钉用户创建独立的 Agent 工作空间,实现:
| 隔离维度 | 说明 |
|---|---|
| 工作空间 | 每个用户有独立的 workspace 目录,文件互不干扰 |
| Agent 目录 | 独立的 agentDir,存放 Agent 配置和记忆 |
| 会话历史 | 对话上下文按用户隔离,互不可见 |
| 技能/插件 | 可为不同用户配置不同的技能和工具 |
| 公共资源 | 公共技能和插件仍然共享,无需重复安装 |
架构示意
钉钉用户 A 发消息
↓ bindings 匹配
Agent: dingtalk-userA (workspace: ~/.openclaw/workspace-dingtalk-userA)
↓ 独立会话
↓ 独立记忆
↓ 独立工作空间文件
钉钉用户 B 发消息
↓ bindings 匹配
Agent: dingtalk-userB (workspace: ~/.openclaw/workspace-dingtalk-userB)
↓ 独立会话
↓ 独立记忆
↓ 独立工作空间文件
公共技能/插件 → 所有 Agent 共享(无需重复安装)
二、两种模式
Mode A: 手动绑定(推荐,开箱即用)
适用场景: 用户数量已知且固定(如团队内部使用)
原理: 在 openclaw.json 中手动为每个用户配置 agent + binding。钉钉连接器 v0.8.24+ 已内置 bindings 匹配逻辑,无需修改任何代码。
优点:
- 零代码改动,纯配置
- 完全可控,精确指定哪些用户使用哪个 Agent
- 支持群聊和单聊两种场景
限制:
- 需要提前知道用户的
senderStaffId - 新用户需要手动添加配置
Mode B: 动态创建(高级,自动扩展)
适用场景: 用户数量未知或持续增长(如对外服务)
原理: 用户首次私聊机器人时,自动创建独立的 Agent + binding,写入 openclaw.json。参考飞书 dynamic-agent.ts 的实现。
优点:
- 全自动,新用户首次对话即自动隔离
- 支持上限控制 (
maxAgents) - 原子化配置写入,并发安全
限制:
- 需要修改钉钉连接器源码(打 patch)
- 仅支持单聊(DM)场景的自动创建
- 群聊仍需手动配置 binding
三、Mode A — 手动绑定配置指南
3.1 获取用户 ID
让目标用户给机器人发一条消息,在 OpenClaw 日志中找到 senderStaffId:
[DingTalk] 处理消息: accountId=default, sender=张三, senderStaffId=xxxx123
3.2 配置 openclaw.json
在 ~/.openclaw/openclaw.json 中添加 agents 和 bindings:
{
// ... 其他配置 ...
"agents": {
"default": "main",
"list": [
{
"id": "main",
"workspace": "~/.openclaw",
"agentDir": "~/.openclaw/agents/main/agent"
},
// ===== 钉钉用户 A 的独立 Agent =====
{
"id": "dingtalk-userA",
"workspace": "~/.openclaw/workspace-dingtalk-userA",
"agentDir": "~/.openclaw/agents/dingtalk-userA/agent"
},
// ===== 钉钉用户 B 的独立 Agent =====
{
"id": "dingtalk-userB",
"workspace": "~/.openclaw/workspace-dingtalk-userB",
"agentDir": "~/.openclaw/agents/dingtalk-userB/agent"
}
]
},
"bindings": [
// 用户 A 的单聊消息 → dingtalk-userA Agent
{
"agentId": "dingtalk-userA",
"match": {
"channel": "dingtalk-connector",
"peer": { "kind": "direct", "id": "用户A的senderStaffId" }
}
},
// 用户 B 的单聊消息 → dingtalk-userB Agent
{
"agentId": "dingtalk-userB",
"match": {
"channel": "dingtalk-connector",
"peer": { "kind": "direct", "id": "用户B的senderStaffId" }
}
},
// 特定群聊 → 特定 Agent(可选)
{
"agentId": "dingtalk-team-alpha",
"match": {
"channel": "dingtalk-connector",
"peer": { "kind": "group", "id": "cidXXXXXXXXXXXX" }
}
}
]
}
3.3 创建工作空间目录
# 为每个用户创建工作空间和 Agent 目录
mkdir -p ~/.openclaw/workspace-dingtalk-userA
mkdir -p ~/.openclaw/agents/dingtalk-userA/agent
mkdir -p ~/.openclaw/workspace-dingtalk-userB
mkdir -p ~/.openclaw/agents/dingtalk-userB/agent
3.4 重启 OpenClaw
openclaw restart
3.5 binding 匹配规则
钉钉连接器按以下优先级匹配:
| match 字段 | 说明 | 示例 |
|---|---|---|
channel | 渠道 ID,固定为 dingtalk-connector | "dingtalk-connector" |
accountId | 账号 ID(多账号场景) | "default" 或自定义 |
peer.kind | 会话类型 | "direct" (单聊) / "group" (群聊) |
peer.id | 用户 ID 或群会话 ID | "senderStaffId" 或 "cidXXXX" |
peer.id: "*" | 通配符,匹配该 kind 下所有会话 | "*" |
匹配顺序:从上到下,第一个匹配的 binding 生效。未匹配到任何 binding 时,使用
agents.default指定的 Agent。
四、Mode B — 动态 Agent 创建指南
4.1 前置条件
- 钉钉连接器已通过
openclaw install @dingtalk-real-ai/dingtalk-connector安装 - 连接器源码位于
~/.openclaw/extensions/dingtalk/或通过 npm 安装
4.2 执行 Patch
# 方式一:使用本 Skill 提供的 patch 脚本
bash ~/.catpaw/skills/huo15-dingtalk-agent-isolation/scripts/apply-dynamic-agent-patch.sh
# 方式二:手动应用(见 references/dynamic-agent-patch.ts)
Patch 做了以下修改:
src/config/schema.ts: 在DingtalkSharedConfigShape中添加dynamicAgentCreation配置项src/types/index.ts: 添加DynamicAgentCreationConfig类型src/dynamic-agent.ts(新文件): 移植飞书的maybeCreateDynamicAgent逻辑src/core/message-handler.ts: 在 binding 匹配为 default 时调用动态创建
4.3 配置 openclaw.json
在 channels.dingtalk-connector 中添加 dynamicAgentCreation 配置:
{
"channels": {
"dingtalk-connector": {
"enabled": true,
"clientId": "your-client-id",
"clientSecret": "your-client-secret",
// ===== 动态 Agent 创建配置 =====
"dynamicAgentCreation": {
"enabled": true,
"workspaceTemplate": "~/.openclaw/workspace-dingtalk-{agentId}",
"agentDirTemplate": "~/.openclaw/agents/{agentId}/agent",
"maxAgents": 100
}
}
}
}
4.4 配置参数说明
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enabled | boolean | false | 是否启用动态创建 |
workspaceTemplate | string | ~/.openclaw/workspace-dingtalk-{agentId} | 工作空间路径模板 |
agentDirTemplate | string | ~/.openclaw/agents/{agentId}/agent | Agent 目录路径模板 |
maxAgents | number | 无限制 | 动态创建的 Agent 最大数量 |
模板变量:
| 变量 | 说明 | 示例 |
|---|---|---|
{userId} | 钉钉用户 senderStaffId | abc123def456 |
{agentId} | 自动生成的 Agent ID | dingtalk-abc123de-a1b2c3d4... |
4.5 动态 Agent ID 生成规则
默认账号: dingtalk-{senderStaffId}
命名账号: dingtalk-{accountId前12位}-{sha256(accountId+senderStaffId)前32位}
4.6 重启并验证
openclaw restart
五、混合模式(推荐最佳实践)
同时使用 Mode A + Mode B:
- 已知核心用户: 手动配置 binding(Mode A),使用定制化的 Agent 配置
- 未知新用户: 动态创建(Mode B),使用默认配置
- 公共群聊: 手动配置 binding 到共享 Agent
{
"agents": {
"default": "main",
"list": [
{ "id": "main", "workspace": "~/.openclaw", "agentDir": "~/.openclaw/agents/main/agent" },
// 核心用户的手动 Agent
{ "id": "dingtalk-admin", "workspace": "~/.openclaw/workspace-admin", "agentDir": "~/.openclaw/agents/dingtalk-admin/agent" }
// 动态创建的 Agent 会自动追加到此列表
]
},
"bindings": [
// 管理员 → 专用 Agent
{
"agentId": "dingtalk-admin",
"match": { "channel": "dingtalk-connector", "peer": { "kind": "direct", "id": "admin的staffId" } }
}
// 动态创建的 binding 会自动追加
],
"channels": {
"dingtalk-connector": {
"enabled": true,
"clientId": "...",
"clientSecret": "...",
"dynamicAgentCreation": {
"enabled": true,
"maxAgents": 50
}
}
}
}
匹配优先级: 手动 binding > 动态 binding > default Agent。手动配置的 binding 会先匹配到,不会被动态创建覆盖。
六、验证
6.1 手动验证
# 1. 检查配置是否正确
cat ~/.openclaw/openclaw.json | jq '.agents.list | length'
# 应输出: N(原有 + 新增的用户 Agent 数量)
# 2. 检查工作空间目录是否创建
ls -la ~/.openclaw/workspace-dingtalk-*/
# 应看到每个用户的独立目录
# 3. 检查 Agent 目录
ls -la ~/.openclaw/agents/dingtalk-*/
# 应看到每个用户的 agent 目录
# 4. 发送测试消息
# 用户 A 给机器人发消息 → 检查日志中 agentId=dingtalk-userA
# 用户 B 给机器人发消息 → 检查日志中 agentId=dingtalk-userB
6.2 日志验证
在 OpenClaw 日志中搜索以下关键字:
# 手动模式
grep "agentId=dingtalk-" ~/.openclaw/logs/openclaw.log
# 动态模式
grep "creating dynamic agent" ~/.openclaw/logs/openclaw.log
grep "Agent 工作空间路径" ~/.openclaw/logs/openclaw.log
6.3 自动验证脚本
bash ~/.catpaw/skills/huo15-dingtalk-agent-isolation/scripts/verify-isolation.sh
七、常见问题
Q1: 新用户发消息后没有创建 Agent?
检查清单:
dynamicAgentCreation.enabled是否为true- 用户是否通过单聊(非群聊)发消息 — 动态创建仅在单聊时触发
maxAgents是否已达上限- 连接器 patch 是否正确应用 — 检查
src/dynamic-agent.ts是否存在 - OpenClaw 是否已重启
Q2: 群聊消息没有按用户隔离?
群聊默认使用 groupSessionScope: "group"(一个群一个会话)。如需群聊中按用户隔离:
- 设置
groupSessionScope: "group_sender"(群内按发送者隔离会话) - 或为群聊手动配置 binding 到特定 Agent
Q3: 如何为不同用户配置不同的模型/工具?
在 agents.list 中为每个 Agent 指定独立的配置:
{
"id": "dingtalk-userA",
"workspace": "~/.openclaw/workspace-dingtalk-userA",
"agentDir": "~/.openclaw/agents/dingtalk-userA/agent",
"model": "gpt-4o", // 指定模型
"tools": {
"profile": "full", // 指定工具档
"alsoAllow": ["web_search"] // 追加工具
},
"systemPrompt": "你是用户A的专属助手..."
}
动态创建的 Agent 默认继承
agents.defaults的配置。如需为动态创建的 Agent 自定义配置,在workspaceTemplate指向的目录中放置agent.json。
Q4: 如何删除某个用户的 Agent?
- 从
openclaw.json的agents.list中移除对应条目 - 从
bindings中移除对应的 binding - 删除工作空间目录:
rm -rf ~/.openclaw/workspace-dingtalk-userA - 删除 Agent 目录:
rm -rf ~/.openclaw/agents/dingtalk-userA - 重启 OpenClaw
Q5: 动态创建的 Agent 会共享公共技能吗?
是的。所有 Agent(无论手动还是动态创建)都共享 OpenClaw 全局安装的技能和插件。Agent 的 workspace 和 agentDir 仅隔离工作文件、记忆和会话历史,不影响技能的可用性。
八、版本历史
| 版本 | 日期 | 更新内容 |
|---|---|---|
| v1.0.0 | 2026-08-01 | 初始版本:支持手动绑定(Mode A)和动态创建(Mode B)两种模式 |
相关技能
Use this skill whenever the user wants to manage their work in the 火一五/辉火云 company Odoo system (www.huo15.com, db=huo15) — to-dos / tasks ("记个待办" "加任务" "我的待办"), projects, timesheets ("记工时"), CRM leads & opportunities ("新建商机" "跟进客户" "销售管道"), follow-up activities & reminders ("提醒我" "3天后回访"), calendar events & meetings ("安排会议" "我这周日程" "提前30分钟提醒"), knowledge-base articles ("查/写知识库" "产品手册"), or document files ("找文档" "上传文件"). Also accounting ("发票" "账单" "付款" "科目"), and HR operations — employees ("员工" "部门"), attendance ("考勤" "签到" "签退"), time off ("请假" "休假"), expenses ("报销"). Also a one-stop "我今天/本周要做什么" briefing. Triggers on odoo, 辉火云企业套件, 公司系统, /odoo/to-do /project /timesheets /crm /calendar /knowledge /documents /sale /purchase /inventory /invoices /hr, or "登录公司系统/保存 odoo 账号". Treat bare work-context mentions of 待办/任务/项目/工时/客户/商机/会议/日程/提醒/知识库/文档/销售/采购/库存/订单/发货/收货/发票/账单/付款/科目/员工/部门/考勤/签到/签退/请假/休假/报销 as this skill. First run: login.py init (地址/数据库/账号/密码 → ~/.huo15/tools.md). Pure standard libr
火一五多智能体协同 - 基于 OpenClaw sessions_spawn 的多 Agent 并行工作系统。支持协调者模式、任务分配、结果汇总。触发词:多智能体协同、多 Agent、并行任务、协调者模式。
多个 AI Agent 在飞书群聊中通过 at 互相通信,实现多 Agent 协作。覆盖建群、创建Bot、拉Bot进群、获取open_id、text格式互 at 通信、防呆约束、故障排查全流程。Use when user says 飞书多Agent通信、Bot互at、飞书Bot创建、群聊AI协作、多Bot群聊。支...
钉钉群机器人工具与开放平台开发指南。Use for: (1) 用附带的零依赖 CLI 向钉钉群发通知——文本/markdown/链接卡片,支持加签安全模式和@人, (2) CI/监控/日报等自动化通知场景, (3) 钉钉开放平台 API(token/审批/通讯录)开发指导。DingTalk group-robot...
Configure OpenClaw multi-agent routing for Feishu multi-account setups. Use when users need two or more Feishu bots (different appId/appSecret) to run on iso...