feat: 飞书机器人按租户路由 群组绑定租户 + 独立凭证 + 知识库隔离
1. 新增 resolve_tenant_by_chat_id() 根据飞书群 chat_id 查找绑定的租户 2. 新增 get_tenant_feishu_config() 获取租户级飞书凭证 3. FeishuService 支持传入自定义 app_id/app_secret(租户级别) 4. feishu_bot.py 收到消息时自动解析租户,使用租户凭证回复 5. feishu_longconn_service.py 同样按 chat_id 解析租户并传递 tenant_id 6. 租户管理 UI 新增飞书配置字段:App ID、App Secret、绑定群 Chat ID 7. 租户列表展示飞书绑定状态和群数量 8. 保存租户时同步更新飞书配置到 config JSON
This commit is contained in:
@@ -27,7 +27,7 @@ def _process_message_in_background(app, event_data: dict):
|
||||
"""
|
||||
with app.app_context():
|
||||
# 每个线程创建独立的飞书服务实例,避免token共享问题
|
||||
feishu_service = FeishuService()
|
||||
from src.web.blueprints.tenants import resolve_tenant_by_chat_id, get_tenant_feishu_config
|
||||
|
||||
try:
|
||||
# 1. 解析事件数据
|
||||
@@ -38,6 +38,21 @@ def _process_message_in_background(app, event_data: dict):
|
||||
chat_id = message.get('chat_id')
|
||||
chat_type = message.get('chat_type', 'unknown')
|
||||
|
||||
if not message_id or not chat_id:
|
||||
logger.error(f"[Feishu Bot] 事件数据缺少必要字段: {event_data}")
|
||||
return
|
||||
|
||||
# 解析租户:根据 chat_id 查找绑定的租户
|
||||
tenant_id = resolve_tenant_by_chat_id(chat_id)
|
||||
logger.info(f"[Feishu Bot] 群 {chat_id} 对应租户: {tenant_id}")
|
||||
|
||||
# 获取租户级飞书凭证(如果配置了)
|
||||
tenant_feishu_cfg = get_tenant_feishu_config(tenant_id)
|
||||
feishu_service = FeishuService(
|
||||
app_id=tenant_feishu_cfg.get('app_id'),
|
||||
app_secret=tenant_feishu_cfg.get('app_secret')
|
||||
)
|
||||
|
||||
if not message_id or not chat_id:
|
||||
logger.error(f"[Feishu Bot] 事件数据缺少必要字段: {event_data}")
|
||||
return
|
||||
@@ -107,8 +122,8 @@ def _process_message_in_background(app, event_data: dict):
|
||||
|
||||
# 如果没有会话,创建新会话
|
||||
if not session_id:
|
||||
session_id = chat_manager.create_session(user_id=user_id, work_order_id=None)
|
||||
logger.info(f"[Feishu Bot] 为用户 {sender_id} 在群聊 {chat_id} 创建新会话: {session_id}")
|
||||
session_id = chat_manager.create_session(user_id=user_id, work_order_id=None, tenant_id=tenant_id)
|
||||
logger.info(f"[Feishu Bot] 为用户 {sender_id} 在群聊 {chat_id} 创建新会话: {session_id} (租户: {tenant_id})")
|
||||
|
||||
# 4. 调用实时对话接口处理消息
|
||||
logger.info(f"[Feishu Bot] 调用实时对话接口处理消息...")
|
||||
|
||||
Reference in New Issue
Block a user