Send messages via Feishu using the current Agent's credentials, supporting private and group chats with independent identity display to solve open_id isolation.
# Feishu Agent Messenger - 飞书消息发送技能
🚀 **下载就能用!脚本可直接运行,自动读取配置文件。**
**注意**:技能本身不会自动回复消息,需要手动调用脚本或配置自动触发 hook。
飞书多 Agent 消息发送技能。让每个 Agent 用自己的飞书应用发送消息(群聊/私聊),解决 open_id 应用隔离问题。配合多网关架构实现自主协作:统筹 Agent 派发任务 → 执行 Agent 完成任务 → 自主调用本技能汇报结果。
---
## 📋 核心功能
- ✅ 使用当前 Agent 的飞书凭证发送消息
- ✅ 支持群聊和私聊两种模式
- ✅ 飞书显示当前 Agent 的机器人名字
- ✅ 解决 open_id 应用隔离问题
- ✅ **零配置** - 自动从 Agent 配置文件读取飞书凭证
- ✅ **脚本可直接运行** - 无需额外配置
---
## ⚠️ 重要说明
### "下载就能用"的含义
| 功能 | 是否自动 | 说明 |
|------|---------|------|
| 脚本可直接运行 | ✅ 是 | 下载后直接运行 `./send.sh` |
| 自动读取配置 | ✅ 是 | 自动从配置文件读取飞书凭证 |
| 自动回复消息 | ❌ 否 | 需要手动调用脚本 |
### 🚨 调用脚本 ≠ AI 回复
**重要**:
- ❌ **不要通过 AI 回复 sessions_send**(这只是文字回复,不会发送飞书消息)
- ✅ **要调用 send.sh 脚本**发送飞书群消息(这才是真正的发送)
**正确流程**:
1. 收到 Boss 的 sessions_send 消息
2. 执行任务
3. 完成后**调用脚本**:`./send.sh agent-b oc_xxx chat_id "消息内容"`
4. 群里显示消息,发送者为当前 Agent 的机器人名字
**错误示例**:
```
❌ 错误:sessions_send 回复 "任务已完成"
```
**正确示例**:
```bash
✅ 正确:./send.sh agent-b oc_xxx chat_id "任务已完成"
```
### 三种使用方式
**方式 1:手动调用脚本(立即可用)**
```bash
./send.sh agent-b oc_xxx chat_id "消息内容"
```
**方式 2:Boss 派发时明确要求调用(推荐)**
```javascript
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,收到消息时自动调用脚本。
---
## 🔧 配置自动回复(推荐)
### 步骤 1:编辑 Agent 配置文件
**文件位置**:`~/.openclaw/openclaw-{agentId}.json`
**添加 hooks 配置**:
```json
{
"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`: 消息类型(私聊)
- `收到您的消息,请稍后`: 回复内容
### 步骤 2:重启 Agent 网关
```bash
systemctl --user restart openclaw-gateway-{agentId}.service
```
### 步骤 3:测试
发送消息给 Agent,检查是否自动回复。
---
## 📖 使用方法
### 方法 1:Boss 派发任务时明确要求调用(推荐)
**统筹 Agent 代码示例**:
```javascript
// 派发给执行 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 收到后**:
1. 执行任务
2. 完成后调用 `send.sh` 脚本回复
3. 消息以 Agent-B 自己的身份发送
---
### 方法 2:定时进度汇报(每 5 分钟)
**统筹 Agent 定时发送指令**:
```javascript
// 每 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 收到后**:
1. 检查当前任务进度
2. 调用 `send.sh` 脚本汇报进度
3. 消息以 Agent-B 自己的身份发送到群里
---
### 方法 3:直接调用脚本
**Agent-B 发送私聊消息**:
```bash
~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh \
agent-b ou_xxx open_id "私聊消息内容"
```
**Agent-B 发送群聊消息(进度汇报)**:
```bash
~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh \
agent-b oc_xxx chat_id "【进度汇报】TASK-001 - 完成 50%,正在进行中..."
```
---
### 方法 2:直接调用脚本
**Agent-B 发送私聊消息**:
```bash
~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh \
agent-b ou_xxx open_id "私聊消息内容"
```
**Agent-B 发送群聊消息**:
```bash
~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh \
agent-b oc_xxx chat_id "群聊消息内容"
```
---
### 方法 2:直接调用脚本
**Agent-B 发送私聊消息**:
```bash
~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh \
agent-b ou_xxx open_id "私聊消息内容"
```
**Agent-B 发送群聊消息**:
```bash
~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh \
agent-b oc_xxx chat_id "群聊消息内容"
```
**Agent-C 发送私聊消息**:
```bash
~/.openclaw/workspace-agent-c/skills/feishu-agent-messenger/send.sh \
agent-c ou_xxx open_id "私聊消息内容"
```
**Agent-C 发送群聊消息**:
```bash
~/.openclaw/workspace-agent-c/skills/feishu-agent-messenger/send.sh \
agent-c oc_xxx chat_id "群聊消息内容"
```
---
### 方法 3:直接调用飞书 API
**发送私聊消息**:
```bash
# 读取当前 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\\\":\\\"消息内容\\\"}\"}"
```
**发送群聊消息**:
```bash
# 获取 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\\\":\\\"消息内容\\\"}\"}"
```
---
## ⚙️ 配置说明
### 下载就能用吗?
**是的!下载后无需额外配置,但需要满足以下条件**:
#### 前置条件(必须)
1. **已配置飞书应用**
- 在飞书开放平台创建应用
- 获取 App ID 和 App Secret
- 在 Agent 配置文件中配置飞书凭证
2. **Agent 配置文件存在**
- 位置:`~/.openclaw/openclaw-{agentId}.json`
- 包含飞书配置:`channels.feishu.appId` 和 `channels.feishu.appSecret`
#### 自动回复条件(可选)
如果希望自动回复消息,需要:
1. **配置自动触发 hook**
- 在 Agent 配置文件中添加 hooks 配置
- 指定触发条件和脚本路径
2. **Agent 网关运行中**
- 确保 Agent 网关服务正常运行
- 飞书 WebSocket 连接正常
---
### 配置文件示例
**Agent 配置文件** (`~/.openclaw/openclaw-{agentId}.json`):
```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(应用通用) | 飞书开放平台 |
---
## 🔍 获取用户 open_id
从当前 Agent 网关日志获取:
```bash
journalctl --user -u openclaw-gateway-{agentId}.service | grep "received message from"
```
---
## ⚠️ 注意事项
### 1. open_id 是应用隔离的
- ❌ 不同应用的用户 open_id 不同
- ✅ 必须使用当前 Agent 应用中的 open_id 发送私聊消息
- ✅ chat_id 是应用通用的,可以直接使用
### 2. content 格式
- ✅ 必须是**转义的 JSON 字符串**:`"{\"text\":\"消息内容\"}"`
- ❌ 不是嵌套对象
### 3. 配置文件位置
- Agent-B: `~/.openclaw/openclaw-agent-b.json`
- Agent-C: `~/.openclaw/openclaw-agent-c.json`
- 其他 Agent: `~/.openclaw/openclaw-{agentId}.json`
---
## 🧪 测试流程
### 步骤 1:测试脚本
```bash
# 发送群聊测试消息
~/.openclaw/workspace-agent-b/skills/feishu-agent-messenger/send.sh \
agent-b oc_xxx chat_id "测试:Agent-B 以自己的身份发送群聊消息"
```
**预期结果**:
- ✅ 输出 "发送成功!"
- ✅ 飞书群里显示消息,发送者为当前 Agent 的机器人名字
### 步骤 2:测试自动回复
**配置 hook 后**,发送消息给 Agent。
**预期结果**:
- ✅ Agent 自动回复消息
- ✅ 日志里显示脚本执行记录
---
## 📚 相关技能
- **setup-multi-gateway** - 多网关配置,配合本技能实现多 Agent 协作
- **skill-vetter** - 技能安全审查,安装前自动检查
---
## 🆘 常见问题
### Q1: 发送失败,提示"配置文件不存在"
**A**: 检查 Agent 配置文件是否存在:
```bash
ls -la ~/.openclaw/openclaw-{agentId}.json
```
### Q2: 发送失败,提示"无法获取 token"
**A**: 检查飞书配置是否正确:
```bash
jq '.channels.feishu.appId' ~/.openclaw/openclaw-{agentId}.json
jq '.channels.feishu.appSecret' ~/.openclaw/openclaw-{agentId}.json
```
### Q3: 消息发送成功,但显示的是其他 Agent 的身份
**A**: 确保使用的是当前 Agent 的脚本和配置,不是其他 Agent 的。
### Q4: open_id 发送失败
**A**: 确保使用的是当前 Agent 应用中的 open_id,不是其他 Agent 的 open_id。
### Q5: 下载后不知道怎么用
**A**:
1. 确保已配置飞书应用(App ID 和 App Secret)
2. 确保 Agent 配置文件存在
3. 测试脚本:`./send.sh agent-b oc_xxx chat_id "测试"`
4. 如果成功,说明配置正确
### Q6: 配置了 hook 但不自动回复
**A**:
1. 检查 hook 配置是否正确
2. 检查 Agent 网关是否重启
3. 查看日志:`journalctl --user -u openclaw-gateway-{agentId}.service -f`
4. 确认触发条件是否匹配
---
## 📝 更新日志
### v1.0.2 (2026-03-20)
- 添加"配置自动回复"章节
- 详细说明 hook 配置方法
- 添加常见问题 Q6
- 明确说明"下载就能用"的含义
### v1.0.1 (2026-03-20)
- 去掉 Boss/Ass/Ops 等本地 Agent 名称,改用通用名称
- 明确说明"下载就能用"的含义和前置条件
- 添加配置说明章节
- 添加常见问题 Q5: 下载后不知道怎么用
- 优化文档结构,更清晰易懂
### v1.0.0 (2026-03-20)
- 初始版本
- 支持多 Agent 发送消息
- 支持群聊和私聊两种模式
- 自动从配置文件读取飞书凭证
- 支持 sessions_send 自动调用
- 添加完整使用流程说明
- 添加测试流程和常见问题解答
don't have the plugin yet? install it then click "run inline in claude" again.