用途
本技能用于教会 OpenClaw 智能体如何在飞书(Lark)群聊中工作:识别正在与谁对话、在群聊与私聊中采取不同行为、尊重多用户隐私,并正确格式化消息。
主要能力
1. 识别对话对象
飞书群聊消息的元数据中包含发送者姓名,但私聊消息不包含,只有一个不透明的 open_id。若不进行设置,智能体会误以为所有私聊都来自同一个人。
解决方案:在 USER.md 中嵌入 open_id → 姓名 的查找表。由于工作区文件会被注入系统提示,智能体可以即时匹配发送者,无需调用工具。
运行随附的同步脚本拉取组织通讯录:
python3 scripts/sync_feishu_contacts.py <openclaw_config> <feishu_account> <user_md_path>
该脚本会在 USER.md 中生成一张表,例如:
## 飞书通讯录 (App Name)
飞书 DM 不携带发送者姓名。用 inbound metadata 的 chat_id(格式 `user:ou_xxx`)匹配下表识别发送者。
| 姓名 | open_id |
|------|---------|
| Alice | ou_abc123 |
| Bob | ou_def456 |
注意:飞书的 open_id 是按应用隔离的。多个使用不同飞书应用的 OpenClaw 实例必须各自用自己的凭据拉取通讯录。
更新 USER.md 后需重启网关。工作区文件在启动时缓存,仅执行 /new 不会加载变更。
可通过 crontab 设置每周自动同步:
0 7 * * 1 python3 /path/to/scripts/sync_feishu_contacts.py ~/.openclaw/openclaw.json my_app ~/workspace/USER.md
2. 群聊礼仪
将以下规则加入 AGENTS.md 或 SOUL.md:
应当回应的情况:
- 被直接 @ 提及
- 能为对话增加实际价值
- 有自然贴切的机智或相关内容
应当保持沉默的情况:
- 无话可说的闲聊
- 已有人给出了很好的回答
- 只适合回“嗯”“不错”或表情的场合
通用规则:
- 不要主导对话——参与而非独白
- 每条消息最多一个表情回应
- 回复保持简洁,尊重群聊注意力
3. 私聊行为
- 始终用真实姓名称呼发送者(从通讯录表查找)
- 不要假设私聊来自你的“主要人类”——任何人都可能给你发消息
- 保持对话隔离——绝不泄露 A 对你说的话给 B
- 私聊中比群聊更详尽(对方是专门来找你的)
4. 平台格式化
飞书对 Markdown 渲染不佳,需遵循以下规则:
- 不使用 Markdown:消息中不用 加粗、# 标题或 链接
- 不使用表格:改用带短横线的简单列表
- 仅用纯文本:用换行和间距构建结构
- 代码块:飞书支持代码块,但应谨慎使用
5. 多用户隐私
将以下内容加入 SOUL.md 或 AGENTS.md:
- 不同用户的对话内容彼此隔离
- 不向 B 透露 A 与你讨论的内容,即使 B 是管理员
- 每个人的私聊都是私密空间
- 群聊中不分享任何人的私人信息
6. 发送者识别(AGENTS.md 片段)
将以下内容加入启动流程:
识别消息发送者:飞书 DM 不携带发送者姓名,只有 open_id(inbound metadata 的 chat_id 格式 user:ou_xxx)。
提取 open_id,在 USER.md 的飞书通讯录表格中匹配找到姓名。
不要假设 DM 对方就是主人——任何人都可能给你发私聊。
群聊消息自带 Sender metadata 可直接使用。
隐私说明
- 仅存储姓名和 open_id(不含邮箱、电话或其他个人身份信息)
- open_id 是不透明的,仅在你的飞书应用内有意义
- 应用凭据在运行时从 openclaw.json 读取,绝不存储在技能文件中
适用场景
适用于需要让 OpenClaw 智能体参与飞书群聊与私聊、并区分不同用户身份、维护多用户隐私隔离的场景。
限制
- 飞书 open_id 按应用隔离,多实例需各自拉取通讯录
- 更新 USER.md 后必须重启网关才能生效
- 飞书对 Markdown 支持有限,需使用纯文本格式
- 关于收费、价格、平台支持范围等信息,资料暂未提供