-
Notifications
You must be signed in to change notification settings - Fork 3
Messaging Bots.zh CN
phinn edited this page Sep 18, 2026
·
1 revision
🌐 Language: English | 中文
KinetAios 可以通过 WebSocket 长连接接收飞书和企业微信消息,路由到任意 Agent 引擎处理后回复 —— 还能自动发送 Agent 产出的文件/图片。
这把你的 IM 应用变成了远程 Agent 终端:发一条文本消息,得到带文件附件的 AI 回复。
| 平台 | SDK | 连接方式 |
|---|---|---|
| 飞书 / Lark | @larksuiteoapi/node-sdk |
WebSocket 长连接 |
| 企业微信 | @wecom/aibot-node-sdk |
WebSocket 长连接 |
均使用官方 SDK,内置心跳保活、断线指数退避重连、消息幂等去重。
- 进入飞书开放平台→ 创建应用
- 开启机器人能力
- 事件订阅中切换为长连接模式(非 HTTP 回调)
- 订阅
im.message.receive_v1事件 - 复制 App ID 和 App Secret → 粘贴到 设置 → 消息 tab
- 进入企业微信开发者后台→ 创建智能机器人
- 从机器人管理页复制 Bot ID 和 Secret
- 粘贴到 设置 → 消息 tab
| 字段 | 说明 |
|---|---|
| 启用 | 开关机器人。切换后自动重连 |
| App ID / Bot ID | 飞书 App ID 或企微 Bot ID |
| App Secret / Secret | 对应密钥 |
| 引擎 | 处理消息的 Agent 引擎:direct / directV2 / claudeCode / codex
|
| 流式回复 | 开 → 先发"⏳ 正在思考…"占位,完成后替换为答案 |
| 默认工作目录 | Agent 工具调用(shell、文件操作)的工作目录 |
IM 用户发送消息
↓
SDK WebSocket 接收
↓
Bridge (feishu.ts / wecom.ts) 归一化为文本
↓
斜杠指令? ── 是 → 立即处理并回复
↓ 否
入 per-user 串行队列
↓
TaskManager.send(convId, text)
↓
引擎处理(ReAct 循环 / CLI 调用)
↓
从最后一轮提取答案
↓
提取产出物(工具输出中的文件/图片路径)
↓
回复文本 + 上传并发送附件
用户可直接在 IM 聊天中管理会话 —— 无需打开桌面端。
| 指令 | 动作 |
|---|---|
/new |
开启新对话(清除当前上下文) |
/reset |
清空当前会话的对话历史(保留会话,抹掉 turns) |
/list |
显示最近 5 个会话,含时间戳和轮次 |
/switch N |
切换到 /list 中的第 N 个会话 |
/context |
显示当前会话信息(轮次、token、费用、cwd) |
无法识别的 /... 会显示帮助文本。
同一用户的消息自动路由到同一会话,保持多轮上下文。映射 key 取决于聊天类型:
| 聊天类型 | Key 格式 | 行为 |
|---|---|---|
| 飞书单聊 | feishu:${open_id} |
每用户独立会话 |
| 飞书群聊 | feishu:group:${chat_id} |
全群共享一个会话 |
| 企微单聊 | wecom:${userid} |
每用户独立会话 |
| 企微群聊 | wecom:group:${chatid} |
全群共享一个会话 |
feishuKey / wecomKey 存储在 SQLite 的 Conversation 记录上。应用重启时,Bridge 扫描所有会话重建内存 Map<key, convId>。Map 查找未命中时,fallback 到 SQLite 全扫描。
每个用户(或群)最多保留 5 个会话。超出时自动删除最旧的会话。
同一用户的消息通过 per-user promise chain(enqueue()) 串行处理。如果用户 A 快速连发 3 条消息,它们排队逐一执行。不同用户的消息并行处理。
这替代了旧的轮询方案(while + setTimeout(2000) 阻塞 120 秒)。
当 Agent 在工具执行过程中产出文件或图片时,Bridge 自动:
-
提取工具输出(
write_file、shell、read_file、feishu_send_file)中的文件路径 -
上传每个文件到飞书(
im.image.create/im.file.create) - 回复图片/文件类型的富媒体消息
支持类型:PNG、JPG、GIF、WebP(图片);PDF、DOC、XLS、PPT、MP4、MP3(文件)。
Agent 也可通过 feishu_send_file 工具主动发送文件。
当会话来源是飞书或企微时,系统提示词中注入来源提示,让 Agent 知道它通过 IM 渠道通信:
-
飞书:"你在飞书对话中回复。保持回复简洁。使用
feishu_send_file发送文件。" - 企微:"你在企业微信对话中回复。保持回复简洁(支持 markdown,最长约 4000 字)。"
| 文件 | 职责 |
|---|---|
src/main/feishu.ts |
FeishuBridge:WS 连接、消息处理、文件上传 |
src/main/wecom.ts |
WeComBridge:WS 连接、消息处理 |
src/main/engines.ts |
sourceHintSection() — 注入 IM 上下文到系统提示词 |
src/main/tools.ts |
feishuSendFile 工具注册 |
src/shared/types.ts |
FeishuBotConfig、WeComBotConfig、feishuKey、wecomKey 字段 |
src/main/settings.ts |
机器人默认配置 |
src/main/main.ts |
IPC handler、启动自动连接、设置变更重连 |