Install
openclaw skills install cross-channel-memory跨渠道记忆同步。实现QQ、飞书等多渠道用户身份识别和记忆共享。当用户在不同渠道与机器人对话时,agent能识别同一用户并读取统一记忆。触发条件:用户提到"跨渠道"、"多渠道"、"飞书和QQ"、"记忆同步"、"换渠道聊",或agent需要查询用户跨渠道历史时。
openclaw skills install cross-channel-memory实现多渠道用户身份映射,让不同 agent 在 QQ、飞书等渠道识别同一用户,并共享记忆。
核心特性:
┌─────────────────────────────────────────────────────────────┐
│ 用户映射中心 │
│ ~/.openclaw/data/cross-channel-users.json │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ users: { │ │
│ │ "xiaokeai": { │ │
│ │ displayName: "小可爱", │ │
│ │ channels: { │ │
│ │ qqbot: { main: "QQ_ID_123" }, │ │
│ │ feishu: { main: "ou_abc123" } │ │
│ │ } │ │
│ │ } │ │
│ │ } │ │
│ │ lookupIndex: { │ │
│ │ qqbot: { "QQ_ID_123": { userId: "xiaokeai" } }, │ │
│ │ feishu: { "ou_abc123": { userId: "xiaokeai" } } │ │
│ │ } │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ main │ │ coder │ │ checker │
│ workspace │ │ workspace │ │ workspace │
│ │ │ │ │ │
│ memory/ │ │ memory/ │ │ memory/ │
│ ├MEMORY.md │ │ ├MEMORY.md │ │ ├MEMORY.md │
│ └YYYY-MM-DD│ │ └YYYY-MM-DD│ │ └YYYY-MM-DD│
└─────────────┘ └─────────────┘ └─────────────┘
在用户首次使用时,需要建立渠道用户 ID 与统一用户 ID 的映射(按 agent 精确绑定):
# QQ coder agent 绑定
python3 ~/.openclaw/skills/cross-channel-memory/scripts/init_mapping.py link \
--user "xiaokeai" \
--channel qqbot \
--channel-id "QQ_USER_ID" \
--account coder
# 飞书 coder agent 绑定(同一用户)
python3 ~/.openclaw/skills/cross-channel-memory/scripts/init_mapping.py link \
--user "xiaokeai" \
--channel feishu \
--channel-id "FEISHU_USER_ID" \
--account coder
# 飞书 main agent 绑定(同一用户,不同 agent)
python3 ~/.openclaw/skills/cross-channel-memory/scripts/init_mapping.py link \
--user "xiaokeai" \
--channel feishu \
--channel-id "FEISHU_USER_ID" \
--account main
参数说明:
--user: 统一用户 ID (自定义,用于跨渠道识别)--channel: 渠道名称 (qqbot, feishu)--channel-id: 渠道中的用户 ID--account: agent 标识 (coder, main, checker, menowriter 等)根据渠道用户 ID 和 agent 查找统一用户信息:
python3 ~/.openclaw/skills/cross-channel-memory/scripts/memory_sync.py lookup \
--channel qqbot \
--id "QQ_USER_ID" \
--account coder
返回:
{
"userId": "xiaokeai",
"displayName": "小可爱",
"memoryPaths": [
{ "accountId": "coder", "memoryPath": "/home/user/.openclaw/workspace/coder/memory" }
],
"accountId": "coder"
}
将对话记录写入指定 agent 的记忆:
python3 ~/.openclaw/skills/cross-channel-memory/scripts/memory_sync.py write \
--channel qqbot \
--id "QQ_USER_ID" \
--account coder \
--type user \
--content "我想学习 Python 编程" \
--timestamp "2026-03-13T08:30:00"
使用内置工具读取记忆:
memory_search(query: "Python", path: "~/.openclaw/workspace/coder/memory")
| 渠道 | 用户ID字段 | 来源 |
|---|---|---|
| QQ (qqbot) | sender_id | inbound_meta.sender_id |
| 飞书 (feishu) | sender_id / open_id | inbound_meta.sender_id |
~/.openclaw/
├── skills/
│ └── cross-channel-memory/
│ ├── SKILL.md # 本文档
│ ├── scripts/
│ │ ├── lookup_user.py # 用户查找工具
│ │ ├── memory_sync.py # 记忆同步工具
│ │ └── init_mapping.py # 初始化脚本
│ └── examples/
│ └── sample_mapping.json
├── data/
│ └── cross-channel-users.json # 用户映射(共享)
└── workspace/
├── main/memory/ # main agent 记忆
├── coder/memory/ # coder agent 记忆
└── checker/memory/ # checker agent 记忆
{
"users": {
"xiaokeai": {
"displayName": "小可爱",
"channels": {
"qqbot": {
"coder": "QQ_USER_ID_C"
},
"feishu": {
"coder": "FEISHU_USER_ID_C",
"main": "FEISHU_USER_ID_M",
"checker": "FEISHU_USER_ID_K",
"menowriter": "FEISHU_USER_ID_W"
}
}
}
},
"lookupIndex": {
"qqbot": {
"QQ_USER_ID_C_coder": {
"userId": "xiaokeai",
"accountId": "coder",
"channelUserId": "QQ_USER_ID_C"
}
},
"feishu": {
"FEISHU_USER_ID_C_coder": {
"userId": "xiaokeai",
"accountId": "coder",
"channelUserId": "FEISHU_USER_ID_C"
},
"FEISHU_USER_ID_M_main": {
"userId": "xiaokeai",
"accountId": "main",
"channelUserId": "FEISHU_USER_ID_M"
}
}
}
}
绑定关系:
QQ_USER_ID_C → 统一用户 xiaokeai → 飞书 coder agentQQ_USER_ID_M → 统一用户 xiaokeai → 飞书 main agent本 skill 与 OpenClaw 内置的 memory_search/memory_get 工具配合使用:
# 先用本 skill 查找用户
user_info = lookup_user(channel="qqbot", user_id="xxx")
# 再用内置工具搜索记忆
memory_search(query="Python", path=user_info["memoryPath"])
YYYY-MM-DD.mdMEMORY.md