| | |
| | | # 异常情况下返回原始content |
| | | 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]]: |
| | | """ |
| | | 解析AI回复中的@字符,提取客服名称 |
| | | |
| | |
| | | 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}") |
| | | |
| | |
| | | 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) |
| | |
| | | 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): |
| | |
| | | success = False |
| | | if ai_answer: |
| | | # 解析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次 |
| | |
| | | ) |
| | | 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: |