Enables multi-Agent collaboration on Feishu by relaying tasks between coordinator and specialist Bots with user ID mapping and proactive messaging.
⚠️ BEFORE SETUP: You must choose a deployment mode!
| Mode | For | User ID | Setup | Security |
|---|---|---|---|---|
| Single-User | Personal use | Auto ("me") | ✅ 5 min | ✅ High |
| Multi-User | Teams | Manual entry | ⚠️ 30 min | ⚠️ Low |
Choose Single-User Mode if:
📖 Guide: references/single-user-setup.md
Choose Multi-User Mode if:
📖 Guide: references/feishu-bot-setup.md
Read this before using the skill:
Current flow requires users to manually enter their User ID:
User → Bot: "你好"
Bot → User: "请告诉我您的 User ID(工号/用户名)"
User → Bot: "我的 user ID 是:user_demo_001" ← ⚠️ MANUAL STEP - NO VERIFICATION
⚠️ Risks:
✅ Acceptable for:
❌ NOT acceptable for:
🔧 Single-User Mode avoids this: No manual ID entry needed!
This skill requires multiple Feishu Bot applications:
| Bot Type | Quantity | Example Names |
|---|---|---|
| Coordinator | 1 | 协调员 |
| Specialists | 2+ | 技术专家,产品专家 |
📖 Setup Guide: references/feishu-bot-setup.md
Recommended for personal use!
# 1. Set environment variable
export DEPLOYMENT_MODE=single-user
# 2. Create empty mapping table (no users needed)
cat > user-mapping.json << 'EOF'
{
"version": "1.0",
"users": {},
"agents": { ... }
}
EOF
# 3. Contact any Bot - auto-registers you!
# That's it! No manual User ID entry needed.
How it works:
📖 Full guide: references/single-user-setup.md
For teams and organizations.
# 1. Set environment variable
export DEPLOYMENT_MODE=multi-user
# 2. Each user must register:
User → Bot: "你好"
Bot → User: "请告诉我您的 User ID"
User → Bot: "我的 user ID 是:zhangsan"
⚠️ Security Warning: Manual User ID entry has NO verification. Internal use only!
📖 Full guide: references/feishu-bot-setup.md
This skill enables multi-Agent collaboration on Feishu where:
User → Coordinator Bot → sessions_send → Specialist Bot → User (proactive DM)
(userid only) queries mapping
📖 Guide: references/feishu-bot-setup.md
DEPLOYMENT_MODE=single-userDEPLOYMENT_MODE=multi-user📖 Single-User Guide: references/single-user-setup.md
Use when:
Don't use for:
┌─────────────────┐
│ User │
│ (Feishu DM) │
└────────┬────────┘
│ 1. User contacts coordinator
▼
┌─────────────────┐ 2. Coordinator identifies user
│ Coordinator │ (auto or manual)
│ Agent │
│ (orchestrator) │ 3. Relay via sessions_send
└────────┬────────┘ (userid only)
│
▼
┌─────────────────┐ 4. Specialist queries mapping
│ Specialist │ for own open_id
│ Agent │
└────────┬────────┘ 5. Send proactive DM
│
▼
┌─────────────────────────┐
│ user-mapping.json │
│ userid → open_id map │
└─────────────────────────┘
Each Bot has different open_id for the same user:
Same user (userid: user_demo_001):
├─ Coordinator Bot: ou_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
├─ Tech Expert Bot: ou_bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
└─ Product Expert Bot: ou_cccccccccccccccccccccccccccccccc
You CANNOT use one Bot's open_id for another Bot!
// 1. Coordinator queries userid
const user = await mapping.getUserByOpenId('coordinator', userOpenId);
// 2. Send relay (userid only, NO open_id)
await sessions_send({
agentId: 'product-expert',
sessionKey: 'agent:product-expert:main', // ✅ Key!
message: `【转接任务】用户 User ID: ${user.userid}`
});
// 3. Specialist queries mapping for ITS OWN open_id
const userOpenId = mapping.users[userId]?.botOpenIds?.['product-expert'];
// 4. Send message using correct open_id
await message({
action: 'send',
channel: 'feishu',
target: userOpenId, // ✅ This Bot's open_id
message: '您好,我是产品专家...'
});
const DEPLOYMENT_MODE = process.env.DEPLOYMENT_MODE || 'single-user';
const SINGLE_USER_ID = 'me';
const userOpenId = getMessageContext().from;
// Auto-register on first contact
const existing = await mapping.getBotOpenId(SINGLE_USER_ID, 'coordinator');
if (!existing) {
await mapping.updateBotOpenId(SINGLE_USER_ID, 'coordinator', userOpenId, 'Default User');
await message({
message: `您好!🎉 系统已自动配置完成(单用户模式)。`
});
return;
}
const userOpenId = getMessageContext().from;
const user = await mapping.getUserByOpenId('coordinator', userOpenId);
if (!user) {
// Ask for User ID
await message({
message: `您好!请告诉我您的 User ID(工号/用户名)。`
});
return;
}
await mapping.updateBotOpenId(user.userid, 'coordinator', userOpenId, user.name);
const user = await mapping.getUserByOpenId('coordinator', userOpenId);
await sessions_send({
agentId: 'product-expert',
sessionKey: 'agent:product-expert:main',
message: `【转接任务】用户 User ID: ${user.userid}, 任务:${task}`
});
const userId = extractUserId(message);
const userOpenId = mapping.users[userId]?.botOpenIds?.['product-expert'];
if (!userOpenId) {
await sessions_send({
agentId: 'coordinator',
message: `用户 ${userId} 尚未与我建立对话`
});
return;
}
await message({
action: 'send',
channel: 'feishu',
target: userOpenId,
message: '您好,我是产品专家...'
});
{
"version": "1.0",
"users": {
"me": {
"name": "Default User",
"botOpenIds": {
"coordinator": "ou_xxx",
"tech-expert": "ou_yyy",
"product-expert": "ou_zzz"
}
}
},
"agents": { ... }
}
{
"version": "1.0",
"users": {
"zhangsan": {
"name": "张三",
"botOpenIds": {
"coordinator": "ou_abc...",
"product-expert": "ou_def..."
}
},
"lisi": { ... }
},
"agents": { ... }
}
| Variable | Values | Default | Description |
|---|---|---|---|
DEPLOYMENT_MODE | single-user, multi-user | multi-user | Deployment mode |
SINGLE_USER_ID | Any string | "me" | User ID for single-user |
# SOUL.md - 协调者
## 部署模式
- Mode: single-user (或 multi-user)
- User ID: "me" (single-user) 或 dynamic (multi-user)
## 配置
- Bot App ID: cli_xxx
- 映射表:/path/to/user-mapping.json
Cause: Using wrong Bot's open_id.
Fix: Each Bot must use its own open_id from mapping.
Cause: First-time user, not registered.
Fix: Auto-register (single-user) or ask for ID (multi-user).
agent:xxx:main for sessionKeyfeishu:direct:openid sessionKeymapping-api.js - Unified mapping APIsingle-user-setup.md - Single-user mode guide (START HERE for personal use)feishu-bot-setup.md - Multi-user mode guidemapping-schema.md - Schema detailsrelay-examples.md - Code examplesVersion: 1.2
Last Updated: 2026-03-07
Deployment Modes: Single-User (zero-config) | Multi-User (manual)
Recommendation: Start with Single-User for testing, switch to Multi-User for teams
Status: ✅ Functional for internal/personal use | ⚠️ Not production-ready (multi-user mode)
ZIP package — ready to use