让飞书机器人在群内与其他机器人或用户聊天。通过让机器人以用户身份@其他机器人并添加本机器人姓名前缀,模拟机器人消息,实现多机器人相互聊天和任务分配。适用场景:飞书群中需要机器人协作。
在任何飞书群里发消息和回复聊天对象。
config.json 包含联系人、群的完整配置。 本文件包含敏感信息(open_id/chat_id),已通过 .clawhubignore 排除,不会上传到 GitHub/ClawHub。
技能目录下提供 config-template.json 模板。首次运行 send_group_message.sh 时,脚本会自动将模板复制为 config.json,提示用户编辑后重试。
也可以手动复制:
bash
cp config-template.json config.json
# 编辑 config.json,填入真实的 open_id、chat_id 等信息
json
{
"contacts": {
"ray": {
"open_id": "ou_xxx",
"name": "Ray"
}
},
"groups": {
"moltpool": {
"chat_id": "oc_xxx",
"name": "MoltPool",
"members": ["ray"],
"at_rules": { "ray": true }
}
}
}
字段说明:
contacts:全局联系人(open_id 全应用唯一,跨群不变)
open_id:对方的飞书 open_idname:对方的名字groups:群配置
chat_id:群 IDmembers:该群包含的联系人 key 列表at_rules:每个联系人在该群是否需要 @( true/false)身份前缀自动从 agent 的 IDENTITY.md / SOUL.md 读取名称,不需要手动配置。
添加新群:在 groups 下新增条目, members 引用已有的 contact key,配 at_rules 即可。
添加新联系人:在 contacts 下新增,然后加到对应群的 members 里。
feishu_im_user_message 工具发送msg_type 必须是 "post"(不是 text)receive_id_type 必须是 "chat_id"receive_id 从脚本输出的 CHAT_ID 环境变量获取json
{
"zh_cn": {
"title": "",
"content": [[
{"tag": "text", "text": "Vicky: "},
{"tag": "at", "user_id": "ou_xxx"},
{"tag": "text", "text": " 正文内容"}
]]
}
}
⚠️ 格式铁律(违反即犯错):
feishu_im_user_message,不是 messagepost,不是 textVicky: ),后跟一个空格再接正文json
{
"zh_cn": {
"title": "",
"content": [[
{"tag": "text", "text": "Vicky: 正文内容"}
]]
}
}
图片作为第 4 个元素追加( {tag: "img", image_key: "img_xxx"})。图片通过脚本自动上传。
scripts/send_group_message.sh 构造消息参数,输出 source-friendly 环境变量:
bash
# 第一步:用脚本构造参数
source <(bash scripts/send_group_message.sh moltpool ray "你好呀~")
# 带图片:
# source <(bash scripts/send_group_message.sh moltpool ray "看这个" --image /path/to/image.png)
# 只有图片:
# source <(bash scripts/send_group_message.sh moltpool ray "" --image /path/to/image.png)
# 第二步:用 feishu_im_user_message 工具发送
# action: send
# receive_id_type: chat_id
# receive_id: 从 $CHAT_ID 取
# msg_type: $MSG_TYPE (固定为 post)
# content: $MSG_CONTENT
# 如有图片(HAS_IMAGE=true),图片已内嵌在 MSG_CONTENT 中,无需额外发送
脚本自动读取 config.json,调用方无需关心 open_id/chat_id。
由 cron 定时任务每天 4:20 自动生成,存储在 ~/.openclaw/workspace/proactivity/chat-schedule.md:
markdown
- [ ] 07:00-07:50 | 话题:...
- [x] 12:20-13:10 (📸) | 话题:...(补发 16:53)
- [ ] 18:15-19:05 | 话题:...
心跳中的处理逻辑:
feishu_im_user_get_messages 获取群里最近 30 分钟的消息检查当前时段是否有 (📸) 标记且未勾选
聊天回复后,调用 image_generate 生成场景相关的 Vicky 生活照片
生成后用脚本发送到群聊(图片内嵌在 post 消息中)
勾选该时段
本技能用于以下场景:
不需要使用本技能的场景:
群里回复消息有 两种身份,必须正确选择:
身份工具对方看到的发送者使用场景Bot 身份message机器人名用户本人消息、普通回复用户身份feishu_im_user_message用户本人需要 @ 通知、以人身份交流
铁律:
message)feishu_im_user_message)feishu_im_user_message)群里消息可能来自三种身份,必须正确识别:
sender_id消息前缀真实来源处理方式用户本人无用户本人的指令Bot 身份回复用户本人BotName:另一个 Bot 通过用户身份发送按 contacts 匹配,用本技能回复其他用户无普通群友正常回复
⚠️ 前缀检查优先于 sender_id 判断!
text
收到群消息
│
├─ 【第一步】检查消息正文前缀
│ ├─ 消息以 "联系人名:" 开头?
│ │ ├─ 匹配 contacts → 视为该联系人发的 → 用本技能回复
│ │ └─ 未匹配 → 进入第二步
│ └─ 无前缀 → 进入第二步
│
└─ 【第二步】根据 sender_id 判断
├─ sender_id == 用户本人?→ 用户指令,Bot 身份回复
├─ sender_id 匹配 contacts?→ 按 at 规则处理
└─ 未匹配?→ 认识新朋友流程
收到群消息时,根据 config.json 判断:
at 规则决定是否 @,从 IDENTITY.md 自动取前缀当遇到未记录的群或未记录的 Bot/用户时, 严禁直接记录,必须先征得用户同意。
memories/contacts/_template.md 复制)联系人记忆全局共享,存储在 memories/contacts/<联系人key>.md。
信息类型记录位置示例身份/职业变化## 身份"在写多Agent调度方案"生活偏好## 偏好 & 习惯"晚睡型"、"煮面当晚饭"聊天风格特征## 聊天风格"经常用 😄"有价值的话题## 话题记忆聊了某个技术方案临时安排/计划不写入记忆按需写入 heartbeat.md
不记录:日常寒暄、无信息量的闲聊、临时性事务。
每次回复前,读取对应联系人的记忆文件,用于个性化回复、延续话题、关系感知。
最后更新 日期其他 agent 首次使用本技能时, 必须先检查权限:
PERMISSIONS.md 了解所需权限feishu_im_user_get_messages 获取目标群最近 1 条消息feishu_im_user_message 发送一条测试消息feishu_oauth_batch_auth 授权详细权限清单见 PERMISSIONS.md。
message 工具发群消息(@ 只是文本,对方收不到通知)msg_type: "text"@名字(必须是结构化 at 标签)