fix: 飞书发送者信息获取修复
- sender_id 优先用 open_id(user_id 在无权限时为 None) - get_user_info 默认用 open_id 类型查询 - contact API 无权限时优雅降级,用 ID 缩写作为标识(用户_xxx) - feishu_bot 和 longconn 都统一了 sender 提取逻辑
This commit is contained in:
@@ -102,17 +102,21 @@ def _process_message_in_background(app, event_data: dict):
|
||||
# 3. 获取或创建该飞书用户的会话(支持群聊隔离)
|
||||
chat_manager = service_manager.get_chat_manager()
|
||||
|
||||
# 获取发送者ID(从event中提取)
|
||||
# 获取发送者ID(优先 open_id,user_id 可能为 None)
|
||||
sender = event.get('sender', {})
|
||||
sender_id = sender.get('sender_id', {}).get('user_id', 'unknown')
|
||||
sender_open_id = sender.get('sender_id', {}).get('open_id', '')
|
||||
sender_ids = sender.get('sender_id', {})
|
||||
sender_open_id = sender_ids.get('open_id', '') or ''
|
||||
sender_user_id = sender_ids.get('user_id', '') or ''
|
||||
sender_id = sender_user_id or sender_open_id or 'unknown'
|
||||
sender_type = sender.get('sender_type', 'user')
|
||||
|
||||
# 获取发送者姓名
|
||||
sender_name = '未知用户'
|
||||
# 获取发送者姓名(用 open_id 查询)
|
||||
sender_name = sender_id
|
||||
try:
|
||||
if sender_id and sender_id != 'unknown':
|
||||
user_info = feishu_service.get_user_info(sender_id)
|
||||
id_for_query = sender_open_id or sender_user_id
|
||||
id_type = 'open_id' if sender_open_id else 'user_id'
|
||||
if id_for_query:
|
||||
user_info = feishu_service.get_user_info(id_for_query, id_type=id_type)
|
||||
sender_name = user_info.get('name') or user_info.get('en_name') or sender_id
|
||||
except Exception as e:
|
||||
logger.warning(f"[Feishu Bot] 获取发送者信息失败: {e}")
|
||||
@@ -121,7 +125,6 @@ def _process_message_in_background(app, event_data: dict):
|
||||
logger.info(f"[Feishu Bot] 📝 消息内容: '{text_content}'")
|
||||
|
||||
# 群聊隔离:每个用户在每个群都有独立会话
|
||||
# 格式:feishu_群聊ID_用户ID
|
||||
user_id = f"feishu_{chat_id}_{sender_id}"
|
||||
|
||||
# 检查是否已有活跃会话
|
||||
|
||||
Reference in New Issue
Block a user