飞书集成教程
June 5, 2026 · View on GitHub
本教程指导你完成 HotPlex 与飞书的集成,获得流式卡片回复、语音转写和权限交互能力。
前置条件
- HotPlex 已安装(
hotplex version可执行) - 飞书企业版账号(管理员或有应用创建权限)
- 已配置 Worker(Claude Code 或 OpenCode Server 可用)
1. 创建飞书应用
登录 飞书开放平台,进入「开发者后台」。
1.1 创建应用
- 点击「创建企业自建应用」
- 填写应用名称(如
HotPlex Bot)和描述 - 记录 App ID(
cli_前缀)和 App Secret
1.2 启用机器人能力
进入应用 →「添加应用能力」→ 勾选「机器人」。
1.3 配置权限
进入「权限管理」→ 点击右上角「批量导入/导出权限」→ 选择「导入权限」→ 粘贴以下 JSON:
{
"scopes": {
"tenant": [
"im:message",
"im:message:send_as_bot",
"im:message.group_msg",
"im:message.group_msg:readonly",
"im:message.p2p_msg",
"im:message.p2p_msg:readonly",
"im:message.reactions:write_only",
"im:resource",
"im:resource:download",
"im:chat",
"im:chat:readonly",
"bot:info"
]
}
}
点击「确定」→「申请开通」(企业内部应用通常会自动通过)→ 发布新版本 → 申请线上发布。
权限用途说明
| 权限标识 | 用途 | 对应 API |
|---|---|---|
im:message | 接收单聊和群聊消息 | WebSocket 事件接收 |
im:message:send_as_bot | 以机器人身份发送/回复/更新消息 | Im.Message.Create、Im.Message.Reply、Im.Message.Patch、CardKit 流式更新 |
im:message.group_msg | 处理群聊消息 | 群聊消息接收 |
im:message.group_msg:readonly | 读取群聊消息 | 群聊消息事件 |
im:message.p2p_msg | 处理单聊消息 | 单聊消息接收 |
im:message.p2p_msg:readonly | 读取单聊消息 | 单聊消息事件 |
im:message.reactions:write_only | 添加/移除 Emoji reaction(Typing 指示器) | MessageReaction.Create、MessageReaction.Delete |
im:resource | 上传 TTS 语音文件 | Im.File.Create(Edge-TTS 语音回复) |
im:resource:download | 下载用户发送的图片/文件/音频/视频/贴纸 | Im.MessageResource.Get |
im:chat | 获取群组信息(群聊策略执行) | 群聊访问控制 |
im:chat:readonly | 读取群组元数据 | 群聊信息查询 |
bot:info | 获取机器人自身 OpenID 和名称 | GET /open-apis/bot/v3/info(启动时自动调用) |
可选权限
| 权限标识 | 用途 | 启用条件 |
|---|---|---|
speech:stt | 飞书云端语音转文字 | STT_PROVIDER=feishu 或 feishu+local 时必须 |
如果使用本地 STT 引擎(默认),则无需
speech:stt权限。
1.4 订阅事件
进入「事件订阅」:
- 选择 WebSocket 模式(HotPlex 使用 WS 长连接,无需公网回调地址)
- 添加以下事件:
| 事件 | 事件标识 | 必要性 | 用途 |
|---|---|---|---|
| 接收消息 | im.message.receive_v1 | 必须 | 接收所有类型的用户消息(文本/富文本/图片/文件/音频/视频/贴纸/卡片) |
| 进入机器人单聊 | chat_access.event.bot_p2p_chat_entered_v1 | 必须 | 新用户/回访用户进入单聊时发送欢迎卡片 |
| 消息已读 | im.message.read_v1 | 推荐 | 消息已读状态追踪 |
| 新增表情回复 | im.message.reaction.created_v1 | 推荐 | Emoji reaction 事件 |
| 删除表情回复 | im.message.reaction.deleted_v1 | 推荐 | Emoji reaction 事件 |
- (推荐)设置 Encrypt Key 和 Verification Token
验证:事件订阅页面显示「已启用」且所有事件状态为正常。
1.5 一键配置速查
应用创建完成后,将以下内容复制到项目 .env 文件(首次使用:cp configs/env.example .env):
# 飞书一键配置 — 填入步骤 1.1 获取的凭证即可
HOTPLEX_MESSAGING_FEISHU_ENABLED=true
HOTPLEX_MESSAGING_FEISHU_APP_ID=cli_xxxxxxxxxxxx
HOTPLEX_MESSAGING_FEISHU_APP_SECRET=your_app_secret_here
或使用交互式向导自动写入:
hotplex onboard
2. 配置 HotPlex
方式 A:手动编辑 .env
cp configs/env.example .env
编辑 .env,取消注释并填入飞书配置:
HOTPLEX_MESSAGING_FEISHU_ENABLED=true
HOTPLEX_MESSAGING_FEISHU_APP_ID=cli_xxxxxxxxxxxx
HOTPLEX_MESSAGING_FEISHU_APP_SECRET=your_app_secret_here
方式 B:使用 Onboard 向导
hotplex onboard
向导会依次引导你选择平台(Feishu)、输入 App ID/Secret,自动写入 .env。
验证:
hotplex doctor
# 输出应包含:messaging.feishu_creds ✓ Feishu credentials present
3. 启动 Gateway
hotplex gateway start -d
-d表示后台运行(daemon 模式)
验证:
hotplex status
# 输出应显示:feishu ✓ connected
查看实时日志确认飞书连接成功:
hotplex service logs -f
# 期望看到:feishu ws connected app_id=cli_xxx
4. 功能测试
4.1 基础对话
- 在飞书中搜索你的机器人名称
- 发送「你好」
- 期望:收到流式更新的卡片消息,内容逐步填充
4.2 权限交互
发送需要执行命令的请求(如「列出当前目录文件」):
- Bot 发送带交互按钮的权限确认卡片
- 点击卡片上的「✓ 允许」或「✗ 拒绝」按钮(也可回复文字「允许」或「拒绝」)
- 期望:Bot 根据回复继续执行或取消
4.3 语音消息
- 在飞书中按住语音按钮发送一段语音
- 期望:Bot 通过 STT 将语音转写为文字,然后正常回复
语音转写默认使用本地 STT 引擎。如未安装,参考
docs/guides/developer/voice-features.md。
5. 高级配置
DM / 群聊策略
# require_mention: 群聊中是否需要 @机器人 才响应(默认 true)
HOTPLEX_MESSAGING_FEISHU_REQUIRE_MENTION=true
# DM 策略 — allowlist / open / disabled
# open = 接受所有人私聊,allowlist = 仅允许指定用户,disabled = 关闭私聊
HOTPLEX_MESSAGING_FEISHU_ALLOW_DM_FROM=open
# 群聊策略 — 同上
HOTPLEX_MESSAGING_FEISHU_ALLOW_GROUP_FROM=open
# 指定允许的用户 ID(逗号分隔,allowlist 模式生效)
HOTPLEX_MESSAGING_FEISHU_ALLOW_FROM=ou_xxx,ou_yyy
TTS / STT 配置
# STT: feishu(云端), local(本地 SenseVoice-Small ONNX), feishu+local(云端优先+本地降级)
HOTPLEX_MESSAGING_STT_PROVIDER=local
# TTS: edge(免费 Edge TTS), moss(本地 MOSS-TTS-Nano), edge+moss(Edge 优先+MOSS 降级)
HOTPLEX_MESSAGING_TTS_ENABLED=true
HOTPLEX_MESSAGING_TTS_PROVIDER=edge+moss
HOTPLEX_MESSAGING_TTS_VOICE=zh-CN-XiaoxiaoNeural
HOTPLEX_MESSAGING_TTS_MAX_CHARS=150
交互与指示器
权限交互:Bot 发送带交互按钮的确认卡片。用户可点击卡片上的「✓ 允许」或「✗ 拒绝」按钮直接操作,也可回复文字「允许」或「拒绝」。
选项交互:当 Bot 发送多选项问题(如 AskUserQuestion)时,卡片包含可点击的选项按钮。点击按钮即可直接选择对应选项。也可手动输入选项文本或自定义答案。
输入交互:当 Agent(通过 MCP 协议)需要用户提供文本输入(如 API Key、确认信息等)时,Bot 发送带输入框的交互卡片。用户可直接在卡片中填写并提交,也可取消操作。常见于 MCP Server 需要凭证等场景。
这些行为为内置默认,无需额外配置。
故障排查
| 症状 | 检查项 |
|---|---|
feishu ✗ | 确认 APP_ID/APP_SECRET 正确,应用已发布 |
| 消息无回复 | hotplex service logs -f 查看 Worker 错误 |
| 语音不转写 | 检查 STT provider 配置和本地引擎是否安装 |
| 群聊不响应 | 确认 REQUIRE_MENTION=true 时已 @机器人 |