From b7627927d4fc825f01b986b3b818223e21cf9ed3 Mon Sep 17 00:00:00 2001 From: Jeason <1710884619@qq.com> Date: Thu, 2 Apr 2026 15:58:31 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=95=BF=E8=BF=9E=E6=8E=A5=20sender=5Fi?= =?UTF-8?q?d=20=E6=8F=90=E5=8F=96=E4=BF=AE=E5=A4=8D=20+=20=E5=8E=BB?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E8=B5=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除重复的 sender_id = sender.sender_id.user_id 赋值(会覆盖已修复的值) - 添加 sender_id 属性调试日志,方便排查 SDK 对象结构 - 优先用 open_id 构造会话标识,避免 user_id 为 None 的问题 - get_user_info 无权限时用 open_id 缩写作为标识 --- data/tsp_assistant.db | Bin 217088 -> 217088 bytes src/integrations/feishu_longconn_service.py | 50 ++++++++++++-------- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/data/tsp_assistant.db b/data/tsp_assistant.db index 8e10e57166bd161deb5b04802ba28ad14ffdff6e..21ca0d4d041e76b5c93a866c5cde3b0a559442f5 100644 GIT binary patch delta 895 zcma)4QA|=%7{2$SAqd>idMIn-sh1{l?*#?gtZb{bwtDxW5(RU#oJ)J2Bx!yC6(GrDF)0nvVH?N`~4>?#Vmwro=2VNN!;AxL}R>_sJ_bXyPv@#;GWk`jC= zklMgvCwZNpK*Rh4o<@P)LL6H7F-#^6*fKCxG8C zWj2LqkS`_p!c3!gt-PRC6GlTrU*eKrX{J`50!g13UXq>%t^2fB3T(qd$Z=M2Jy0tL z)MOoB^-hARY{Qj9w#BBauc8ey6q2?XVcuU|h(QIOtB7+c@mUyRUMvAAz#VF)~P*R8m zK-mWh1(>?HS`@t***45mO0PBu(nC(ht*<~32xY)@3Ot>a;pZ3jDZ&0@AwCSwmp z5rpad4pmx*>y+;_=r66#r^Imh5#31p z36;gohIMFPlT3+JDqSl01qTMlM;44qkB#X5 z=cfKtGeJ=Y?pQsJ{%FDQF$8~)kL5K-Q77JfrOB&DBi{?XYS|Qa8I~$o_Av&OFTX`6N^G@eI%EZBMYG`O;W@uPioLUrbU|=}i@d}gl^aZ?(verh% zR>p>U2IeLfMwUhfMrOJOCb|Yj3WlauAQ>|~Lt|3|Q;U?;w8YY!5(Wl_+YF6@*$n)W zoXX16<@p(%SWHY!ji)Q}G3s+0CMK6;mZiF-W)@EuKS3QWrsm<<4i(nK-< diff --git a/src/integrations/feishu_longconn_service.py b/src/integrations/feishu_longconn_service.py index f3bb8e0..229e628 100644 --- a/src/integrations/feishu_longconn_service.py +++ b/src/integrations/feishu_longconn_service.py @@ -78,27 +78,39 @@ class FeishuLongConnService: content = message.content sender = event.sender - # 获取发送者ID和群信息(优先 open_id,user_id 可能为 None) - sender_open_id = getattr(sender.sender_id, 'open_id', '') or '' - sender_user_id = getattr(sender.sender_id, 'user_id', '') or '' - sender_id = sender_user_id or sender_open_id or 'unknown' + # 获取发送者ID和群信息 + sender_id_obj = sender.sender_id + # 调试:打印 sender 对象的所有属性 try: - tenant_key = sender.sender_id.tenant_key + sender_attrs = {k: getattr(sender_id_obj, k, None) for k in ['user_id', 'open_id', 'union_id'] if getattr(sender_id_obj, k, None)} + if not sender_attrs: + # 尝试 __dict__ 或 dir + sender_attrs = {k: v for k, v in vars(sender_id_obj).items() if v and not k.startswith('_')} if hasattr(sender_id_obj, '__dict__') else {} + logger.info(f"🔍 sender_id 属性: {sender_attrs}") + except Exception as e: + logger.warning(f"🔍 无法解析 sender_id 属性: {e}, type={type(sender_id_obj)}") + sender_attrs = {} + + sender_open_id = getattr(sender_id_obj, 'open_id', '') or '' + sender_user_id = getattr(sender_id_obj, 'user_id', '') or '' + sender_union_id = getattr(sender_id_obj, 'union_id', '') or '' + sender_id = sender_open_id or sender_user_id or sender_union_id or 'unknown' + sender_type = getattr(sender, 'sender_type', 'user') + try: + tenant_key = sender_id_obj.tenant_key except: tenant_key = "unknown" - # 获取发送者姓名(用 open_id 查询,不需要 contact 权限) - sender_name = sender_id - try: - from src.integrations.feishu_service import FeishuService - fs = FeishuService() - 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 = fs.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"获取发送者信息失败: {e}") + # 获取发送者姓名 + sender_name = f"用户_{sender_id[-8:]}" if len(sender_id) > 8 else sender_id + if sender_open_id: + try: + from src.integrations.feishu_service import FeishuService + fs = FeishuService() + user_info = fs.get_user_info(sender_open_id, id_type='open_id') + sender_name = user_info.get('name') or user_info.get('en_name') or sender_name + except Exception as e: + logger.debug(f"获取发送者姓名失败: {e}") # 详细日志记录 chat_type_desc = '群聊(group)' if chat_type == 'group' else '私聊(p2p)' if chat_type == 'p2p' else chat_type @@ -145,11 +157,7 @@ class FeishuLongConnService: logger.info(f"✅ 清理后内容: {text_content}") - # 获取发送者ID - sender_id = sender.sender_id.user_id - # 构造会话用户ID(群聊隔离) - # 格式: feishu_群聊ID_用户ID session_user_id = f"feishu_{chat_id}_{sender_id}" logger.info(f"🔑 会话标识: {session_user_id}")