OpenCode 飞书集成功能说明
2026/4/27大约 4 分钟
OpenCode 飞书集成功能说明
概述
OpenCode 集成了飞书(Feishu/Lark),主要用于客户支持和社区沟通功能。飞书是字节跳动开发的企业协作平台,在中国市场广泛使用。
🎯 核心功能
飞书 → Discord 消息桥接
OpenCode 实现了一个消息桥接系统,将飞书群组中的消息自动转发到 Discord 支持频道。
飞书群组消息 → OpenCode API → Discord 支持频道🏗️ 技术实现
1. 配置(infra/app.ts)
// 飞书应用凭证
const FEISHU_APP_ID = new sst.Secret("FEISHU_APP_ID")
const FEISHU_APP_SECRET = new sst.Secret("FEISHU_APP_SECRET")这些密钥用于:
- 认证飞书应用
- 获取访问令牌
- 接收 Webhook 事件
2. Token 获取(packages/function/src/api.ts)
async function getFeishuTenantToken(): Promise<string> {
const response = await fetch(
"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal",
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
app_id: Resource.FEISHU_APP_ID.value,
app_secret: Resource.FEISHU_APP_SECRET.value,
}),
}
)
const data = await response.json()
return data.tenant_access_token
}作用: 获取飞书租户访问令牌,用于调用飞书 API。
3. Webhook 处理(packages/function/src/api.ts)
.post("/feishu", async (c) => {
const body = await c.req.json()
// 1. 处理飞书验证挑战
if (body.challenge) {
return c.json({ challenge: body.challenge })
}
// 2. 提取消息内容
const content = body.event?.message?.content
const parsed = JSON.parse(content)
let message = parsed.text || content
// 3. 清理消息格式
message = message.trim()
.replace(/^@_user_\d+\s*/, "") // 移除飞书 @ 提及
.replace(/^aiden,?\s*/i, "<@759257817772851260> ") // 转换为 Discord 提及
// 4. 添加线程 ID(用于追踪对话)
const threadId = body.event?.message?.root_id || body.event?.message?.message_id
if (threadId) message = `${message} [${threadId}]`
// 5. 转发到 Discord
await fetch(
`https://discord.com/api/v10/channels/${DISCORD_SUPPORT_CHANNEL_ID}/messages`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bot ${DISCORD_SUPPORT_BOT_TOKEN}`,
},
body: JSON.stringify({ content: message }),
}
)
return c.json({ ok: true })
})📊 工作流程
🎯 使用场景
1. 中国用户支持
- 目标用户: 中国大陆用户
- 原因: Discord 在中国访问受限,飞书是本地化替代方案
- 优势:
- 飞书在中国网络环境下稳定可用
- 符合中国用户的使用习惯
- 支持中文界面和输入
2. 统一支持渠道
- 集中管理: 将飞书和 Discord 的消息统一到 Discord 频道
- 团队协作: 支持团队只需在 Discord 中处理所有消息
- 历史记录: 所有对话都保存在 Discord 中
3. 消息追踪
- 线程 ID: 每条消息都带有飞书的线程 ID
- 上下文保持: 可以追踪完整的对话历史
- 格式:
[消息内容] [thread_id]
🔧 配置要求
飞书应用设置
创建飞书应用
- 登录飞书开放平台
- 创建企业自建应用
- 获取 App ID 和 App Secret
配置权限
- 消息接收权限
- 群组消息读取权限
设置 Webhook
- 配置事件订阅
- 设置回调 URL:
https://api.{domain}/feishu - 订阅消息事件
Discord Bot 设置
创建 Discord Bot
- 获取 Bot Token
- 添加到支持服务器
获取频道 ID
- 启用开发者模式
- 复制支持频道 ID
配置权限
- 发送消息权限
- 查看频道权限
🔐 安全考虑
1. 密钥管理
- 所有密钥通过 SST Secret 管理
- 不在代码中硬编码
- 环境隔离(dev/staging/production)
2. 验证机制
- 飞书 Challenge 验证
- Webhook 签名验证(可选)
- Token 定期刷新
3. 错误处理
- API 调用失败重试
- 日志记录
- 错误通知
📈 监控与维护
日志记录
console.log(JSON.stringify(body, null, 2)) // 记录完整的 Webhook 数据错误处理
if (!response.ok) {
console.error(await response.text())
return c.json({ error: "Discord bot message failed" }, { status: 502 })
}健康检查
- 监控 Webhook 接收率
- 检查 Discord 消息发送成功率
- Token 有效性检查
🌍 国际化支持
多地区策略
- 中国: 飞书 + Discord(桥接)
- 国际: Discord(直接)
- 统一: 所有消息最终汇聚到 Discord
用户体验
- 中国用户使用熟悉的飞书
- 国际用户使用 Discord
- 支持团队统一在 Discord 处理
🔮 未来扩展
可能的增强
- 双向同步: Discord → 飞书消息回传
- 富文本支持: 图片、文件、表情等
- 用户识别: 关联飞书用户和 OpenCode 账户
- 自动回复: 常见问题自动响应
- 分析统计: 消息量、响应时间等指标
其他平台集成
- 钉钉(DingTalk)
- 企业微信(WeChat Work)
- Slack
- Telegram
📝 总结
飞书集成是 OpenCode 为中国市场用户提供的本地化支持方案,通过消息桥接技术实现:
✅ 用户友好: 中国用户使用飞书,无需翻墙访问 Discord
✅ 团队高效: 支持团队统一在 Discord 处理所有消息
✅ 技术简单: 单向桥接,实现简单,维护成本低
✅ 可扩展: 架构支持未来添加更多平台
这是一个典型的国际化产品本地化适配案例,体现了 OpenCode 对不同地区用户需求的重视。