Install
openclaw skills install feishu-agent-messengerSend messages via Feishu using the current Agent's credentials, supporting private and group chats with independent identity display to solve open_id isolation.
openclaw skills install feishu-agent-messenger🚀 下载就能用!脚本可直接运行,自动读取配置文件。
注意:技能本身不会自动回复消息,需要手动调用脚本或配置自动触发 hook。
飞书多 Agent 消息发送技能。让每个 Agent 用自己的飞书应用发送消息(群聊/私聊),解决 open_id 应用隔离问题。配合多网关架构实现自主协作:统筹 Agent 派发任务 → 执行 Agent 完成任务 → 自主调用本技能汇报结果。
| 功能 | 是否自动 | 说明 |
|---|---|---|
| 脚本可直接运行 | ✅ 是 | 下载后直接运行 ./send.sh |
| 自动读取配置 | ✅ 是 | 自动从配置文件读取飞书凭证 |
| 自动回复消息 | ❌ 否 | 需要手动调用脚本 |
重要:
正确流程:
./send.sh agent-b oc_xxx chat_id "消息内容"错误示例:
❌ 错误:sessions_send 回复 "任务已完成"
正确示例:
✅ 正确:./send.sh agent-b oc_xxx chat_id "任务已完成"
方式 1:手动调用脚本(立即可用)
./send.sh agent-b oc_xxx chat_id "消息内容"
方式 2:Boss 派发时明确要求调用(推荐)
sessions_send({
sessionKey: "agent:agent-b:feishu:direct:ou_xxx",
message: `【任务派发】
任务内容:检查系统状态
【回复要求】
完成后请调用脚本发送群消息:
./send.sh agent-b oc_xxx chat_id "任务已完成"`,
timeoutSeconds: 0
})
方式 3:配置自动触发 hook(需要 OpenClaw 支持) 在 Agent 配置里添加 hook,收到消息时自动调用脚本。
文件位置:~/.openclaw/openclaw-{agentId}.json
添加 hooks 配置:
{
"hooks": {
"entries": {
"auto-reply-feishu": {
"enabled": true,
"trigger": "message.received",
"script": "~/.openclaw/workspace-{agentId}/skills/feishu-agent-messenger/send.sh",
"args": ["{agentId}", "${sender.open_id}", "open_id", "收到您的消息,请稍后"]
}
}
}
}
参数说明:
enabled: 是否启用trigger: 触发条件(message.received 表示收到消息时)script: 脚本路径args: 脚本参数
{agentId}: Agent 标识(如 agent-b)${sender.open_id}: 发送者 open_id(自动替换)open_id: 消息类型(私聊)收到您的消息,请稍后: 回复内容systemctl --user restart openclaw-gateway-{agentId}.service
发送消息给 Agent,检查是否自动回复。
统筹 Agent 代码示例:
// 派发给执行 Agent-B
sessions_send({
sessionKey: "agent:agent-b:feishu:direct:ou_xxx",
message: `【任务派发】
任务 ID: TASK-001
任务内容:检查系统状态
【回复要求】
完成后请调用 feishu-agent-messenger 技能回复:
./send.sh agent-b ou_xxx open_id "任务已完成,系统运行正常"
【汇报格式】
【任务开始】
【任务完成】- 输出位置:[路径]`,
timeoutSeconds: 0
})
执行 Agent 收到后:
send.sh 脚本回复统筹 Agent 定时发送指令:
// 每 5 分钟发送一次,要求执行 Agent 汇报进度
setInterval(() => {
sessions_send({
sessionKey: "agent:agent-b:feishu:direct:ou_xxx",
message: `【进度汇报要求】
任务 ID: TASK-001
【汇报要求】
请调用 feishu-agent-messenger 技能汇报当前进度:
./send.sh agent-b oc_xxx chat_id "【进度汇报】TASK-001 - 完成 50%,正在进行中..."`,
timeoutSeconds: 0
})
}, 5 * 60 * 1000) // 每 5 分钟
执行 Agent 收到后:
send.sh 脚本汇报进度Agent-B 发送私聊消息:
~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh \
agent-b ou_xxx open_id "私聊消息内容"
Agent-B 发送群聊消息(进度汇报):
~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh \
agent-b oc_xxx chat_id "【进度汇报】TASK-001 - 完成 50%,正在进行中..."
Agent-B 发送私聊消息:
~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh \
agent-b ou_xxx open_id "私聊消息内容"
Agent-B 发送群聊消息:
~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh \
agent-b oc_xxx chat_id "群聊消息内容"
Agent-B 发送私聊消息:
~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh \
agent-b ou_xxx open_id "私聊消息内容"
Agent-B 发送群聊消息:
~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh \
agent-b oc_xxx chat_id "群聊消息内容"
Agent-C 发送私聊消息:
~/.openclaw/workspace-agent-c/skills/feishu-agent-messenger/send.sh \
agent-c ou_xxx open_id "私聊消息内容"
Agent-C 发送群聊消息:
~/.openclaw/workspace-agent-c/skills/feishu-agent-messenger/send.sh \
agent-c oc_xxx chat_id "群聊消息内容"
发送私聊消息:
# 读取当前 Agent 配置
APP_ID=$(jq -r '.channels.feishu.appId' ~/.openclaw/openclaw-{agentId}.json)
APP_SECRET=$(jq -r '.channels.feishu.appSecret' ~/.openclaw/openclaw-{agentId}.json)
# 获取 token
TOKEN=$(curl -s -X POST https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/ \
-H 'Content-Type: application/json' \
-d "{\"app_id\":\"$APP_ID\",\"app_secret\":\"$APP_SECRET\"}" | jq -r '.tenant_access_token')
# 发送私聊消息
curl -s -X POST "https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id" \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d "{\"receive_id\":\"ou_xxx\",\"msg_type\":\"text\",\"content\":\"{\\\"text\\\":\\\"消息内容\\\"}\"}"
发送群聊消息:
# 获取 token(同上)
# 发送群聊消息
curl -s -X POST "https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id" \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d "{\"receive_id\":\"oc_xxx\",\"msg_type\":\"text\",\"content\":\"{\\\"text\\\":\\\"消息内容\\\"}\"}"
是的!下载后无需额外配置,但需要满足以下条件:
已配置飞书应用
Agent 配置文件存在
~/.openclaw/openclaw-{agentId}.jsonchannels.feishu.appId 和 channels.feishu.appSecret如果希望自动回复消息,需要:
配置自动触发 hook
Agent 网关运行中
Agent 配置文件 (~/.openclaw/openclaw-{agentId}.json):
{
"agents": {
"list": [{
"id": "agent-b",
"name": "执行助手",
"workspace": "/home/admin/.openclaw/workspace-agent-b"
}],
"defaults": {
"model": { "primary": "dashscope-coding/qwen3.5-plus" },
"workspace": "/home/admin/.openclaw/workspace-agent-b"
}
},
"gateway": {
"port": 19923,
"auth": {
"mode": "token",
"token": "agent-b-token-19923"
}
},
"channels": {
"feishu": {
"enabled": true,
"appId": "cli_xxx",
"appSecret": "xxx",
"dmPolicy": "open"
}
},
"skills": {
"entries": {
"feishu-agent-messenger": {
"enabled": true
}
}
},
"hooks": {
"entries": {
"auto-reply-feishu": {
"enabled": true,
"trigger": "message.received",
"script": "~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh",
"args": ["agent-b", "${sender.open_id}", "open_id", "收到您的消息"]
}
}
}
}
| 参数 | 说明 | 示例 |
|---|---|---|
| agentId | Agent 标识 | agent-b |
| target | 目标 ID(open_id 或 chat_id) | ou_xxx |
| msg_type | 消息类型:open_id(私聊)或 chat_id(群聊) | open_id |
| message | 消息内容 | 你好,这是测试消息 |
| 参数 | 说明 | 获取方式 |
|---|---|---|
| App ID | 当前 Agent 应用的 ID | 飞书开放平台 |
| App Secret | 当前 Agent 应用的密钥 | 飞书开放平台 |
| 用户 open_id | 当前 Agent 应用中的用户 ID | Agent 网关日志 |
| 群聊 chat_id | 群聊 ID(应用通用) | 飞书开放平台 |
从当前 Agent 网关日志获取:
journalctl --user -u openclaw-gateway-{agentId}.service | grep "received message from"
"{\"text\":\"消息内容\"}"~/.openclaw/openclaw-agent-b.json~/.openclaw/openclaw-agent-c.json~/.openclaw/openclaw-{agentId}.json# 发送群聊测试消息
~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh \
agent-b oc_xxx chat_id "测试:Agent-B 以自己的身份发送群聊消息"
预期结果:
配置 hook 后,发送消息给 Agent。
预期结果:
A: 检查 Agent 配置文件是否存在:
ls -la ~/.openclaw/openclaw-{agentId}.json
A: 检查飞书配置是否正确:
jq '.channels.feishu.appId' ~/.openclaw/openclaw-{agentId}.json
jq '.channels.feishu.appSecret' ~/.openclaw/openclaw-{agentId}.json
A: 确保使用的是当前 Agent 的脚本和配置,不是其他 Agent 的。
A: 确保使用的是当前 Agent 应用中的 open_id,不是其他 Agent 的 open_id。
A:
./send.sh agent-b oc_xxx chat_id "测试"A:
journalctl --user -u openclaw-gateway-{agentId}.service -f