fix: transfer on file handoff messages

This commit is contained in:
2026-03-15 15:54:33 +08:00
parent d191ad8eac
commit 311124bc9b

View File

@@ -99,6 +99,20 @@ _PAYMENT_LINK_REQUEST_KEYWORDS = (
"给我链接", "给我链接",
) )
_FILE_HANDOFF_TRANSFER_KEYWORDS = (
"发送文件了看到了吗",
"发文件了看到了吗",
"文件发了看到了吗",
"文件收到了吗",
"文件收到没",
"文件看到了吗",
"我把文件发过去了",
"文件发过去了",
"给你发文件了",
"源文件发过去了",
"文件发你了",
)
_DESIGNER_SCHEDULE_QUESTION_KEYWORDS = ( _DESIGNER_SCHEDULE_QUESTION_KEYWORDS = (
"几点上班", "几点上班",
"什么时候上班", "什么时候上班",
@@ -273,6 +287,19 @@ def _requests_payment_link(current_text: str, history: Optional[List[dict]] = No
return ("付款" in text or "支付" in text or "拍单" in text or "下单" in text) and "链接" in text return ("付款" in text or "支付" in text or "拍单" in text or "下单" in text) and "链接" in text
def _requests_file_handoff_transfer(current_text: str, history: Optional[List[dict]] = None) -> bool:
text = _normalize_text(current_text)
if not text:
return False
if any(keyword in text for keyword in _FILE_HANDOFF_TRANSFER_KEYWORDS):
return True
has_file_signal = "文件" in text or "源文件" in text
has_delivery_signal = any(token in text for token in ("发了", "发送了", "发过去", "发你", "给你发"))
has_receipt_signal = any(token in text for token in ("看到了吗", "收到了吗", "收到没", "看见了吗", "收到吗"))
return has_file_signal and (has_delivery_signal or has_receipt_signal)
def _asks_designer_schedule(current_text: str, history: Optional[List[dict]] = None) -> bool: def _asks_designer_schedule(current_text: str, history: Optional[List[dict]] = None) -> bool:
text = _normalize_text(current_text) text = _normalize_text(current_text)
if not text: if not text:
@@ -341,10 +368,11 @@ class CustomerServiceBrain:
"6. **付款链接特判**:客户明确说'发付款链接''支付链接''拍单链接''下单链接'时,视为强成交信号,必须立即调用转人工工具;严禁只回复'直接下单'\n" "6. **付款链接特判**:客户明确说'发付款链接''支付链接''拍单链接''下单链接'时,视为强成交信号,必须立即调用转人工工具;严禁只回复'直接下单'\n"
"7. **设计师上班时间特判**:客户问'几点上班''什么时候上班''设计师在吗''什么时候在线'时,默认是在问设计师。不要按闲聊处理,也不要回复'我只处理业务'\n" "7. **设计师上班时间特判**:客户问'几点上班''什么时候上班''设计师在吗''什么时候在线'时,默认是在问设计师。不要按闲聊处理,也不要回复'我只处理业务'\n"
" 设计师固定是早上9点上班12点下班。应结合当前时间自然回答不要机械复读。\n" " 设计师固定是早上9点上班12点下班。应结合当前时间自然回答不要机械复读。\n"
"8. **转接时机(严格两步)**:除付款链接特判外,必须同时满足【有图】+【客户明确或可直接判断的需求】才能转接。\n" "8. **转接时机(严格两步)**:除付款链接特判、文件交接特判外,必须同时满足【有图】+【客户明确或可直接判断的需求】才能转接。\n"
" 客户只发了图但没说需求 → 先问'亲亲这张是找原图还是修复哈?'\n" " 客户只发了图但没说需求 → 先问'亲亲这张是找原图还是修复哈?'\n"
" 客户说了'有吗''能找吗''找图''找原图''有大图吗' → 直接按【找原图】意图处理,不要重复追问。\n" " 客户说了'有吗''能找吗''找图''找原图''有大图吗' → 直接按【找原图】意图处理,不要重复追问。\n"
" 客户说了'修复''高清''清晰点''放大清晰' → 直接按【高清修复】意图处理,不要重复追问。\n" " 客户说了'修复''高清''清晰点''放大清晰' → 直接按【高清修复】意图处理,不要重复追问。\n"
" 客户说'文件发过去了''发送文件了看到了吗''源文件发你了'这类文件交接话术 → 视为设计师成品/文件交接场景,必须立即调用转人工工具,不要再问客户发图或问需求。\n"
"9. **下线安抚**只有工具返回ERROR时才能提设计师不在。根据错误码区分\n" "9. **下线安抚**只有工具返回ERROR时才能提设计师不在。根据错误码区分\n"
" - ERROR_DESIGNER_NOT_STARTED → 说'还没上班,记下了上班马上处理'(严禁说下班)\n" " - ERROR_DESIGNER_NOT_STARTED → 说'还没上班,记下了上班马上处理'(严禁说下班)\n"
" - ERROR_DESIGNER_OFFLINE → 说'下班了,需求记下明天回'\n" " - ERROR_DESIGNER_OFFLINE → 说'下班了,需求记下明天回'\n"
@@ -395,6 +423,14 @@ class CustomerServiceBrain:
"不要只回复'直接下单''平台拍单',必须立即调用转人工工具转接设计师跟进付款。】\n" "不要只回复'直接下单''平台拍单',必须立即调用转人工工具转接设计师跟进付款。】\n"
f"{user_content}" f"{user_content}"
) )
elif _requests_file_handoff_transfer(user_content, history):
logger.info(f"[Brain] 已识别为文件交接转接意图: user={msg.user_id}")
user_content = (
"【系统通知:客户现在是在说文件已经发过去了、让你确认有没有看到。"
"这通常代表设计师已经做完或正在交接成品文件。"
"不要让客户重发图,不要继续问需求,必须立即调用转人工工具转接设计师跟进文件交接。】\n"
f"{user_content}"
)
elif _asks_designer_schedule(user_content, history): elif _asks_designer_schedule(user_content, history):
now_dt = datetime.now() now_dt = datetime.now()
user_content = ( user_content = (