From f28ac0166536a2a4b68cac685a41ea667f60f7e9 Mon Sep 17 00:00:00 2001
From: yj <2077506045@qq.com>
Date: 星期三, 03 九月 2025 14:43:03 +0800
Subject: [PATCH] 兼容企业微信

---
 app/services/message_processor.py |   46 ++++++++++++++++++++++++++++++----------------
 1 files changed, 30 insertions(+), 16 deletions(-)

diff --git a/app/services/message_processor.py b/app/services/message_processor.py
index fecc840..8a79a72 100644
--- a/app/services/message_processor.py
+++ b/app/services/message_processor.py
@@ -94,7 +94,7 @@
             # 寮傚父鎯呭喌涓嬭繑鍥炲師濮媍ontent
             return callback_data.get("data", {}).get("content", "")
 
-    def parse_at_mentions(self, ai_answer: str) -> Tuple[str, List[str]]:
+    def parse_at_mentions(self, ai_answer: str, from_user: str) -> Tuple[str, List[str]]:
         """
         瑙f瀽AI鍥炲涓殑@瀛楃锛屾彁鍙栧鏈嶅悕绉�
 
@@ -130,10 +130,17 @@
                             db.query(Contact).filter(Contact.nick_name == name).first()
                         )
                         if contact:
-                            at_wc_ids.append(contact.wc_id)
-                            logger.info(
-                                f"鎵惧埌瀹㈡湇鑱旂郴浜�: name={name}, wc_id={contact.wc_id}"
-                            )
+                            # 濡傛灉from_user鍖呭惈@openim琛ㄧず鏄紒涓氬井淇★紝浣跨敤work_wc_id
+                            if "@openim" in from_user:
+                                at_wc_ids.append(contact.work_wc_id)
+                                logger.info(
+                                    f"鎵惧埌瀹㈡湇鑱旂郴浜�-寰俊: name={name}, wc_id={contact.work_wc_id}"
+                                )
+                            else:
+                                at_wc_ids.append(contact.wc_id)
+                                logger.info(
+                                    f"鎵惧埌瀹㈡湇鑱旂郴浜�-浼佷笟寰俊: name={name}, wc_id={contact.wc_id}"
+                                )
                         else:
                             logger.warning(f"鏈壘鍒板鏈嶈仈绯讳汉: name={name}")
 
@@ -371,12 +378,14 @@
                     return False
 
                 # 3.2 鑾峰彇缇ょ粍涓彂瑷�娆℃暟鏈�澶氱殑鐢ㄦ埛鏄电О
-                most_active_nickname = (
-                    group_stats_service.get_most_active_user_nickname(from_group)
-                )
-                logger.info(
-                    f"缇ょ粍鏈�娲昏穬鐢ㄦ埛鏄电О: group={from_group}, nickname={most_active_nickname}"
-                )
+                # most_active_nickname = (
+                #     group_stats_service.get_most_active_user_nickname(from_group)
+                # )
+                # logger.info(
+                #     f"缇ょ粍鏈�娲昏穬鐢ㄦ埛鏄电О: group={from_group}, nickname={most_active_nickname}"
+                # )
+                # 鑾峰彇榛樿瀹㈡湇鍚嶇О
+                nickname = settings.customer_service_default_name
 
                 # 3.3 鑾峰彇鐢ㄦ埛鍦ㄥ綋鍓嶇兢缁勭殑conversation_id
                 conversation_id = redis_queue.get_conversation_id(from_user, from_group)
@@ -386,7 +395,7 @@
                     query=content,
                     user=from_user,
                     conversation_id=conversation_id,
-                    nick_name=most_active_nickname,
+                    nick_name=nickname,
                 )
 
                 if silence_service.is_silence_active(from_group):
@@ -475,7 +484,7 @@
                 success = False
                 if ai_answer:
                     # 瑙f瀽AI鍥炲涓殑@瀛楃
-                    processed_answer, at_wc_ids = self.parse_at_mentions(ai_answer)
+                    processed_answer, at_wc_ids = self.parse_at_mentions(ai_answer, from_user)
                     # 鍒ゆ柇AI鍥炲鏄惁鏄粨鏉熷瓧绗︿覆
                     is_end_str = self.is_end_str(ai_answer)
                     # 鍙戦�佹秷鎭紝鏈�澶氶噸璇�3娆�
@@ -495,10 +504,15 @@
                                     )
                                 else:
                                     # 濡傛灉璇ョ兢缁勯潤榛樻ā寮忔湭婵�娲伙紝婵�娲婚潤榛樻ā寮�
-                                    silence_service.activate_silence_mode(from_group)
-                                    logger.info(
+                                    flag = silence_service.activate_silence_mode(from_group)
+                                    if flag:
+                                        logger.info(
                                         f"AI鍥炲@瀹㈡湇锛岀兢缁勯潤榛樻ā寮忓凡婵�娲�: fromUser={from_user}, fromGroup={from_group}"
-                                    )
+                                        )
+                                    else:
+                                        logger.info(
+                                        f"AI鍥炲@瀹㈡湇锛屾湭婵�娲婚潤榛樻ā寮�: fromUser={from_user}, fromGroup={from_group}"
+                                        )
                                 success = True
                                 break
                         else:

--
Gitblit v1.9.1