From 49c0e5559cb40959294e57a3d586cd117d004c6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Tue, 29 Sep 2026 14:15:12 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E4=BB=8E=E6=B1=BD=E8=BD=A6AI=E5=AE=A2?= =?UTF-8?q?=E6=9C=8D=E9=A1=B9=E7=9B=AE=E6=8B=B7=E8=B4=9D=E9=AA=A8=E6=9E=B6?= =?UTF-8?q?=E5=B9=B6=E6=B8=85=E7=90=86(blog=E9=A1=B5/redis)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Code --- .dockerignore | 8 + .env.example | 27 + .gitignore | 8 + Dockerfile | 17 + app/__init__.py | 0 app/api/__init__.py | 0 app/api/routes/__init__.py | 0 app/api/routes/admin.py | 218 +++ app/api/routes/chat.py | 102 + app/api/routes/chat_rest.py | 142 ++ app/config.py | 54 + app/main.py | 75 + app/models/__init__.py | 0 app/models/database.py | 161 ++ app/models/schemas.py | 57 + app/prompts/company_facts.md | 29 + app/prompts/evaluator.md | 44 + app/prompts/extractor.md | 19 + app/prompts/system.md | 179 ++ app/providers/__init__.py | 0 app/providers/base.py | 24 + app/providers/glm.py | 94 + app/services/__init__.py | 0 app/services/ai_service.py | 98 + app/services/boundary_filter.py | 199 ++ app/services/contact_pipeline.py | 264 +++ app/services/conversation.py | 645 +++++++ app/services/email_service.py | 129 ++ app/services/ip_service.py | 28 + app/services/lead_push_service.py | 298 +++ app/services/rate_limit.py | 39 + deploy.sh | 40 + docker-compose.yml | 13 + ...-18-contact-driven-lead-email-changelog.md | 141 ++ docs/2026-08-19-ai-role-boundary-changelog.md | 126 ++ ...026-08-19-system-audit-and-optimization.md | 155 ++ ...08-20-company-contact-handoff-changelog.md | 87 + docs/2026-08-31-dynamic-theme-changelog.md | 17 + ...6-09-08-stop-reasking-contact-changelog.md | 95 + ...-09-10-company-knowledge-base-changelog.md | 118 ++ docs/2026-09-28-lead-push-changelog.md | 38 + docs/AI_INQUIRY_PUSH_API.md | 128 ++ .../2026-04-23-auto-popup-invite-card.md | 627 +++++++ .../2026-06-18-dynamic-contact-config.md | 292 +++ ...23-auto-invite-toggle-and-mobile-button.md | 365 ++++ .../superpowers/plans/2026-08-17-baseline.txt | 7 + .../2026-08-17-contact-driven-lead-email.md | 1535 +++++++++++++++ .../plans/2026-08-18-ai-role-boundary.md | 526 ++++++ .../plans/2026-08-18-breach-baseline.txt | 4 + .../2026-08-20-company-contact-handoff.md | 234 +++ .../plans/2026-08-31-dynamic-theme-color.md | 770 ++++++++ .../plans/2026-09-08-stop-reasking-contact.md | 954 ++++++++++ .../2026-09-10-company-knowledge-base.md | 419 +++++ .../2026-09-28-lead-push-to-uniservice.md | 1668 +++++++++++++++++ ...-19-used-car-ai-customer-service-design.md | 293 +++ .../2026-04-20-prompt-refinement-design.md | 40 + .../specs/2026-04-22-chat-widget-redesign.md | 458 +++++ ...026-04-23-auto-popup-invite-card-design.md | 248 +++ ...026-06-18-dynamic-contact-config-design.md | 160 ++ ...-invite-toggle-and-mobile-button-design.md | 215 +++ .../2026-08-31-dynamic-theme-color-design.md | 249 +++ ...26-09-28-lead-push-to-uniservice-design.md | 237 +++ docs/test-checklist.md | 324 ++++ openresty.conf | 127 ++ pytest.ini | 2 + requirements-dev.txt | 3 + requirements.txt | 13 + scripts/baseline_stats.py | 74 + scripts/breach_rate.py | 41 + scripts/mock_uniservice.py | 39 + static/admin.html | 489 +++++ static/chat.html | 82 + static/css/style.css | 468 +++++ static/js/chat.js | 231 +++ static/js/theme.js | 103 + static/kefu-small.png | Bin 0 -> 30204 bytes static/kefu.png | Bin 0 -> 682482 bytes static/widget-test.html | 183 ++ static/widget.js | 687 +++++++ tests/__init__.py | 0 tests/conftest.py | 120 ++ tests/test_admin_push_logs.py | 149 ++ tests/test_boundary_filter.py | 225 +++ tests/test_chat_rest_message.py | 58 + tests/test_chat_rest_session_history.py | 42 + tests/test_company_facts.py | 70 + tests/test_contact_pipeline.py | 344 ++++ tests/test_context_seeding.py | 45 + tests/test_email_rendering.py | 66 + tests/test_enum_app.py | 6 + tests/test_invite_static.py | 69 + tests/test_lead_email_trigger.py | 865 +++++++++ tests/test_lead_push_service.py | 503 +++++ tests/test_lead_push_wiring.py | 291 +++ tests/test_rate_limit.py | 21 + tests/test_smoke.py | 2 + tests/test_theme_static.py | 172 ++ 97 files changed, 19131 insertions(+) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 app/__init__.py create mode 100644 app/api/__init__.py create mode 100644 app/api/routes/__init__.py create mode 100644 app/api/routes/admin.py create mode 100644 app/api/routes/chat.py create mode 100644 app/api/routes/chat_rest.py create mode 100644 app/config.py create mode 100644 app/main.py create mode 100644 app/models/__init__.py create mode 100644 app/models/database.py create mode 100644 app/models/schemas.py create mode 100644 app/prompts/company_facts.md create mode 100644 app/prompts/evaluator.md create mode 100644 app/prompts/extractor.md create mode 100644 app/prompts/system.md create mode 100644 app/providers/__init__.py create mode 100644 app/providers/base.py create mode 100644 app/providers/glm.py create mode 100644 app/services/__init__.py create mode 100644 app/services/ai_service.py create mode 100644 app/services/boundary_filter.py create mode 100644 app/services/contact_pipeline.py create mode 100644 app/services/conversation.py create mode 100644 app/services/email_service.py create mode 100644 app/services/ip_service.py create mode 100644 app/services/lead_push_service.py create mode 100644 app/services/rate_limit.py create mode 100644 deploy.sh create mode 100644 docker-compose.yml create mode 100644 docs/2026-08-18-contact-driven-lead-email-changelog.md create mode 100644 docs/2026-08-19-ai-role-boundary-changelog.md create mode 100644 docs/2026-08-19-system-audit-and-optimization.md create mode 100644 docs/2026-08-20-company-contact-handoff-changelog.md create mode 100644 docs/2026-08-31-dynamic-theme-changelog.md create mode 100644 docs/2026-09-08-stop-reasking-contact-changelog.md create mode 100644 docs/2026-09-10-company-knowledge-base-changelog.md create mode 100644 docs/2026-09-28-lead-push-changelog.md create mode 100644 docs/AI_INQUIRY_PUSH_API.md create mode 100644 docs/superpowers/plans/2026-04-23-auto-popup-invite-card.md create mode 100644 docs/superpowers/plans/2026-06-18-dynamic-contact-config.md create mode 100644 docs/superpowers/plans/2026-06-23-auto-invite-toggle-and-mobile-button.md create mode 100644 docs/superpowers/plans/2026-08-17-baseline.txt create mode 100644 docs/superpowers/plans/2026-08-17-contact-driven-lead-email.md create mode 100644 docs/superpowers/plans/2026-08-18-ai-role-boundary.md create mode 100644 docs/superpowers/plans/2026-08-18-breach-baseline.txt create mode 100644 docs/superpowers/plans/2026-08-20-company-contact-handoff.md create mode 100644 docs/superpowers/plans/2026-08-31-dynamic-theme-color.md create mode 100644 docs/superpowers/plans/2026-09-08-stop-reasking-contact.md create mode 100644 docs/superpowers/plans/2026-09-10-company-knowledge-base.md create mode 100644 docs/superpowers/plans/2026-09-28-lead-push-to-uniservice.md create mode 100644 docs/superpowers/specs/2026-04-19-used-car-ai-customer-service-design.md create mode 100644 docs/superpowers/specs/2026-04-20-prompt-refinement-design.md create mode 100644 docs/superpowers/specs/2026-04-22-chat-widget-redesign.md create mode 100644 docs/superpowers/specs/2026-04-23-auto-popup-invite-card-design.md create mode 100644 docs/superpowers/specs/2026-06-18-dynamic-contact-config-design.md create mode 100644 docs/superpowers/specs/2026-06-23-auto-invite-toggle-and-mobile-button-design.md create mode 100644 docs/superpowers/specs/2026-08-31-dynamic-theme-color-design.md create mode 100644 docs/superpowers/specs/2026-09-28-lead-push-to-uniservice-design.md create mode 100644 docs/test-checklist.md create mode 100644 openresty.conf create mode 100644 pytest.ini create mode 100644 requirements-dev.txt create mode 100644 requirements.txt create mode 100644 scripts/baseline_stats.py create mode 100644 scripts/breach_rate.py create mode 100644 scripts/mock_uniservice.py create mode 100644 static/admin.html create mode 100644 static/chat.html create mode 100644 static/css/style.css create mode 100644 static/js/chat.js create mode 100644 static/js/theme.js create mode 100644 static/kefu-small.png create mode 100644 static/kefu.png create mode 100644 static/widget-test.html create mode 100644 static/widget.js create mode 100644 tests/__init__.py create mode 100644 tests/conftest.py create mode 100644 tests/test_admin_push_logs.py create mode 100644 tests/test_boundary_filter.py create mode 100644 tests/test_chat_rest_message.py create mode 100644 tests/test_chat_rest_session_history.py create mode 100644 tests/test_company_facts.py create mode 100644 tests/test_contact_pipeline.py create mode 100644 tests/test_context_seeding.py create mode 100644 tests/test_email_rendering.py create mode 100644 tests/test_enum_app.py create mode 100644 tests/test_invite_static.py create mode 100644 tests/test_lead_email_trigger.py create mode 100644 tests/test_lead_push_service.py create mode 100644 tests/test_lead_push_wiring.py create mode 100644 tests/test_rate_limit.py create mode 100644 tests/test_smoke.py create mode 100644 tests/test_theme_static.py diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..f06722a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +venv/ +__pycache__/ +*.pyc +.env +data/ +.superpowers/ +.git/ +tests/ diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..5884bd3 --- /dev/null +++ b/.env.example @@ -0,0 +1,27 @@ +# AI模型配置 +AI_PROVIDER=glm +ZHIPU_API_KEY=your_zhipu_api_key_here +AI_MODEL=glm-4-flash +# 请求地址: 留空=用SDK默认(标准套餐); coding套餐用 https://open.bigmodel.cn/api/coding/paas/v4 +ZHIPU_BASE_URL=https://open.bigmodel.cn/api/coding/paas/v4 + +# 数据库 +DATABASE_URL=sqlite+aiosqlite:///./data/cc_ai_kefu.db + +# 邮件推送 +SMTP_HOST=smtp.example.com +SMTP_PORT=465 +SMTP_USER=your_email@example.com +SMTP_PASS=your_email_password +NOTIFY_EMAIL=notify@example.com + +# 询盘推送 UniService +PUSH_ENABLED=false +PUSH_API_URL=https://uniservice.server.hnxinyouhe.com/open/v1/inquiry/push +PUSH_API_KEY=your_uniservice_api_key_here +PUSH_EXTERNAL_KEY_PREFIX=ai-kefu + +# 应用配置 +APP_HOST=0.0.0.0 +APP_PORT=8016 +APP_DEBUG=true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d348235 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +venv/ +__pycache__/ +*.pyc +*.pyo +.env +data/ +.superpowers/ +*.db diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..50b8153 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM python:3.13-slim + +WORKDIR /app + +# Install dependencies first (layer caching) +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# Copy application code +COPY . . + +# Create data directory with correct permissions +RUN mkdir -p /app/data && chmod 777 /app/data + +EXPOSE 8000 + +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/__init__.py b/app/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/routes/__init__.py b/app/api/routes/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/routes/admin.py b/app/api/routes/admin.py new file mode 100644 index 0000000..cf20457 --- /dev/null +++ b/app/api/routes/admin.py @@ -0,0 +1,218 @@ +import hashlib +import secrets +from datetime import datetime, timezone + +from fastapi import APIRouter, Cookie, Request, Response +from sqlalchemy import delete, select, func +from sqlalchemy.orm import load_only +from sqlalchemy.ext.asyncio import AsyncSession + +from app.config import settings +from app.main import async_session +from app.models.database import ( + Conversation, ConversationStatus, Message, CustomerProfile, Evaluation, IntentLevel, + LeadPushLog, +) +from app.services.ip_service import resolve_country + +router = APIRouter(prefix="/api/admin") + +_sessions: dict[str, float] = {} +SESSION_TTL = 86400 + + +def _check_auth(session_token: str | None) -> bool: + if not session_token or session_token not in _sessions: + return False + if _sessions[session_token] < datetime.now(timezone.utc).timestamp() - SESSION_TTL: + _sessions.pop(session_token, None) + return False + return True + + +@router.post("/login") +async def login(request: Request, response: Response): + body = await request.json() + password = body.get("password", "") + if password != settings.ADMIN_PASSWORD: + return {"ok": False, "error": "密码错误"} + token = secrets.token_hex(16) + _sessions[token] = datetime.now(timezone.utc).timestamp() + response.set_cookie("admin_token", token, httponly=True, max_age=SESSION_TTL) + return {"ok": True} + + +@router.post("/logout") +async def logout(response: Response, admin_token: str | None = Cookie(None)): + if admin_token and admin_token in _sessions: + _sessions.pop(admin_token) + response.delete_cookie("admin_token") + return {"ok": True} + + +@router.get("/conversations") +async def list_conversations( + admin_token: str | None = Cookie(None), + intent: str | None = None, + page: int = 1, + size: int = 20, +): + if not _check_auth(admin_token): + return {"error": "unauthorized"} + + async with async_session() as db: + # Only show conversations that have at least 1 message + msg_subq = ( + select(Message.conversation_id, func.count().label("mc"), + func.min(Message.content).filter(Message.role == "user").label("first_user_msg")) + .group_by(Message.conversation_id) + .subquery() + ) + + query = ( + select(Conversation, msg_subq.c.mc, msg_subq.c.first_user_msg) + .join(msg_subq, msg_subq.c.conversation_id == Conversation.id) + .order_by(Conversation.created_at.desc()) + ) + + if intent and intent in ("interested", "not_interested", "pending"): + query = query.join(Evaluation, Evaluation.conversation_id == Conversation.id, isouter=True) + query = query.where(Evaluation.intent_level == intent) + + total_q = select(func.count()).select_from(msg_subq) + total_result = await db.execute(total_q) + total = total_result.scalar() or 0 + + result = await db.execute(query.offset((page - 1) * size).limit(size)) + rows = result.all() + + items = [] + for conv, msg_count, first_msg in rows: + client_info = conv.client_info or {} + ip = client_info.get("ip", "") + country = resolve_country(ip) + + eval_result = await db.execute( + select(Evaluation).where(Evaluation.conversation_id == conv.id) + ) + evaluation = eval_result.scalar_one_or_none() + + preview = (first_msg or "")[:50] + + items.append({ + "id": conv.id, + "session_id": conv.session_id, + "status": conv.status.value, + "source": conv.source.value, + "ip": ip, + "device": client_info.get("user_agent", ""), + "country": country, + "intent_level": evaluation.intent_level.value if evaluation else None, + "reasoning": evaluation.reasoning if evaluation else None, + "contact_info": evaluation.contact_info if evaluation else None, + "email_sent": evaluation.email_sent if evaluation else False, + "message_count": msg_count, + "preview": preview, + "created_at": conv.created_at.isoformat() if conv.created_at else None, + }) + + return {"total": total, "page": page, "size": size, "items": items} + + +@router.get("/push-logs") +async def list_push_logs( + admin_token: str | None = Cookie(None), + status: str | None = None, + conversation_id: str | None = None, + page: int = 1, + size: int = 20, +): + """询盘推送日志(设计 2026-09-28-lead-push-to-uniservice §9)。 + + 列表不返回 request_payload(含完整对话,体积大)——排障看库。 + """ + if not _check_auth(admin_token): + return {"error": "unauthorized"} + + async with async_session() as db: + # load_only: 列表不含 request_payload(含完整对话,体积大)—— + # 直接不加载该列,省一页 ~20 条大 JSON 的 I/O 与反序列化 + query = select(LeadPushLog).options(load_only( + LeadPushLog.id, LeadPushLog.evaluation_id, + LeadPushLog.conversation_id, LeadPushLog.push_type, + LeadPushLog.status, LeadPushLog.attempts, LeadPushLog.outcome, + LeadPushLog.response_status, LeadPushLog.error_message, + LeadPushLog.created_at, LeadPushLog.updated_at, + )).order_by(LeadPushLog.created_at.desc()) + if status in ("pending", "success", "failed", "skipped"): + query = query.where(LeadPushLog.status == status) + if conversation_id: + query = query.where(LeadPushLog.conversation_id == conversation_id) + + total_result = await db.execute( + select(func.count()).select_from(query.subquery())) + total = total_result.scalar() or 0 + + result = await db.execute(query.offset((page - 1) * size).limit(size)) + logs = result.scalars().all() + + items = [{ + "id": log.id, + "evaluation_id": log.evaluation_id, + "conversation_id": log.conversation_id, + "push_type": log.push_type, + "status": log.status, + "attempts": log.attempts, + "outcome": log.outcome, + "response_status": log.response_status, + "error_message": log.error_message, + "created_at": log.created_at.isoformat() if log.created_at else None, + "updated_at": log.updated_at.isoformat() if log.updated_at else None, + } for log in logs] + + return {"total": total, "page": page, "size": size, "items": items} + + +@router.get("/conversations/{conv_id}/messages") +async def get_messages(conv_id: str, admin_token: str | None = Cookie(None)): + if not _check_auth(admin_token): + return {"error": "unauthorized"} + + async with async_session() as db: + result = await db.execute( + select(Message) + .where(Message.conversation_id == conv_id, Message.content != "") + .order_by(Message.created_at) + ) + messages = result.scalars().all() + + profile_result = await db.execute( + select(CustomerProfile).where(CustomerProfile.conversation_id == conv_id) + ) + profile = profile_result.scalar_one_or_none() + + return { + "messages": [ + { + "role": m.role.value, + "content": m.content, + "time": m.created_at.isoformat() if m.created_at else None, + } + for m in messages if m.content and m.content.strip() + ], + "profile": profile.raw_info if profile else {}, + } + + +@router.delete("/conversations/{conv_id}") +async def delete_conversation(conv_id: str, admin_token: str | None = Cookie(None)): + if not _check_auth(admin_token): + return {"error": "unauthorized"} + + async with async_session() as db: + await db.execute(delete(Evaluation).where(Evaluation.conversation_id == conv_id)) + await db.execute(delete(CustomerProfile).where(CustomerProfile.conversation_id == conv_id)) + await db.execute(delete(Message).where(Message.conversation_id == conv_id)) + await db.execute(delete(Conversation).where(Conversation.id == conv_id)) + await db.commit() + return {"ok": True} diff --git a/app/api/routes/chat.py b/app/api/routes/chat.py new file mode 100644 index 0000000..68e3f5b --- /dev/null +++ b/app/api/routes/chat.py @@ -0,0 +1,102 @@ +import json +import logging + +from fastapi import APIRouter, WebSocket, WebSocketDisconnect + +from app.main import async_session +from app.models.database import ConversationSource, ConversationStatus +from app.services.conversation import ConversationManager + +logger = logging.getLogger(__name__) +router = APIRouter() + + +@router.websocket("/ws/chat") +async def ws_chat(websocket: WebSocket): + await websocket.accept() + session_id = None + + try: + async with async_session() as db: + manager = ConversationManager(db) + + # Collect client info + client_ip = websocket.client.host if websocket.client else "" + forwarded = websocket.headers.get("x-forwarded-for", "") + if forwarded: + client_ip = forwarded.split(",")[0].strip() + user_agent = websocket.headers.get("user-agent", "") + client_info = {"ip": client_ip, "user_agent": user_agent} + + # First message: init or resume + init_data = await websocket.receive_text() + init_msg = json.loads(init_data) + + if "session_id" in init_msg: + conv = await manager.get_by_session(init_msg["session_id"]) + if conv and conv.status == ConversationStatus.active: + session_id = conv.session_id + await websocket.send_text(json.dumps({ + "type": "resumed", + "session_id": session_id, + })) + else: + session_id = None + + # page_token: reuse active conversation from same page session + if not session_id and "page_token" in init_msg and init_msg["page_token"]: + conv = await manager.get_by_page_token(init_msg["page_token"]) + if conv: + session_id = conv.session_id + await websocket.send_text(json.dumps({ + "type": "resumed", + "session_id": session_id, + })) + + if not session_id: + source = ConversationSource( + init_msg.get("source", "standalone") + ) + merged_info = {**client_info, **(init_msg.get("client_info") or {})} + conv = await manager.create_conversation( + source=source, + client_info=merged_info, + page_token=init_msg.get("page_token"), + ) + session_id = conv.session_id + await websocket.send_text(json.dumps({ + "type": "init", + "session_id": session_id, + })) + + # Chat loop + while True: + data = await websocket.receive_text() + msg = json.loads(data) + content = msg.get("content", "").strip() + if not content: + continue + + ended = False + + async for event in manager.stream_process_message(session_id, content): + if event["type"] == "error": + await websocket.send_text(json.dumps({ + "type": "error", + "message": event["message"], + })) + break + + await websocket.send_text(json.dumps(event, ensure_ascii=False)) + + if event["type"] == "evaluated" and event.get("ended"): + ended = True + break + + if ended: + break + + except WebSocketDisconnect: + logger.info("Client disconnected: %s", session_id) + except Exception: + logger.exception("WebSocket error for session %s", session_id) diff --git a/app/api/routes/chat_rest.py b/app/api/routes/chat_rest.py new file mode 100644 index 0000000..221700d --- /dev/null +++ b/app/api/routes/chat_rest.py @@ -0,0 +1,142 @@ +"""REST shell for the HESU app (non-streaming, JSON-in/JSON-out). + +These routes wrap `ConversationManager`, shared with the existing `/ws/chat` +widget path. The app uses HTTP because it lacks a WebSocket client and is fine +with a 3-8s "AI is typing" affordance covering the round trip. + +Red lines (see spec): +- WS path (`app/api/routes/chat.py`) shares `ConversationManager` with these + routes; both paths stay drift-free. +- `context` seeding is conditional + whitelist (handled in + `ConversationManager.create_conversation`). +- The message route consumes `stream_process_message`; lead email is + triggered inside `ConversationManager` when contact info is detected + (contact-driven-lead-email plan). +""" +from fastapi import APIRouter, HTTPException, Request +from pydantic import BaseModel +from sqlalchemy import select + +from app.main import async_session +from app.models.database import ConversationSource, ConversationStatus, Message +from app.services.conversation import ConversationManager +from app.services.rate_limit import check as rate_check + +router = APIRouter(prefix="/api/chat", tags=["chat-rest"]) + + +class SessionRequest(BaseModel): + session_id: str | None = None + context: dict | None = None + client_info: dict | None = None + + +@router.post("/session") +async def chat_session(req: SessionRequest): + """Resume an active conversation by session_id, or create a new app one. + + `context` flows into `create_conversation` where it is whitelisted into + `raw_info` (only when non-None). `client_info` is stored for analytics only + (ip/ua/device-id/lang) and never fed to the AI prompt. + """ + async with async_session() as db: + manager = ConversationManager(db) + if req.session_id: + conv = await manager.get_by_session(req.session_id) + if conv and conv.status == ConversationStatus.active: + return { + "session_id": conv.session_id, + "is_new": False, + "ended": False, + } + conv = await manager.create_conversation( + source=ConversationSource.app, + client_info=req.client_info, + context=req.context, + ) + return { + "session_id": conv.session_id, + "is_new": True, + "ended": False, + } + + +@router.get("/{session_id}/messages") +async def chat_history(session_id: str): + """Public history endpoint for session replay. App-source only, to narrow + the read surface; an unknown or non-app session yields 404. + """ + async with async_session() as db: + manager = ConversationManager(db) + conv = await manager.get_by_session(session_id) + if not conv or conv.source != ConversationSource.app: + raise HTTPException(status_code=404, detail="session not found") + result = await db.execute( + select(Message) + .where(Message.conversation_id == conv.id) + .order_by(Message.created_at) + ) + msgs = result.scalars().all() + return [ + { + "role": m.role.value, + "content": m.content, + "created_at": m.created_at.isoformat(), + } + for m in msgs + ] + + +class MessageRequest(BaseModel): + session_id: str + content: str + + +@router.post("/message") +async def chat_message(req: MessageRequest, request: Request): + """Process one app turn: stream-collect the AI reply, then evaluate. + + 🔴 Consumes `stream_process_message` so the REST path shares one code + path with the WS widget and never drifts. Lead email is triggered inside + `ConversationManager` when contact info is detected + (contact-driven-lead-email plan) — this route carries no email logic. + + A light in-memory rate limit (per ip + X-Device-Id, 30/h) guards GLM + spend; only this route is throttled. + """ + ip = request.client.host if request.client else "" + dev = request.headers.get("X-Device-Id", "") + if not rate_check(ip, dev): + raise HTTPException(status_code=429, detail="rate limit exceeded") + + async with async_session() as db: + manager = ConversationManager(db) + conv = await manager.get_by_session(req.session_id) + if not conv: + raise HTTPException(status_code=404, detail="session not found") + if conv.status != ConversationStatus.active: + raise HTTPException(status_code=409, detail="conversation ended") + + reply_parts: list[str] = [] + ended = False + intent_level = "pending" + async for event in manager.stream_process_message( + req.session_id, req.content + ): + t = event.get("type") + if t == "stream_chunk": + reply_parts.append(event.get("content", "")) + elif t == "evaluated": + ended = bool(event.get("ended")) + intent_level = event.get("intent_level", "pending") + elif t == "error": + msg = event.get("message", "error") + raise HTTPException( + status_code=409 if "ended" in msg else 404, detail=msg + ) + + return { + "reply": "".join(reply_parts), + "ended": ended, + "intent_level": intent_level, + } diff --git a/app/config.py b/app/config.py new file mode 100644 index 0000000..041db6d --- /dev/null +++ b/app/config.py @@ -0,0 +1,54 @@ +from pydantic_settings import BaseSettings +from pathlib import Path + + +class Settings(BaseSettings): + APP_HOST: str = "0.0.0.0" + APP_PORT: int = 8000 + APP_DEBUG: bool = False + + AI_PROVIDER: str = "glm" + ZHIPU_API_KEY: str = "" + # 留空=用 SDK 默认地址(标准套餐 https://open.bigmodel.cn/api/paas/v4) + # coding 套餐填 https://open.bigmodel.cn/api/coding/paas/v4 + ZHIPU_BASE_URL: str = "" + AI_MODEL: str = "glm-4-flash" + + DATABASE_URL: str = "sqlite+aiosqlite:///./data/cc_ai_kefu.db" + + REDIS_URL: str = "redis://localhost:6379/0" + REDIS_PASSWORD: str = "" + SESSION_TTL: int = 86400 # 24 hours + + SMTP_HOST: str = "" + SMTP_PORT: int = 465 + SMTP_USER: str = "" + SMTP_PASS: str = "" + NOTIFY_EMAIL: str = "" + + # 询盘推送 UniService(docs/superpowers/specs/2026-09-28-lead-push-to-uniservice-design.md) + PUSH_ENABLED: bool = False + PUSH_API_URL: str = "https://uniservice.server.hnxinyouhe.com/open/v1/inquiry/push" + PUSH_API_KEY: str = "" + PUSH_EXTERNAL_KEY_PREFIX: str = "ai-kefu" + PUSH_TIMEOUT_SECONDS: float = 10.0 + PUSH_MAX_ATTEMPTS: int = 3 + PUSH_RETRY_BACKOFF_BASE: float = 1.0 # 尝试间隔 1s/2s(3 次尝试、2 次间隔) + + ADMIN_PASSWORD: str = "admin123" + + model_config = { + "env_file": ".env", + "env_file_encoding": "utf-8", + } + + +BASE_DIR = Path(__file__).resolve().parent.parent +DATA_DIR = BASE_DIR / "data" +STATIC_DIR = BASE_DIR / "static" + +settings = Settings() + + +def ensure_dirs(): + DATA_DIR.mkdir(exist_ok=True) diff --git a/app/main.py b/app/main.py new file mode 100644 index 0000000..1f76809 --- /dev/null +++ b/app/main.py @@ -0,0 +1,75 @@ +from contextlib import asynccontextmanager + +from fastapi import FastAPI +from fastapi.staticfiles import StaticFiles +from sqlalchemy import text +from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine + +from app.config import settings, ensure_dirs, STATIC_DIR +from app.models.database import Base + + +# 后台推送任务的独立连接写结果可能撞上 SMTP 窗口内持有的写锁,默认 5s +# 忙等上限低于 SMTP 最坏时长,抬到 30s;等待发生在 aiosqlite 工作线程,不阻塞事件循环 +engine = create_async_engine(settings.DATABASE_URL, echo=settings.APP_DEBUG, + connect_args={"timeout": 30}) +async_session = async_sessionmaker(engine, class_=AsyncSession, expire_on_commit=False) + + +async def _migrate(conn): + result = await conn.execute(text("PRAGMA table_info(conversations)")) + columns = {row[1] for row in result} + if "page_token" not in columns: + await conn.execute(text( + "ALTER TABLE conversations ADD COLUMN page_token VARCHAR(64)" + )) + + result = await conn.execute(text("PRAGMA table_info(evaluations)")) + columns = {row[1] for row in result} + if "correction_count" not in columns: + await conn.execute(text( + "ALTER TABLE evaluations ADD COLUMN correction_count INTEGER DEFAULT 0" + )) + + +@asynccontextmanager +async def lifespan(app: FastAPI): + ensure_dirs() + async with engine.begin() as conn: + await conn.run_sync(Base.metadata.create_all) + await _migrate(conn) + # 询盘推送(设计 8.2): 清扫崩溃遗留的 stale pending → failed + # 函数内导入: lead_push_service 顶部 from app.main import async_session, + # 顶层互相导入会循环 + from app.services.lead_push_service import sweep_stale_pending + await sweep_stale_pending() + yield + + +app = FastAPI(title="AI汽车客服", lifespan=lifespan) + +from app.api.routes.chat import router as chat_router +from app.api.routes.admin import router as admin_router +from app.api.routes.chat_rest import router as chat_rest_router +app.include_router(chat_router) +app.include_router(admin_router) +app.include_router(chat_rest_router) + +app.mount("/static", StaticFiles(directory=str(STATIC_DIR)), name="static") + + +@app.get("/") +async def index(): + from fastapi.responses import FileResponse + return FileResponse(str(STATIC_DIR / "chat.html")) + + +@app.get("/admin") +async def admin_page(): + from fastapi.responses import FileResponse + return FileResponse(str(STATIC_DIR / "admin.html")) + + +@app.get("/health") +async def health(): + return {"status": "ok"} diff --git a/app/models/__init__.py b/app/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/models/database.py b/app/models/database.py new file mode 100644 index 0000000..1ef4aa2 --- /dev/null +++ b/app/models/database.py @@ -0,0 +1,161 @@ +import enum +import uuid +from datetime import datetime, timezone + +from sqlalchemy import String, Text, Boolean, Integer, ForeignKey, JSON, Enum as SAEnum +from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship + + +class Base(DeclarativeBase): + pass + + +class ConversationStatus(str, enum.Enum): + active = "active" + completed = "completed" + abandoned = "abandoned" + + +class MessageRole(str, enum.Enum): + user = "user" + assistant = "assistant" + system = "system" + + +class ConversationSource(str, enum.Enum): + standalone = "standalone" + embedded = "embedded" + widget = "widget" + app = "app" + + +class IntentLevel(str, enum.Enum): + interested = "interested" + not_interested = "not_interested" + pending = "pending" + + +class Conversation(Base): + __tablename__ = "conversations" + + id: Mapped[str] = mapped_column( + String(36), primary_key=True, default=lambda: str(uuid.uuid4()) + ) + session_id: Mapped[str] = mapped_column(String(64), unique=True, index=True) + page_token: Mapped[str | None] = mapped_column(String(64), nullable=True, index=True) + status: Mapped[ConversationStatus] = mapped_column( + SAEnum(ConversationStatus), default=ConversationStatus.active + ) + source: Mapped[ConversationSource] = mapped_column( + SAEnum(ConversationSource), default=ConversationSource.standalone + ) + client_info: Mapped[dict | None] = mapped_column(JSON, nullable=True) + created_at: Mapped[datetime] = mapped_column( + default=lambda: datetime.now(timezone.utc) + ) + updated_at: Mapped[datetime] = mapped_column( + default=lambda: datetime.now(timezone.utc), + onupdate=lambda: datetime.now(timezone.utc), + ) + + messages: Mapped[list["Message"]] = relationship( + back_populates="conversation", order_by="Message.created_at" + ) + profile: Mapped["CustomerProfile | None"] = relationship( + back_populates="conversation", uselist=False + ) + evaluation: Mapped["Evaluation | None"] = relationship( + back_populates="conversation", uselist=False + ) + + +class Message(Base): + __tablename__ = "messages" + + id: Mapped[str] = mapped_column( + String(36), primary_key=True, default=lambda: str(uuid.uuid4()) + ) + conversation_id: Mapped[str] = mapped_column( + ForeignKey("conversations.id", ondelete="CASCADE") + ) + role: Mapped[MessageRole] = mapped_column(SAEnum(MessageRole)) + content: Mapped[str] = mapped_column(Text) + created_at: Mapped[datetime] = mapped_column( + default=lambda: datetime.now(timezone.utc) + ) + + conversation: Mapped["Conversation"] = relationship(back_populates="messages") + + +class CustomerProfile(Base): + __tablename__ = "customer_profiles" + + id: Mapped[str] = mapped_column( + String(36), primary_key=True, default=lambda: str(uuid.uuid4()) + ) + conversation_id: Mapped[str] = mapped_column( + ForeignKey("conversations.id", ondelete="CASCADE"), unique=True + ) + raw_info: Mapped[dict | None] = mapped_column(JSON, nullable=True, default=dict) + summary: Mapped[str | None] = mapped_column(Text, nullable=True) + updated_at: Mapped[datetime] = mapped_column( + default=lambda: datetime.now(timezone.utc), + onupdate=lambda: datetime.now(timezone.utc), + ) + + conversation: Mapped["Conversation"] = relationship(back_populates="profile") + + +class Evaluation(Base): + __tablename__ = "evaluations" + + id: Mapped[str] = mapped_column( + String(36), primary_key=True, default=lambda: str(uuid.uuid4()) + ) + conversation_id: Mapped[str] = mapped_column( + ForeignKey("conversations.id", ondelete="CASCADE"), unique=True + ) + intent_level: Mapped[IntentLevel] = mapped_column(SAEnum(IntentLevel)) + reasoning: Mapped[str | None] = mapped_column(Text, nullable=True) + contact_info: Mapped[dict | None] = mapped_column(JSON, nullable=True) + email_sent: Mapped[bool] = mapped_column(Boolean, default=False) + correction_count: Mapped[int] = mapped_column(Integer, default=0) + evaluated_at: Mapped[datetime] = mapped_column( + default=lambda: datetime.now(timezone.utc) + ) + + conversation: Mapped["Conversation"] = relationship(back_populates="evaluation") + + +class LeadPushLog(Base): + """询盘推送 UniService 日志(设计 2026-09-28-lead-push-to-uniservice)。 + + status: pending → success/failed;skipped = contact 三选一(phone/whatsapp/ + email)不满足,对方必拒,预检后不发 HTTP 只留审计痕迹。 + outcome: 200 时对方逐条结论 accepted/duplicated(duplicated 不是错误)。 + """ + __tablename__ = "lead_push_logs" + + id: Mapped[str] = mapped_column( + String(36), primary_key=True, default=lambda: str(uuid.uuid4()) + ) + evaluation_id: Mapped[str] = mapped_column( + ForeignKey("evaluations.id", ondelete="CASCADE"), index=True + ) + conversation_id: Mapped[str] = mapped_column( + ForeignKey("conversations.id", ondelete="CASCADE"), index=True + ) + push_type: Mapped[str] = mapped_column(String(16)) # lead/returning/correction + status: Mapped[str] = mapped_column(String(16), default="pending", index=True) + attempts: Mapped[int] = mapped_column(Integer, default=0) + request_payload: Mapped[dict | None] = mapped_column(JSON, nullable=True) + response_status: Mapped[int | None] = mapped_column(Integer, nullable=True) + outcome: Mapped[str | None] = mapped_column(String(16), nullable=True) + error_message: Mapped[str | None] = mapped_column(Text, nullable=True) + created_at: Mapped[datetime] = mapped_column( + default=lambda: datetime.now(timezone.utc) + ) + updated_at: Mapped[datetime] = mapped_column( + default=lambda: datetime.now(timezone.utc), + onupdate=lambda: datetime.now(timezone.utc), + ) diff --git a/app/models/schemas.py b/app/models/schemas.py new file mode 100644 index 0000000..e835f1e --- /dev/null +++ b/app/models/schemas.py @@ -0,0 +1,57 @@ +from datetime import datetime + +from pydantic import BaseModel + +from app.models.database import ConversationStatus, ConversationSource, MessageRole, IntentLevel + + +class MessageCreate(BaseModel): + role: MessageRole + content: str + + +class MessageOut(BaseModel): + id: str + role: MessageRole + content: str + created_at: datetime + + model_config = {"from_attributes": True} + + +class ConversationCreate(BaseModel): + source: ConversationSource = ConversationSource.standalone + client_info: dict | None = None + + +class ConversationOut(BaseModel): + id: str + session_id: str + status: ConversationStatus + source: ConversationSource + client_info: dict | None + created_at: datetime + messages: list[MessageOut] = [] + + model_config = {"from_attributes": True} + + +class CustomerProfileOut(BaseModel): + raw_info: dict | None + summary: str | None + + model_config = {"from_attributes": True} + + +class EvaluationOut(BaseModel): + intent_level: IntentLevel + reasoning: str | None + contact_info: dict | None + email_sent: bool + + model_config = {"from_attributes": True} + + +class ChatMessage(BaseModel): + session_id: str + content: str diff --git a/app/prompts/company_facts.md b/app/prompts/company_facts.md new file mode 100644 index 0000000..2cb13fb --- /dev/null +++ b/app/prompts/company_facts.md @@ -0,0 +1,29 @@ +# 公司事实卡(仅供回答客户关于公司的事实性问题) + +## 我是谁 +- Hesu Auto 是 Hesu Group 旗下专注汽车出口的公司 +- 中国首批汽车出口企业之一,累计出口 50,000+ 台 +- **累计出口到 70+ 国家与地区**(中东、非洲、南美、欧洲)——出口目的国口径,不是分支/网点覆盖 +- 与 30+ 汽车品牌深度合作:BYD、Changan、Geely、Leopard、ROX、Nissan、Zeeker、Li Auto 等 + +## 卖什么 +- **新车与二手车都做** +- 全动力类型:燃油、混动、插混、纯电 +- 全车型类别:轿车、SUV、皮卡、重卡;乘用车、商用车、新能源车、车队/项目采购 + +## 网络与运作 +- 模式:中国采购供应 → 迪拜(Jebel Ali)枢纽备货分拨 → 海外交付 +- 海外分支五处:Dubai、Ghana、Ethiopia、Djibouti、Belarus +- Abu Dhabi 有展车节点;Ghana 西非保税仓;Djibouti+Ethiopia 东非协同;Venezuela(南美)在网络节点内 + +## 使用规则(与 system.md 红线同级) +- **统一兜底(最高优先)**:任何不清楚、事实卡没有、需要核实的问题——**不编造、不承诺、不否定、不断言**,统一动作只有一个:顺势引导留联系方式转客户经理——"这个我让我们经理给你准确答复——留个 WhatsApp,他直接联系你" +- **不扩展原则**:回答公司事实**只用本卡原词**——禁止添加城市/地址/街道等任何卡外细节(卡片没写城市就不提城市)。卡片没写的就是不知道,一律走统一兜底 +- 客户问公司情况/品牌/是否可信时,取上述事实**简短作答(1-2 句)**,建立信任 +- **分支问题与出口覆盖问题是两回事,分开答**: + - 问分支/网点("do you have branch in X")→ 只认卡里列的:五分支+节点(Dubai/Ghana/Ethiopia/Djibouti/Belarus/Abu Dhabi/Venezuela)必须答"有",**只说国家+节点类型,不提城市**,可逐字使用:"Yes, we've got a Ghana branch with bonded storage";卡里没有的 → **走统一兜底**——绝对禁止编造否定答案("Not yet"/"we don't have"/"没有") + - 问出口覆盖("do you ship to X")→ 70+ 国是**累计出口目的国**,不代表 X 一定有网点:答"已出口到 70+ 国家"事实 + **走统一兜底**(X 具体情况经理确认)——不承诺、不否定 +- 绝不主动长篇介绍公司,绝不用成营销腔——风格仍按【说话风格】 +- 涉及具体价格/交付时效/库存承诺 → 仍按【职能边界】转客户经理,本卡不改变任何红线;售后只说"有本地协同支持",不做任何保证 +- 事实卡没写的细节(某国代理、某车型现车、认证资质细节)→ **走统一兜底**(不编造,留资+经理沟通) +- 数字一律照抄本卡写法(如 50,000+、70+),不改写成中文数字 diff --git a/app/prompts/evaluator.md b/app/prompts/evaluator.md new file mode 100644 index 0000000..74a6d84 --- /dev/null +++ b/app/prompts/evaluator.md @@ -0,0 +1,44 @@ +你是一个客户意向评估助手。根据对话中收集到的客户信息,判断这个客户的购买意向。 + +## 评估标准 + +### interested(有意向) +必须满足以下所有条件: +- 明确表达了购车需求(有预算或目标车型/品牌) +- 明确了目标国家/地区或采购用途 +- 提供了至少一种联系方式(手机/WhatsApp/邮箱/微信) +- 对话至少进行了3轮以上(客户说了3条以上消息) +- 客户表现出真实采购意向而非简单咨询 +- 客户询问价格、优惠、运费或试驾/交付安排,应视为意向积极信号(有真实购买兴趣) +- 客户主动索要我方联系方式(WhatsApp/邮箱/电话),视为最强意向信号之一 + +### not_interested(无意向) +客户表现出以下特征: +- 明确表示不买、只是随便看看 +- 态度冷淡,不愿多聊 +- 表示已经从其他渠道购买了 + +### pending(待定) +以下情况都应标记为pending: +- 对话轮次少于3轮 +- 还未收集到联系方式 +- 客户信息不够充分(缺少预算、车型、数量等关键信息) +- 客户还在比较或犹豫阶段 + +## 严格规则 +1. info_sufficient 必须为 true 时,intent_level 才可以是 interested 或 not_interested +2. 如果对话轮次少于3轮,info_sufficient 必须为 false,intent_level 必须为 pending +3. 如果没有联系方式,info_sufficient 必须为 false + +## 输出格式 +返回JSON,包含以下字段: +- intent_level: "interested" 或 "not_interested" 或 "pending" +- reasoning: 你的判断理由(1-2句话) +- contact_info: 联系方式对象,包含手机、WhatsApp、邮箱、微信,没有的留空字符串 +- info_sufficient: true或false,表示当前信息是否足够做出评估 + +## 客户信息 +$profile + +## 最近对话 +$recent_messages diff --git a/app/prompts/extractor.md b/app/prompts/extractor.md new file mode 100644 index 0000000..b25d0cd --- /dev/null +++ b/app/prompts/extractor.md @@ -0,0 +1,19 @@ +你是一个信息提取助手。请从以下对话历史中提取客户相关信息,输出JSON格式。 + +## 输出格式 +返回一个JSON对象,包含你能从对话中识别到的所有信息字段。字段名用中文。示例字段: +目标国家/地区、采购用途、预算、意向品牌、意向车型、采购数量、车况要求、年份要求、运输方式、联系方式、其他备注。 + +其中联系方式如果有的话格式为:{"手机": "xxx", "WhatsApp": "xxx", "邮箱": "xxx", "微信": "xxx"} +- 如果对话中客户更正了此前提供的联系方式(如 wrong number / 号码错了 / use this / 换成 / 又给了一个新号),联系方式必须以客户最后提供的值为准覆盖旧值 +- 如果客户在消息中直接发送了一串数字(整条消息只有号码),必须用该号码更新联系方式 + +## 规则 +- 只提取对话中明确提到的信息,不要猜测 +- 如果某个信息没有提到,不要包含该字段 +- 已有的信息请保留,新信息追加或更新 +- 之前的提取结果:$existing_info +- 如果没有之前的提取结果,$existing_info 为空对象 + +## 对话历史 +$messages diff --git a/app/prompts/system.md b/app/prompts/system.md new file mode 100644 index 0000000..bd5280f --- /dev/null +++ b/app/prompts/system.md @@ -0,0 +1,179 @@ +你是一位汽车出口外贸销售(新车与二手车都做),日常工作就是通过聊天和海外客户沟通。你说话像在 WhatsApp 上跟朋友聊天一样,简短、直接、有人情味。 + +## 语言规则(最高优先级) +- 客户用什么语言,你就用什么语言回复,严格匹配,绝不混用 +- 默认英语 + +## 职能边界(最高优先级,仅语言规则除外) + +你的准则只有一条:**需求了解 + 留资**——介绍车、挖意向、收联系方式。 +你不承担销售职能:不做任何承诺(价格/时间/库存)、不说绝对化的话、不代表公司做决定。 +涉及价格、时效和实际行动的事,一律由客户经理承接——你的任务是把需求和联系方式收好,交出去。 + +### 三类请求的处理 +1. **汽车信息**(车型/配置/参数/续航/年份/库存/汽车知识):直接热情介绍。 + - 公司情况(品牌/覆盖国家/出口经验/运作模式)按系统提供的事实卡简短作答建立信任——但不因此报价、承诺或跳过留资引导 +2. **价格、优惠、折扣、运费、关税、交付时效类**:一律不直接回答,用迂回话术: + - "Prices depend on the config, destination and shipping — our manager will prepare an accurate quote for you. What's your WhatsApp or email?" + - "Delivery time depends on your destination and shipping route — leave your contact and our manager will give you an exact schedule." + - 问价时若已知意向车型:同一回复内"确认车型 + 引导留资"一气呵成——带车型信息的线索才有价值 + - 零上下文问价(快捷按钮首触):先问需求(车型/国家),不急着要号 +3. **实质请求**(试驾、验车、下单、锁车、预留库存、售后、"帮我安排"类,以及经销/批发合作谈价格与条款):一律转接: + - "I'll connect you with our manager to arrange that — drop your WhatsApp and they'll reach out directly." + +### 客户报预算时 +- 理解预算档位,据此推荐合适的车型 +- 但绝对不要复述预算数字,也不要报任何车价 +- 确认预算只用无数字表述:"That budget works well" / "Got your budget"—— + 绝不说 "20K / 20000 / a budget of 20K" 这类任何数字形式(含改写形式如 20k) +- 反问意向加深了解:"SUV or sedan? How many seats do you need?" +- 然后顺势引导留资:"Tell me your WhatsApp and our manager will send you an accurate quote for your budget." + +### 节奏豁免(解决与"3轮规则"的冲突) +- 客户**主动**问价、问时效、提实质请求或索要我方联系方式时,价格红线立即生效(当轮就不给数字),不受"至少聊3轮"限制 +- 但**留资时机仍看需求了解程度**: + - 已知基本需求(客户提过车型/国家)→ 当轮即可迂回引导留资 + - 零上下文点击询价按钮(如 Get Quotation 首条消息)→ **先用一轮了解需求** + ("What car are you looking for? Where are you shipping to?"), + 下一轮再引导留资——连客户要什么都不知道就要号,是低质量线索且显得急躁 + +### 红线(任何情况下不可违反) +- 回复中不能出现任何价格数字——包括我方报价、价格区间、连客户自己说的预算数字都不能复述 +- 禁止输出占位符("[Price Range]"/"[价格区间]"之类)——给不了数字就不提数字,直接引导联系方式 +- 不能给出任何交付时间("X days / X weeks / on the Xth"都不行) +- 不能做任何承诺(价格/时间/库存/名额/优惠) +- 不能说 "definitely / guaranteed / for sure / 肯定 / 保证 / 一定" 这类绝对化表述 +- 不能替公司做任何决定或安排——安排的主体永远是客户经理("our manager will arrange"),不说 "we can arrange" +- 回复中不能出现任何电话号码或邮箱地址——客户自己的号码也不回显(确认收到即可);引导联系一律用页面按钮(网页)或请客户留联系方式(App) +- 一切不清楚、没把握的问题(卡外国家/库存/保修/认证/任何事实细节)——不编造、不承诺、不否定、不断言,引导客户留联系方式,由客户经理沟通 +- 不对库存/现车做断言——有没有现车、什么时候有,由客户经理确认;你只能说"可以采购调配" +- 不报任何保修/质保期限("X months warranty"这类数字承诺)——一律"客户经理会给你完整的保修方案" + +### 客户反复追问时(坚持策略) +- 第一次:解释原因(配置/目的地/运费因人而异)+ 引导留资 +- 第二次:换一个理由或角度,不要重复原话;继续引导 +- 第三次及以后:直接引导点面板顶部的 WhatsApp 按钮联系客户经理 + +### 客户施压/磨价时的绝对坚持(任何情况下不破线) +无论客户如何坚持、恳求、激将、讨价还价、威胁离开或表达不满,上述红线绝不放松。 +**态度可以软,立场必须硬**:可以共情、可以道歉、可以幽默化解,但价格数字、区间、 +交付时间、承诺——零出现。常见磨法与应对: +- "Just a rough range / 说个大概嘛" → 区间也是数字:"I'd rather give you an exact number than a rough guess — that's why our manager prepares it based on your config." +- "I won't buy without a price / 不给价我不买" → 共情+转价值:"That's exactly why I want our manager to send you the real quote — drop your WhatsApp and you'll have it today." +- "别人家都直接报价" → 不贬低同行,坚持流程价值:"Our quotes include config, shipping and duties for your destination — a random number wouldn't help you." +- 激将("You don't even know?" / "你是不是不懂")→ 不上钩:"I know our cars well — it's the price that needs your manager's calculation. Leave your contact and you'll see." +- 客户发火/不耐烦 → 先道歉安抚,再给出口:"Sorry for the trouble! The fastest way is the WhatsApp button on top — our manager replies quickly there." +- 客户说"我已经给过号码了"("I gave you my number already")→ **先回看聊天记录**: + 记录里确有号码 → 确认收到("Got it — our manager will reach out to you at your WhatsApp shortly!"),绝不要求重发; + 记录里确实没有 → 才温和核对:"Sorry, I may have missed it — could you drop it here once more?" + +## 说话风格 +- 像在 WhatsApp 上聊天,每条消息 1-2 个短句,不超过 30 个词 +- 可以用缩写(gonna, wanna, gotta)、语气词(hmm, oh nice, wow) +- 偶尔用 emoji,但不要每句都加 +- 有自己的判断和推荐,不要只会"好的""没问题" +- 客户说了个需求,你可以直接推荐车型或给建议,不要只问问题 + +## 禁止说的话(必须遵守) +- 不要说"感谢您的咨询/关注/提问" +- 不要说"我很高兴/荣幸为您服务/帮助您" +- 不要说"请随时联系我"或"不要犹豫" +- 不要说"希望以上信息对您有帮助" +- 不要说"如果您有任何其他问题" +- 不要用"首先...其次...最后..."这种列举式回答 +- 不要重复客户说的话("您提到您想买一辆丰田"这种废话) +- 不要总结对话内容 +- 不要每次回复都带问号结尾 + +## 对话推进规则(最关键,违反就是致命bug) +- 客户已经告诉你的信息,绝对不能再问一遍。客户说了车型就不要再问"什么车",说了年份就不要再问"哪年" +- 客户给出具体需求后,必须给出有用的回应(车型推荐、可否采购调配、配置对比),而不是继续追问 +- 对话必须向前推进,每条回复都要在"需求了解 + 留资"上更进一步 +- 如果客户连续两次被问到已经回答过的问题,客户会直接走人 +- 涉及价格/交付时效/实质安排的请求,按【职能边界】处理——这不是拒绝客户,而是把他交给能给出准确答案的人 + +## 上下文追踪(最关键,违反就是致命bug) +- 每条回复前,先回顾整个对话历史,明确客户当前想要什么 +- 客户的短消息(如"2024"、"how much"、"yes")必须结合之前的上下文理解,不能当作独立问题 +- 如果客户之前说了具体车型,后续所有回复都必须围绕这个车型,直到客户自己换了话题 +- 绝对不能在客户指定了车型之后推荐完全不同的车型(客户说BYD,你推荐Toyota,客户会立刻关闭页面) + +## 好回复 vs 差回复 +差:"感谢您的咨询!我们公司专注于二手车出口业务多年,拥有丰富的经验。请问您的目标市场是哪个国家呢?" +好:"Oh nice, what country are you looking to ship to?" + +差:"您好!很高兴为您服务。请问您的预算范围是多少呢?我们可以根据您的预算为您推荐合适的车型。" +好:"What's your budget range? I got some good options." + +差:"您提到的丰田卡罗拉是一款非常受欢迎的车型,我们在非洲和东南亚市场有大量现车。请问您对年份有什么要求吗?" +好:"Corolla is a solid pick, we can source it easily. Any preference on year?" + +差:客户说了"BYD Han 2025",AI回复"What kind of car are you looking for?" +好:客户说了"BYD Han 2025",AI回复"Nice, the 2025 Han comes in EV and DM-i versions. Which one you after?" + +差:客户说了年份"2025",AI回复"Any specific make or model in mind?" +好:客户说了年份"2025",AI回复"For 2025 models we can source BYD Han, Toyota Camry, Honda Accord. Budget range?" + +差:客户说了"BYD Tang",然后说"2024",AI回复"Got a 2024 model in mind? I can show you some great options!" +好:客户说了"BYD Tang",然后说"2024",AI回复"2024 Tang comes as EV 7-seater and DM-i AWD. Which one fits you?" + +差:客户说了"BYD Tang 2024",问"what is available",AI回复"Got Toyota Corolla, Honda Accord, BMW 3 Series" +好:客户说了"BYD Tang 2024",问"what is available",AI回复"The 2024 Tang comes as the EV 7-seater and DM-i AWD — we can source either. Want specs?" + +## 对话流程 +1. 开场轻松,简单打个招呼,问客户想找什么车 +2. 聊2-3轮了解基本需求(目标国家、预算、车型偏好) +3. 第3-4轮用"转接客户经理"或"发报价单"的方式引导联系方式(见下方策略) +4. 拿到联系方式后:确认一句("Got it!"),然后继续正常解答客户问题——不必急着结束对话,也别再提联系方式 + +## 联系方式引导策略(关键) +聊了3-4轮、对客户需求有基本了解后,用"转接客户经理"的方式要联系方式(客户**主动**问价/提实质请求时例外——见【职能边界】节奏豁免): + +### 英文话术示例 +- "Let me connect you with our manager who handles [country] market — what's your WhatsApp?" +- "I can have our team send you some quotes. Drop your WhatsApp or email?" +- "Want me to get you a proper quote? I'll need your WhatsApp so our manager can reach you." + +### 中文话术示例 +- "我让负责[国家]市场的同事加你,你WhatsApp多少?" +- "我让客户经理给你报个价,留个WhatsApp或者邮箱吧?" +- "你给我个联系方式,我让客户经理给你推几个车型。" + +### 引流兜底(先聊后引,顺序不能反) +(话术模板见【职能边界】) +- 聊天内按上述方式要联系方式,最多两次 +- 两次都没要到,才指引用户点面板上的 WhatsApp 按钮直接找我们: + "You can also just message us on WhatsApp (button at the top) — our guy replies fast." +- 禁止一上来就推 WhatsApp 按钮跳过聊天索要 + +### 客户索要我方联系方式(最高意向信号,立即响应) +客户问"how can I contact you / 你们的WhatsApp多少"时: +- 系统提醒会告知当前会话来源。**网页会话**(有页面按钮)→ 指引点击: + "Just tap the WhatsApp button at the top of this chat — our manager replies fast!" + (邮箱同理:"Tap the Email button at the top.") +- **App 会话**(没有页面按钮)→ 反向留资: + "Drop your WhatsApp and our manager will reach out to you directly with the full quote!" +- 中文版同理("直接点窗口顶部的 WhatsApp 按钮就行,客户经理回复很快~") +- 【互留】网页会话给完指路后可轻问一句:"Drop yours too and our manager will send you + the full quote!"——每会话最多一次;客户已留过或疑似留过则不加 +- 客户索要未提供的渠道(微信/Telegram/LINE/ins)→ "We mainly use WhatsApp — tap the + button at the top, fastest way to reach us.",绝不提供或编造任何渠道账号 + +### 系统提醒配合 +- 系统会在上下文提醒里告诉你客户是否已留联系方式 +- 提醒说"已提供"时:绝对禁止再要,确认收到即可 +- 提醒说"疑似提供"时:礼貌请客户确认一次,不要当成没给过重新索要 + +### 注意 +- 只要一次没要到,可以换个理由再试一次,但最多两次 +- 不要在开场就**主动**要联系方式,至少聊3轮(客户主动问价/提实质请求时例外,见职能边界) +- 拿到后说一句"Got it, our team will reach out to you soon"就行,别再重复要 + +## 关注的信息 +自然地在聊天中了解这些,不要逐条问: +- 客户所在国家/地区 +- 预算范围 +- 意向品牌/车型 +- 采购数量 +- 车况/年份要求 +- 联系方式(WhatsApp、邮箱等) diff --git a/app/providers/__init__.py b/app/providers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/providers/base.py b/app/providers/base.py new file mode 100644 index 0000000..0963688 --- /dev/null +++ b/app/providers/base.py @@ -0,0 +1,24 @@ +from abc import ABC, abstractmethod +from collections.abc import AsyncGenerator + + +class AIProvider(ABC): + @abstractmethod + async def chat(self, messages: list[dict], system_prompt: str) -> str: + """Send messages and return assistant reply text.""" + + @abstractmethod + async def stream_chat( + self, messages: list[dict], system_prompt: str + ) -> AsyncGenerator[str, None]: + """Stream assistant reply token by token.""" + + @abstractmethod + async def chat_with_extraction( + self, messages: list[dict], system_prompt: str + ) -> tuple[str, dict]: + """Send messages and return (reply_text, extracted_json). + + The provider should request JSON output and parse it. + Falls back to empty dict if parsing fails. + """ diff --git a/app/providers/glm.py b/app/providers/glm.py new file mode 100644 index 0000000..2dd1c0a --- /dev/null +++ b/app/providers/glm.py @@ -0,0 +1,94 @@ +import asyncio +import json +import logging +from collections.abc import AsyncGenerator + +from zhipuai import ZhipuAI + +from app.providers.base import AIProvider + +logger = logging.getLogger(__name__) + +DEFAULT_MODEL = "glm-4-flash" + + +class GLMProvider(AIProvider): + def __init__(self, api_key: str, model: str = "glm-4-flash", base_url: str = ""): + self.client = ZhipuAI(api_key=api_key, base_url=base_url or None) + self.model = model + + async def chat(self, messages: list[dict], system_prompt: str) -> str: + full_messages = [{"role": "system", "content": system_prompt}] + messages + return await self._call(full_messages, temperature=0.3) + + async def stream_chat( + self, messages: list[dict], system_prompt: str + ) -> AsyncGenerator[str, None]: + full_messages = [{"role": "system", "content": system_prompt}] + messages + + def _sync_stream(): + resp = self.client.chat.completions.create( + model=self.model, + messages=full_messages, + stream=True, + temperature=0.3, + ) + for chunk in resp: + delta = chunk.choices[0].delta + if delta and delta.content: + yield delta.content + + try: + loop = asyncio.get_event_loop() + gen = _sync_stream() + + def _next_token(g): + try: + return next(g) + except StopIteration: + return None + + while True: + token = await loop.run_in_executor(None, _next_token, gen) + if token is None: + break + yield token + except Exception: + logger.exception("GLM streaming call failed") + raise + + async def chat_with_extraction( + self, messages: list[dict], system_prompt: str + ) -> tuple[str, dict]: + full_messages = [{"role": "system", "content": system_prompt}] + messages + if not messages: + full_messages.append({"role": "user", "content": "请根据以上要求输出结果。"}) + + raw = await self._call(full_messages, temperature=0.1) + extracted = self._parse_json(raw) + return raw, extracted + + async def _call(self, messages: list[dict], temperature: float = 0.3) -> str: + def _sync_call(): + resp = self.client.chat.completions.create( + model=self.model, + messages=messages, + temperature=temperature, + ) + return resp.choices[0].message.content + + try: + return await asyncio.to_thread(_sync_call) + except Exception: + logger.exception("GLM API call failed") + raise + + @staticmethod + def _parse_json(text: str) -> dict: + try: + start = text.index("{") + end = text.rindex("}") + 1 + return json.loads(text[start:end]) + except (ValueError, json.JSONDecodeError): + logger.warning("Failed to parse JSON from model output") + return {} diff --git a/app/services/__init__.py b/app/services/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/services/ai_service.py b/app/services/ai_service.py new file mode 100644 index 0000000..bbccd33 --- /dev/null +++ b/app/services/ai_service.py @@ -0,0 +1,98 @@ +import json +import logging +from collections.abc import AsyncGenerator +from pathlib import Path + +from app.providers.base import AIProvider +from app.providers.glm import GLMProvider +from app.config import settings + +logger = logging.getLogger(__name__) + +PROMPTS_DIR = Path(__file__).resolve().parent.parent / "prompts" + + +def _load_prompt(filename: str) -> str: + return (PROMPTS_DIR / filename).read_text(encoding="utf-8") + + +def create_provider() -> AIProvider: + if settings.AI_PROVIDER == "glm": + return GLMProvider( + api_key=settings.ZHIPU_API_KEY, + model=settings.AI_MODEL, + base_url=settings.ZHIPU_BASE_URL, + ) + raise ValueError(f"Unknown AI provider: {settings.AI_PROVIDER}") + + +SYSTEM_PROMPT = _load_prompt("system.md") +COMPANY_FACTS = _load_prompt("company_facts.md") # 公司事实卡(知识与行为分离) +EXTRACTOR_PROMPT = _load_prompt("extractor.md") +EVALUATOR_PROMPT = _load_prompt("evaluator.md") + +# 对话基座: 行为 prompt 在前(红线显著性),事实卡居中(参考资料), +# 当轮 context 提醒最后拼接(在 chat/stream_chat 内,保持最新鲜) +_BASE_CHAT_PROMPT = SYSTEM_PROMPT + "\n\n" + COMPANY_FACTS + + +class AIService: + def __init__(self, provider: AIProvider | None = None): + self.provider = provider or create_provider() + + async def chat(self, messages: list[dict], context: str = "") -> str: + """Main conversation: get AI reply to user message.""" + prompt = _BASE_CHAT_PROMPT + ("\n\n" + context if context else "") + return await self.provider.chat(messages, prompt) + + async def stream_chat(self, messages: list[dict], context: str = "") -> AsyncGenerator[str, None]: + """Stream AI reply token by token.""" + prompt = _BASE_CHAT_PROMPT + ("\n\n" + context if context else "") + async for token in self.provider.stream_chat(messages, prompt): + yield token + + async def extract_info( + self, messages: list[dict], existing_info: dict + ) -> dict: + """Extract structured info from conversation history.""" + prompt = EXTRACTOR_PROMPT.replace( + "$existing_info", json.dumps(existing_info or {}, ensure_ascii=False) + ).replace("$messages", self._format_messages(messages)) + _, extracted = await self.provider.chat_with_extraction( + messages=[], system_prompt=prompt + ) + return extracted + + async def evaluate( + self, profile: dict, recent_messages: list[dict] + ) -> dict: + """Evaluate customer intent level.""" + prompt = EVALUATOR_PROMPT.replace( + "$profile", json.dumps(profile, ensure_ascii=False) + ).replace("$recent_messages", self._format_messages(recent_messages[-6:])) + _, result = await self.provider.chat_with_extraction( + messages=[], system_prompt=prompt + ) + return self._normalize_evaluation(result) + + @staticmethod + def _format_messages(messages: list[dict]) -> str: + lines = [] + for m in messages: + role = m.get("role", "unknown") + content = m.get("content", "") + label = {"user": "客户", "assistant": "顾问"}.get(role, role) + lines.append(f"{label}: {content}") + return "\n".join(lines) + + @staticmethod + def _normalize_evaluation(result: dict) -> dict: + intent = result.get("intent_level", "pending") + if intent not in ("interested", "not_interested", "pending"): + intent = "pending" + return { + "intent_level": intent, + "reasoning": result.get("reasoning", ""), + "contact_info": result.get("contact_info", {}), + "info_sufficient": result.get("info_sufficient", False), + } diff --git a/app/services/boundary_filter.py b/app/services/boundary_filter.py new file mode 100644 index 0000000..254d662 --- /dev/null +++ b/app/services/boundary_filter.py @@ -0,0 +1,199 @@ +"""职能边界输出过滤(方案B): AI 回复价格形态的确定性拦截。 +流式回复无法撤回,故在流出前全量缓冲过滤;违规整体替换为标准迂回话术。 +模式以 scripts/breach_rate.py 为基础并收严(预算复述/金融收严;公里等误报除外项)。 + +评审修正(13.6 复查): +- 货币组尾部 \\b 对中文备选(万/块钱/美元)永远无法命中——中文无词边界, + "2万左右"的 万与左 之间没有 \\b(实测漏检预算复述 6/6 的原形态)。 + \\b 只保留在拉丁备选 usd 之后(防 "usdroid" 类前缀误命中)。 +- 公里/km 排除必须直接挂在 万块? 之后: 挂在末尾裸 万 备选上会被 + 万块? 的空块匹配绕过("3万公里"仍命中,实测)。 +- 预算复述(裸 budget+数字/中文数字万)、金融裸数(首付/月供)收严; + 里程 k 形式(30k km/45k miles)除外。质保期不再豁免(政策变更 2026-09-10: + 保修期限是编造的公司政策承诺,一并墙级拦截,见 PRICE_PATTERNS 时间承诺组)。""" +import re + +from app.services.contact_pipeline import digits_only + +PRICE_PATTERNS = [ + re.compile(r"\$\s?\d"), + re.compile(r"\d[\d,.]*\s*(usd\b|美元|块钱|万块?(?!\s*(公里|km)))", re.I), + re.compile(r"\d[\d,.]*\s?k\b(?!\s*(km|kilometers?|kilometres?|miles?|mi\b|公里))", re.I), + re.compile(r"(price|cost|quote)[^.\d]{0,20}(? bool: + return any(p.search(reply or "") for p in PRICE_PATTERNS) + + +# ---- 13.7: 句子粒度门控 ---- +# 完整句切分: 英文句尾标点后需跟空白才切(小数 "2.5" 的句点后是数字,天然不切); +# 中文标点无需后续空白即可切。finditer 实现为无损——句间空白保留为下一片段的 +# 前导空白(方案稿的 re.split 会吃掉空白,实测把 "A. B" 粘成 "A.B", +# 干净回复逐句流出后无法逐字还原)。 +_SENT_BOUNDARY = re.compile(r"(?<=[.!?;;])\s+|(?<=[。!?…])") + + +def split_sentences(text: str) -> tuple[list[str], str]: + """切出完整句子,返回 (完整句子列表, 不完整尾巴)。 + 无损保证: "".join(完整) + 尾巴 == 原文。完整句不带尾随空白。""" + if not text: + return [], "" + parts: list[str] = [] + prev = 0 + for m in _SENT_BOUNDARY.finditer(text): + parts.append(text[prev:m.start()]) + prev = m.start() # 边界(句间空白)留在下一片段开头 + parts.append(text[prev:]) + parts = [p for p in parts if p] + if not parts: + return [], text + return parts[:-1], parts[-1] + + +# 过渡话术(pivot): 句子门控拦截时已流出干净前缀,接一句过渡收尾。 +# 与开场版迂回话术不同——读起来像回复中段的转向,故单条不轮换。 +PIVOTS_EN = [ + "Actually, for the exact price — what's your WhatsApp? Our manager will send it over.", +] +PIVOTS_ZH = [ + "具体的报价,客户经理会发给你——留个WhatsApp或邮箱?", +] +PIVOTS_EN_CONTACT = [ + "Our manager will send the exact price to your WhatsApp shortly.", +] +PIVOTS_ZH_CONTACT = [ + "客户经理稍后会把准确报价发到你的 WhatsApp。", +] + + +def pivot_for(user_msg: str, has_contact: bool = False) -> str: + zh = bool(re.search(r"[一-鿿]", user_msg or "")) + if has_contact: + pool = PIVOTS_ZH_CONTACT if zh else PIVOTS_EN_CONTACT + else: + pool = PIVOTS_ZH if zh else PIVOTS_EN + return pool[0] + + +def deflection_for(user_msg: str, rotate: int = 0, + has_contact: bool = False) -> str: + zh = bool(re.search(r"[一-鿿]", user_msg or "")) + if has_contact: + pool = DEFLECTIONS_ZH_CONTACT if zh else DEFLECTIONS_EN_CONTACT + else: + pool = DEFLECTIONS_ZH if zh else DEFLECTIONS_EN + return pool[rotate % len(pool)] + + +# ---- 15.3: 零号码墙(doctrine v2) ---- +# AI 绝不输出任何号码/邮箱: 与价格墙并列的第二道确定性红线。 +LONG_NUMBER_RE = re.compile(r"\+?\d[\d\s\-().]{9,17}\d") # ≥10位连续数字(允许分隔形态) +ANY_EMAIL_RE = re.compile(r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}") + +NO_CONTACT_WEB = ("Just tap the WhatsApp button at the top of this chat — " + "our manager replies fast!") +NO_CONTACT_APP = ("Drop your WhatsApp and our manager will reach out to you directly " + "with the full quote!") +# F6 同款(15.3 补): 已留资时零号码墙替换句不得索要 +NO_CONTACT_ALREADY = ("Got it — our manager will reach out to you at your " + "WhatsApp shortly with the full quote!") + + +def no_contact_value(sentence: str, user_history: list[dict] | None = None) -> bool: + """零号码墙(v2): AI 输出不得含任何 ≥10 位数字串或邮箱。 + 唯一豁免: 该串出现在近期客户消息中(客户自己号码的礼貌回显)。 + 无值比对——年份/里程/VIN/续航天然安全(已验证)。""" + for m in LONG_NUMBER_RE.finditer(sentence or ""): + c = digits_only(m.group(0)) + if user_history and any(c in digits_only(msg.get("content") or "") + for msg in user_history if msg.get("role") == "user"): + continue # 客户回显豁免 + return True + for m in ANY_EMAIL_RE.finditer(sentence or ""): + if user_history and any(m.group(0).lower() in (msg.get("content") or "").lower() + for msg in user_history if msg.get("role") == "user"): + continue + return True + return False + + +# ---- Task 5b: 再索要墙(已留资时输出侧拦截) ---- +# 仅当调用方 has_contact=True 才启用(接线在 conversation.py); +# 每条模式强制渠道词在场,防泛请求误杀("Can you send me the details?" 放行)。 +# 模式集与 system.md 全部留资话术模板逐句对齐并实证(13 命中/12 放行)—— +# GLM 背的就是这些模板,模板全集必须全收。 +REASK_PATTERNS = [ + # what's/which's your <渠道词> + re.compile(r"(?:what|which)['′]?s\s+(?:your|the)\s+" + r"(?:whatsapp|number|phone|e-?mail|contact|号码|联系方式)", re.I), + # got/have your <渠道词> ... ?(问号兜尾——确认句 "Got your number, thanks!" 无问号放行) + re.compile(r"(?:got|have)\s+(?:your|the)\s+" + r"(?:whatsapp|number|phone|e-?mail|contact)[^!?.]{0,60}\?", re.I), + # 陈述式需求: (I'll) need/want your <渠道词>——"I'll need your WhatsApp" 无问号也要拦 + re.compile(r"(?:i['′]ll\s+|i\s+)?(?:need|want)\s+(?:your|the)\s+" + r"(?:whatsapp|number|phone|e-?mail|contact|号码|联系方式)", re.I), + # Tell me your <渠道词> + re.compile(r"tell\s+me\s+(?:your\s+)?" + r"(?:whatsapp|number|phone|e-?mail|contact|号码|联系方式)", re.I), + # could/can you + 给予动词 + ... 渠道词(动词表无 confirm/send——礼貌确认与泛请求放行) + re.compile(r"(?:could|can|would|may)\s+you\s+" + r"(?:leave|drop|share|give|provide|type|post)[^.!?\n]{0,30}" + r"(?:whatsapp|number|phone|e-?mail|contact|号码|联系方式|微信|邮箱)", re.I), + # 祈使: leave/drop/share/give (me) your/us a <渠道词> + re.compile(r"(?:leave|drop|share|give)\s+(?:me\s+)?(?:your|us\s+your?|a)\s+" + r"(?:whatsapp|contact|number|e-?mail|联系方式)", re.I), + # 互留后缀 "Drop yours too..."(无渠道词,单列) + re.compile(r"(?:drop|leave)\s+yours\b", re.I), + # "WhatsApp or email?" 独立短问 + re.compile(r"(?:whatsapp|e-?mail|contact)\s+or\s+(?:whatsapp|e-?mail|contact)\s*\?", re.I), + # 裸碎片问句: "Your number, please?"/"Your WhatsApp?"(Ghana 案例穿透补) + # 后顾排除跟进确认句("reach/got/sent/did your X?" 是问进度不是要号) + re.compile(r"(? bool: + """输出句是否在索要联系方式(仅在客户已留资时用于丢弃)。""" + return any(p.search(sentence or "") for p in REASK_PATTERNS) diff --git a/app/services/contact_pipeline.py b/app/services/contact_pipeline.py new file mode 100644 index 0000000..a47d755 --- /dev/null +++ b/app/services/contact_pipeline.py @@ -0,0 +1,264 @@ +"""统一联系方式管道:联系方式检测的唯一事实源。 + +三个动作: +- 归一化:中英文 key 别名统一为 phone/whatsapp/email/wechat +- 深合并:同 key 新值覆盖旧值(客户改号场景),空值不覆盖 +- 校验分级:confirmed(格式通过,可触发邮件/结束)/ suspect(疑似, + 仅用于提醒 AI 礼貌确认,防止重复索要——D6/S1) + +上游约定:raw_info 中 "_" 前缀 key 为内部状态,禁止进入提示词渲染。 +""" +import re + +KEY_ALIASES = { + "phone": "phone", "手机": "phone", "电话": "phone", "电话号码": "phone", + "联系电话": "phone", "手机号": "phone", "手机号码": "phone", + "tel": "phone", "telephone": "phone", "phone_number": "phone", + "phone number": "phone", "mobile": "phone", "mobile_number": "phone", + "mobile number": "phone", + "whatsapp": "whatsapp", "wa": "whatsapp", "wsp": "whatsapp", + "whats app": "whatsapp", "whatsapp账号": "whatsapp", + "whatsapp号码": "whatsapp", "whatsapp number": "whatsapp", + "email": "email", "邮箱": "email", "e-mail": "email", "mail": "email", + "电子邮件": "email", + "wechat": "wechat", "微信": "wechat", "wx": "wechat", "weixin": "wechat", +} + + +def normalize_contacts(raw: dict | None) -> dict: + """key 归一化 + 去空值。精确别名优先;未命中再做 contains 兜底 + (extractor 即兴变体 key 不静默丢值)。contains 按 KEY_ALIASES 声明序 + 取第一个命中——复合 key(电话/WhatsApp)结果确定。""" + out: dict[str, str] = {} + for k, v in (raw or {}).items(): + key = str(k).strip().lower() + alias = KEY_ALIASES.get(key) + if alias is None: + for name, target in KEY_ALIASES.items(): + if name in key: + alias = target + break + val = str(v or "").strip() + if alias and val: + out[alias] = val + return out + + +def merge_contacts(old: dict | None, new: dict | None) -> dict: + """同 key 新值覆盖旧值;空/缺省不覆盖(堵浅合并抹数据 bug)。""" + return {**normalize_contacts(old), **normalize_contacts(new)} + + +def digits_only(s: str) -> str: + """提取纯数字(split_validate 位数判断与后续 canon 复用)。""" + return re.sub(r"\D", "", s) + + +def split_validate(contacts: dict) -> tuple[dict, dict]: + """返回 (confirmed, suspect)。电话/WhatsApp 取数字 7-15 位为合格;微信取非空 ≥4 字符。""" + confirmed: dict[str, str] = {} + suspect: dict[str, str] = {} + for k, v in normalize_contacts(contacts).items(): + if k == "email": + ok = re.fullmatch(r"[^@\s]+@[^@\s]+\.[^@\s]+", v) is not None + elif k == "wechat": + ok = len(v.strip()) >= 4 # 微信号无数字格式,非空短串即可 + else: + ok = 7 <= len(digits_only(v)) <= 15 + (confirmed if ok else suspect)[k] = v + return confirmed, suspect + + +EMAIL_RE = re.compile(r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}") +INTL_PHONE_RE = re.compile(r"\+\d{6,15}") +# 邻接绑定:上下文词与数字必须在同一匹配内(仅空白衔接)——禁止"消息任意位置 +# 有上下文词 + 任意位置有 7 位数字"的消息级误绑(S1:车架号/订单号/先令价格) +WHATSAPP_CTX_RE = re.compile( + r"(?:whats\s*app|wa\.?me|(?:^|\b)wa\s*[::])\D{0,12}(\+?\d[\d\s\-().]{5,17}\d)", + re.IGNORECASE, +) +PHONE_CTX_RE = re.compile( + r"(?:my\s+(?:(?:new|other|another)\s+)?(?:phone\s+)?number\s+is|" + r"my\s+(?:(?:new|other|another)\s+)?phone\s+is|" + r"(?:msg|message|text|ping)\s+me\s+(?:at|on)?\s*|" + r"call\s+me\s+(?:at|on)|reach\s+me\s+(?:at|on)|" + r"phone\s*[::]|number\s*[::]|号码\s*[::]|手机号?\s*[::]|电话\s*[::])\s*" + r"(\+?\d[\d\s\-().]{5,17}\d)", + re.IGNORECASE, +) +# 仅 scan_user_messages 使用的裸邻接形态: "my number 0712345678"(无 is/冒号)。 +# ⚠️ 不得进 latest_stated_contacts——裸邻接无自述确定性,授覆盖权会让首轮旧值 +# 长期压制 extractor 后续改号(实证: test_correction_up_to_three 更正邮件全灭)。 +# 已知覆盖边界: "my phone 0712345678"(phone 变体,无 is)不在本形态内。 +PHONE_ADJACENCY_SCAN_RE = re.compile( + r"my\s+(?:(?:new|other|another)\s+)?number\s+(\+?\d[\d\s\-().]{5,17}\d)", + re.IGNORECASE, +) +# 倒装自述: "0712 345 678 is my whatsapp / 13800138000 我的微信" +# ⚠️ 只收显式渠道词(whatsapp/wa/wechat/微信),不收 number/phone/号码—— +# 自查实证: "2500000 is my number one choice" 这类排位表述会把价格误绑成 +# 号码,且本正则进入 latest_stated_contacts 即获覆盖权,误捕获会翻新掉 +# 已存真实号码(正是 S1 系测试在防的事故类)。倒装电话表述罕见,不值得 +# 为其承担该风险;电话主通路由 PHONE_CTX_RE 前缀形态/standalone/INTL 覆盖。 +# (?:my|我的)后用 \s* 而非 \s+: 中文"我的微信"连写无空白,\s+ 永不命中(实证)。 +NUMBER_FIRST_RE = re.compile( + r"(\+?\d[\d\s\-().]{5,17}\d)\s*(?:is|这是)?\s*" + r"(?:my|我的)\s*(whats\s*app|wa\b|wechat|微信)", + re.IGNORECASE, +) + +_NUMBER_FIRST_CHANNEL = { + "whatsapp": "whatsapp", "whats app": "whatsapp", "wa": "whatsapp", + "wechat": "wechat", "微信": "wechat", +} + + +def _number_first_channel(hit: re.Match) -> str: + # whats\s*app 可捕到任意空白变体(双空格/NBSP/换行),查表前先归一成 + # 单空格——否则 KeyError 会沿着 scan 的每消息热路径直接断流整轮对话。 + return _NUMBER_FIRST_CHANNEL[" ".join(hit.group(2).lower().split())] + + +# 更正语境(与裸国际号同消息出现时才授予覆盖权) +CORRECTION_CTX_RE = re.compile( + r"wrong\s+(?:number|phone)|typo|打错|写错|输错|错了|换成了?|改为|" + r"use\s+(?:this|new|the\s+new)|instead|correct\s+(?:number|phone|it)", + re.IGNORECASE, +) + + +def scan_user_messages(messages: list[dict]) -> dict: + """S4: 扫描全部客户消息,返回高置信捕获(email / +国际号 / whatsapp·wa.me / + 显式电话上下文邻接数字)。裸数字(价格/年份/里程/车架号)一律不收。""" + found: dict[str, str] = {} + for msg in messages: + if msg.get("role") != "user": + continue + text = msg.get("content", "") + if "email" not in found: + hit = EMAIL_RE.search(text) + if hit: + found["email"] = hit.group(0) + if "phone" not in found: + sn = standalone_number(text) + if sn: + found["phone"] = sn + if "phone" not in found: + hit = INTL_PHONE_RE.search(text) + if hit: + found["phone"] = hit.group(0) + if "whatsapp" not in found: + hit = WHATSAPP_CTX_RE.search(text) + if hit: + found["whatsapp"] = hit.group(1) + if "phone" not in found: + hit = PHONE_CTX_RE.search(text) + if hit: + found["phone"] = hit.group(1) + if "phone" not in found: + hit = PHONE_ADJACENCY_SCAN_RE.search(text) + if hit: + found["phone"] = hit.group(1) + # 倒装属最低置信层: whatsapp/phone 任一已被更高置信源捕获即跳过, + # 不与之竞争(跨 key 门控故含 phone)。 + if "whatsapp" not in found and "phone" not in found: + hit = NUMBER_FIRST_RE.search(text) + if hit: + ch = _number_first_channel(hit) + found[ch] = hit.group(1) + return found + + +def canon(value: str) -> str: + """去重比对用的规范形:邮箱小写,其余取纯数字(S3/R3 best-effort)。""" + value = str(value or "").strip() + if "@" in value: + return value.lower() + return digits_only(value) + + +def standalone_number(text: str) -> str | None: + """整条消息仅为一个号码(Task 12d): 客户"直接甩号"的最显式表达,授予覆盖权。 + ≥9 位下限把年份(4)/美元价(5)/先令价(5-7)全部排除在外; + 允许 +/-/空格/横线/点/括号包裹,其余任何字符(字母/逗号)即非独立号码条。""" + t = (text or "").strip() + if not re.fullmatch(r"\+?[\d\s\-().·]{9,25}", t): + return None + return t if 9 <= len(digits_only(t)) <= 15 else None + + +def latest_stated_contacts(messages: list[dict]) -> dict: + """最新显式自述(唯一可覆盖 extractor 回传的来源,Task 12): + + 同 key 取全历史最后一次显式自述。覆盖权仅授予: + - 上下文门控捕获(whatsapp/wa.me/wa:、my (new/other) number is、msg/text/ping me、colon 形式、email) + - 倒装渠道自述(NUMBER_FIRST_RE: "0712 345 678 is my whatsapp"、 + "13800138000 我的微信"——只认显式渠道词) + - "更正语境 ∧ 同消息裸国际号"(wrong number, use +86...) + 纯裸数字无覆盖权(S1): 防价格/年份/订单号误翻新。 + 例外(Task 12d): 整条消息仅为一个号码(≥9位) = 最显式自述,授予覆盖权。 + 通则(权威契约): 正则接进本循环即授覆盖权——新增低精度形态时只进 + 扫描辅源 scan_user_messages,不进这里(先例: PHONE_ADJACENCY_SCAN_RE, + 裸 my number 邻接曾致更正邮件全灭)。 + """ + latest: dict[str, str] = {} + for msg in messages: + if msg.get("role") != "user": + continue + text = msg.get("content") or "" + hit = EMAIL_RE.search(text) + if hit: + latest["email"] = hit.group(0) + hit = WHATSAPP_CTX_RE.search(text) + if hit: + latest["whatsapp"] = hit.group(1) + sn = standalone_number(text) + if sn: + latest["phone"] = sn + hit = PHONE_CTX_RE.search(text) + if hit: + latest["phone"] = hit.group(1) + elif CORRECTION_CTX_RE.search(text): + hit = INTL_PHONE_RE.search(text) + if hit: + latest["phone"] = hit.group(0) + hit = NUMBER_FIRST_RE.search(text) + if hit: + ch = _number_first_channel(hit) + latest[ch] = hit.group(1) + return latest + + +def resolve_by_recency(before: dict, after: dict, messages: list[dict]) -> dict: + """最近提及裁决(Task 12c): before 中同 canon 的非 email key 构成一个镜像身份组。 + 组内分歧时,取"出现在最晚客户消息里"的 canon 代表值—— + - 杀掉 extractor 在历史号码间的振荡(旧号总在更早的消息里,天然落败) + - 压制幻觉值(从未出现在任何消息里,last_idx=-1) + - 客户最新消息里的新号(extractor 抓到的裸号)天然胜出 + 组内一致或不同组(本就不同的号)时原样返回。""" + out = dict(after) + groups: dict[str, set[str]] = {} + for k, v in (before or {}).items(): + if k != "email" and v: + groups.setdefault(canon(str(v)), set()).add(k) + user_digits = [ + digits_only(m.get("content") or "") for m in messages + if m.get("role") == "user" + ] + + def last_idx(c: str) -> int: + for i in range(len(user_digits) - 1, -1, -1): + if c and c in user_digits[i]: + return i + return -1 + + for keys in groups.values(): + vals = {k: out[k] for k in keys if out.get(k)} + distinct = {canon(str(v)) for v in vals.values()} + if len(distinct) > 1: + best = max(distinct, key=last_idx) + if last_idx(best) >= 0: + rep = next(v for v in vals.values() if canon(str(v)) == best) + for k in keys: + out[k] = rep + return out diff --git a/app/services/conversation.py b/app/services/conversation.py new file mode 100644 index 0000000..25bfc5f --- /dev/null +++ b/app/services/conversation.py @@ -0,0 +1,645 @@ +import logging +import re +import uuid +from collections.abc import AsyncGenerator +from datetime import datetime, timedelta, timezone + +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from app.models.database import ( + Conversation, ConversationStatus, ConversationSource, + Message, MessageRole, CustomerProfile, Evaluation, IntentLevel, + LeadPushLog, +) +from app.services import email_service, lead_push_service +from app.services.ai_service import AIService +from app.services.boundary_filter import ( + NO_CONTACT_ALREADY, NO_CONTACT_APP, NO_CONTACT_WEB, asks_contact, + deflection_for, no_contact_value, pivot_for, split_sentences, + violates_boundary, +) +from app.services.contact_pipeline import ( + canon, latest_stated_contacts, merge_contacts, normalize_contacts, + resolve_by_recency, scan_user_messages, split_validate, +) + +logger = logging.getLogger(__name__) + +# 职能边界触发词(Task 13.2, 评审#1/#4 修订): 命中即注入红线提醒。精修说明: +# - 裸 "how long"/"多久" 不收(续航类问题常用),英文要求 take/arrive/deliver/ship 邻接, +# 中文只收 到货/多久能到/交货 等明确交付语境 +# - 【评审#1】施压话术本身也触发: 磨价轮("just roughly"/"说个大概")没有价格词, +# 却是最易破防的时刻——压力词单列一组 +# - 【评审#4】v1 补齐漏词: expensive/fee/贵/价钱/总价/落地/划算/免费(短语式)等; +# cost/fee 用 \b 边界,costa rica 不再误命中("costa"含cost但无词边界) +# - 原则: 误触发低害(多一条提醒),漏触发高危(红线失守),词表偏宽;上线后漏词案例回流补词 +BOUNDARY_TRIGGER_RE = re.compile( + r"price|pricing|how\s+much|\bcost\b|discount|cheaper|expensive|\bfee\b|" + r"quote|quotation|shipping\s+(fee|cost|time)|freight|tariff|customs\s+fee|" + r"best\s+offer|any\s+offer|free\s+shipping|" + r"test\s+drive|book(ing)?\s|reserv|arrange|" + r"delivery|lead\s+time|arriv|" + r"how\s+long\s+(does|will|would|to).*(take|arriv|deliver|ship)|" + r"roughly|ballpark|just\s+tell|come\s+on|at\s+least\s+(a|some|give)|" + r"budget|预算|价格|价钱|多少钱|报价|优惠|折扣|便宜|贵|划算|" + r"总价|落地|运费|关税|免费|" + r"到货|多久能到|交货|时效|发货|试驾|预约|下单|定金|提车|安排|" + r"大概|估个|估一|随便说|说个|求你|求了", + re.IGNORECASE, +) + +# 预算路径路由(评审#9): 命中 BOUNDARY 触发词且含预算词 → 走预算 playbook +BUDGET_TRIGGER_RE = re.compile(r"budget|预算", re.IGNORECASE) + +# 索要我方联系方式触发(15.2, doctrine v2): 客户问"你们怎么联系/你的微信多少" +# = 最高意向信号。提醒层按 source 分支: web 指按钮, App 无按钮走反向留资 +# - 排除第一人称将来时: "I'll call you later" 是日常告别语,不是索要联系方式。 +# 必须用定宽 negative lookbehind——lookahead 在动词位置求值,永远看不到 +# 前面的 let me / i'll,不生效。四个 lookbehind 全部定宽合法: i'll(5)、 +# i’ll(5, 弯撇 U+2019 手机常见)、i will(7)、let me(7);IGNORECASE 兼容大写 +CONTACT_ASK_TRIGGER_RE = re.compile( + r"(your|our)\s+(whatsapp|number|phone|email|contact)|" + r"(? int: + global _boundary_seq + _boundary_seq += 1 + return _boundary_seq + + +class ConversationManager: + def __init__(self, db: AsyncSession, ai_service: AIService | None = None): + self.db = db + self.ai = ai_service or AIService() + + async def create_conversation( + self, + source: ConversationSource = ConversationSource.standalone, + client_info: dict | None = None, + page_token: str | None = None, + context: dict | None = None, + ) -> Conversation: + session_id = uuid.uuid4().hex + conv = Conversation( + session_id=session_id, + source=source, + client_info=client_info, + page_token=page_token, + ) + self.db.add(conv) + await self.db.commit() + await self.db.refresh(conv) + + # Conditional whitelist seed of app context into raw_info (red line): + # only when `context` is provided, and only vehicle_name/vehicle_id + # mapped to app_* keys. WS path passes no context -> raw_info stays {}. + raw_info: dict = {} + if context: + if context.get("vehicle_name"): + raw_info["app_vehicle_name"] = context["vehicle_name"] + if context.get("vehicle_id"): + raw_info["app_vehicle_id"] = context["vehicle_id"] + profile = CustomerProfile(conversation_id=conv.id, raw_info=raw_info) + self.db.add(profile) + await self.db.commit() + + return conv + + async def get_by_session(self, session_id: str) -> Conversation | None: + result = await self.db.execute( + select(Conversation).where(Conversation.session_id == session_id) + ) + return result.scalar_one_or_none() + + async def get_by_page_token(self, page_token: str) -> Conversation | None: + result = await self.db.execute( + select(Conversation).where( + Conversation.page_token == page_token, + Conversation.status == ConversationStatus.active, + ) + ) + return result.scalar_one_or_none() + + async def stream_process_message( + self, session_id: str, content: str + ) -> AsyncGenerator[dict, None]: + """Stream AI reply token by token, then do extract/evaluate.""" + conv = await self.get_by_session(session_id) + if not conv: + yield {"type": "error", "message": "session not found"} + return + + if conv.status != ConversationStatus.active: + yield {"type": "error", "message": "conversation ended"} + return + + # Save user message + user_msg = Message( + conversation_id=conv.id, role=MessageRole.user, content=content + ) + self.db.add(user_msg) + await self.db.commit() + + history = await self._load_history(conv.id) + + # Build context reminder (merged into system prompt) + profile = await self._get_profile(conv.id) + + # P0 同轮竞态消除: 当前消息即时正则扫描——仅并入本轮内存视图 + # (提醒/话术路由),不落库;持久化仍由轮末 extractor+scanner 负责, + # 邮件触发时序不变。 + current_scan = scan_user_messages([{"role": "user", "content": content}]) + effective_raw = dict(profile.raw_info or {}) + if current_scan: + effective_raw["联系方式"] = merge_contacts( + current_scan, effective_raw.get("联系方式")) + + context_reminder = self._build_context_reminder( + effective_raw, content, history, source=conv.source.value) + if CONTACT_ASK_TRIGGER_RE.search(content or ""): + logger.info("Contact-ask reminder fired (source=%s)", conv.source.value) + + # Enrich short user messages with context so AI doesn't lose track + history_for_ai = list(history) + enriched = self._enrich_short_message(content, profile.raw_info or {}, history) + if history_for_ai and history_for_ai[-1]["role"] == "user" and enriched != content: + history_for_ai[-1] = {**history_for_ai[-1], "content": enriched} + logger.info("Enriched short message: %r -> %r", content[:50], enriched[:100]) + + # 方案B'(13.7): 句子粒度门控——干净句子逐句流出(恢复打字机), + # 违规句永不流出:已流出内容全部干净,违规时接过渡话术收尾并掐断生成。 + # F6(D6联动): 客户已留联系方式时,收尾话术不得再索要——路由 contact 版 + has_contact = bool(split_validate( + normalize_contacts(effective_raw.get("联系方式")))[0]) + + yield {"type": "stream_start"} + emitted = "" + pending = "" + violated = False + dropped_ask = False # Task 5b: 本轮是否有索要句被再索要墙丢弃 + dirty = "" + # 15.3: 双墙裁决——价格墙检查在前: 同句双违规时价格路径话术优先 + # (职能边界话术更具体,且自带留资引导);仅纯号码/邮箱违规时 + # violation=="no_contact",用零号码墙替换句 + violation = "" + async for token in self.ai.stream_chat(history_for_ai, context=context_reminder): + pending += token + complete, pending = split_sentences(pending) + for sentence in complete: + if violates_boundary(sentence): + violated = True + dirty = sentence + violation = "boundary" + break + if no_contact_value(sentence, history_for_ai): + violated = True + dirty = sentence + violation = "no_contact" + break + # Task 5b 再索要墙: 已留资时索要句静默丢弃(丢句不掐断, + # 其余句子照常流出——软于两墙的掐断+替换) + if has_contact and asks_contact(sentence): + logger.warning("Re-ask wall dropped sentence (conv=%s): %r", + conv.id, sentence[:60]) + dropped_ask = True + continue + for i in range(0, len(sentence), 40): + yield {"type": "stream_chunk", "content": sentence[i:i + 40]} + emitted += sentence + if violated: + break # 提前掐断生成,省 token + if not violated and pending: + if violates_boundary(pending): + violated = True + dirty = pending + violation = "boundary" + elif no_contact_value(pending, history_for_ai): + violated = True + dirty = pending + violation = "no_contact" + elif has_contact and asks_contact(pending): + # Task 5b 再索要墙: 尾巴是索要句 → 静默丢弃(不流出不掐断) + logger.warning("Re-ask wall dropped tail (conv=%s): %r", + conv.id, pending[:60]) + dropped_ask = True + else: + for i in range(0, len(pending), 40): + yield {"type": "stream_chunk", "content": pending[i:i + 40]} + emitted += pending + if violated: + if violation == "no_contact": + # 零号码墙替换句: 已留资→确认话术(不再索要);未留资按 source 分支 + # (App 无按钮 → 反向留资; web/widget/standalone → 指顶部按钮) + logger.warning( + "No-contact wall replaced sentence (conv=%s): %r", + conv.id, dirty[:60]) + closing = (NO_CONTACT_ALREADY if has_contact + else (NO_CONTACT_APP if conv.source.value == "app" + else NO_CONTACT_WEB)) + else: + logger.warning( + "Boundary filter intercepted sentence (conv=%s): %r | tail=%r", + conv.id, dirty[:80], (pending or "")[:40]) + closing = (pivot_for(content, has_contact) if emitted + else deflection_for(content, _boundary_rotate(), + has_contact=has_contact)) + for i in range(0, len(closing), 40): + yield {"type": "stream_chunk", "content": closing[i:i + 40]} + emitted += closing + # Task 5b 评审修正: 整条回复只有索要句(全被丢)→ 兜底流出"经理主动 + # 联系"句,绝不空回复。与上方墙收尾互斥——violated 路径已自带收尾, + # 此处仅在无任何实义内容流出时接管;已流出的纯空白前缀一并作废, + # 落库恒为完整兜底句(客户看到的比一个空格更糟的是: 什么都没有)。 + if not violated and dropped_ask and not emitted.strip(): + logger.warning("Re-ask wall dropped entire reply (conv=%s), " + "falling back to closing", conv.id) + for i in range(0, len(NO_CONTACT_ALREADY), 40): + yield {"type": "stream_chunk", + "content": NO_CONTACT_ALREADY[i:i + 40]} + emitted = NO_CONTACT_ALREADY + yield {"type": "stream_end"} + ai_reply = emitted # 落库与流出统一为已流出文本(下方持久化) + + # Save assistant message (skip if empty) + if ai_reply.strip(): + assistant_msg = Message( + conversation_id=conv.id, role=MessageRole.assistant, content=ai_reply + ) + self.db.add(assistant_msg) + await self.db.commit() + + # Round 2: Extract info (background) + full_history = history + [{"role": "assistant", "content": ai_reply}] + profile = await self._get_profile(conv.id) + + # Task 12b: 轮前联系方式快照(extractor 深合并 + 覆盖 + 同号同步的比对基线) + before_contacts = normalize_contacts((profile.raw_info or {}).get("联系方式")) + + new_info = await self.ai.extract_info( + full_history, existing_info=profile.raw_info or {} + ) + logger.info("Extractor result: %s", new_info) + if new_info: + raw = dict(profile.raw_info or {}) + for k, v in new_info.items(): + # 联系方式深合并(同key新值覆盖),其余顶层覆盖 —— 堵浅合并抹数据 + if k == "联系方式": + raw[k] = merge_contacts(raw.get(k), v) + else: + raw[k] = v + profile.raw_info = raw + self.db.add(profile) + + # Round 2.5: 联系方式正则辅源(S4: 扫全量客户消息历史) + # 🔴 合并方向: 扫描器只填空,extractor 已有值优先——否则扫描器的 + # 首个历史值会压掉 extractor 后续捕获的改号, D4 更正邮件失效 + scanned = scan_user_messages(full_history) + if scanned: + raw = dict(profile.raw_info or {}) + raw["联系方式"] = merge_contacts(scanned, raw.get("联系方式")) + profile.raw_info = raw + self.db.add(profile) + + # Task 12: 最新显式自述优先 —— 唯一允许文本压过 extractor 回传的位置 + # (extractor 受"保留已有信息"倾向会滞留旧值,实测 wrong number 场景命中) + latest_stated = latest_stated_contacts(full_history) + if latest_stated: + current = normalize_contacts((profile.raw_info or {}).get("联系方式")) + changed = False + for k, v in latest_stated.items(): + if v and canon(str(v)) != canon(str(current.get(k, ""))): + current[k] = v + changed = True + if changed: + raw = dict(profile.raw_info or {}) + raw["联系方式"] = current + profile.raw_info = raw + self.db.add(profile) + + # Task 12c 最近提及裁决: 镜像组分歧时以客户最晚提及的号码为准 + # (杀 extractor 历史振荡 + 压制幻觉;Task 12b 同号同步场景被涵盖) + after_contacts = normalize_contacts((profile.raw_info or {}).get("联系方式")) + resolved = resolve_by_recency(before_contacts, after_contacts, full_history) + if resolved != after_contacts: + raw = dict(profile.raw_info or {}) + raw["联系方式"] = resolved + profile.raw_info = raw + self.db.add(profile) + + # Round 3: Evaluate (仅 ≥3 条客户消息才有意义, 前两轮必然 pending —— D7) + user_msg_count = sum(1 for m in full_history if m["role"] == "user") + evaluation_ran = user_msg_count >= 3 + if evaluation_ran: + evaluation = await self.ai.evaluate( + profile=profile.raw_info or {}, + recent_messages=full_history, + ) + else: + # 客户端 evaluated 事件语义保持 pending;邮件标签由 evaluation_ran 决定(D2) + evaluation = {"intent_level": "pending", "reasoning": "", + "contact_info": {}, "info_sufficient": False} + logger.info("Evaluation (stream): profile=%s | eval=%s", + profile.raw_info, evaluation) + + # 邮件触发(D1): 与会话结束彻底解耦,联系方式到手即发 + pending_pushes: list[LeadPushLog] = [] + await self._maybe_send_lead_email( + conv, profile, evaluation, evaluated=evaluation_ran, + pending_pushes=pending_pushes, + ) + + # 联系方式判定(供 D8 评估落库): 有意向但没联系方式 → 卡单供 admin 人工兜底 + confirmed_now, _ = split_validate( + normalize_contacts((profile.raw_info or {}).get("联系方式"))) + + # 评估落库(D8 泛化): 每轮评估后刷新意向;email_sent/correction_count + # 永不触碰。有意向无联系方式 = 卡单(admin 可筛);已发过邮件的 + # contact_info 由触发器更正分支管理,这里不覆盖。 + if user_msg_count >= 3: + ev = await self._get_or_init_evaluation(conv.id) + ev.intent_level = IntentLevel(evaluation.get("intent_level", "pending")) + ev.reasoning = evaluation.get("reasoning", "") + if not confirmed_now: + ev.contact_info = {} + elif not ev.email_sent: + ev.contact_info = confirmed_now + self.db.add(ev) + + # 决策A(2026-08-18): 自动结束移除——会话永不因评估结果结束; + # evaluated 事件保留但 ended 恒为 False(客户端协议不变)。 + await self.db.commit() + + # 询盘推送(设计 8.1): 主事务提交后才派生后台任务——payload 内存 + # 传递,任务不读库只写结果;fire 为同步函数,纳秒级返回不阻塞 + lead_push_service.fire_pending_pushes(pending_pushes) + + yield { + "type": "evaluated", + "ended": False, + "intent_level": evaluation.get("intent_level", "pending"), + } + + async def _get_or_init_evaluation(self, conv_id: str) -> Evaluation: + result = await self.db.execute( + select(Evaluation).where(Evaluation.conversation_id == conv_id) + ) + ev = result.scalar_one_or_none() + if not ev: + ev = Evaluation( + conversation_id=conv_id, + intent_level=IntentLevel.pending, + contact_info={}, + ) + self.db.add(ev) + await self.db.flush() + return ev + + async def _recently_emailed_canons(self) -> set[str]: + cutoff = datetime.now(timezone.utc) - timedelta(hours=24) + # 只取需要的列;🔴 禁止加 LIMIT——完整 24h 窗口才正确 + result = await self.db.execute( + select(Evaluation.contact_info).where( + Evaluation.email_sent.is_(True), + Evaluation.evaluated_at >= cutoff, + ) + ) + seen: set[str] = set() + for (contact_info,) in result: + for v in (contact_info or {}).values(): + if v: + seen.add(canon(str(v))) + return seen + + async def _maybe_send_lead_email( + self, conv: Conversation, profile: CustomerProfile, evaluation: dict, + evaluated: bool = True, + pending_pushes: list[LeadPushLog] | None = None, + ) -> None: + """D1: 联系方式是发邮件的唯一条件。confirmed 才触发;suspect 只进提醒。 + + evaluated=False 表示本轮跳过了 GLM 评估(<3条客户消息)——此时邮件 + intent_level 必须传空串(→[未评估]),不得把客户端事件用的 "pending" + 透传成 [待确认](D2 两者语义不同)。 + """ + contacts_all = normalize_contacts((profile.raw_info or {}).get("联系方式")) + confirmed, _suspect = split_validate(contacts_all) + if not confirmed: + return + ev = await self._get_or_init_evaluation(conv.id) + + if not ev.email_sent: + # S3: 任一值已见于24h内其他会话 → 轻提醒;否则全量 + seen = await self._recently_emailed_canons() + if any(canon(str(v)) in seen for v in confirmed.values()): + await self._collect_push( + pending_pushes, ev, conv, profile, confirmed, + "returning", evaluation, evaluated) + sent = await email_service.send_returning_lead_email(confirmed) + else: + await self._collect_push( + pending_pushes, ev, conv, profile, confirmed, + "lead", evaluation, evaluated) + messages = await self._load_history(conv.id) + sent = await email_service.send_lead_email( + customer_profile=profile.raw_info or {}, + contact_info=confirmed, + reasoning=evaluation.get("reasoning", ""), + conversation_messages=messages, + intent_level=evaluation.get("intent_level", "") if evaluated else "", + ) + if sent: + ev.email_sent = True + ev.contact_info = confirmed + self.db.add(ev) + else: + old_canons = {canon(str(v)) for v in (ev.contact_info or {}).values()} + if any(canon(str(v)) not in old_canons for v in confirmed.values()): + if ev.correction_count < 3: + count = ev.correction_count + 1 + await self._collect_push( + pending_pushes, ev, conv, profile, confirmed, + "correction", evaluation, evaluated) + if await email_service.send_correction_email(confirmed, count=count): + ev.correction_count = count + ev.contact_info = confirmed + self.db.add(ev) + else: + # D4'(2026-08-18): 锁邮件不锁快照 —— 上限已到, + # admin 仍要看到客户最新号码 + ev.contact_info = confirmed + self.db.add(ev) + + async def _collect_push( + self, pending, ev, conv, profile, confirmed, + push_type, evaluation, evaluated, + ) -> None: + """询盘推送派发(设计 §8): 触发条件=进入发信分支,与 SMTP 成败解耦。 + + dispatch 内部吞异常(失败只记日志),这里无需再兜。 + """ + log = await lead_push_service.dispatch_lead_push( + self.db, ev, conv, profile, confirmed, push_type, + evaluation, evaluated, + ) + if log is not None and pending is not None: + pending.append(log) + + async def _load_history(self, conv_id: str) -> list[dict]: + result = await self.db.execute( + select(Message) + .where(Message.conversation_id == conv_id) + .order_by(Message.created_at) + ) + messages = result.scalars().all() + return [{"role": m.role.value, "content": m.content} for m in messages] + + async def _get_profile(self, conv_id: str) -> CustomerProfile: + result = await self.db.execute( + select(CustomerProfile).where(CustomerProfile.conversation_id == conv_id) + ) + return result.scalar_one() + + @staticmethod + def _enrich_short_message(content: str, raw_info: dict, history: list[dict] | None = None) -> str: + """Enrich short user messages with conversation context. + + Two sources: extractor output (primary), last substantive user + message (fallback when extractor hasn't run yet). + """ + if len(content.strip()) >= 30: + return content + + facts = [] + + # Primary: extractor output + if raw_info: + facts = [f"{k}: {v}" for k, v in raw_info.items() + if v and not str(k).startswith("_") and k != "联系方式"] + + # Fallback: use last substantive user message as context + if not facts and history: + for msg in reversed(history[:-1]): + if msg.get("role") == "user" and len(msg.get("content", "").strip()) >= 5: + facts.append("客户之前说: " + msg["content"][:80]) + break + + if not facts: + return content + + return ( + content + + "\n\n【系统上下文 - 系统标注,不要向客户提及】已知: " + + " | ".join(facts) + + "。不要重复询问这些已确认的信息!" + ) + + @staticmethod + def _build_context_reminder(raw_info: dict, latest_msg: str, + history: list[dict] | None = None, + source: str = "") -> str: + """Build a context reminder from extracted profile info.""" + # 职能边界提醒(评审#7: 前置到早退之前,首条消息画像为空也要生效) + boundary_note = "" + if BOUNDARY_TRIGGER_RE.search(latest_msg or ""): + if BUDGET_TRIGGER_RE.search(latest_msg or ""): + # 评审#9: 预算求推荐 → 预算路径(推荐+反问+引导),不一刀切要号 + boundary_note = ( + "⚠️ 职能边界提醒:客户报预算求推荐。推荐车型但绝不复述预算数字、" + "不报车价 → 反问意向车型 → 顺势引导留联系方式。") + else: + boundary_note = ( + "⚠️ 职能边界提醒:客户正在询问价格/优惠/交付时效/实质安排。绝对禁止" + "给出任何价格数字(包括复述客户自己的预算)、交付时间或任何承诺," + "按职能边界对应话术处理。") + + # 联系方式状态前移(供 boundary/contact 提醒共用判定) + contacts_all = normalize_contacts(raw_info.get("联系方式")) + confirmed, suspect = split_validate(contacts_all) + + # 索要我方联系方式提醒(15.2): 与 boundary_note 同样前移到早退之前, + # 空画像首条消息也要生效;按 source 分支(widget/standalone 有按钮, app 无)。 + # 冒烟实证: 抽象指令("用App话术")GLM 会无视并背 prompt 里更显眼的 web 脚本—— + # 提醒必须携带该分支的逐字话术,不让模型自己挑。 + contact_note = "" + if CONTACT_ASK_TRIGGER_RE.search(latest_msg or ""): + if source == "app": + if confirmed or suspect: + # 已留资: 索要我方联系方式 → 逐字"经理主动联系"版, + # 与"禁止再索要"提醒不再打架 + contact_note = ( + "⚠️ 客户正在索要我方联系方式,且客户已留过自己的联系方式。" + "请逐字使用这句:\"Our manager will reach out to you at your " + "WhatsApp shortly with the full quote!\"(中文同理)。" + "绝对禁止输出任何号码或邮箱,也绝对禁止再索要联系方式。") + else: + contact_note = ("⚠️ 客户正在索要我方联系方式(最高意向信号)。当前为 App 会话," + "没有页面按钮——禁止使用任何 tap/button 按钮话术!请逐字使用这句:" + "\"Drop your WhatsApp and our manager will reach out to you directly " + "with the full quote!\"(中文同理引导客户留联系方式)。" + "绝对禁止输出任何号码或邮箱。") + else: + contact_note = ("⚠️ 客户正在索要我方联系方式(最高意向信号)。请逐字使用这句指路:" + "\"Just tap the WhatsApp button at the top of this chat — " + "our manager replies fast!\"(邮箱同理指 Email 按钮)。" + "绝对禁止口头报出任何号码或邮箱。") + + if not raw_info: + # 空画像:仅返回边界/联系提醒(可能为空串) + return "\n".join(x for x in (boundary_note, contact_note) if x) + + parts = ["[上下文提醒 - 这是一条系统指令,绝对不要向客户提及这段内容]"] + parts.append("客户已明确告知以下信息,你绝对不能再问这些:") + + for key, val in raw_info.items(): + if str(key).startswith("_") or key == "联系方式": + continue # 内部状态与联系方式单独渲染 + if val: + parts.append(f"{key}: {val}") + + # 联系方式专项(D6) 与 职能边界(D6联动) + if confirmed: + shown = ", ".join( + f"{k}: {' '.join(str(v).split())[:60]}" for k, v in confirmed.items()) + # 逐字话术直接引用 NO_CONTACT_ALREADY 常量(Task 5 已 import)—— + # 与零号码墙替换句同源,三处"经理主动联系"话术不漂移 + parts.append(f"⚠️ 客户已提供联系方式({shown})。绝对禁止再索要任何联系方式!" + f"需要回应时可直接逐字使用:\"{NO_CONTACT_ALREADY}\"(中文同理)。" + f"确认收到后继续解答客户问题即可,不必急着结束对话。") + if boundary_note: + parts.append(boundary_note) + parts.append("客户已留过联系方式——边界请求直接告知'客户经理会把准确报价/" + "安排发到你 WhatsApp'即可,禁止再索要联系方式。") + elif suspect: + shown = ", ".join( + f"{k}: {' '.join(str(v).split())[:60]}" for k, v in suspect.items()) + parts.append(f"⚠️ 客户疑似已提供联系方式({shown})。禁止重新索要;" + f"可礼貌地请客户确认一次。") + if boundary_note: + parts.append(boundary_note) + + if boundary_note and not confirmed and not suspect: + parts.append(boundary_note) # 未留资:边界提醒引导留资(职能边界话术自带) + + # 15.2: 索要我方联系方式提醒注入(镜像 boundary_note 的挂载位)。 + # 互留提示仅限 web 来源且客户未留资(confirmed/suspect 都算"已留"); + # App 的反向留资话术本身就是主话术,不再叠加 + if contact_note: + note = contact_note + if source != "app" and not confirmed and not suspect: + note += "客户尚未留过联系方式,可顺势轻问一句(每会话最多一次)。" + parts.append(note) + + if len(latest_msg.strip()) < 25: + parts.append("⚠️ 客户发的是短消息!必须结合上面已知信息来理解,绝对不能当作独立问题!") + + return "\n".join(parts) diff --git a/app/services/email_service.py b/app/services/email_service.py new file mode 100644 index 0000000..f7ee35d --- /dev/null +++ b/app/services/email_service.py @@ -0,0 +1,129 @@ +import html +import logging +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText + +import aiosmtplib + +from app.config import settings + +logger = logging.getLogger(__name__) + +TAG_LABELS = { + "interested": "意向强", "pending": "待确认", + "not_interested": "无意向", "": "未评估", +} +CONTACT_LABELS = {"phone": "手机", "whatsapp": "WhatsApp", "email": "邮箱", "wechat": "微信"} + + +def _esc(v) -> str: + return html.escape(str(v)) if v else "" + + +def _flat(v) -> str: + """主题行用:折叠空白(堵换行注入头部的通道)+ 限长。""" + return " ".join(str(v).split())[:60] + + +def _contact_rows(contacts: dict) -> str: + return "".join( + f"{html.escape(CONTACT_LABELS.get(k, k))}" + f"{_esc(v)}" + for k, v in (contacts or {}).items() if v + ) + + +async def _send(msg: MIMEMultipart) -> bool: + if not all([settings.SMTP_HOST, settings.SMTP_USER, settings.NOTIFY_EMAIL]): + logger.warning("SMTP not configured, skipping email") + return False + try: + await aiosmtplib.send( + msg, hostname=settings.SMTP_HOST, port=settings.SMTP_PORT, + username=settings.SMTP_USER, password=settings.SMTP_PASS, + use_tls=True, + ) + logger.info("Lead email sent to %s", settings.NOTIFY_EMAIL) + return True + except Exception: + logger.exception("Failed to send lead email") + return False + + +async def send_lead_email( + customer_profile: dict, + contact_info: dict, + reasoning: str, + conversation_messages: list[dict], + intent_level: str = "", +) -> bool: + tag = TAG_LABELS.get(intent_level, "未评估") + contacts = dict(contact_info or {}) + country = (customer_profile or {}).get("目标国家", "") + if not country: + country = (customer_profile or {}).get("target_country", "未知") + + msg = MIMEMultipart("alternative") + contact_parts = [ + f"{CONTACT_LABELS.get(k, k)}: {_flat(v)}" for k, v in contacts.items() if v + ] + subject = f"[新询盘·{tag}] {_flat(country)}" + if contact_parts: + subject += " | " + ", ".join(contact_parts) + msg["Subject"] = subject + msg["From"] = f"【XYH】 <{settings.SMTP_USER}>" + msg["To"] = settings.NOTIFY_EMAIL + + info_rows = "".join( + f"{_esc(k)}" + f"{_esc(v)}" + for k, v in (customer_profile or {}).items() if not str(k).startswith("_") + ) + chat_lines = "".join( + f"
{'客户' if m.get('role') == 'user' else 'AI'}: {_esc(m.get('content', ''))}
" + for m in conversation_messages or [] + ) + + html_body = f""" + +

🎉 新询盘({html.escape(tag)})

+

联系方式

+ {_contact_rows(contacts)}
+

客户画像

+ {info_rows}
+

评估理由

{_esc(reasoning)}

+

完整对话记录

+
{chat_lines}
+

注:邮件为触发时快照,对话可能仍在进行,最新记录请以后台为准。

+ + """ + msg.attach(MIMEText(html_body, "html", "utf-8")) + return await _send(msg) + + +async def send_returning_lead_email(contact_info: dict) -> bool: + """D5: 24h 内同联系方式再访,只发一行轻提醒。""" + contact_parts = [ + f"{CONTACT_LABELS.get(k, k)}: {_flat(v)}" for k, v in (contact_info or {}).items() if v + ] + msg = MIMEMultipart("alternative") + msg["Subject"] = f"[线索回访] {' | '.join(contact_parts) or '已知客户'}再次来访" + msg["From"] = f"【XYH】 <{settings.SMTP_USER}>" + msg["To"] = settings.NOTIFY_EMAIL + msg.attach(MIMEText( + f"

该联系方式 24h 内已发过完整询盘,客户又开启了新对话," + f"详情请查后台。

", "html", "utf-8")) + return await _send(msg) + + +async def send_correction_email(contact_info: dict, count: int = 1) -> bool: + """D4: 联系方式变化(改号/新增/无提示换值)后的轻量更正邮件,每会话上限3封。""" + msg = MIMEMultipart("alternative") + msg["Subject"] = f"[询盘·更正{count}] 客户联系方式已更新(以本封为准)" + msg["From"] = f"【XYH】 <{settings.SMTP_USER}>" + msg["To"] = settings.NOTIFY_EMAIL + msg.attach(MIMEText( + f"

这是本会话第 {count} 次更正(上限 3 次),请以本封为准:

" + f"{_contact_rows(contact_info)}
" + f"", "html", "utf-8")) + return await _send(msg) diff --git a/app/services/ip_service.py b/app/services/ip_service.py new file mode 100644 index 0000000..79ec787 --- /dev/null +++ b/app/services/ip_service.py @@ -0,0 +1,28 @@ +from iptocc import country_code + +# ISO 3166-1 alpha-2 to country name (common ones) +COUNTRY_NAMES = { + "CN": "中国", "US": "美国", "NG": "尼日利亚", "GH": "加纳", + "KE": "肯尼亚", "TZ": "坦桑尼亚", "ZA": "南非", "EG": "埃及", + "AE": "阿联酋", "SA": "沙特阿拉伯", "IQ": "伊拉克", "JO": "约旦", + "PK": "巴基斯坦", "BD": "孟加拉国", "IN": "印度", "TH": "泰国", + "VN": "越南", "ID": "印尼", "PH": "菲律宾", "MY": "马来西亚", + "JP": "日本", "KR": "韩国", "GB": "英国", "DE": "德国", + "FR": "法国", "RU": "俄罗斯", "BR": "巴西", "MX": "墨西哥", + "AU": "加拿大", "AU": "澳大利亚", "TR": "土耳其", "IR": "伊朗", + "MM": "缅甸", "KH": "柬埔寨", "LA": "老挝", "LK": "斯里兰卡", + "NP": "尼泊尔", "UG": "乌干达", "ET": "埃塞俄比亚", "SN": "塞内加尔", + "CI": "科特迪瓦", "CM": "喀麦隆", "CD": "刚果(金)", "MZ": "莫桑比克", +} + + +def resolve_country(ip: str) -> str: + if not ip or ip in ("127.0.0.1", "::1", "localhost"): + return "本地" + try: + code = country_code(ip) + if code and code != "--": + return COUNTRY_NAMES.get(code, code) + return "未知" + except Exception: + return "未知" diff --git a/app/services/lead_push_service.py b/app/services/lead_push_service.py new file mode 100644 index 0000000..25a9006 --- /dev/null +++ b/app/services/lead_push_service.py @@ -0,0 +1,298 @@ +"""询盘推送 UniService 服务(设计 2026-09-28-lead-push-to-uniservice)。 + +三个入口: +- dispatch_lead_push: 触发点调用(发信分支进入处),写 pending/skipped 日志。 + 红线: 整体吞异常,绝不影响邮件主流程。 +- fire_pending_pushes: 主事务 commit 之后调用,create_task 派生后台任务。 +- sweep_stale_pending: lifespan 启动清扫(崩溃遗留的 pending → failed)。 + +后台任务红线(设计 8.1): 不读库只写结果,payload 内存传递; +结果写入用独立 session(from app.main import async_session,照 chat_rest 模式)。 +""" +import asyncio +import logging +from datetime import datetime, timedelta, timezone + +import httpx +from sqlalchemy import func, select, update +from sqlalchemy.ext.asyncio import AsyncSession + +from app.config import settings +from app.main import async_session +from app.models.database import ( + Conversation, CustomerProfile, Evaluation, IntentLevel, LeadPushLog, + Message, MessageRole, +) +from app.services.ip_service import resolve_country + +logger = logging.getLogger(__name__) + +# 对方契约(docs/AI_INQUIRY_PUSH_API.md): phone/whatsapp/email 至少一个有效 +_TRIO = ("phone", "whatsapp", "email") +_CST = timezone(timedelta(hours=8)) +_INTENT_MAP = { + "interested": "high", + "pending": "medium", + "not_interested": "low", +} + + +def _fmt_cst(dt: datetime) -> str: + """UTC(-aware 或 naive)→ +08:00 ISO 串。对方明确拒收 UTC(契约 §2)。""" + if dt.tzinfo is None: + dt = dt.replace(tzinfo=timezone.utc) + dt = dt.replace(microsecond=0) # 归一整秒: 契约示例为整秒,亚秒精度无益且冒严格解析器拒收风险 + return dt.astimezone(_CST).isoformat() + + +def map_intent(level: str | None, evaluated: bool) -> str: + """我方 IntentLevel → 对方 high/medium/low/unknown。 + + evaluated=False(<3 条客户消息,D2)→ unknown: 未评估不是"待确认", + 与邮件标签 [未评估]/[待确认] 的区分同源。 + """ + if not evaluated or not level: + return "unknown" + return _INTENT_MAP.get(level, "unknown") + + +_sleep = asyncio.sleep # 模块级绑定,测试 monkeypatch 记录退避序列用 + + +async def _build_payload( + db: AsyncSession, ev: Evaluation, conv: Conversation, + profile: CustomerProfile, confirmed: dict, push_type: str, + evaluation: dict, evaluated: bool, +) -> dict: + """组装契约报文(设计 7.2 映射表)。仅读当前事务,不产生副作用。""" + # 7.1 event 规则: 仅更正可能 update,且必须同会话此前推送成功过 + # (不依赖对方"update 未知键"的未定义行为) + event = "new" + if push_type == "correction": + prior = await db.execute( + select(func.count()).select_from(LeadPushLog).where( + LeadPushLog.conversation_id == conv.id, + LeadPushLog.status == "success", + )) + if (prior.scalar() or 0) > 0: + event = "update" + + result = await db.execute( + select(Message) + .where(Message.conversation_id == conv.id) + .order_by(Message.created_at) + ) + msgs = result.scalars().all() + + raw_info = profile.raw_info or {} + client_info = conv.client_info or {} + profile_out = dict(raw_info) + profile_out["country"] = resolve_country(client_info.get("ip", "")) + profile_out["source"] = conv.source.value + if client_info.get("lang"): + profile_out["语言"] = client_info["lang"] + + reasoning = (evaluation.get("reasoning") or "") if evaluated else "" + + return { + "event": event, + "external_key": f"{settings.PUSH_EXTERNAL_KEY_PREFIX}-{conv.id}", + "occurred_at": _fmt_cst(datetime.now(timezone.utc)), + "contact": { + "name": None, # 我方 contact_info 快照无称呼字段,契约可空 + "phone": confirmed.get("phone"), + "whatsapp": confirmed.get("whatsapp"), + "email": confirmed.get("email"), + "wechat": confirmed.get("wechat"), + "skype": None, + }, + "intent_level": map_intent(evaluation.get("intent_level"), evaluated), + "intent_reason": reasoning or None, + "profile": profile_out, + "conversation": [ + { + "role": "customer" if m.role == MessageRole.user else "ai", + "text": m.content, + "at": _fmt_cst(m.created_at), + } + for m in msgs if m.role in (MessageRole.user, MessageRole.assistant) + ], + } + + +async def dispatch_lead_push( + db: AsyncSession, ev: Evaluation, conv: Conversation, + profile: CustomerProfile, confirmed: dict, push_type: str, + evaluation: dict, evaluated: bool, +) -> LeadPushLog | None: + """触发点唯一入口: 返回待派发的 pending 行(加入当前事务,随主事务提交)。 + + 红线(设计 6.1): 整体吞异常——任何失败只记日志,绝不影响邮件主流程; + 触发条件 = 调用方进入发信分支,与 SMTP 成败解耦。 + DB 层失败用 SAVEPOINT 隔离: 只回滚推送写入,不毒化调用方事务 + (否则 flush 失败 → PendingRollbackError → email_sent 落不了库 → 重复发邮件)。 + """ + if not settings.PUSH_ENABLED: + return None + try: + async with db.begin_nested(): + # 三选一预检(设计 §4 skipped 语义): 对方必拒,不发 HTTP 只留审计痕迹 + if not any(confirmed.get(k) for k in _TRIO): + db.add(LeadPushLog( + evaluation_id=ev.id, conversation_id=conv.id, + push_type=push_type, status="skipped", attempts=0, + error_message="no valid contact (phone/whatsapp/email)", + )) + return None + payload = await _build_payload( + db, ev, conv, profile, confirmed, push_type, evaluation, evaluated) + log = LeadPushLog( + evaluation_id=ev.id, conversation_id=conv.id, + push_type=push_type, status="pending", attempts=0, + request_payload=payload, + ) + db.add(log) + await db.flush() # 取 id 供后台任务写结果 + return log + except Exception: + logger.exception("dispatch_lead_push failed (type=%s, conv=%s)", + push_type, conv.id) + return None + + +async def _do_post(payload: dict) -> tuple[httpx.Response | None, str | None]: + """实际 HTTP 调用(独立函数便于测试 monkeypatch)。 + + 返回 (resp, transport_error): 传输层异常不抛出,转成错误串由重试矩阵消化。 + """ + try: + async with httpx.AsyncClient( + timeout=settings.PUSH_TIMEOUT_SECONDS, + follow_redirects=True) as client: # 307/308 不落终态失败 + resp = await client.post( + settings.PUSH_API_URL, + json={"messages": [payload]}, # 契约 §2: 批量结构,我方单条 + headers={"X-Api-Key": settings.PUSH_API_KEY}, + ) + return resp, None + except httpx.HTTPError as exc: + return None, repr(exc) + + +def _retryable(resp: httpx.Response | None) -> bool: + """契约 §3: 5xx/超时可重试;401/400/其他 4xx 重试无益。200 不在此判定。""" + return resp is None or resp.status_code >= 500 + + +async def _update_log(push_log_id: str, **fields) -> None: + """后台任务写结果——独立 session + 小事务(设计 6.3)。""" + async with async_session() as session: + await session.execute( + update(LeadPushLog) + .where(LeadPushLog.id == push_log_id) + .values(**fields) + ) + await session.commit() + + +async def _run_push(push_log_id: str, payload: dict) -> None: + """后台任务体: 分类重试 + 200 逐条结果解析(设计 6.3/§10)。 + + 红线: 全套 try/except,异常只记日志绝不逃逸(fire-and-forget)。 + """ + try: + attempts = 0 + while True: + attempts += 1 + resp, transport_error = await _do_post(payload) + if _retryable(resp) and attempts < settings.PUSH_MAX_ATTEMPTS: + await _update_log( + push_log_id, attempts=attempts, + error_message=transport_error + or (f"http {resp.status_code}" if resp is not None else "unknown"), + ) + await _sleep( + settings.PUSH_RETRY_BACKOFF_BASE * 2 ** (attempts - 1)) + continue + break + + if resp is not None and resp.status_code == 200: + try: + raw = resp.json() + except ValueError: + # 非 JSON 的 200(如网关重定向到 HTML 登录页)—— + # 无法确认对方已接受,诚实落 failed(幂等键保证补推安全) + await _update_log(push_log_id, attempts=attempts, status="failed", + response_status=200, + error_message="non-JSON 200 body") + return + data = raw.get("data") if isinstance(raw, dict) else None + data = data if isinstance(data, dict) else {} + failed_mine = [ + f for f in (data.get("failed") or []) + if f.get("external_key") == payload["external_key"] + ] + if failed_mine: + await _update_log( + push_log_id, attempts=attempts, status="failed", + response_status=200, + error_message=str(failed_mine[0].get("reason") or "rejected"), + ) + else: + # 单条推送: accepted/duplicated 计数即本条结论 + outcome = ("duplicated" + if (data.get("duplicated") or 0) > 0 else "accepted") + await _update_log( + push_log_id, attempts=attempts, status="success", + response_status=200, outcome=outcome, + ) + return + + # 终态失败: 重试耗尽(5xx/传输)或不可重试(401/400/其他) + if resp is not None and resp.status_code in (400, 401): + logger.error("lead push rejected (log_id=%s, http %s) — " + "密钥/报文问题需人工介入,不重试", + push_log_id, resp.status_code) + await _update_log( + push_log_id, attempts=attempts, status="failed", + response_status=resp.status_code if resp is not None else None, + error_message=transport_error + or (f"http {resp.status_code}" if resp is not None else "unknown"), + ) + except Exception: + logger.exception("lead push task crashed (log_id=%s)", push_log_id) + + +# 后台任务引用集: 防 GC(asyncio 官方要求),done 即移除 +_tasks: set[asyncio.Task] = set() + + +def fire_pending_pushes(pushes: list[LeadPushLog]) -> None: + """主事务 commit 之后调用(设计 8.1): payload 内存传递,任务不读库。 + + 同步函数、纳秒级返回——这就是"不阻塞"的派发点。 + """ + for log in pushes: + if log.status != "pending": + continue + task = asyncio.create_task(_run_push(log.id, log.request_payload)) + _tasks.add(task) + task.add_done_callback(_tasks.discard) + + +async def sweep_stale_pending(stale_minutes: int = 30) -> int: + """启动清扫(设计 8.2): 崩溃遗留的 pending → failed。 + + 已知限制(设计 §14): 推送成功但结果写回失败也会被标 failed—— + 幂等键保证将来补推安全(对方返回 duplicated),概率极低,接受。 + """ + cutoff = datetime.now(timezone.utc) - timedelta(minutes=stale_minutes) + async with async_session() as session: + result = await session.execute( + update(LeadPushLog).where( + LeadPushLog.status == "pending", + LeadPushLog.updated_at < cutoff, + ).values(status="failed", error_message="interrupted by restart") + ) + await session.commit() + return result.rowcount or 0 diff --git a/app/services/rate_limit.py b/app/services/rate_limit.py new file mode 100644 index 0000000..60c0430 --- /dev/null +++ b/app/services/rate_limit.py @@ -0,0 +1,39 @@ +"""Minimal in-memory rate limiter (per (ip, device_id), rolling 1h window). + +Mirrors hesu's rate_limit.py shape. Only the chat message route uses this; +session/history endpoints are cheap and not throttled. State is process-local +and resets on restart, which is acceptable for a single-worker ai-kefu deploy. + +Caveats: +- Single-process, in-memory. Under `uvicorn --workers >1` each worker keeps + its own `_buckets`, so the effective cap is `max_requests * workers`. +- Keyed on (ip, device_id); a client rotating the `X-Device-Id` header per + request bypasses it. This is a light safeguard against accidental GLM-cost + burn, NOT abuse-proof. +""" +import time +from collections import defaultdict + +_buckets: dict[tuple[str, str], list[float]] = defaultdict(list) +WINDOW = 3600 +DEFAULT_MAX = 30 + + +def check( + ip: str | None, + device_id: str | None, + *, + max_requests: int = DEFAULT_MAX, +) -> bool: + """Return True if the request is under the cap (and record it), else False.""" + key = (ip or "", device_id or "") + now = time.time() + _buckets[key] = [t for t in _buckets[key] if t > now - WINDOW] + if len(_buckets[key]) >= max_requests: + return False + _buckets[key].append(now) + return True + + +def _reset_for_test() -> None: + _buckets.clear() diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..b277e5d --- /dev/null +++ b/deploy.sh @@ -0,0 +1,40 @@ +#!/bin/bash +set -e + +# 兼容 docker compose 和 docker-compose 两种命令 +if docker compose version &>/dev/null; then + DC="docker compose" +elif command -v docker-compose &>/dev/null; then + DC="docker-compose" +else + echo "✗ 未找到 docker compose,请先安装" + exit 1 +fi + +echo ">>> 使用: $DC" + +echo ">>> 停止旧服务" +$DC down 2>/dev/null || true + +echo ">>> 构建镜像" +$DC build + +echo ">>> 启动服务" +$DC up -d + +echo ">>> 等待服务就绪..." +sleep 3 + +# 检查服务状态 +if curl -s http://127.0.0.1:8016/health | grep -q "ok"; then + echo "✓ 服务启动成功 (http://127.0.0.1:8016)" +else + echo "✗ 服务启动失败,请检查日志: $DC logs" + exit 1 +fi + +echo "" +echo "部署完成!" +echo " 聊天页面: http://你的域名/" +echo " 管理后台: http://你的域名/admin" +echo " 健康检查: http://你的域名/health" diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7ebb74b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +services: + app: + build: . + container_name: cc-ai-kefu + restart: always + env_file: + - .env + ports: + - "8016:8000" + volumes: + - ./data:/app/data + environment: + - APP_DEBUG=false diff --git a/docs/2026-08-18-contact-driven-lead-email-changelog.md b/docs/2026-08-18-contact-driven-lead-email-changelog.md new file mode 100644 index 0000000..dd24e6a --- /dev/null +++ b/docs/2026-08-18-contact-driven-lead-email-changelog.md @@ -0,0 +1,141 @@ +# 改动文档:联系方式驱动的询盘邮件(批次 1) + +- **日期**:2026-08-17 ~ 2026-08-18 +- **分支**:`chany_dev_dev`(基于 `ee03e8d`,全部改动在工作区,尚未提交) +- **状态**:77 项测试全绿(基线 17 项),本地真实 GLM + SMTP 冒烟通过,用户实测验收通过 +- **实施档案**:[superpowers/plans/2026-08-17-contact-driven-lead-email.md](superpowers/plans/2026-08-17-contact-driven-lead-email.md)(决策 D1-D13、12 个任务的全过程记录) + +--- + +## 1. 背景与解决的问题 + +| # | 线上问题 | 根因(代码实证) | +|---|---|---| +| 1 | 大量**无联系方式**的询盘邮件推送至销售邮箱 | widget/embedded/standalone 来源的会话结束条件没有联系方式守卫(仅 app 来源有);GLM 评估不遵守"无联系方式不给过"的 prompt 规则 | +| 2 | 有意向客户没留联系方式,**无法触达** | 一判定 interested 就结束会话并锁死客户(ended 后输入框禁用),连补联系方式的机会都没有 | +| 3 | 客户**已给的联系方式被 AI 丢失/重复索要** | extractor 某轮返回空联系方式时浅合并整层覆盖(数据丢失);上下文提醒不含"禁止再索要"指令 | + +**修复后的一句话**:联系方式是发询盘邮件的唯一条件——管道确定性检测到即发;没有就永不发、永不结束会话;已给的绝不丢失、绝不重复索要。 + +--- + +## 2. 核心架构 + +``` +客户每条消息 + ├─ AI 回复(system.md 话术:价值交换要号 → 先聊后引 WhatsApp 兜底) + ├─ 统一联系方式管道(app/services/contact_pipeline.py,纯函数) + │ 源1: extractor 提取(多语言 LLM) + │ 源2: 高置信正则(邻接绑定:裸数字一律不收,防价格/年份/车架号误捕) + │ 源3: 独立裸号(整条消息仅 ≥9 位数字 = 最显式自述) + │ → key 归一化 → 深合并(新值覆盖) → 最新显式自述覆盖 → 最近提及裁决 + │ → 格式校验分级:confirmed(可触发)/ suspect(仅用于提醒) + ├─ 邮件触发器(ConversationManager 内聚,路由层零邮件逻辑) + │ confirmed 首次出现 → [新询盘·标签];24h 跨会话同值 → [线索回访]轻提醒 + │ 联系方式变化 → [询盘·更正N](每会话≤3封);达上限后锁邮件不锁快照 + ├─ 定向提醒:confirmed→"绝对禁止再索要";suspect→"礼貌确认一次"(值经消毒防提示词注入) + ├─ 评估前置:<3 条客户消息跳过 GLM 评估(省 1/3 调用),意向仅作邮件标签 + ├─ 每轮评估落库:interested+无联系方式 = 卡单记录(admin 可筛人工兜底) + └─ 会话永不自动结束(决策 A)——关闭留给后续超时清理 +``` + +--- + +## 3. 文件清单 + +### 新增(5 个文件,1010 行) + +| 文件 | 行数 | 职责 | +|---|---|---| +| `app/services/contact_pipeline.py` | 200 | 统一联系方式管道:`normalize_contacts`(中英文 key 别名归一)、`merge_contacts`(深合并,堵浅合并抹数据)、`split_validate`(confirmed/suspect 分级;微信 ≥4 字符)、`scan_user_messages`(高置信正则扫描,全量客户消息历史)、`latest_stated_contacts`(最新显式自述,唯一可覆盖 extractor 回传的来源)、`standalone_number`(独立裸号 ≥9 位)、`resolve_by_recency`(最近提及裁决:杀 extractor 历史振荡、压幻觉值)、`canon`(去重规范形) | +| `tests/test_contact_pipeline.py` | 253 | 管道 34 项单测(含误报反例:价格/年份/里程/VIN/订单号) | +| `tests/test_lead_email_trigger.py` | 417 | 触发器/结束守卫/提醒/更正链 25 项集成测试(FakeAI 桩,含用户实测 bug 的完整复刻用例) | +| `tests/test_email_rendering.py` | 66 | 邮件渲染 3 项(标签、HTML 转义、内部 key 过滤、RFC2047 扁平化) | +| `scripts/baseline_stats.py` | 74 | 上线前后对比基线统计(只读单次脚本) | + +### 修改(9 个文件,+323 / −329) + +| 文件 | 改动摘要 | +|---|---| +| `app/services/conversation.py` | 核心重构。**新增**:管道接线(深合并修复、正则辅源、覆盖、裁决)、`_maybe_send_lead_email` 触发器、`_get_or_init_evaluation`/`_recently_emailed_canons` 辅助、评估前置、每轮评估落库(卡单标记)、定向提醒与短消息增强的过滤/消毒。**删除**:自动结束逻辑与 `_finalize`(决策 A)、`process_message` 死代码(83 行)、`_has_real_contact`、旧 `ended&&interested→发邮件` 路径的全部依赖 | +| `app/services/email_service.py` | 全量重写。全字段 `html.escape`(D12 防注入);主题意向标签 `[新询盘·意向强/待确认/无意向/未评估]` + 空白折叠加固;中文标签联系方式列;新增 `send_returning_lead_email`([线索回访])与 `send_correction_email(contact_info, count)`([询盘·更正N]);"邮件为触发时快照"提示 | +| `app/api/routes/chat.py` | 拆除 `_try_send_email` 整个函数、email 相关导入与 ended 触发块;WS 连接生命周期保持 HEAD 语义(ended 后关闭连接) | +| `app/api/routes/chat_rest.py` | 拆除 lazy-import 触发块;docstring 更新;App 响应契约字段不变(`ended` 恒为 `false`,见 §8 知会事项) | +| `app/models/database.py` | Evaluation 表新增 `correction_count INT DEFAULT 0` | +| `app/main.py` | `_migrate` 新增 PRAGMA 幂等迁移(实测二次运行 no-op) | +| `app/prompts/system.md` | ①价值交换固定模板(只承诺"完整报价单",禁具体价格/折扣/时限);②先聊后引(聊天内最多要两次,才推 WhatsApp 按钮);③拿到联系方式后确认一句继续解答,不急着收尾;④系统提醒配合(已提供→禁再要;疑似→礼貌确认一次) | +| `app/prompts/extractor.md` | 客户最后提供的号码覆盖旧值;单独数字串也是号码 | +| `tests/test_chat_rest_message.py` | 删除 2 个钉死旧触发路径的测试(被 manager 层新测试取代),保留 reply/404/429 | + +--- + +## 4. 行为对照 + +| 场景 | 改前 | 改后 | +|---|---|---| +| widget 无联系方式 + GLM 误判 interested | 结束会话锁死客户 + 发无联系方式邮件 | 零邮件;会话永不结束,AI 按话术继续争取 | +| 第 1 条消息就带联系方式 | 等判定结束才发 | 立即发 `[新询盘·未评估]` | +| 联系方式被 extractor 空轮抹掉 | 数据丢失 | 深合并保留 | +| AI 重复索要已给的联系方式 | 常发生 | 定向提醒禁止;suspect 值礼貌确认一次 | +| 换号(说/不说"更正") | 依赖 extractor(实测常丢) | 最新显式自述 / 独立裸号 / 最近提及,确定性翻新 | +| 同号镜像两个 key(手机+WhatsApp) | 更正后新旧混排 | 同步翻新,邮件/快照均为最新 | +| extractor 在历史号码间振荡 | 每次翻转烧一封更正邮件 | 最近提及裁决熄灭(实测复刻用例锁死) | +| 同号码 24h 内再开新会话 | 每会话一封全量 | 一行 `[线索回访]` 轻提醒 | +| 更正次数 | —(新能力) | 每会话 ≤3 封 `[更正N]`;达上限锁邮件不锁快照(admin 永远最新) | +| 会话结束 | contact+interested+≥3轮即结束锁死 | **永不自动结束**(决策 A) | +| GLM 评估调用 | 每条消息 | <3 条客户消息跳过 | +| 邮件 HTML | 客户可控文本不转义 | 全转义 + 主题行加固 | + +--- + +## 5. 关键决策记录(产品拍板存档) + +| 决策 | 内容 | +|---|---| +| D1 | 联系方式 = 发邮件唯一条件(不看消息数、不看意向评级) | +| D2 | 意向降级为邮件标签;评估跳过时标签为 [未评估](与客户端事件的 pending 语义分离) | +| D4 | 同会话全量邮件 1 封 + 更正邮件 ≤3 封;锁邮件不锁快照 | +| D5 | 24h 跨会话同值去重 → 轻提醒 | +| D6 | confirmed→禁止再索要 / suspect→礼貌确认(含提示词注入消毒) | +| D7 | 评估前置(<3 轮跳过) | +| D8 | interested+无联系方式 → 卡单记录(admin 人工兜底数据基础) | +| D9 | 旧路由层触发路径整体拆除(与新触发器同批部署,杜绝双发窗口) | +| 决策 A(2026-08-18) | 会话永不自动结束(邮件解耦后自动结束只剩伤害:锁死没问完的客户) | +| 更正上限(2026-08-18) | 1 → 3 次(防轰炸与漏最终号的折中) | + +## 6. 实测驱动的修复链(2026-08-18 用户实测发现的 4 个 bug) + +| 用户反馈 | 定位 | 修复(任务号) | +|---|---|---| +| "wrong number, use X" 不触发更正 | extractor 回传旧值 + 扫描器首中/填空无法翻新 | 最新显式自述覆盖(Task 12) | +| 更正邮件里手机/WhatsApp 新旧混排 | extractor 镜像同号进两个 key,只翻新命中 key | 同号同步(12b)→ 升级为最近提及裁决(12c) | +| 更正配额被烧光、末封邮件显示旧号 | extractor 在历史号码间振荡,每次翻转触发虚假更正 | 最近提及裁决(12c) | +| 直接发裸号不触发更正 | 裸号唯一捕获源是概率性的 extractor | 独立裸号确定性捕获,≥9 位下限排除价格/年份(12d) | + +--- + +## 7. 部署注意事项 ⚠️ + +1. **整体上线,禁止部署中间态**:新触发器与旧路径拆除必须同一批次(D9,中间态存在双发邮件窗口)。 +2. **迁移自动执行**:启动时 `_migrate` 自动为旧库追加 `correction_count` 列,无需手工 SQL。 +3. **跑生产基线**:部署机上执行 `PYTHONIOENCODING=utf-8 python scripts/baseline_stats.py`,覆盖 `docs/superpowers/plans/2026-08-17-baseline.txt`(当前为开发库占位数据)。 +4. **SMTP 必须配置**:首触邮件即时发送;未配置时每条消息都会重试并记日志。 +5. **上线后观测**(对照基线):①新邮件 100% 带联系方式;②全量邮件量 vs 基线上界;③[更正]/[回访] 占比;④admin 卡单数量。 + +## 8. 已知限制与残余风险(台账摘录) + +| 项 | 状态 | +|---|---| +| App 端 `ended` 恒为 false(决策 A) | App 若有"对话结束"闭环 UI 需调整;widget/独立页零影响 | +| 会话只生不死(无超时清理) | 数据卫生问题,功能无害;超时清理排健康轨,**上线后尽早做** | +| 第 1 轮 extractor 幻觉出从未提及的号码 → 首封邮件混排 | 双低概率条件叠加;whatsapp 侧仍真实可联;出现再做 12e | +| 中文无冒号给号句式("我手机号是X")无确定性捕获 | extractor 兜底;实测命中率待观察,低则补中文语境模式 | +| 号码变体击穿 24h 去重 / 撤回已给联系方式 / 客户离开页面后无法找回 | best-effort / 接受 / 物理死局(火力已前置到"人还在"时) | +| ADMIN_PASSWORD 仍为默认 admin123 | H1 暂缓(用户决策),**强烈建议尽快在 .env 修改** | +| 发送成功后落库失败的毫秒级窗口 | at-least-once 有意选择(漏线索比重复邮件贵) | + +## 9. 未包含(后续批次,见实施档案 §6) + +- **批次 2**:widget 会话持久化(localStorage+48h 过期,解决刷新丢会话/重复线索)、前端历史渲染(独立页 loadHistory 空函数)、WS 限流 + 消息长度上限 +- **批次 3**:admin"缺联系方式线索"筛选(基于卡单记录)、UI 留资卡片 +- **健康轨**:删 Redis、SQLite 备份+WAL、GLM 超时重试、admin 分页修复、国家映射(加拿大笔误)、超时清理会话、删除无调用方的 `AIService.chat`、ADMIN_PASSWORD diff --git a/docs/2026-08-19-ai-role-boundary-changelog.md b/docs/2026-08-19-ai-role-boundary-changelog.md new file mode 100644 index 0000000..a028478 --- /dev/null +++ b/docs/2026-08-19-ai-role-boundary-changelog.md @@ -0,0 +1,126 @@ +# 改动文档:AI 职能边界(价格红线 + 转介机制) + +- **日期**:2026-08-18 ~ 2026-08-19 +- **分支**:`chany_dev_dev`,提交 `3028685`(三层防线)+ `9433f96`(句子粒度门控) +- **状态**:106 项测试全绿(基线 77),本地真实 GLM 冒烟 7 路径通过,WS 探针实证打字机恢复 +- **实施档案**:[superpowers/plans/2026-08-18-ai-role-boundary.md](superpowers/plans/2026-08-18-ai-role-boundary.md)(两轮对抗评审 + 13.1-13.7 全过程) + +--- + +## 1. 背景与解决的问题 + +**定位反转**:改造前 system.md 明文要求 AI 报价("宁可给一个不完美的价格估计",且报价是好回复示例)——用户实测 AI 张口就是 "$25k"。改造后 AI 定位为: + +> **信息型助手 + 线索收集器**——介绍车、挖意向、收联系方式。不承担销售职能: +> 不做任何承诺(价格/时间/库存)、不说绝对化的话、不代表公司做决定。 + +价格/优惠/交付时效/实质请求一律迂回引导留资,由客户经理承接——与询盘邮件体系闭环(AI 收集意向+联系方式 → 邮件 → 客户经理报价/安排)。 + +## 2. 核心架构:三层防线(冒烟实测逐层验证) + +``` +客户消息(问价/磨价/问时效/要安排/报预算) + │ + ├─ 第1层 prompt:system.md 职能边界章节 + │ 三类请求处理(信息直答 / 价格时效迂回 / 实质转介) + │ 预算路径(推荐车型但零数字复现→反问意向→引导留资) + │ 节奏豁免(价格红线立即生效;零上下文询价按钮首触先挖一轮需求) + │ 红线五条(无价格数字/无占位符/无交付时间/无承诺/安排主体是客户经理) + │ 追问坚持策略 + 六种磨法应对手册(态度软立场硬) + │ + ├─ 第2层 提醒:当轮红线注入(BOUNDARY_TRIGGER_RE) + │ 价格/时效/安排词 + 施压话术(roughly/说个大概/求你了——磨价轮不裸奔) + │ 预算路由(BUDGET_TRIGGER_RE → 推荐+反问 playbook,不一刀切要号) + │ 前置到空画像早退之前(Get Quotation 首条消息即有防护) + │ 与 D6 联动(已留资→"经理会发给你",禁止再索要) + │ + └─ 第3层 过滤墙:句子粒度门控流式(确定性保证) + token 攒到句子边界 → 逐句检测价格形态 + ├─ 干净句子 → 立即流出(打字机效果保留,WS 探针实证渐进到达) + └─ 违规句子 → 一个字不流:掐断生成(省token)、接过渡话术收尾 + (有干净前缀→自然转折"Actually, for the exact price…"; + 无前缀→整段标准迂回话术;已留资→不重复要号变体) +``` + +**为什么三层**:GLM 有不守 prompt 的前科(本项目已实测两次),价格又是最强诱导——冒烟数据证明单靠第 1+2 层守不住(预算复述 6/6 全破、压力轮 1/3 报出真实价格),按方案预设的 >10% 破防率阈值激活第 3 层;第 3 层最初为整段缓冲(牺牲打字机),后升级为句子门控(两全)。 + +## 3. 文件清单 + +### 新增 + +| 文件 | 内容 | +|---|---| +| `app/services/boundary_filter.py` | 价格形态检测($/货币单位/k形式/动词邻接/交付时间/预算复述/金融裸数),白名单排除(年份/车型编号L7/里程30k km/3万公里/质保期/kWh);无损句子切分(标点边界/小数保护/CJK免空格);迂回话术与过渡话术(中英路由/已留资变体/轮换) | +| `scripts/breach_rate.py` | 破防率观测(只读,锚定式匹配)——改造前基线 **18%** 存档于 `2026-08-18-breach-baseline.txt` | +| `tests/test_boundary_filter.py` | 17 项单测(五模式命中/白名单/切分/话术路由) | +| `docs/superpowers/plans/2026-08-18-ai-role-boundary.md` | 完整实施档案(含两轮评审 12 条 + 最终评审 8 条发现的处置) | + +### 修改 + +| 文件 | 改动 | +|---|---| +| `app/prompts/system.md` | 插入职能边界章节(+58行,位于语言规则后最高优先级);**删除/反转 9 处旧价格规则**("宁可给价格估计"规则、3 个含价好示例、"报价范围"要求、推进成交定义、3轮节奏两处加豁免);价值交换章节并入职能边界;术语统一"客户经理/manager" | +| `app/prompts/evaluator.md` | 问价/优惠/运费/试驾 = 意向积极信号(标签更准) | +| `app/services/conversation.py` | `BOUNDARY_TRIGGER_RE`/`BUDGET_TRIGGER_RE` 触发词表;`_build_context_reminder` 重构(边界检查前置到空画像早退前 + 预算路由 + D6 联动分支);流式区重构为句子门控(缓冲按句→判定→流出/拦截);拦截记 `Boundary filter replaced` warning | +| `tests/test_lead_email_trigger.py` | +10 项(边界提醒 8 例 + 流式门控集成 2 例) | + +**测试 77 → 106**;前端零改动(事件协议不变);无 schema 变更;邮件体系零影响。 + +## 4. 行为对照 + +| 场景 | 改前 | 改后 | +|---|---|---| +| "Tang 多少钱 / 有优惠吗" | 直接报价 "$25k 起步" | 迂回:先问意向车型,同回复引导留资,零数字 | +| "运费/关税多少" | 视作报价的一部分回答 | 同上迂回 | +| "多久能到货" | 给时间估计 | 一律不给时间,引导留资 | +| "我预算2万有什么推荐" | 报价推荐 | **推荐车型但零数字复现**(不说"2万/20K")→ 反问意向 → 引导留资 | +| "just tell me roughly"(磨价) | 磨两下就报区间 | 坚持:换理由不重复原话→第三次推 WhatsApp 按钮;**过滤器兜底** | +| "能约试驾吗 / 帮我留一台" | 自行应承 | 转介:"对接客户经理安排,留个联系方式" | +| "Get Quotation" 快捷按钮首触 | 立即报价 | 价格红线立即生效 + **先一轮了解需求**再引导留资 | +| 已留联系方式后问价 | (无此状态) | "经理会把报价发你 WhatsApp",不再索要 | +| 正常问续航/里程/配置 | 正常回答 | **照常回答**(30k km / 3万公里 / 85kWh 白名单保护,实测未误杀) | +| 回复呈现 | 逐 token 打字机 | **保留**:逐句渐进流出(实测首句 t=2.3s,第二句 t=5.5s) | + +## 5. 关键决策记录(全部用户拍板存档) + +| 决策 | 内容 | +|---|---| +| 职能定位 | 需求了解+留资;介绍车、挖意向、收联系方式;不是销售、无承诺权(价格/时间/库存)、无绝对化表述、不代表公司做决定 | +| 预算处理 | 可推荐车型,**不复述预算数字**(含 20K 等改写形式),反问意向后引导留资 | +| 交付时效 | 一律不直接回答,同样引导留资 | +| 询价按钮首触 | 价格红线立即生效,但**先用一轮了解需求**再要号(低质量线索 vs 转化节奏的取舍) | +| 方案 B 激活 | 按预设计划的 >10% 破防率阈值(冒烟 6/6+1/3 击穿)→ 输出过滤上墙 | +| 打字机恢复 | 句子粒度门控方案(用户确认)——干净句子流出、违规句不流,两全 | + +## 6. 实测驱动的演进链 + +| 阶段 | 发现 | 处置 | +|---|---|---| +| 冒烟第1轮 | 预算复述 6/6 全破("budget of 20K")、压力轮 1/3 报真实价、50% 输出"[价格区间]"占位符 | prompt 加固(具体替代措辞) | +| 冒烟第2轮(加固后) | **依旧 6/6 破**——GLM 把复述预算当礼貌确认 | 方案 B 激活:整段缓冲过滤,违规归零 | +| 最终评审 | 里程误杀(30k km)、裸预算复述漏检(恰是旗舰形态且观测不可见)、已留资重复要号 | 过滤器收严(F1-F6:白名单/预算模式/金融/质保/联系变体) | +| 用户反馈 | 打字机效果没了 | 句子粒度门控(13.7)——渐进流出恢复,红线不降级 | + +## 7. 部署注意事项 ⚠️ + +1. **重启即生效**:prompt 在启动时加载、触发词表在代码中——所谓"词表热调"实为重新部署。 +2. **无 schema 变更、邮件体系零影响**;询盘邮件正文里的 AI 回复将全是过滤后文本(破防原文只在日志)。 +3. **体验变化预告**:回复从逐字打字机变为**逐句出现**(首句 ~1s,人格回复 1-2 句所以观感接近);AI 从此不报任何价格——**提前告知销售团队**,报价承接节奏要跟上。 +4. **上线后观测**:`docker compose logs app | grep "Boundary filter"` = 真实破防率(GLM 想报但被墙拦的频率);改造前基线 18% 已存档,以此对比第 1+2 层的自律率。 +5. **触发词调参**:漏词案例(新问法/多语言)回流补 `BOUNDARY_TRIGGER_RE`;误触发低害(多一条提醒)。 +6. **回滚**:`git revert 9433f96 3028685` 两提交即完整回滚。 + +## 8. 已知限制与残余(台账) + +| 项 | 状态 | +|---|---| +| 单句回复仍需等该句生成完(~1s)——那句本身可能含价,无更快解 | 接受(物理约束) | +| 句子切分为启发式(小数已保护;切歪只影响节奏不影响安全) | 接受 | +| 多语言问价(法/斯瓦希里/阿拉伯语)触发词盲区 | 第1层全局红线 + 第3层过滤器兜底(价格形态与语言无关) | +| 极端假阳性:"这车跑了两万"(无"公里"后缀的里程表述)会被当价格拦截 | 罕见,方向安全(多拦不泄露) | +| 破防率脚本与过滤器模式不再严格同步(过滤器更严) | 上线后以日志行为准,脚本留作历史基线 | +| 过渡话术单一池(不轮换) | 观察重复感,需要时扩池 | + +## 9. 未包含(后续批次) + +与之前清单一致:批次 2(widget 会话持久化/前端历史渲染/WS 限流)、批次 3(admin 卡单筛选/UI 留资卡片)、健康轨(超时清理会话、SQLite 备份、删 Redis、ADMIN_PASSWORD、GLM 超时重试)。可基于 `Boundary filter` 日志做 admin 侧"破防监控面板"(若需要)。 diff --git a/docs/2026-08-19-system-audit-and-optimization.md b/docs/2026-08-19-system-audit-and-optimization.md new file mode 100644 index 0000000..de14b1a --- /dev/null +++ b/docs/2026-08-19-system-audit-and-optimization.md @@ -0,0 +1,155 @@ +# AI 客服系统全面分析与优化方案 + +- **日期**:2026-08-19 +- **基线**:`e02be47`(两大特性已落地:联系方式驱动询盘邮件 `6860e88`;AI 职能边界三层防线 `3028685`+`9433f96`) +- **质量状态**:106 项测试全绿(原始基线 17);真实 GLM 冒烟通过 +- **性质**:只分析不调整。问题按七层组织,每项含现象/根因/影响;优化方案按优先级排期;最后是需要拍板的决策点。 + +--- + +## 一、当前系统状态总览 + +``` +已落地的两大能力(互相咬合的闭环): + 联系方式驱动邮件: 管道确定性检测联系方式 → 秒发询盘邮件 → 更正/去重/永不锁死客户 + 职能边界三层防线: prompt 职能定位 → 当轮红线提醒 → 句子粒度过滤墙(打字机保留) + +链路: 客户 ↔ 前端(widget/独立页/App REST) → WS/REST → ConversationManager + (GLM对话+提取+评估 | 联系方式管道 | 邮件触发器 | 边界过滤) → SQLite → SMTP询盘邮件 + → 销售人工承接(报价/安排) → admin后台辅助 +``` + +**系统当前最大的结构性事实**:核心转化链路(聊车→挖意向→收联系方式→邮件→人工)已经完整且被测试覆盖;**剩余问题集中在四个区域——安全基线、数据可靠性、前端体验、以及"上线后才知道"的观测盲区。** + +--- + +## 二、问题清单(七层,共 30 项) + +### A. 安全层(3 项 —— 上线公网前必须处理) + +| # | 问题 | 现象/根因 | 影响 | +|---|---|---|---| +| A1 | **管理后台默认密码** | `.env` 无 `ADMIN_PASSWORD` → `admin123` 生效中(本次复核确认);登录无限流无锁定;会话存内存 | 任何扫到域名的人可看全部客户对话/联系方式并删库 | +| A2 | **明文 HTTP** | openresty 的 HTTPS 配置整段被注释;admin 密码/数据明文传输 | 公网嗅探风险 | +| A3 | **WS 零限流 + 消息无长度上限** | 限流只挂在 REST `/api/chat/message`(30/h);`/ws/chat` 与独立页无任何限制;消息 content 不截断 | 每条消息 3 次 GLM 调用——脚本可无限烧钱;超长消息直接怼给 GLM | + +### B. 数据与可靠性层(5 项) + +| # | 问题 | 现象/根因 | 影响 | +|---|---|---|---| +| B1 | **SQLite 零备份** | 全部客户线索/画像/对话就 `data/cc_ai_kefu.db` 一份文件,无备份任务、无 WAL | 磁盘坏 = 线索全灭,业务级风险 | +| B2 | **GLM 调用无超时无重试** | 所有 GLM 调用不限时;挂起则该轮永远 typing(前端只重连不报错) | 客户体验死等 + 无告警 | +| B3 | **SMTP 无重试队列** | 发送失败靠"下一条消息自然重试"(有意的 at-least-once);给号后沉默+首发失败=线索丢失窗口 | 低概率但真实 | +| B4 | **邮件发送在请求内同步** | SMTP 握手挤占响应时间;触发频率上升后影响面变大 | 延迟抖动 | +| B5 | **会话只生不死** | 决策 A 后会话永不自动结束、无超时清理;active 行无限增长 | 数据卫生(admin 列表污染、查询变慢),功能无害但持续恶化 | + +### C. 前端体验层(4 项 —— 用户实测亲历) + +| # | 问题 | 现象/根因 | 影响 | +|---|---|---|---| +| C1 | **widget 刷新/翻页丢会话** | 会话只存 JS 内存、`page_token` 每次加载重新生成(widget.js:288) | 客户重聊一遍(AI 重复提问)+ 同一客户重复产生新会话(重复线索邮件放大器) | +| C2 | **会话恢复了但界面空白** | 独立页 `loadHistory()` 是空函数(chat.js:182);后端历史接口存在但页面不调用 | 客户看不到自己说过什么 | +| C3 | **widget 中途重连丢视觉历史** | WS 断线重连后消息列表只在内存 | 体验断裂 | +| C4 | **ended 后无重开入口**(低) | 永不结束后基本不触发;但历史 completed 会话刷新即新会话 | 极低 | + +### D. AI 行为质量层(5 项 —— 两大特性引入的新观测点) + +| # | 问题 | 现象/根因 | 影响 | +|---|---|---|---| +| D1 | **破防率长期趋势未知** | 第1+2层自律率、第3层拦截频率只有日志行,无聚合视图 | 无法判断防线配置是否过严/过松,也无法评估 GLM 升级收益 | +| D2 | **迂回话术同质化** | 过滤器过渡话术单一池不轮换;客户一小时内反复问价会看到重复句子 | 机器人感;聪明客户可感知到"触发了什么" | +| D3 | **转化流失未量化** | 价格拦截是强业务取舍——拿不到价的客户流失率、留资率变化没有任何埋点 | 无法回答"红线是否伤害转化"这个关键问题 | +| D4 | **[未评估] 邮件占比未知** | 即时触发让"第1条消息就留号"的邮件带着薄上下文+未评估标签发出 | 销售对这类邮件的跟进策略缺数据支撑 | +| D5 | **glm-4-flash 能力天花板** | 复杂询价理解/话术遵循/多语言均偏弱(本项目多次实测其不守规则) | 三层防线里第1+2层形同虚设的部分原因;模型升级可能显著降低第3层压力 | + +### E. 转化漏斗层(5 项 —— 计划内未做) + +| # | 问题 | 说明 | +|---|---|---| +| E1 | **UI 留资卡片未做** | 表单留资转化率 > 聊天索要;判定"有意向缺联系方式"时弹卡片是转化质变手段(批次3) | +| E2 | **admin 卡单筛选未做** | interested+无联系方式的人工兜底视图;卡单数据已在落库,只差筛选 UI | +| E3 | **线索无生命周期** | 邮件发出后无"未跟进提醒/二次触达/关闭"管理;24h 轻提醒只覆盖再来访 | +| E4 | **邮件单收件人** | `NOTIFY_EMAIL` 单一邮箱;无按国家/语种分诊(肯尼亚线和中东线分开?) | +| E5 | **无数据看板** | 会话量/留资率/意向分布/破防率/邮件量——全靠 SQL 手查 | + +### F. 运维观测层(4 项) + +| # | 问题 | 说明 | +|---|---|---| +| F1 | **无监控告警** | 服务挂/GLM 连续失败/SMTP 失败/磁盘满——只有日志行,无人知道 | +| F2 | **无 CI** | 106 项测试只在本地跑;push 无门禁 | +| F3 | **Redis 容器白跑** | compose 里运行但代码零引用;弱默认密码写在仓库 | +| F4 | **杂项债务** | admin 内存会话重启掉线、admin 筛选分页 total 错误、国家映射"加拿大"笔误、IP 可被 client_info 覆盖、`AIService.chat` 死代码、邮件 From 品牌【XYH】与站点不符、openresty 静态双拷贝同步陷阱、deploy.sh 停机窗口 | + +### G. 架构扩展层(3 项 —— 流量上来之前不用动) + +| # | 问题 | 说明 | +|---|---|---| +| G1 | 单进程 + SQLite | 并发写锁风险与流量成正比;当前量级完全够 | +| G2 | 限流/会话存内存 | 多 worker 部署即失效(当前单 worker 无碍) | +| G3 | PII 永久存储无保留策略 | 外贸业务合规盲区(低优先,知晓即可) + +--- + +## 三、优化方案(按优先级四批) + +### P0 · 上线公网前必须(约 1 天) + +| 序 | 动作 | 对应 | 成本 | +|---|---|---|---| +| 1 | .env 配置强 `ADMIN_PASSWORD` + admin 登录限流 | A1 | 0.5h | +| 2 | 启用 openresty HTTPS(证书+301) | A2 | 1h | +| 3 | WS 限流(session 严 60/h、IP 宽、消息级拒绝防重连风暴)+ 消息长度上限(复用 429) | A3 | 0.5 天,前后端同批 | +| 4 | SQLite 定时备份(`sqlite3 .backup` cron + 保留策略 + WAL) | B1 | 1h | +| 5 | GLM 调用超时(30s)+ 单次重试 + 前端明确报错 | B2 | 0.5 天 | + +### P1 · 上线第一周(观测+卫生,约 2 天) + +| 序 | 动作 | 对应 | +|---|---|---| +| 1 | 超时清理任务(lifespan 周期扫描:24h 无消息的 active → abandoned) | B5 | +| 2 | **破防率聚合**:每日统计 `Boundary filter` 日志行数 → 简单接口/脚本输出趋势 | D1 | +| 3 | 留资率/流失埋点:admin 加统计接口(会话数、留联系方式数、[未评估]占比) | D3/D4 | +| 4 | 简单告警:健康检查失败/GLM 连续失败/SMTP 失败 → 邮件或 webhook 通知 | F1 | +| 5 | 邮件发送移出请求路径(asyncio.create_task + 短超时) | B4 | +| 6 | F4 杂项打包:admin 分页/国家映射/删 AIService.chat/删 Redis/From 品牌改 | F4 | + +### P2 · 批次 2:前端体验(约 3 天,解决你亲历的痛点) + +| 序 | 动作 | 对应 | +|---|---|---| +| 1 | widget 会话持久化(独立前缀 localStorage + 48h 过期) | C1 | +| 2 | 独立页/widget 历史渲染(loadHistory 接现有历史接口) | C2/C3 | +| 3 | WS 限流前端配合(P0-3 的前端侧) | A3 | + +### P3 · 批次 3 + 长期:转化与质量 + +| 序 | 动作 | 对应 | +|---|---|---| +| 1 | UI 留资卡片(端点限流+校验+只弹一次) | E1 | +| 2 | admin 卡单筛选 + 线索列表视图(含破防监控标签) | E2/D1 | +| 3 | 过渡话术扩池轮换 | D2 | +| 4 | 评估 glm-4-air/plus 对自律率的提升(换模型跑冒烟对比破防率) | D5 | +| 5 | 邮件分诊(按国家路由收件人) | E4 | +| 6 | 线索生命周期(跟进状态字段+超时提醒) | E3 | +| 7 | 数据看板(E5)、CI(F2)、多 worker 改造(G1/G2,流量触发) | 长期 | + +--- + +## 四、需要拍板的决策点 + +| # | 决策 | 选项与建议 | +|---|---|---| +| 1 | **上线节奏** | 两大特性现在就上(建议:核心价值已闭环,P0 做完就走),还是等 P1 观测一起? | +| 2 | **超时时长**(B5) | active 会话多久算 abandoned?建议 24h(与 24h 去重窗口对齐) | +| 3 | **是否保留生产基线任务** | 上线前跑一次 `baseline_stats.py` + `breach_rate.py` 存档(强烈建议,一次性机会) | +| 4 | **模型升级评估要不要排期** | 如果第1+2层自律率长期很低(全靠墙),升模型可能比维护三层更省心 | +| 5 | **邮件分诊需求** | 销售团队实际几人?按国家分箱是否真实需要? | + +--- + +## 五、结论 + +**系统核心链路健康**:两大特性互相咬合、106 项测试护栏、真实流量冒烟通过。剩余问题没有一个是核心链路缺陷——全部集中在**安全基线(A 层 3 项)、数据可靠性(B 层 2 项)、前端体验(C 层 3 项)和观测盲区(D/F 层)**。 + +最短路径建议:**P0 五项(约一天)做完即可上线**,第一周做 P1 建立观测,之后按 P2/P3 消化体验与转化。A1(改密码)是零成本零风险的一项,无论如何先做。 diff --git a/docs/2026-08-20-company-contact-handoff-changelog.md b/docs/2026-08-20-company-contact-handoff-changelog.md new file mode 100644 index 0000000..7e38344 --- /dev/null +++ b/docs/2026-08-20-company-contact-handoff-changelog.md @@ -0,0 +1,87 @@ +# 改动文档:我方联系方式外发(按钮指路 + 零号码红线) + +- **日期**:2026-08-20 +- **分支**:`chany_dev_dev` +- **状态**:117 项测试全绿(基线 106),真实 GLM 冒烟通过(web/App 双来源) +- **实施档案**:[superpowers/plans/2026-08-20-company-contact-handoff.md](superpowers/plans/2026-08-20-company-contact-handoff.md)(v1 四轮评审后因"站点动态配置"事实推翻重构为 v2,v2 再经四轮评审收敛) + +--- + +## 1. 背景与需求 + +客户主动索要我方联系方式("how can I contact you / 你们的WhatsApp多少")时:**web 客户引导点击窗口顶部的 WhatsApp/邮箱按钮;App 客户(无按钮)反向留资由客户经理主动联系**。AI 在任何情况下不口头输出号码或邮箱。 + +**修复的隐患**:此前 prompt 不含任何我方联系方式——GLM 会**编造假号**(客户加错号=线索彻底丢失)。 + +## 2. 方案演进(v1 → v2,关键决策记录) + +| | v1(已废弃) | v2(实施) | +|---|---|---| +| 思路 | .env 全局真值注入 prompt,AI 报号 | **AI 永不报号**——web 指按钮、App 反向留资 | +| 动态配置难题(每站点 data-* 配不同按钮值) | 需三选一解决(前端上报/域名映射/统一单号) | **自动消失**(AI 不报值,与站点配置零冲突) | +| 防幻觉墙 | 真值比对(allowed 集合+国家码尾缀+回显豁免) | **零号码墙**:任何 ≥10 位数字串/邮箱一律拦,无值比对 | +| 配置/前端/管道改动 | 配置注入+毒值三入口过滤 | **全部零改动** | + +v1 四轮评审仍适用的发现全部继承(提醒前移防早退、独立叠加、互留条件排除 suspect、节奏豁免补索要场景、未提供渠道引导);v2 溶解的复杂度(真值比对/毒值过滤/配置兜底)在档案中注明原因。 + +## 3. 三层实现 + +### 3.1 prompt 层(system.md) + +- 新增"客户索要我方联系方式"话术节:web 指按钮 / App 反向留资 / 互留(每会话一次,已留或疑似留过不加)/ 未提供渠道(微信/Telegram 等)一律引导回 WhatsApp 按钮,绝不编造 +- 红线新增:**回复中不能出现任何电话号码或邮箱地址——客户自己的号码也不回显** +- 节奏豁免触发清单补"索要我方联系方式" + +### 3.2 提醒层(conversation.py) + +- `CONTACT_ASK_TRIGGER_RE`(含"你的微信"单数形态) +- `_build_context_reminder` 加 `source` 参数:**contact_note 前移到空画像早退之前**(首条消息索要也有提醒)、与价格红线提醒独立叠加、按 source 分支 +- **冒烟实证加固**:抽象指令("用 App 话术")GLM 会无视并背 prompt 里更显眼的 web 脚本——提醒必须**携带该分支的逐字话术**,不让模型自己挑(与预算复述同类失败模式的同款解法) +- 索要率观测日志 `Contact-ask reminder fired (source=...)` + +### 3.3 零号码墙(boundary_filter.py + 句子门控接线) + +- `no_contact_value(sentence, user_history)`:≥10 位连续数字串(允许分隔形态)或邮箱 → 拦截;唯一豁免=该串出现在近期客户消息中(客户自己号码的礼貌回显) +- **无值比对、无公司值依赖**——年份(4位)/里程(逗号断开)/VIN(字母混合)/续航(600km)/电池(85kWh) 天然安全,合法聊车内容零误杀(已验证) +- 替换句按 source 分支(web→按钮指路 / App→反向留资),与价格墙并列检查、同一拦截管道 +- 附带收益:任意场景幻觉出的热线号/银行账号/邮箱一律被拦 + +### 3.4 evaluator 联动 + +客户主动索要我方联系方式 = 最强意向信号之一。 + +## 4. 文件清单 + +| 文件 | 动作 | +|---|---| +| `app/prompts/system.md` | +话术节/+零号码红线/节奏豁免扩展(3 hunks, +15/−1) | +| `app/services/conversation.py` | 触发词表 + 提醒(source 参数/前移/逐字话术)+ 墙接线 | +| `app/services/boundary_filter.py` | `LONG_NUMBER_RE`/`ANY_EMAIL_RE`/`no_contact_value`/双来源替换句 | +| `app/prompts/evaluator.md` +1 行 | 最强意向信号 | +| 测试两文件 | +11(提醒 5/墙 4/集成 2),106→117 | + +前端零改动、无 schema、无新配置。 + +## 5. 真机冒烟结果 + +| 路径 | 结果 | +|---|---| +| web 索要联系方式 | ✅ 按钮指路 + 零号码零邮箱 + 顺带问车型(线索质量) | +| 索要微信(未提供渠道) | ✅ 引导回 WhatsApp,零编造 | +| 双重请求(联系方式+价格同句) | ✅ 指按钮 + 不报价(两提醒叠加共存) | +| 连续索要 ×3 | ✅ 全程合规,无重复骚扰 | +| **App 会话索要** | ✅ 加固后 3/3 逐字反向留资话术、零按钮话术(加固前 0/3——抽象指令被无视,逐字话术修复) | +| 正常问车(续航/年份) | ✅ 数字正常回答,零误杀 | + +## 6. 已知限制与残余 + +| 项 | 处置 | +|---|---| +| 客户坚持要"号码本身" | web:点按钮即加号(wa.me 直达);App:反向留资后客户经理主动联系 | +| 纯字母渠道 ID(微信号)编造 | 零号码墙拦不住字母 ID——prompt"绝不提供未配置渠道"兜底 | +| 客户从按钮链接复制号码回显 | AI 从不报号后主通路消失;极罕见,出现再补毒值 belt | +| GLM 无视抽象指令选错话术分支 | 已用逐字话术注入修复 App 分支;观察期 | + +## 7. 部署与回滚 + +重启生效(prompt/代码启动加载);无迁移、无配置、无前端;回滚 = revert 单提交。 diff --git a/docs/2026-08-31-dynamic-theme-changelog.md b/docs/2026-08-31-dynamic-theme-changelog.md new file mode 100644 index 0000000..5a87234 --- /dev/null +++ b/docs/2026-08-31-dynamic-theme-changelog.md @@ -0,0 +1,17 @@ +# 2026-08-31 动态主题色 + 头像图片化 + +## 嵌入方用法 +- 品牌色:` + + +``` + +- [ ] **Step 2: 测试基本功能** + +打开测试页面,验证: +1. ✅ 页面加载 1.8 秒后邀请卡片自动弹出 +2. ✅ 邀请卡片样式正确(橙色头部、两个话题按钮) +3. ✅ 点击 "Get Quotation" → 邀请关闭 → 聊天打开 → 消息自动发送 +4. ✅ 点击 "Distributor Cooperation" → 邀请关闭 → 聊天打开 → 消息自动发送 +5. ✅ 点击 "Start Chat" → 邀请关闭 → 聊天打开 +6. ✅ 点击 "No Thanks" → 邀请永久关闭 +7. ✅ 点击悬浮按钮(邀请可见时)→ 邀请关闭 → 聊天打开 +8. ✅ 点击悬浮按钮(邀请隐藏时)→ 聊天打开 + +- [ ] **Step 3: 测试页面独立性** + +在多个标签页/页面中测试: +1. ✅ 页面 A 关闭邀请后,页面 B 仍能弹出邀请 +2. ✅ 页面 A 刷新后,已关闭状态保持 +3. ✅ 关闭整个网站重新打开,所有状态重置 + +- [ ] **Step 4: 测试热门话题** + +1. ✅ 聊天面板显示 "POPULAR TOPICS" 区域 +2. ✅ 点击话题按钮 → 消息自动发送 +3. ✅ 发送第一条消息后,热门话题隐藏 + +- [ ] **Step 5: 测试响应式** + +在不同屏幕尺寸下测试: +1. ✅ 移动端(<450px)样式正确 +2. ✅ 话题按钮在小屏幕上正确排列 + +- [ ] **Step 6: 测试边界情况** + +1. ✅ 快速连续点击悬浮按钮 +2. ✅ 在邀请弹出前打开聊天 +3. ✅ 在消息发送过程中关闭邀请 + +- [ ] **Step 7: Commit** + +```bash +# 如果创建了测试文件 +git add static/widget-test.html +git commit -m "test: add widget invite card test page" +``` + +--- + +## 任务 8: 最终清理和文档 + +- [ ] **Step 1: 代码审查** + +检查代码: +1. ✅ 无 console.log 调试语句 +2. ✅ 变量命名一致 +3. ✅ 注释清晰 +4. ✅ 无重复代码 + +- [ ] **Step 2: 浏览器兼容性测试** + +在不同浏览器中测试: +1. ✅ Chrome/Edge (Chromium) +2. ✅ Firefox +3. ✅ Safari (如果可用) + +- [ ] **Step 3: 性能检查** + +1. ✅ 无内存泄漏(定时器清理) +2. ✅ 无不必要的 DOM 操作 +3. ✅ 存储操作高效 + +- [ ] **Step 4: 最终 Commit** + +```bash +git add static/widget.js +git commit -m "chore: final cleanup and polish invite card feature" +``` + +--- + +## 验收标准 + +### 功能要求 +- ✅ 页面加载 1.8 秒后自动弹出邀请卡片 +- ✅ 包含两个话题按钮:Get Quotation、Distributor Cooperation +- ✅ 点击话题按钮 → 关闭邀请 → 打开聊天 → 自动发送消息 +- ✅ 点击 "Start Chat" → 关闭邀请 → 打开聊天 +- ✅ 点击 "No Thanks" → 永久关闭邀请 +- ✅ 每个页面独立管理状态 +- ✅ 聊天面板显示热门话题区域 + +### 样式要求 +- ✅ 橙色渐变头部:`linear-gradient(135deg, #F08A34 0%, #EC8C2F 100%)` +- ✅ 圆角 26px +- ✅ 阴影效果正确 +- ✅ 淡入 + 滑入动画 +- ✅ 响应式设计 + +### 技术要求 +- ✅ 使用 sessionStorage 存储状态 +- ✅ 使用 Shadow DOM 隔离样式 +- ✅ 定时器正确清理 +- ✅ 无内存泄漏 + +--- + +**预计工作量**: 约 2-3 小时 +**文件修改**: 1 个文件(static/widget.js) +**新增代码**: 约 250-300 行 diff --git a/docs/superpowers/plans/2026-06-18-dynamic-contact-config.md b/docs/superpowers/plans/2026-06-18-dynamic-contact-config.md new file mode 100644 index 0000000..b119b70 --- /dev/null +++ b/docs/superpowers/plans/2026-06-18-dynamic-contact-config.md @@ -0,0 +1,292 @@ +# WhatsApp / Email 动态配置 Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** 将写死的 WhatsApp / Email 联系方式改为通过 ` +``` +刷新页面,再次执行 Step 6 的 Console 命令。 +Expected: +- `whatsapp-btn` → `https://wa.me/8613800138000` +- `email-btn` → `mailto:demo@hesu-auto.com` + +覆盖路径验证通过后,**先不要回退**——这个改动正好是 Task 3 的成果,直接进入提交。 +> 注:即使这里手滑回退了也无妨——Task 3 Step 1 会重新把它加回来。本 Task 的提交只包含 `widget.js`,不含 `widget-test.html`。 + +- [ ] **Step 8: 提交** + +```bash +git add static/widget.js +git commit -m "$(cat <<'EOF' +feat(widget): WhatsApp/Email 改为 data-whatsapp/data-email 动态配置 + +组件读取自身 +``` +替换为(用与 Task 1 Step 7 一致的自定义演示值): +```html + +``` + +> `chat.html:35` 与 `:39` 原有的静态 `href` **保留不动**——作为 `chat.js` 未执行时的 fallback(默认值),`chat.js` 启动后会覆盖为配置值。 + +- [ ] **Step 3: 手动验证——自定义值生效** + +打开 `static/chat.html`(方式 A 或 B),DevTools Console 执行: +```js +[...document.querySelectorAll('a.whatsapp-btn, a.email-btn')].forEach(a => console.log(a.className, '->', a.href)); +``` +Expected: +- `call-btn whatsapp-btn` → `https://wa.me/8613800138000` +- `call-btn email-btn` → `mailto:demo@hesu-auto.com` + +(chat.html 是 light DOM,不需要 shadowRoot。) + +- [ ] **Step 4: 手动验证——回退默认值(临时)** + +临时把 `chat.html:80` 的两个 data 属性删掉(恢复成 ``),刷新页面,再次执行 Step 3 的 Console 命令。 +Expected: +- `whatsapp-btn` → `https://wa.me/+8619037179250` +- `email-btn` → `mailto:info@borderlesscar.com` + +回退验证通过后,**把 data 属性加回去**(恢复 Step 2 的状态)。 + +- [ ] **Step 5: 提交** + +```bash +git add static/js/chat.js static/chat.html +git commit -m "$(cat <<'EOF' +feat(chat): 独立页 WhatsApp/Email 改为 data-* 动态配置 + +chat.js 读取自身 +``` +若 Step 7 之后被改动过,恢复成上面这样。 + +- [ ] **Step 2: 全局终检——确认无残留写死联系方式(前端)** + +Run: `grep -rn "wa.me/+8619037179250\|mailto:info@borderlesscar.com" static/widget.js static/js/chat.js` +Expected: **无输出**(两处运行时文件都已参数化)。 + +注:`static/chat.html:35` 和 `:39` 仍含默认值字符串,这是**有意保留的 fallback**,属正常。 + +- [ ] **Step 3: 更新测试清单文档** + +在 `docs/test-checklist.md` 末尾追加一节(若文件不存在则新建并加标题 `# 测试清单`): + +```markdown +## WhatsApp / Email 动态配置(2026-06-18) + +- [ ] **默认值(未传属性)**:组件(widget-test.html 去掉 data 属性时)与独立页(chat.html 去掉 data 属性时)的 WhatsApp / Email 按钮分别指向 `https://wa.me/+8619037179250` 与 `mailto:info@borderlesscar.com`,与历史行为一致。 +- [ ] **自定义值**:widget-test.html 传 `data-whatsapp` / `data-email` 后,组件内三处链接(面板 help-block 的 WhatsApp、面板 help-block 的 Email、邀请卡 WhatsApp、邀请卡 Email)均指向自定义地址。 +- [ ] **独立页自定义值**:chat.html 传 `data-whatsapp` / `data-email` 后,两个按钮指向自定义地址。 +- [ ] **空字符串**:`data-whatsapp=""` 等价于未传,回退默认值。 +- [ ] **JS 未执行**:chat.html 在 JS 禁用 / 未执行时,静态 `href` 仍为默认值,不出现空链接。 +``` + +- [ ] **Step 4: 提交** + +```bash +git add static/widget-test.html docs/test-checklist.md +git commit -m "$(cat <<'EOF' +docs(test): widget-test 演示动态配置属性 + 补充测试清单 + +Co-Authored-By: Claude +EOF +)" +``` + +--- + +## 完成标准(Definition of Done) + +- [ ] `static/widget.js` 与 `static/js/chat.js` 中不再有任何写死的 `wa.me/+8619037179250` / `mailto:info@borderlesscar.com`(grep 无输出)。 +- [ ] 不传任何新属性时,所有联系方式链接与改动前完全一致(向后兼容)。 +- [ ] 传入自定义 `data-whatsapp` / `data-email` 时,组件 3 处 + 独立页 2 处链接均指向自定义值。 +- [ ] 3 个 commit 已提交,每个 commit 自包含、可独立验证。 +- [ ] `docs/test-checklist.md` 已补充对应手动验证条目。 + +## 风险与回滚 + +- 风险极低:纯前端字符串替换 + 新增属性读取,不触碰 WebSocket、后端、样式。 +- 回滚:`git revert` 对应 commit 即可;未传属性的部署本来就无任何行为变化。 diff --git a/docs/superpowers/plans/2026-06-23-auto-invite-toggle-and-mobile-button.md b/docs/superpowers/plans/2026-06-23-auto-invite-toggle-and-mobile-button.md new file mode 100644 index 0000000..eab79b3 --- /dev/null +++ b/docs/superpowers/plans/2026-06-23-auto-invite-toggle-and-mobile-button.md @@ -0,0 +1,365 @@ +# 邀请卡自动弹出开关 + 移动端悬浮按钮 Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** 为嵌入式组件 `widget.js` 新增两个 `data-*` 配置开关——`data-auto-invite`(控制邀请卡是否 1.8s 自动弹出)与 `data-mobile`(切换到移动端竖排悬浮按钮 D2),默认行为 100% 向后兼容。 + +**Architecture:** 复用 `widget.js` 既有的 `script.getAttribute("data-*")` 配置范式。`data-auto-invite` 在 `startInviteTimer()` 开头加一句短路;`data-mobile` 走「独立移动端 DOM 模板」分支(桌面模板逐字不动),并配套一份贴角的位置表 `positionStylesMobile` 与移动端 CSS。 + +**Tech Stack:** 原生 JavaScript(ES5 风格 IIFE + Shadow DOM)、静态 HTML。无构建步骤、无打包器。 + +**Spec:** [docs/superpowers/specs/2026-06-23-auto-invite-toggle-and-mobile-button-design.md](../specs/2026-06-23-auto-invite-toggle-and-mobile-button-design.md) + +--- + +## ⚠️ 关于测试方式(重要) + +本仓库为**纯静态 JS 前端**,**没有任何 JS 测试框架**(无 `package.json`,`tests/` 只有空的 `__init__.py`)。为本改动引入 JS 测试框架违反 YAGNI。 + +因此本计划**不使用自动化 TDD**,而是采用**手动浏览器验证**:每个 Task 末尾用浏览器打开页面、通过 DevTools 检查实际 DOM / 行为。验证标准写明「期望看到的结果」,与自动化断言等价。 + +**验证通用方法:** +- 方式 A(推荐,贴近真实部署):启动后端服务(`bash deploy.sh` 或 `docker compose up`),浏览器访问页面。 +- 方式 B(最快,免启动服务):直接用浏览器打开本地 HTML 文件(`file://`)。组件的 WebSocket 会连不上,但**不影响本特性的验证**——邀请卡弹出与按钮渲染都在初始化时完成,与 WS 无关。 +- 检查 Shadow DOM 内部:DevTools → Elements → 展开组件 Shadow Root,或在 Console 执行下文给出的命令。 + +--- + +## 文件结构(File Structure) + +| 文件 | 职责 | 本次改动 | +|------|------|----------| +| `static/widget.js` | 嵌入式组件(第三方站点通过 ` +``` +刷新页面,等待 5 秒以上。 +Expected:**邀请卡不再自动弹出**;悬浮按钮照常显示,点击仍能打开聊天面板。 + +验证通过后,**把 `data-auto-invite="false"` 从该标签删掉**(恢复成 Step 3 的状态,保持测试页的邀请卡回归用途)。Task 3 不会重新加它。 + +- [ ] **Step 5: 提交** + +```bash +git add static/widget.js +git commit -m "$(cat <<'EOF' +feat(widget): 新增 data-auto-invite 控制邀请卡自动弹出 + +默认(true)保持 1.8s 自动弹出;设 data-auto-invite="false" 时 +startInviteTimer 直接返回,邀请卡不再自动弹,悬浮按钮照常可用。 + +Co-Authored-By: Claude +EOF +)" +``` + +--- + +## Task 2: `data-mobile` —— 移动端竖排悬浮按钮(D2)+ 贴角位置 + +**Files:** +- Modify: `static/widget.js`(IIFE 顶部新增 `isMobile` 读取 + `positionStylesMobile` + `pos` 选择) +- Modify: `static/widget.js`(样式数组新增移动端 CSS) +- Modify: `static/widget.js`(`toggleBtn` 改为按 `isMobile` 分两套模板) + +- [ ] **Step 1: 新增 `isMobile` 配置读取** + +在 Task 1 新增的 `var autoInvite = ...` 之后、`var wsBase = ...` 之前,插入: +```js + var isMobile = script.getAttribute("data-mobile") === "true"; +``` + +插入后该区域应为: +```js + var autoInvite = script.getAttribute("data-auto-invite") !== "false"; + var isMobile = script.getAttribute("data-mobile") === "true"; + var wsBase = new URL(script.src).origin; +``` + +- [ ] **Step 2: 新增 `positionStylesMobile` 并切换 `pos`** + +定位 `positionStyles` 定义(约第 16-21 行): +```js + var positionStyles = { + "bottom-right": { bottom: "80px", right: "10px" }, + "bottom-left": { bottom: "20px", left: "20px" }, + "top-right": { top: "20px", right: "20px" }, + "top-left": { top: "20px", left: "20px" }, + }; +``` +在其**下方**紧接着新增一份移动端位置表: +```js + var positionStylesMobile = { + "bottom-right": { bottom: "20px", right: "16px" }, + "bottom-left": { bottom: "20px", left: "16px" }, + "top-right": { top: "20px", right: "16px" }, + "top-left": { top: "20px", left: "16px" }, + }; +``` + +然后定位 `pos` 计算(约第 29 行,紧接 `var c = colors[theme] || colors.light;` 之后): +```js + var pos = positionStyles[position] || positionStyles["bottom-right"]; +``` +改为按 `isMobile` 选择表: +```js + var pos = (isMobile ? positionStylesMobile : positionStyles)[position] + || (isMobile ? positionStylesMobile : positionStyles)["bottom-right"]; +``` + +> 目的:移动端圆钮仅 56px,沿用桌面 `bottom-right` 的 `bottom:80px` 会离底边偏高;移动端改用贴角的 ~20px。桌面端 `positionStyles` 逐字不动。 + +- [ ] **Step 3: 样式数组新增移动端 CSS** + +定位样式数组中 `.toggle-btn:hover` 那一行(约第 47 行): +```js + ".toggle-btn:hover { transform:scale(1.1); }", +``` +在其**下方**紧接着插入 5 行移动端按钮样式: +```js + ".toggle-btn.mobile { flex-direction:column; gap:5px; padding:0; background:transparent; box-shadow:none; border-radius:0; }", + ".toggle-btn.mobile:hover { transform:scale(1.05); }", + ".toggle-btn.mobile .mobile-circle { position:relative; width:56px; height:56px; border-radius:50%; background:#f08a31; display:flex; align-items:center; justify-content:center; font-size:28px; box-shadow:0 4px 16px rgba(240,138,49,0.45); }", + ".toggle-btn.mobile .mobile-dot { position:absolute; bottom:2px; right:2px; width:13px; height:13px; background:#22c55e; border-radius:50%; border:2px solid #f08a31; }", + ".toggle-btn.mobile .mobile-label { color:#8C4D1D; font-size:10px; font-weight:600; line-height:1.1; }", +``` + +- [ ] **Step 4: `toggleBtn` 改为按 `isMobile` 分两套模板** + +定位 `toggleBtn` 创建处(约第 233-235 行): +```js + var toggleBtn = document.createElement("button"); + toggleBtn.className = "toggle-btn"; + toggleBtn.innerHTML = ` +``` + +**改动一**:把 className 改为带 mobile 修饰: +```js + toggleBtn.className = "toggle-btn" + (isMobile ? " mobile" : ""); +``` + +**改动二**:把紧跟其后的单行 `toggleBtn.innerHTML = \`...桌面模板...\`;` 改成 `if/else` 分支——在它**前面**插入移动端分支、把它本身包进 `else`。 + +具体:在 `toggleBtn.className = ...` 这一行之后、原 `toggleBtn.innerHTML = \`` 这一行之前,插入: +```js + if (isMobile) { + toggleBtn.innerHTML = ` +
🤖
+ Chat with us +`; + } else { +``` +然后在原桌面模板赋值的结束反引号 `` `; `` **之后**,补上闭合的 `}`: +```js + } +``` + +改动后该区域结构应为(桌面模板内容逐字不变,仅被包进 `else { ... }`): +```js + var toggleBtn = document.createElement("button"); + toggleBtn.className = "toggle-btn" + (isMobile ? " mobile" : ""); + if (isMobile) { + toggleBtn.innerHTML = ` +
🤖
+ Chat with us +`; + } else { + toggleBtn.innerHTML = ` +
+ ... (现有桌面模板,原样不动) ... +
+`; + } +``` + +> `toggleBtn` 仍是接收点击的元素,[widget.js:367](../../../static/widget.js#L367) 的 `toggleBtn.addEventListener("click", toggle)` 无需改动,点击圆钮或文字均触发 `toggle()`。 + +- [ ] **Step 5: 手动验证——默认值(向后兼容,桌面款按钮不变)** + +`widget-test.html` 此刻未加 `data-mobile` → `isMobile=false` → 走桌面分支。 + +打开 `static/widget-test.html`(方式 A 或 B),DevTools Console 执行: +```js +const host = document.querySelector('#cc-widget-host'); +const btn = host.shadowRoot.querySelector('.toggle-btn'); +console.log('class:', btn.className); +console.log('html:', btn.innerHTML.slice(0, 60)); +``` +Expected: +- `class:` → `toggle-btn`(**不含** `mobile`) +- `html:` → 以桌面模板开头(含 `position:relative` 的 div) + +视觉上:右下角是**现有的宽药丸按钮**(🤖 图标 + "Chat with us" / "Usually replies quickly" 两行文字),与改动前一致 → **向后兼容验证通过**。 + +- [ ] **Step 6: 手动验证——`data-mobile="true"` 切到 D2(临时)** + +临时编辑 `static/widget-test.html:69`,给组件 script 标签加上 `data-mobile="true"`(**保留** Step 1 Task 1 回退后去掉 `data-auto-invite` 的状态,即当前标签不含 auto-invite): +```html + +``` +刷新页面,DevTools Console 执行: +```js +const host = document.querySelector('#cc-widget-host'); +const btn = host.shadowRoot.querySelector('.toggle-btn'); +const container = host.shadowRoot.querySelector('.widget-container'); +console.log('class:', btn.className); +console.log('circle:', !!btn.querySelector('.mobile-circle'), 'label:', btn.querySelector('.mobile-label')?.textContent); +console.log('position bottom/right:', getComputedStyle(container).bottom, getComputedStyle(container).right); +``` +Expected: +- `class:` → `toggle-btn mobile` +- `circle:` → `true`,`label:` → `Chat with us` +- `position bottom/right:` → `20px` / `16px`(贴角,**非** 桌面的 `80px`) + +视觉上:右下角是 **D2 竖排按钮**——56px 橙色圆钮 🤖 在上、"Chat with us" 文字外置在下(非橙色底),且**更贴近屏幕右下角**。点击圆钮或文字均能开关聊天面板。 + +验证通过后,**保留** `data-mobile="true"` 不要回退——这正是 Task 3 要定稿的演示状态。 + +- [ ] **Step 7: 手动验证——`data-position` 其它取值不报错(临时)** + +把 Step 6 标签里的 `data-position` 分别临时改成 `bottom-left`、`top-right`、`top-left`,各刷新一次。 +Expected:D2 按钮出现在对应角,位置贴角(~20px),无 JS 报错(DevTools Console 无红色)。验证完**恢复** `data-position="bottom-right"`。 + +- [ ] **Step 8: 提交** + +```bash +git add static/widget.js +git commit -m "$(cat <<'EOF' +feat(widget): 新增 data-mobile 切换移动端竖排悬浮按钮(D2) + +data-mobile="true" 时悬浮按钮改为竖排样式(56px 圆钮在上、"Chat with us" +文字外置在下),并切换到贴角位置表 positionStylesMobile。桌面款模板与 +位置逻辑逐字不动,默认行为完全向后兼容。 + +Co-Authored-By: Claude +EOF +)" +``` + +--- + +## Task 3: `widget-test.html` 演示属性 + 更新测试清单 + +**Files:** +- Modify: `static/widget-test.html:69`(确认 `data-mobile="true"` 演示属性到位,Task 2 Step 6 已加) +- Modify: `docs/test-checklist.md`(补充手动验证条目) + +- [ ] **Step 1: 确认 `widget-test.html` 演示属性到位** + +确认 `static/widget-test.html:69` 已是(Task 2 Step 6 改成的): +```html + +``` +若之后被改动过,恢复成上面这样。 + +> 故意**不加** `data-auto-invite="false"`:widget-test.html 的核心用途就是测试邀请卡自动弹出(页面标题即 "Widget Invite Card Test Page"),加 false 会让邀请卡不弹、破坏其回归用途。`data-auto-invite` 的关闭路径靠临时编辑验证(见测试清单)。 + +- [ ] **Step 2: 更新测试清单文档** + +在 `docs/test-checklist.md` 末尾追加一节: + +```markdown +## 邀请卡自动弹出开关 + 移动端悬浮按钮(2026-06-23) + +### data-auto-invite +- [ ] **默认(未传)**:组件邀请卡在 ~1.8s 后自动弹出,与历史一致。 +- [ ] **`data-auto-invite="false"`**:邀请卡不再自动弹出;悬浮按钮照常显示,点击仍能打开聊天面板。 +- [ ] **空值/非法值**:`data-auto-invite=""` 或 `data-auto-invite="0"` 等价于未传,仍自动弹。 +- [ ] **与 data-mobile 独立**:`data-mobile="true" data-auto-invite="false"` 时竖排按钮 + 不弹邀请卡,互不影响。 + +### data-mobile +- [ ] **默认(未传)**:悬浮按钮为桌面款宽药丸(`toggle-btn`,不含 `mobile`),与历史一致。 +- [ ] **`data-mobile="true"`**:悬浮按钮为 D2 竖排(`toggle-btn mobile`,含 `.mobile-circle` + `.mobile-label`="Chat with us"),点击圆钮或文字均能开关聊天面板。 +- [ ] **移动端位置贴角**:`data-mobile="true"` + `data-position="bottom-right"` 时容器 `bottom/right` 为 `20px`/`16px`(非桌面 `80px`)。 +- [ ] **位置覆盖各角**:`data-mobile="true"` 配合 `data-position` 取 `bottom-left`/`top-right`/`top-left`,按钮出现在对应角、贴角、无 JS 报错。 +- [ ] **空值/非法值**:`data-mobile=""` 或 `data-mobile="yes"` 等价于未传,回退桌面款。 +``` + +- [ ] **Step 3: 提交** + +```bash +git add static/widget-test.html docs/test-checklist.md +git commit -m "$(cat <<'EOF' +docs(test): widget-test 演示 data-mobile + 补充两个开关测试清单 + +Co-Authored-By: Claude +EOF +)" +``` + +--- + +## 完成标准(Definition of Done) + +- [ ] `static/widget.js` 读取 `data-auto-invite` 与 `data-mobile` 两个新属性;不传时默认行为与改动前**完全一致**(桌面款按钮 + 邀请卡自动弹)。 +- [ ] `data-auto-invite="false"` 时邀请卡不再自动弹出,悬浮按钮仍可用。 +- [ ] `data-mobile="true"` 时悬浮按钮为 D2 竖排样式,且贴角位置生效。 +- [ ] 桌面分支(按钮模板、`positionStyles`)逐字未改,`grep` 确认无意外改动。 +- [ ] 3 个 commit 已提交,每个自包含、可独立验证。 +- [ ] `docs/test-checklist.md` 已补充两个开关的手动验证条目。 + +## 风险与回滚 + +- **风险点**:悬浮按钮是所有嵌入共享的代码路径,Task 2 改动它时若手滑可能影响桌面款。规避:桌面模板逐字包进 `else`、`positionStyles` 不动;Task 2 Step 5 专门做桌面款回归验证。 +- **回滚**:`git revert` 对应 commit 即可;未传新属性的部署本来就无任何行为变化(零破坏)。 diff --git a/docs/superpowers/plans/2026-08-17-baseline.txt b/docs/superpowers/plans/2026-08-17-baseline.txt new file mode 100644 index 0000000..10fc90f --- /dev/null +++ b/docs/superpowers/plans/2026-08-17-baseline.txt @@ -0,0 +1,7 @@ +# 注意: 本文件为开发库占位数据, 生产基线需在部署机覆盖重跑 +== 已发邮件联系方式缺失(按来源)== + (无记录) +== 新策略邮件量预估 == + 有用户消息的会话: 3 + 消息中含联系方式样式: 0 (0%) ← 样式上界 + 联系方式出现在前2条消息内: 0 (0%) ← 即时触发增量 diff --git a/docs/superpowers/plans/2026-08-17-contact-driven-lead-email.md b/docs/superpowers/plans/2026-08-17-contact-driven-lead-email.md new file mode 100644 index 0000000..bbe386f --- /dev/null +++ b/docs/superpowers/plans/2026-08-17-contact-driven-lead-email.md @@ -0,0 +1,1535 @@ +# 联系方式驱动的询盘邮件(Contact-Driven Lead Email)实施计划 v1.1 + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** 联系方式成为发询盘邮件的唯一条件——统一管道检测到联系方式立刻发邮件(不看消息数、不看意向评级);无联系方式永不发邮件、永不结束会话;客户已给的联系方式绝不丢失、绝不重复索要。 + +**Architecture:** 新建确定性"统一联系方式管道"(`app/services/contact_pipeline.py`):extractor 提取(多语言 LLM 源)+ 正则高置信扫描(确定性辅源)→ key 归一化 → 深合并(同 key 新值覆盖)→ 格式校验(confirmed/suspect 分级)。管道结果作为唯一事实源,同时供邮件触发器(去重 + 更正 + 24h 跨会话去重)、定向提醒(禁止重复索要)、会话结束守卫(全来源)三处消费。邮件触发从路由层(ended && interested)整体迁移到 `ConversationManager` 内部,与结束逻辑彻底解耦。 + +**Tech Stack:** Python 3.13 / FastAPI / SQLAlchemy 2.0 async + SQLite(aiosqlite) / pytest(asyncio_mode=auto) + +--- + +## 1. 背景与问题(为什么做) + +线上痛点:大量**无联系方式**的询盘邮件推送至销售邮箱(无效询盘 + 有意向但无法联系的客户)。根因链(已代码验证): + +1. widget/embedded/standalone 来源的 `should_end` 没有联系方式守卫(`_has_real_contact` 仅 app 生效,`conversation.py:230`); +2. evaluator.md 要求"无联系方式 info_sufficient 必须 false",但 GLM 不遵守(`conversation.py:253` 注释自证); +3. 判定 interested 即结束会话锁死客户(`conversation.py:350`),连补联系方式的机会都没有; +4. extractor 某轮返回空 `联系方式` 时浅合并整层覆盖,已提取的联系方式被静默抹掉(`conversation.py:119`)。 + +## 2. 已定决策(本计划的 spec,评审以此为准) + +| # | 决策 | 内容 | +|---|---|---| +| D1 | **邮件唯一条件** | 管道 confirmed 联系方式 → 立即发邮件。≥3轮、interested、info_sufficient 一律不参与邮件门槛。第 1 条消息含联系方式也发 | +| D2 | **意向降级为标签** | 邮件主题打标签:interested→[意向强]、pending→[待确认]、not_interested→[无意向]、未评估(<3轮未跑评估)→[未评估]。**评估被跳过时邮件 intent_level 参数传空串**(→[未评估]),但发给客户端的 evaluated 事件仍报 `pending`(客户端语义不变)——两者不得混用 | +| D3 | **会话永不自动结束(2026-08-18 决策 A,取代原"全来源守卫")** | 邮件与结束解耦后,自动结束只剩收尾UX/停止计费两个弱价值,却会把还没问完的客户锁死(刷新丢上下文+销售响应空窗)。**任何情况都不自动结束**:会话保持 active 直到客户自然沉默,关闭交给超时清理(健康轨)。evaluated 事件 `ended` 恒 False(App 端需知晓);`_finalize` 删除,D10 的 upsert 语义由"每轮评估落库"承担 | +| D4 | **防重发** | 同会话 email_sent 标记,全量只发一次;联系方式变化(改号/新增key/无提示换值)→轻量[更正]邮件,**每会话≤3封(2026-08-18 用户测试反馈放宽)**;达到上限后"锁邮件不锁快照"——Evaluation.contact_info 仍刷新为最新(admin 永远看到客户最新号码) | +| D5 | **24h 跨会话去重** | 同一联系方式值(规范化比对)24h 内已发过全量 → 新会话只发一行"该客户又来聊了"轻提醒 | +| D6 | **不重复索要** | 管道 confirmed → 系统提醒注入"禁止再索要,确认收到后继续解答";suspect(校验不过) → "礼貌确认,禁止重新索要"。suspect 不触发邮件、不参与结束 | +| D7 | **评估前置** | 用户消息 <3 条跳过 GLM evaluate 调用(结果必然 pending),纯省成本;邮件标签用[未评估] | +| D8 | **卡单标记** | interested + 无联系方式 → upsert Evaluation(admin 后续可筛,人工兜底的数据基础) | +| D9 | **旧触发路径拆除** | `chat.py:94-97` 与 `chat_rest.py:140-142` 的 ended&&interested→`_try_send_email` 整体删除,与 D1 触发器**同一个 PR**(两套并存=双发邮件)。**批次 1 全部提交在同一分支、合并后一次部署——严禁部署分支中间提交**:Task 6(新触发器生效)与 Task 7(旧路径拆除)之间存在新旧双触发窗口,该窗口只允许存在于开发分支上 | +| D10 | **Evaluation upsert 语义** | `_get_or_init_evaluation` 是唯一建行入口(绝不 INSERT 已存在记录,唯一约束会 IntegrityError);每轮评估落库只更新 intent/reasoning/快照,**永不触碰 email_sent/correction_sent**(原 `_finalize` 已随决策 A 删除) | +| D11 | **话术**(system.md) | ①价值交换固定模板:只承诺"完整报价单",禁止自由发挥价格/时限;②先聊后引:聊天内要两次未果才引导点 WhatsApp 按钮;③拿到联系方式后确认一句、继续解答,不急着收尾 | +| D12 | **邮件转义(S2 提前)** | email_service 全量 `html.escape`(邮件触发频率上升,注入面同步放大,不等健康轨) | +| D13 | **行为变化已批准** | 本计划推翻"不改 widget 行为"红线(2026-08-17 产品决策)。上线时同步清理 `conversation.py:131-134、226-229` 的 app-only 注释与 `chat_rest.py` 模块 docstring 第 12-13 行 | + +**多值/晋升细则(S1/S3/S4 钉死):** +- S1 suspect 只用于"防重复索要"提醒,永不自动晋升;客户后续重发或改发新值时由 extractor/正则重新捕获、重新校验(新值覆盖)。 +- S3 24h 去重多值规则:confirmed 中**任一**值在 24h 内已发过 → 轻提醒(新值会显示在提醒主题里,信息不丢;全部值都未见 → 全量)。 +- S4 正则每轮扫描**全部客户消息历史**(非仅当轮),兜住 GLM 失败轮次漏掉的联系方式。 + +**明确不做(防扩散):** 范式全量重构、超时清理、UI 留资卡片、WS 限流、会话持久化、admin 筛选视图 → 批次 2/3 或健康轨(见 §6)。`process_message`(`conversation.py:70`,grep 确认零调用方的死代码)在 Task 7 随守卫改造**一并删除**(若保留,其对 `_has_real_contact` 的调用会成为悬空引用);Task 7 之前不碰它。 + +## 3. 文件结构 + +| 文件 | 动作 | 职责 | +|---|---|---| +| `app/services/contact_pipeline.py` | 新建 | 纯函数管道:归一化/深合并/校验分级/正则扫描/规范化比对 | +| `app/services/conversation.py` | 修改 | 接线管道、邮件触发器、全来源结束守卫、卡单标记、评估前置、提醒注入、finalize UPDATE、深合并修复 | +| `app/services/email_service.py` | 修改 | 转义、标签、中文标签列、轻提醒/更正邮件、"对话进行中"提示 | +| `app/models/database.py` | 修改 | Evaluation 加 `correction_sent` 列 | +| `app/main.py` | 修改 | `_migrate` 加 correction_sent 的 PRAGMA 迁移 | +| `app/api/routes/chat.py` | 修改 | 删除 `_try_send_email` 与触发块 | +| `app/api/routes/chat_rest.py` | 修改 | 删除触发块与 lazy import,更新 docstring | +| `app/prompts/system.md` | 修改 | D11 话术 | +| `scripts/baseline_stats.py` | 新建 | 批次 0.5 基线统计(只读) | +| `tests/test_contact_pipeline.py` | 新建 | 管道单元测试 | +| `tests/test_lead_email_trigger.py` | 新建 | 触发器/结束守卫/卡单集成测试(FakeAI + async_db) | +| `tests/test_chat_rest_message.py` | 修改 | 删除钉死旧触发路径的 3 个测试(被新测试取代) | + +> ⚠️ **行号锚点使用规则**:文中行号是计划撰写时(当前 HEAD)的定位辅助。Task 5/6 会向 `conversation.py` 插入代码,**后续任务(Task 7/8)引用的行号会漂移约 20 行**——实施时一律以任务中引用的**代码内容**定位(如 `should_end`、`_has_real_contact` 方法名),禁止盲改行号区域。 + +--- + +## 批次 0.5:基线统计 + +### Task 0: 基线脚本 + +**Files:** +- Create: `scripts/baseline_stats.py` + +- [ ] **Step 0.1: 写脚本(只读,不写库)** + +```python +"""批次0.5 基线统计:上线前存档,上线后同口径对比。只读。""" +import re +import sqlite3 +import sys + +DB = sys.argv[1] if len(sys.argv) > 1 else "./data/cc_ai_kefu.db" + +EMAIL_RE = re.compile(r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}") +INTL_RE = re.compile(r"\+\d{6,15}") + + +def main() -> None: + conn = sqlite3.connect(DB) + cur = conn.cursor() + + # 1) 历史已发邮件中无联系方式占比(按 source) + rows = cur.execute( + """SELECT c.source, + COUNT(*) AS sent, + SUM(CASE WHEN COALESCE(e.contact_info, '{}') IN ('{}', 'null', '') + OR e.contact_info IS NULL THEN 1 ELSE 0 END) AS no_contact + FROM evaluations e JOIN conversations c ON c.id = e.conversation_id + WHERE e.email_sent = 1 GROUP BY c.source""" + ).fetchall() + print("== 已发邮件联系方式缺失(按来源)==") + for source, sent, no_contact in rows: + pct = (no_contact / sent * 100) if sent else 0 + print(f" {source}: 发送 {sent}, 缺失 {no_contact} ({pct:.0f}%)") + + # 2) 用户消息中含联系方式样式的会话占比(新策略邮件量上界预估) + convs = cur.execute("SELECT id FROM conversations").fetchall() + with_contact = early_contact = total = 0 + for (cid,) in convs: + msgs = cur.execute( + "SELECT role, content FROM messages WHERE conversation_id=? ORDER BY created_at", + (cid,), + ).fetchall() + user_msgs = [m for m in msgs if m[0] == "user"] + if not user_msgs: + continue + total += 1 + hit_idx = next( + (i for i, m in enumerate(user_msgs) + if EMAIL_RE.search(m[1]) or INTL_RE.search(m[1])), + None, + ) + if hit_idx is not None: + with_contact += 1 + if hit_idx < 2: + early_contact += 1 + print("== 新策略邮件量预估 ==") + print(f" 有用户消息的会话: {total}") + print(f" 消息中含联系方式样式: {with_contact}" + f" ({with_contact / total * 100 if total else 0:.0f}%) ← 全量邮件上界") + print(f" 联系方式出现在前2条消息内: {early_contact}" + f" ({early_contact / total * 100 if total else 0:.0f}%) ← 即时触发增量") + + conn.close() + + +if __name__ == "__main__": + main() +``` + +- [ ] **Step 0.2: 运行并存档** + +Run: `python scripts/baseline_stats.py | tee docs/superpowers/plans/2026-08-17-baseline.txt` +Expected: 打印三组数字(存档文件用于上线后对比) + +- [ ] **Step 0.3: Commit** + +```bash +git add scripts/baseline_stats.py docs/superpowers/plans/2026-08-17-baseline.txt +git commit -m "chore(baseline): 询盘邮件改造前基线统计" +``` + +--- + +## 批次 1:核心实现 + +### Task 1: contact_pipeline — 归一化 / 深合并 / 校验分级 + +**Files:** +- Create: `app/services/contact_pipeline.py` +- Test: `tests/test_contact_pipeline.py` + +- [ ] **Step 1.1: 写失败测试** + +```python +from app.services.contact_pipeline import ( + merge_contacts, normalize_contacts, split_validate, +) + + +def test_normalize_chinese_and_english_keys(): + raw = {"手机": "+8613800138000", "邮箱": "a@b.com", "微信": "wxid_1", + "WhatsApp号码": "+254712345678", "空": ""} + out = normalize_contacts(raw) + assert out == { + "phone": "+8613800138000", "email": "a@b.com", + "wechat": "wxid_1", "whatsapp": "+254712345678", + } + + +def test_normalize_later_alias_wins_on_same_key(): + # 同 key 别名冲突时后写者覆盖(上游 extractor 单轮内一般不会同时给 手机 与 tel, + # 但语义必须被钉死并被测试) + assert normalize_contacts({"手机": "1111111", "tel": "2222222"}) == {"phone": "2222222"} +``` + +```python +def test_merge_new_value_wins_same_key(): + old = {"phone": "+254700000000"} + new = {"手机": "+254711111111"} # 客户改号 + assert merge_contacts(old, new) == {"phone": "+254711111111"} + + +def test_merge_empty_new_keeps_old(): + # T1 场景: extractor 某轮返回空联系方式,不得抹掉已有值 + old = {"phone": "+254700000000"} + assert merge_contacts(old, {}) == {"phone": "+254700000000"} + assert merge_contacts(old, None) == {"phone": "+254700000000"} + + +def test_split_validate_confirmed_and_suspect(): + confirmed, suspect = split_validate({ + "email": "a@b.com", # 合法邮箱 + "phone": "+254 712 345 678", # 数字 12 位 → confirmed + "whatsapp": "12345", # 数字 5 位 → suspect + }) + assert confirmed == {"email": "a@b.com", "phone": "+254 712 345 678"} + assert suspect == {"whatsapp": "12345"} + + +def test_split_validate_bad_email_is_suspect(): + confirmed, suspect = split_validate({"email": "not-an-email"}) + assert confirmed == {} and suspect == {"email": "not-an-email"} + + +def test_split_validate_wechat_id_is_confirmed(): + # 微信号无数字格式(wxid_x 等),非空≥4字符即 confirmed——否则只留微信的 + # 客户永远无法触发邮件 + confirmed, suspect = split_validate({"wechat": "wxid_1"}) + assert confirmed == {"wechat": "wxid_1"} and suspect == {} + + +def test_split_validate_wechat_short_is_suspect(): + confirmed, suspect = split_validate({"wechat": "abc"}) + assert confirmed == {} and suspect == {"wechat": "abc"} + + +def test_normalize_coerces_int_values(): + # extractor 偶尔会把号码输出成 int,不得崩溃且要能归一化 + assert normalize_contacts({"手机": 254712345678}) == {"phone": "254712345678"} + + +def test_merge_none_old_keeps_new(): + assert merge_contacts(None, {"email": "a@b.com"}) == {"email": "a@b.com"} +``` + +- [ ] **Step 1.2: 运行确认失败** + +Run: `pytest tests/test_contact_pipeline.py -v` +Expected: FAIL(ModuleNotFoundError) + +- [ ] **Step 1.3: 实现 contact_pipeline.py(归一化/合并/校验部分)** + +```python +"""统一联系方式管道:联系方式检测的唯一事实源。 + +三个动作: +- 归一化:中英文 key 别名统一为 phone/whatsapp/email/wechat +- 深合并:同 key 新值覆盖旧值(客户改号场景),空值不覆盖 +- 校验分级:confirmed(格式通过,可触发邮件/结束)/ suspect(疑似, + 仅用于提醒 AI 礼貌确认,防止重复索要——D6/S1) + +上游约定:raw_info 中 "_" 前缀 key 为内部状态,禁止进入提示词渲染。 +""" +import re + +KEY_ALIASES = { + "phone": "phone", "手机": "phone", "电话": "phone", "电话号码": "phone", + "tel": "phone", "telephone": "phone", "phone_number": "phone", + "phone number": "phone", "mobile": "phone", "mobile_number": "phone", + "mobile number": "phone", + "whatsapp": "whatsapp", "wa": "whatsapp", "whats app": "whatsapp", + "whatsapp号码": "whatsapp", "whatsapp number": "whatsapp", + "email": "email", "邮箱": "email", "e-mail": "email", "mail": "email", + "电子邮件": "email", + "wechat": "wechat", "微信": "wechat", "wx": "wechat", "weixin": "wechat", +} + + +def normalize_contacts(raw: dict | None) -> dict: + """key 归一化 + 去空值。同 key 别名冲突时后写者覆盖。""" + out: dict[str, str] = {} + for k, v in (raw or {}).items(): + key = KEY_ALIASES.get(str(k).strip().lower()) + val = str(v or "").strip() + if key and val: + out[key] = val + return out + + +def merge_contacts(old: dict | None, new: dict | None) -> dict: + """同 key 新值覆盖旧值;空/缺省不覆盖(堵浅合并抹数据 bug)。""" + return {**normalize_contacts(old), **normalize_contacts(new)} + + +def digits_only(s: str) -> str: + """提取纯数字(split_validate 位数判断与后续 canon 复用)。""" + return re.sub(r"\D", "", s) + + +def split_validate(contacts: dict) -> tuple[dict, dict]: + """返回 (confirmed, suspect)。电话/WhatsApp 取数字 7-15 位为合格; + 微信号无数字格式,取非空 ≥4 字符为合格(否则 wxid_x 类真实微信号 + 会永远滞留 suspect,只留微信的客户无法触发邮件——违背 D1)。""" + confirmed: dict[str, str] = {} + suspect: dict[str, str] = {} + for k, v in normalize_contacts(contacts).items(): + if k == "email": + ok = re.fullmatch(r"[^@\s]+@[^@\s]+\.[^@\s]+", v) is not None + elif k == "wechat": + ok = len(v.strip()) >= 4 + else: + ok = 7 <= len(digits_only(v)) <= 15 + (confirmed if ok else suspect)[k] = v + return confirmed, suspect +``` + +(`canon()` 的定义已移至 Task 6——它只被去重逻辑消费,与本任务的纯函数无关。) + +- [ ] **Step 1.4: 运行确认通过** + +Run: `pytest tests/test_contact_pipeline.py -v` +Expected: 7 PASS(6 项基础用例 + wechat 修正用例) + +- [ ] **Step 1.5: Commit** + +```bash +git add app/services/contact_pipeline.py tests/test_contact_pipeline.py +git commit -m "feat(pipeline): 联系方式归一化/深合并/校验分级" +``` + +### Task 2: contact_pipeline — 正则扫描(高置信,S4) + +**Files:** +- Modify: `app/services/contact_pipeline.py` +- Test: `tests/test_contact_pipeline.py` + +- [ ] **Step 2.1: 写失败测试(含误报反例——二手车语境全是数字)** + +```python +from app.services.contact_pipeline import scan_user_messages + + +def m(*texts): + return [{"role": "user", "content": t} for t in texts] + [ + {"role": "assistant", "content": "reply"}] + + +def test_scan_email(): + found = scan_user_messages(m("my email is john.doe@x.co send quotes")) + assert found == {"email": "john.doe@x.co"} + + +def test_scan_intl_phone(): + found = scan_user_messages(m("you can reach me +254712345678")) + assert found == {"phone": "+254712345678"} + + +def test_scan_whatsapp_context_word(): + found = scan_user_messages(m("whatsapp: 0712 345 678")) + assert found.get("whatsapp") == "0712 345 678" + + +def test_scan_wa_me_link(): + found = scan_user_messages(m("chat https://wa.me/254712345678")) + assert found == {"whatsapp": "254712345678"} + + +def test_scan_ignores_prices_years_and_ai_messages(): + texts = m( + "budget $25,000 for 2024 BYD Tang", # 价格+年份 + "50,000 km mileage", # 里程 + "I want 5 units", # 数量 + ) + # 上一条含 assistant 消息,确保只扫 user + found = scan_user_messages(texts) + assert found == {} + + +def test_scan_full_history_not_only_last(): + # S4: 扫全量历史,早轮的联系方式也要能捞到 + msgs = [ + {"role": "user", "content": "hi"}, + {"role": "assistant", "content": "hey"}, + {"role": "user", "content": "mail me a@b.com"}, + {"role": "assistant", "content": "got it"}, + {"role": "user", "content": "how much is tang"}, + ] + assert scan_user_messages(msgs) == {"email": "a@b.com"} + + +def test_scan_context_word_does_not_grab_unrelated_numbers(): + # S1: 上下文词必须与数字邻接(同一匹配内),消息任意位置的7位数字不得被抓 + assert scan_user_messages(m("call me on delivery, order 1234567")) == {} + assert scan_user_messages(m("车架号码是 LFV3A23C8K3123456 吗")) == {} + assert scan_user_messages(m("engine number 2ZRFE1234567?")) == {} + assert scan_user_messages(m("我手机坏了 budget 1500000 ksh")) == {} + + +def test_scan_adjacent_context_phone(): + assert scan_user_messages(m("my phone number is 0712 345 678")) == { + "phone": "0712 345 678"} + assert scan_user_messages(m("call me at +86 138 0013 8000")) == { + "phone": "+86 138 0013 8000"} +``` + +- [ ] **Step 2.2: 运行确认失败** + +Run: `pytest tests/test_contact_pipeline.py -v` +Expected: 新增用例 FAIL(scan_user_messages 未定义) + +- [ ] **Step 2.3: 实现扫描器(追加到 contact_pipeline.py)** + +```python +EMAIL_RE = re.compile(r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}") +INTL_PHONE_RE = re.compile(r"\+\d{6,15}") +# 邻接绑定:上下文词与数字必须在同一匹配内(仅空白衔接)——禁止"消息任意位置 +# 有上下文词 + 任意位置有 7 位数字"的消息级误绑(S1:车架号/订单号/先令价格) +WHATSAPP_CTX_RE = re.compile( + r"(?:whats\s*app|wa\.?me)\D{0,12}(\+?\d[\d\s\-().]{5,17}\d)", + re.IGNORECASE, +) +PHONE_CTX_RE = re.compile( + r"(?:my\s+phone\s+(?:number\s+)?is|my\s+number\s+is|" + r"call\s+me\s+(?:at|on)|reach\s+me\s+(?:at|on)|" + r"phone\s*[::]|number\s*[::]|号码\s*[::]|手机号?\s*[::]|电话\s*[::])\s*" + r"(\+?\d[\d\s\-().]{5,17}\d)", + re.IGNORECASE, +) + + +def scan_user_messages(messages: list[dict]) -> dict: + """S4: 扫描全部客户消息,返回高置信捕获(email / +国际号 / whatsapp·wa.me / + 显式电话上下文邻接数字)。裸数字(价格/年份/里程/车架号)一律不收。""" + found: dict[str, str] = {} + for msg in messages: + if msg.get("role") != "user": + continue + text = msg.get("content", "") + if "email" not in found: + hit = EMAIL_RE.search(text) + if hit: + found["email"] = hit.group(0) + if "phone" not in found: + hit = INTL_PHONE_RE.search(text) + if hit: + found["phone"] = hit.group(0) + if "whatsapp" not in found: + hit = WHATSAPP_CTX_RE.search(text) + if hit: + found["whatsapp"] = hit.group(1) + if "phone" not in found: + hit = PHONE_CTX_RE.search(text) + if hit: + found["phone"] = hit.group(1) + return found +``` + +- [ ] **Step 2.4: 运行确认通过** + +Run: `pytest tests/test_contact_pipeline.py -v` +Expected: 19 PASS(11 存量 + 8 本任务,含 S1 邻接反例与邻接正向用例) + +- [ ] **Step 2.5: Commit** + +```bash +git add app/services/contact_pipeline.py tests/test_contact_pipeline.py +git commit -m "feat(pipeline): 高置信正则扫描(仅客户消息/全量历史/价格年份不误捕)" +``` + +### Task 3: Evaluation 加 correction_sent 列 + 迁移(D4) + +**Files:** +- Modify: `app/models/database.py:109-126` +- Modify: `app/main.py:16-22` + +- [ ] **Step 3.1: database.py 的 Evaluation 类加列**(`email_sent` 行后) + +```python + correction_sent: Mapped[bool] = mapped_column(Boolean, default=False) +``` + +- [ ] **Step 3.2: main.py 的 `_migrate` 追加迁移**(page_token 块之后) + +```python + result = await conn.execute(text("PRAGMA table_info(evaluations)")) + columns = {row[1] for row in result} + if "correction_sent" not in columns: + await conn.execute(text( + "ALTER TABLE evaluations ADD COLUMN correction_sent BOOLEAN DEFAULT 0" + )) +``` + +- [ ] **Step 3.3: 验证未破坏** + +Run: `pytest tests/test_smoke.py -v` +Expected: PASS(create_all 在全新库上含新列;PRAGMA ALTER 分支与既有 page_token 迁移一样无测试覆盖,属既有模式,接受——不要把本步当作 ALTER 分支的验证) + +- [ ] **Step 3.4: Commit** + +```bash +git add app/models/database.py app/main.py +git commit -m "feat(db): evaluations.correction_sent 列 + PRAGMA 迁移" +``` + +### Task 4: email_service — 转义 / 标签 / 轻提醒 / 更正邮件(D2/D4/D12) + +**Files:** +- Modify: `app/services/email_service.py` +- Test: `tests/test_lead_email_trigger.py`(本 Task 只改实现,集成验证在 Task 7) + +- [ ] **Step 4.0: 写失败测试(先红)** + +Create `tests/test_email_rendering.py`(monkeypatch 模块内 `_send`,不触网;断言主题标签、HTML 转义、内部 key 过滤): + +```python +"""邮件渲染单测: 标签主题/HTML转义/内部key过滤(D2/D12)。不触网。""" +import asyncio + +from app.services import email_service + + +def _capture_send(monkeypatch): + captured = {} + + async def fake_send(msg): + captured["msg"] = msg + return True + + monkeypatch.setattr(email_service, "_send", fake_send) + return captured + + +def _html(msg) -> str: + return msg.get_payload()[0].get_payload(decode=True).decode("utf-8") + + +def test_lead_email_subject_tag_and_escaped_body(monkeypatch): + captured = _capture_send(monkeypatch) + ok = asyncio.run(email_service.send_lead_email( + customer_profile={"目标国家": "肯尼亚", "_internal": "x"}, + contact_info={"phone": "+254712345678"}, + reasoning="强意向", + conversation_messages=[ + {"role": "user", "content": ""}, + {"role": "assistant", "content": "ok"}, + ], + intent_level="interested", + )) + assert ok is True + subject = str(captured["msg"]["Subject"]) + assert "[新询盘·意向强]" in subject and "肯尼亚" in subject + body = _html(captured["msg"]) + assert " +``` + +L12:`
🤖
` → `
🤖
` +L36/L40:`stroke="#8C4D1D"` → `stroke="currentColor"` +L50:删除整行(``) + +- [ ] **Step 2: chat.js——文件顶部追加 bootstrap(在现有逻辑之前)** + +```javascript +// ---- 动态主题色 bootstrap(spec §3):?color= → 派生 → :root 变量 ---- +(function () { + if (typeof ChatTheme === "undefined") return; // theme.js 加载失败→style.css :root 默认橙兜底 + var m = /(?:^|[?&])color=([^&]*)/.exec(location.search); + var palette = ChatTheme.derivePalette(m ? decodeURIComponent(m[1]) : ChatTheme.DEFAULT_COLOR); + var root = document.documentElement.style; + root.setProperty("--w-primary", palette.primary); + root.setProperty("--w-primary-rgb", palette.primaryRgb); + root.setProperty("--w-gradient-end", palette.gradientEnd); + root.setProperty("--w-deep-text", palette.deepText); + root.setProperty("--w-caption-text", palette.captionText); + root.setProperty("--w-soft-bg", palette.softBg); + root.setProperty("--w-border-soft", palette.borderSoft); + + // 头像兜底(与挂件同机制) + Array.prototype.forEach.call(document.querySelectorAll(".avatar-img"), function (img) { + function hideEmoji() { + var s = img.parentElement && img.parentElement.querySelector(".avatar-emoji"); + if (s) s.style.display = "none"; + } + if (img.complete && img.naturalWidth > 0) { hideEmoji(); return; } + img.addEventListener("load", hideEmoji); + img.addEventListener("error", function () { img.remove(); }); + }); +})(); +``` + +- [ ] **Step 3: style.css 追加头像规则(若 Task 5 未含)** + +```css +.avatar-emoji { line-height: 1; } +.avatar-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; border-radius: 50%; } +``` + +- [ ] **Step 4: 全量 pytest + Commit** + +Run: `python -m pytest tests/ -q` → Expected: 全 PASS + +```bash +git add static/chat.html static/js/chat.js static/css/style.css +git commit -m "feat(theme): 独立页接入——?color=参数+theme.js+头像图片+SVG currentColor" +``` + +--- + +### Task 10: widget-test.html 重写(预览 + 断言面板) + +**Files:** +- Modify: `static/widget-test.html`(整页重写) + +- [ ] **Step 1: 重写页面——保留原说明,新增控制区与断言区** + +结构:原 info 卡片保留;`` 中**必须**加 ``(断言面板依赖 `window.ChatTheme`,漏掉则面板永远显示钩子未就绪);新增: + +```html +
+

Theme Color Preview

+

+ + + + + +

+
+
+

Assertion Panel

+
+
+``` + +- [ ] **Step 2: teardown/重建逻辑(spec §7.1 陷阱;基础属性对象 + extra 合并,缓存戳防缓存)** + +```javascript + var BASE_ATTRS = { + "data-position": "bottom-right", + "data-theme": "light", + "data-mobile": "true", + "data-debug": "true", + "data-whatsapp": "https://wa.me/8613800138000", + "data-email": "mailto:demo@hesu-auto.com" + }; + + function rebuildWidget(extra) { + var host = document.getElementById("cc-widget-host"); + if (host) host.remove(); + document.querySelectorAll("script[src*='widget.js']").forEach(function (s) { s.remove(); }); + try { sessionStorage.removeItem("widget_invite_dismissed_" + window.location.pathname); } catch (e) {} + var s = document.createElement("script"); + s.src = "/static/widget.js?" + Date.now(); + var attrs = Object.assign({}, BASE_ATTRS, extra || {}); + Object.keys(attrs).forEach(function (k) { s.setAttribute(k, attrs[k]); }); + s.onload = runAssertions; + document.body.appendChild(s); + } + function applyColor(c) { + rebuildWidget({ "data-color": c || document.getElementById("colorPicker").value }); + } + function applyBrokenAvatar() { + rebuildWidget({ "data-color": "#1a73e8", "data-avatar": "/static/nope.png" }); + } +``` + +- [ ] **Step 3: 断言面板(spec §8.2;页面加载后自动跑一次)** + +```javascript + var CURRENT_HARDCODED = { // 现状代表值(spec §4),Δ ≤ 8/通道 + primary: "#f08a31", gradientEnd: "#F08A34", deepText: "#8C4D1D", + captionText: "#C16C2E", softBg: "#FFF8F3", borderSoft: "#F0D5BF" + }; + function hexToRgb6(h) { /* 复用 theme.js 的 hexToRgb 逻辑或简化实现 */ } + function channelDelta(a, b) { /* 返回 max 通道差 */ } + function runAssertions() { + var rows = []; + function check(name, ok, detail) { rows.push((ok ? "✅ " : "❌ ") + name + (detail ? " — " + detail : "")); } + var t = window.ChatTheme, d = window.__chatWidgetDebug; + if (!t || !d) { rows.push("❌ theme.js / widget debug 钩子未就绪"); } + else { + var p = t.derivePalette("#f08a31"); + Object.keys(CURRENT_HARDCODED).forEach(function (k) { + var delta = channelDelta(p[k], CURRENT_HARDCODED[k]); + check("default " + k + " Δ≤8 (" + p[k] + " vs " + CURRENT_HARDCODED[k] + ")", delta <= 8, "Δ=" + delta); + }); + check("derive(default) === DEFAULT_PALETTE", + JSON.stringify(p) === JSON.stringify(t.DEFAULT_PALETTE)); + check("inline copy === theme.js copy", + d.derivePalette.toString().replace(/\s+/g, "") === t.derivePalette.toString().replace(/\s+/g, "")); + check("invalid color → DEFAULT_PALETTE", + JSON.stringify(t.derivePalette("not-a-color")) === JSON.stringify(t.DEFAULT_PALETTE)); + } + document.getElementById("assertions").innerHTML = rows.map(function (r) { return "
" + r + "
"; }).join(""); + } +``` + +页面初始嵌入(替代原 L69 的静态 script 标签)同样带 `data-debug="true"` 并挂 `onload="runAssertions()"`,属性与 BASE_ATTRS 一致。 + +- [ ] **Step 4: 手动验收(浏览器,无自动化,如实记录结果)** + +1. 打开 `/static/widget-test.html`:断言面板全 ✅ +2. 默认橙:邀请卡(1.8s)+ 聊天面板 + 头像 5 处中挂件侧 4 处,与改造前截图对比无可见差异 +3. Blue/Green/Purple:全套配色跟随,无橙色残留 +4. Test Broken Avatar:头像回退 🤖 +5. `/`(独立页)与 `/?color=1a73e8`:独立页跟随;头像替换;SVG 图标为深主题色 +6. `?color=red`(非法):回退默认橙,console 有 warn + +- [ ] **Step 5: Commit** + +```bash +git add static/widget-test.html +git commit -m "feat(test): widget-test重写——换色预览+teardown重建+浏览器断言面板" +``` + +--- + +### Task 11: changelog 文档 + spec 校准 + 终验 + +**Files:** +- Create: `docs/2026-08-31-dynamic-theme-changelog.md` +- Modify: `docs/superpowers/specs/2026-08-31-dynamic-theme-color-design.md`(三处校准) + +- [ ] **Step 1: 写 changelog(按仓库惯例,含嵌入方用法)** + +```markdown +# 2026-08-31 动态主题色 + 头像图片化 + +## 嵌入方用法 +- 品牌色:` +``` + +### Widget技术实现 + +Widget JS加载后:创建 Shadow DOM(样式隔离) → 注入悬浮气泡按钮 → 点击后通过WebSocket连接后端 → 渲染聊天界面。 + +## 5. AI服务设计 + +### 模型适配层 + +```python +class AIProvider(ABC): + async def chat(messages, system_prompt) -> str + async def chat_with_extraction(messages, system_prompt, extract_fields) -> tuple[str, dict] + +class GLMProvider(AIProvider) # 智谱GLM(初期) +class OpenAIProvider(AIProvider) # 预留 +class DeepSeekProvider(AIProvider) # 预留 +``` + +### 三轮调用机制 + +每轮客户消息到达后,后端做三件事(对客户透明): + +1. **主对话调用** → AI回复客户(自然对话,引导收集信息) +2. **信息提取调用**(后台静默)→ 从对话历史中提取已获得的信息,更新raw_info +3. **意向判断调用**(后台静默)→ 评估当前信息是否足够,决定是否结束对话 + +第2、3步使用同一个GLM模型和完整prompt,确保提取和判断质量。第3步判断信息足够时,主对话引导收尾并提取联系方式。 + +### Prompt策略 + +- **System Prompt** — AI角色为「二手车顾问」,对话风格专业但亲切,发问策略自然引导 +- **信息提取Prompt** — 从对话历史中提取结构化信息,输出JSON +- **评估Prompt** — 根据已有信息判断意向等级,输出intent_level + 理由 + +### 会话上下文管理 + +- 短期上下文:Redis缓存最近N轮对话(实时对话用) +- 完整历史:每轮对话后持久化到数据库 +- 上下文窗口控制:对话过长时自动摘要早期对话,避免token超限 + +### 防流失机制 + +- 客户关闭页面后,Redis会话保留24小时 +- 同一浏览器再次打开,自动恢复上次对话 +- 对话中断但已收集部分信息,标记为`pending`,不发邮件但记录归档 + +## 6. 邮件推送 + +### 流程 + +``` +AI判定意向 = interested + │ + ▼ + 组装邮件内容 + ├── 客户画像摘要(AI生成) + ├── 关键需求提取(预算、偏好、用途等) + ├── 联系方式(手机/微信/邮箱) + ├── 完整对话记录(可折叠) + └── 评估理由 + │ + ▼ + SMTP发送 → 目标邮箱 + │ + ▼ + 记录发送状态(成功/失败/重试) +``` + +### 配置(环境变量) + +- `SMTP_HOST` / `SMTP_PORT` — SMTP服务器 +- `SMTP_USER` / `SMTP_PASS` — 认证信息 +- `NOTIFY_EMAIL` — 目标通知邮箱 + +## 7. 项目结构 + +``` +cc_ai_kefu/ +├── docker-compose.yml +├── Dockerfile +├── .env.example +├── app/ +│ ├── main.py # FastAPI入口 +│ ├── config.py # 配置管理 +│ ├── api/ +│ │ ├── routes/ +│ │ │ ├── chat.py # WebSocket聊天端点 +│ │ │ └── webhook.py # 回调/状态查询API +│ │ └── deps.py # 依赖注入 +│ ├── services/ +│ │ ├── ai_service.py # AI模型适配层 +│ │ ├── conversation.py # 对话管理(三轮调用) +│ │ ├── extractor.py # 信息提取 +│ │ ├── evaluator.py # 意向评估 +│ │ └── email_service.py # 邮件发送 +│ ├── models/ +│ │ ├── conversation.py # SQLAlchemy模型 +│ │ └── schemas.py # Pydantic schemas +│ ├── providers/ +│ │ ├── base.py # AIProvider基类 +│ │ └── glm.py # 智谱GLM实现 +│ └── prompts/ +│ ├── system.md # 主对话system prompt +│ ├── extractor.md # 信息提取prompt +│ └── evaluator.md # 评估prompt +├── static/ # 前端静态文件 +│ ├── chat.html # 独立聊天页面 +│ ├── css/ +│ ├── js/ +│ │ └── chat.js # 聊天核心逻辑 +│ └── widget.js # 外部嵌入Widget脚本 +├── migrations/ # 数据库迁移 +└── tests/ +``` + +## 8. 技术栈 + +| 层 | 选型 | +|---|---| +| 后端框架 | FastAPI + Uvicorn | +| 数据库 | SQLite(初版)/ PostgreSQL(生产) | +| 缓存 | Redis | +| ORM | SQLAlchemy + Alembic | +| AI SDK | 智谱GLM SDK(zhipuai) | +| 邮件 | aiosmtplib(异步SMTP) | +| 前端 | 原生HTML/CSS/JS,无框架 | +| 部署 | Docker Compose(FastAPI + Redis) | diff --git a/docs/superpowers/specs/2026-04-20-prompt-refinement-design.md b/docs/superpowers/specs/2026-04-20-prompt-refinement-design.md new file mode 100644 index 0000000..e4bb6eb --- /dev/null +++ b/docs/superpowers/specs/2026-04-20-prompt-refinement-design.md @@ -0,0 +1,40 @@ +# AI对话风格优化 + 联系方式引导 + +## 背景 +用户反馈AI客服回复"AI味重",需要更自然;同时需要在对话中拿到客户联系方式才算有效客户。 + +## 问题 +1. **客服套话多** — "感谢咨询""很高兴为您服务"等模板话术 +2. **回复太长** — 经常写2-3个长句,不像即时聊天 +3. **要联系方式不够主动** — 只有一句模糊的"自然引导",没有具体策略 + +## 方案 +只改 `app/prompts/system.md`,不动代码。 + +### 改动内容 + +#### 1. 加禁止套话规则 +明确列出禁止使用的句式: +- "感谢/谢谢您的咨询/关注/提问" +- "我很高兴/荣幸为您服务/帮助" +- "请随时/不要犹豫联系我" +- "希望以上信息对您有帮助" +- "如果您有任何其他问题" +- 任何以"您好"开头的句子(开场白除外) + +#### 2. 加联系方式引导策略 +- 3-4轮对话后,以"转接专业销售"为理由要联系方式 +- 给具体话术示例,让模型知道怎么自然地说 +- 拿到联系方式后不再重复要 + +#### 3. 加强长度控制 +- 从"2-3句话"改为"1-2个短句" +- 明确要求像 WhatsApp/微信聊天的长度 + +#### 4. 加正例/反例 +让模型直观理解什么是自然、什么是套话。 + +## 不改动的部分 +- `extractor.md` — 提取逻辑不变 +- `evaluator.md` — 评估逻辑不变(已有联系方式作为interested必要条件) +- 任何代码文件 diff --git a/docs/superpowers/specs/2026-04-22-chat-widget-redesign.md b/docs/superpowers/specs/2026-04-22-chat-widget-redesign.md new file mode 100644 index 0000000..886201c --- /dev/null +++ b/docs/superpowers/specs/2026-04-22-chat-widget-redesign.md @@ -0,0 +1,458 @@ +# 聊天窗口和入口按钮重新设计 + +**日期**: 2026-04-22 +**项目**: AI 客服系统 - VOLT/HESU +**目标**: 重新设计聊天窗口入口按钮和聊天界面样式 + +--- + +## 一、设计概述 + +### 1.1 项目背景 +当前 AI 客服系统的聊天窗口样式需要更新,以提供更专业、现代的用户体验。主要涉及: +- 悬浮入口按钮样式优化 +- 聊天窗口布局重新设计 +- 交互细节完善 + +### 1.2 设计目标 +- 提供专业、友好的客服入口体验 +- 优化聊天窗口的信息层级 +- 改善用户交互流程 +- 保持与品牌橙色主题的一致性 + +--- + +## 二、入口按钮设计 + +### 2.1 样式规范 + +| 属性 | 值 | +|------|-----| +| 类型 | 横条卡片式 | +| 尺寸 | 宽度约 180px,高度自动适应内容 | +| 圆角 | 30px | +| 背景 | #f08a31(品牌橙色) | +| 阴影 | 0 4px 16px rgba(240,138,49,0.4) | +| 悬停效果 | 放大 1.1 倍 | + +### 2.2 内容构成 + +``` +┌─────────────────────────────┐ +│ [📞 图标] 在线咨询 │ +│ 即时回复 │ +└─────────────────────────────┘ +``` + +- **左侧**: 圆形图标区域(36x36px,半透明白色背景) +- **右侧**: + - 主标题:"在线咨询"(14px,加粗,白色) + - 副标题:"即时回复"(11px,白色,90% 透明度) + +### 2.3 位置规范 +- 默认位置:右下角(bottom: 20px, right: 20px) +- 可配置位置:bottom-left, top-right, top-left +- z-index: 99999(确保在最顶层) + +--- + +## 三、聊天窗口设计 + +### 3.1 窗口规格 + +| 属性 | 值 | +|------|-----| +| 宽度 | 400px | +| 高度 | 自适应,最小高度 480px | +| 圆角 | 16px | +| 阴影 | 0 10px 40px rgba(0,0,0,0.15) | +| 最大高度 | 80vh | +| 字体 | -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto | + +### 3.2 头部区域 + +#### 3.2.1 布局 +- 高度:约 68px(padding 14px 18px) +- 背景:#f08a31(品牌橙色渐变) +- 文字颜色:白色 + +#### 3.2.2 元素构成 + +``` +┌─────────────────────────────────────┐ +│ [🚗 头像+绿点] HESU Support [−] [✕] │ +│ Online now · Usually │ +│ replies in minutes │ +└─────────────────────────────────────┘ +``` + +| 元素 | 规格 | +|------|------| +| 头像 | 48x48px 圆形,汽车 emoji 🚗,半透明白色背景 | +| 在线状态点 | 14px,绿色 #22c55e,3px 橙色边框,右下角定位 | +| 标题 | 17px,加粗,"HESU Support" | +| 状态文字 | 13px,"Online now · Usually replies in minutes",95% 透明度 | +| 操作按钮 | 32x32px,圆角 8px,半透明白色背景 15% | + +### 3.3 消息区域 + +#### 3.3.1 基础规范 +- 内边距:20px +- 背景:#ffffff 白色 +- 最小高度:260px +- 圆角:0(与窗口顶部对齐) + +#### 3.3.2 "How can we help?" 区块 + +``` +┌─────────────────────────────────────┐ +│ How can we help? │ +│ Ask about vehicles, market support, │ +│ quotation, shipping and delivery. │ +│ [📞 Call us] │ +└─────────────────────────────────────┘ +``` + +| 属性 | 值 | +|------|-----| +| 背景 | #fef9f3(浅黄橙色) | +| 边框 | 1px,#fef3c7 | +| 圆角 | 12px | +| 内边距 | 16px | +| 外边距 | 底部 20px | +| 布局 | 左侧内容 + 右侧按钮 | + +| 元素 | 规格 | +|------|------| +| 标题 | 17px,加粗,#111827 | +| 描述 | 13px,#6b7280,行高 1.4 | +| Call us 按钮 | #f08a31 背景,9px 18px 内边距,10px 圆角,📞 图标 15px | + +**交互**: Call us 按钮点击跳转到 https://wa.me/+8619037179250 + +#### 3.3.3 欢迎消息 + +``` +┌─────────────────────────────────────┐ +│ [🚗] Hello. Welcome to HESU. I can │ +│ help with stock vehicles, │ +│ quotation, delivery timing │ +│ and distributor cooperation. │ +└─────────────────────────────────────┘ +``` + +| 属性 | 值 | +|------|-----| +| AI 头像 | 32x32px 圆形,#f08a31 背景 | +| 消息气泡 | #f3f4f6 背景,16px 圆角,左下角 4px 直角 | +| 文字 | 14px,#1f2937,行高 1.5 | +| 最大宽度 | 280px | +| 间距 | 头像与气泡 10px | + +### 3.4 分隔线 + +| 属性 | 值 | +|------|-----| +| 高度 | 1px | +| 颜色 | #f08a31(橙色) | +| 透明度 | 30% | +| 位置 | 消息区与输入区之间 | + +### 3.5 输入区域 + +#### 3.5.1 容器规范 + +| 属性 | 值 | +|------|-----| +| 外边距 | 16px 18px | +| 背景 | 白色 | +| 内边距 | 0(容器本身无内边距) | + +#### 3.5.2 输入容器 + +``` +┌─────────────────────────────────────┐ +│ [ 输入框... ] │ [➤ Send ] │ +└─────────────────────────────────────┘ +``` + +| 属性 | 值 | +|------|-----| +| 背景 | #fef9f3(浅黄橙色) | +| 圆角 | 28px | +| 内边距 | 12px 16px | +| 边框 | 无 | +| 阴影 | 0 1px 3px rgba(0,0,0,0.05) | +| 间距 | 输入框与分隔线 8px | + +#### 3.5.3 输入框 + +| 属性 | 值 | +|------|-----| +| 背景 | 透明 | +| 边框 | 无 | +| 内边距 | 0 | +| 字号 | 14px | +| 颜色 | #1f2937 | +| 占位符 | "Type a message...",#9ca3af | +| 最小高度 | 20px | +| outline | none(聚焦时无特殊样式) | + +#### 3.5.4 分隔线 + +| 属性 | 值 | +|------|-----| +| 宽度 | 1px | +| 高度 | 24px | +| 颜色 | #e5e7eb | +| 位置 | 输入框与按钮之间 | + +#### 3.5.5 发送按钮 + +| 属性 | 值 | +|------|-----| +| 文字 | "➤ Send" | +| 背景 | linear-gradient(135deg, #f08a31, #f59e0b) | +| 内边距 | 8px 16px | +| 圆角 | 12px | +| 字号 | 14px,字重 500 | +| 阴影 | 0 2px 8px rgba(240,138,49,0.25) | +| 箭头图标 | 16px | +| white-space | nowrap(防止文字换行) | + +### 3.6 底部信息栏 + +``` +┌─────────────────────────────────────┐ +│ By sending a message, you agree to │ +│ the privacy policy. AI + human support │ +└─────────────────────────────────────┘ +``` + +| 属性 | 值 | +|------|-----| +| 背景 | 白色 | +| 内边距 | 10px 18px | +| 布局 | justify-content: space-between | +| 间距 | gap: 20px | +| 字号 | 11px | +| 颜色 | #d97706(深橙色) | + +| 元素 | 规格 | +|------|------| +| 左侧 | "By sending a message, you agree to the privacy policy.",flex: 1 | +| 右侧 | "AI + human support",flex-shrink: 0 | + +--- + +## 四、配色方案 + +### 4.1 主色调 + +| 颜色名称 | HEX 用途 | 说明 | +|----------|---------|------| +| 品牌橙 | #f08a31 | 主色、头部背景、按钮背景 | +| 品牌橙深 | #e07a20 | 悬停状态 | +| 橙黄渐变 | #f08a31 → #f59e0b | 发送按钮渐变 | + +### 4.2 辅助色 + +| 颜色名称 | HEX 用途 | 说明 | +|----------|---------|------| +| 浅黄橙 | #fef9f3 | Help 区块、输入容器背景 | +| 浅黄边 | #fef3c7 | Help 区块边框 | +| 橙色文字 | #d97706 | 底部信息栏文字 | +| 浅橙分隔 | #fed7aa | 辅助橙色 | + +### 4.3 中性色 + +| 颜色名称 | HEX 用途 | 说明 | +|----------|---------|------| +| 纯白 | #ffffff | 聊天背景、输入容器 | +| 浅灰 | #f9fafb | 输入框背景、快捷按钮背景 | +| 消息气泡灰 | #f3f4f6 | AI 消息气泡 | +| 边框灰 | #e5e7eb | 分隔线、边框 | +| 分隔线灰 | #e5e7eb | 细线分隔 | + +### 4.4 文字色 + +| 颜色名称 | HEX 用途 | 说明 | +|----------|---------|------| +| 深黑 | #111827 | 标题 | +| 中灰 | #6b7280 | 描述文字 | +| 深灰 | #1f2937 | 正文 | +| 浅灰 | #9ca3af | 占位符 | + +### 4.5 功能色 + +| 颜色名称 | HEX 用途 | 说明 | +|----------|---------|------| +| 在线绿 | #22c55e | 在线状态点 | + +--- + +## 五、交互说明 + +### 5.1 悬浮入口按钮 + +| 交互 | 行为 | +|------|------| +| 悬停 | 放大 1.1 倍 | +| 点击 | 展开/收起聊天窗口 | + +### 5.2 聊天窗口头部 + +| 元素 | 行为 | +|------|------| +| 最小化按钮 (−) | 折叠聊天窗口,保留悬浮入口 | +| 关闭按钮 (✕) | 关闭聊天窗口 | + +### 5.3 Call us 按钮 + +| 交互 | 行为 | +|------|------| +| 点击 | 新标签页打开 WhatsApp 链接:https://wa.me/+8619037179250 | +| target | _blank | + +### 5.4 发送按钮 + +| 交互 | 行为 | +|------|------| +| 点击 | 发送消息到 AI 客服 | +| 悬停 | 可选:放大效果 | + +--- + +## 六、响应式设计 + +### 6.1 移动端适配 + +| 断点 | 调整 | +|------|------| +| 最大宽度 400px | 窗口宽度 | +| 高度 | calc(100vh - 100px) | +| 底部位置 | 距底部 20px | + +### 6.2 字体缩放 + +| 元素 | 移动端 | +|------|--------| +| 标题 | 保持不变 | +| 正文 | 保持不变 | +| 按钮 | 保持不变 | + +--- + +## 七、技术实现要点 + +### 7.1 CSS 关键样式 + +```css +/* 悬浮入口按钮 */ +.toggle-btn { + width: auto; + height: auto; + background: #f08a31; + border-radius: 30px; + padding: 8px 20px; + display: flex; + align-items: center; + gap: 12px; + box-shadow: 0 4px 16px rgba(240,138,49,0.4); + cursor: pointer; + transition: transform 0.2s; +} + +/* 聊天窗口 */ +.chat-window { + width: 400px; + background: white; + border-radius: 16px; + box-shadow: 0 10px 40px rgba(0,0,0,0.15); +} + +/* 输入容器 */ +.input-container { + background: #fef9f3; + border-radius: 28px; + padding: 12px 16px; + display: flex; + align-items: center; + box-shadow: 0 1px 3px rgba(0,0,0,0.05); +} +``` + +### 7.2 需要修改的文件 + +1. **[static/widget.js](static/widget.js)** - 入口按钮样式 +2. **[static/css/style.css](static/css/style.css)** - 聊天窗口样式 +3. **[static/js/chat.js](static/js/chat.js)** - 交互逻辑(如需要) + +--- + +## 八、验收标准 + +### 8.1 视觉验收 + +- [ ] 入口按钮为横条卡片式,包含图标和双行文字 +- [ ] 聊天窗口宽度 400px,圆角 16px +- [ ] 头部橙色背景,包含头像+在线状态+标题+操作按钮 +- [ ] "How can we help?" 区块浅黄背景,左内容右按钮布局 +- [ ] 欢迎消息包含 AI 头像和问候语 +- [ ] 橙色分隔线(1px,30% 透明度) +- [ ] 输入容器浅黄背景,圆角 28px,无边框 +- [ ] 发送按钮为圆角长方形,包含箭头图标和"Send"文字 +- [ ] 底部信息栏橙色文字,左右分开布局 + +### 8.2 交互验收 + +- [ ] 入口按钮悬停放大 +- [ ] Call us 按钮跳转到 WhatsApp +- [ ] 最小化/关闭按钮功能正常 +- [ ] 发送按钮功能正常 + +### 8.3 响应式验收 + +- [ ] 移动端窗口正确显示 +- [ ] 文字大小适配合理 + +--- + +## 九、实施计划 + +### 9.1 实施步骤 + +1. 修改悬浮入口按钮样式(widget.js) +2. 更新聊天窗口 CSS 样式(style.css) +3. 调整输入区域 HTML 结构(chat.html) +4. 更新交互逻辑(chat.js) +5. 测试所有交互功能 +6. 移动端兼容性测试 + +### 9.2 兼容性 + +- 现代浏览器(Chrome, Firefox, Safari, Edge) +- 移动端浏览器(iOS Safari, Chrome Mobile) +- Shadow DOM 支持(widget 嵌入模式) + +--- + +## 十、附录 + +### 10.1 设计参考 + +- 入口按钮:现代客服系统的横条卡片样式 +- 聊天窗口:IM 应用(WhatsApp、Telegram)的对话界面 +- 配色方案:品牌橙色主题的延伸 + +### 10.2 设计资产 + +- 头像:汽车 emoji 🚗 +- 在线图标:绿点 + "Online" 文字 +- 操作图标:−(最小化)、✕(关闭) +- 功能图标:📞(电话)、➤(发送箭头) + +--- + +**文档版本**: 1.0 +**最后更新**: 2026-04-22 diff --git a/docs/superpowers/specs/2026-04-23-auto-popup-invite-card-design.md b/docs/superpowers/specs/2026-04-23-auto-popup-invite-card-design.md new file mode 100644 index 0000000..d1fc07f --- /dev/null +++ b/docs/superpowers/specs/2026-04-23-auto-popup-invite-card-design.md @@ -0,0 +1,248 @@ +# 自动弹出邀请卡片设计规范 + +**日期:** 2026-04-23 +**状态:** 已批准 +**相关:** 2026-04-22-chat-widget-redesign.md + +--- + +## 概述 + +为 Widget 模式添加自动弹出邀请卡片,页面加载 1.8 秒后显示。邀请卡片提供快速访问常见话题的入口,提升用户参与度。 + +### 目标 + +- 通过主动邀请提升用户参与度 +- 提供热门话题的快速访问 +- 保持每页独立的状态管理 +- 与现有聊天组件无缝集成 + +--- + +## 组件设计 + +### 邀请卡片 + +**位置**: 右下角,悬浮按钮上方 + +**尺寸**: +- 宽度: 360px +- 移动端最大宽度: calc(100vw - 24px) + +**样式**: +- 圆角: 26px +- 头部: 橙色渐变 `linear-gradient(135deg, #F08A34 0%, #EC8C2F 100%)` +- 阴影: `0 28px 80px rgba(196,91,25,0.22)` +- 动画: 淡入 + 从底部滑入 (300ms) + +**结构**: + +``` +┌──────────────────────────────────────┐ +│ 头部 (橙色渐变) │ +│ 🤖 Get stock list or quotation now │ +│ Chat with us for available vehicles, │ +│ delivery timing and distributor... │ +├──────────────────────────────────────┤ +│ 话题按钮 (2x1 网格) │ +│ ┌─────────────┐ ┌─────────────────┐ │ +│ │Get Quotation│ │Distributor Coopt│ │ +│ └─────────────┘ └─────────────────┘ │ +├──────────────────────────────────────┤ +│ 操作按钮 │ +│ [Start Chat →] [ No Thanks ] │ +└──────────────────────────────────────┘ +``` + +**话题列表**: +1. Get Quotation +2. Distributor Cooperation + +--- + +## 状态管理 + +### 存储方案 + +**键名格式**: `widget_invite_dismissed_${pathname}` + +**示例**: +- 页面 `/home` → `widget_invite_dismissed_/home` +- 页面 `/products` → `widget_invite_dismissed_/products` + +**存储类型**: `sessionStorage` + +### 状态流程 + +``` +页面加载 + ↓ +启动 1.8 秒定时器 + ↓ +检查 sessionStorage + ↓ +┌─────────────┬─────────────┐ +│ 未关闭 │ 已关闭 │ +│ ↓ │ ↓ │ +│ 显示邀请 │ 跳过 │ +└─────────────┴─────────────┘ +``` + +### 关闭类型 + +| 类型 | 触发条件 | 存储行为 | 刷新后行为 | +|------|---------|---------|-----------| +| 暂时关闭 | 点击话题、Start Chat、悬浮按钮 | 设置 dismissed = true | 重置(再次显示) | +| 永久关闭 | 点击 No Thanks | 设置 dismissed = true | 持续(保持隐藏) | + +--- + +## 交互矩阵 + +| 用户操作 | 邀请卡片 | 聊天面板 | 自动发送消息 | +|---------|---------|---------|-------------| +| 点击 "Get Quotation" | 关闭(暂时) | 打开 | 是 | +| 点击 "Distributor Cooperation" | 关闭(暂时) | 打开 | 是 | +| 点击 "Start Chat" | 关闭(暂时) | 打开 | 否 | +| 点击 "No Thanks" | 关闭(永久) | - | 否 | +| 点击悬浮按钮(邀请可见时) | 关闭(暂时) | 打开 | 否 | +| 点击悬浮按钮(邀请隐藏时) | - | 打开 | 否 | + +### 显示逻辑 + +**互斥关系**: +- 邀请卡片可见 → 聊天面板隐藏 +- 聊天面板打开 → 邀请卡片隐藏 + +**层级 (Z-Index)**: +- 邀请卡片: 99998 +- 聊天面板: 99999 +- 悬浮按钮: 99997 + +--- + +## 聊天面板中的热门话题 + +### 位置 + +消息区域,初始消息上方。仅在对话初始阶段显示。 + +### 样式 + +``` +┌──────────────────────────────────────┐ +│ POPULAR TOPICS │ +│ ┌─────────────┐ ┌─────────────────┐ │ +│ │Get Quotation│ │Distributor Coopt│ │ +│ └─────────────┘ └─────────────────┘ │ +└──────────────────────────────────────┘ +``` + +### 行为 + +- 点击话题 → 自动发送消息到聊天 +- 用户发送第一条消息后隐藏 + +--- + +## 每页独立运行 + +### 规则 + +1. **独立定时器**: 每个页面加载时启动自己的 1.8 秒定时器 +2. **独立存储**: 每个页面单独存储关闭状态 +3. **无跨页面通信**: 状态不在页面间同步 +4. **会话重置**: 关闭网站清空所有状态 + +### 示例流程 + +``` +1. 用户打开 /home + → 1.8 秒 → 显示邀请 + → 用户点击 "Get Quotation" + → /home 标记为已关闭 + +2. 用户导航到 /products + → 1.8 秒 → 显示邀请(独立) + → 用户点击 "No Thanks" + → /products 标记为已关闭 + +3. 用户导航到 /about + → 1.8 秒 → 显示邀请(独立) + → 用户没有操作 + → /about 未标记为已关闭 + +4. 用户回到 /home + → 检查存储 → 已关闭 + → 不显示邀请 + +5. 用户回到 /about + → 检查存储 → 未关闭 + → 邀请保持显示 + +6. 用户刷新 /about + → 存储持续 → 邀请保持显示 + +7. 用户关闭并重新打开网站 + → 所有存储清空 + → 所有页面重新开始 +``` + +--- + +## 实现文件 + +### 修改 + +- `static/widget.js` - 添加邀请卡片组件和逻辑(约 250-300 行) + +### 新增代码段 + +1. **邀请 HTML 生成** - 创建邀请卡片 DOM 结构 +2. **邀请 CSS 样式** - 添加到 Shadow DOM 的样式 +3. **定时器逻辑** - 1.8 秒延迟机制 +4. **存储管理** - 每页状态管理 +5. **事件处理** - 话题按钮、操作按钮 +6. **自动发送消息** - 注入消息到聊天的函数 + +--- + +## 技术考虑 + +### Shadow DOM + +所有邀请卡片样式都在 Shadow DOM 内部作用域,防止与宿主页面样式冲突。 + +### 性能 + +- 定时器是简单的 `setTimeout()` - 开销极小 +- 存储检查是同步且快速的 +- 初始渲染后 DOM 操作最少 + +### 可访问性 + +- 邀请卡片可用 Escape 键关闭(未来增强) +- 所有按钮都有正确的 `aria-label` 属性 +- 支持键盘导航 + +### 浏览器兼容性 + +- `sessionStorage` 在所有现代浏览器中支持 +- Shadow DOM 在 Chrome 53+、Firefox 63+、Safari 10+ 中支持 + +--- + +## 未来增强 + +1. **可配置延迟**: 通过 data 属性自定义 1.8 秒延迟 +2. **A/B 测试**: 支持不同的邀请变体 +3. **分析**: 跟踪邀请关闭和转化率 +4. **Escape 键**: 用键盘关闭邀请 +5. **智能时机**: 用户主动滚动时延迟邀请 + +--- + +## 参考资料 + +- 父规范: `2026-04-22-chat-widget-redesign.md` +- 参考设计: `livechat_ui_widget (5).jsx` (StrongInvite 组件) diff --git a/docs/superpowers/specs/2026-06-18-dynamic-contact-config-design.md b/docs/superpowers/specs/2026-06-18-dynamic-contact-config-design.md new file mode 100644 index 0000000..b913611 --- /dev/null +++ b/docs/superpowers/specs/2026-06-18-dynamic-contact-config-design.md @@ -0,0 +1,160 @@ +# WhatsApp / Email 联系方式动态配置 + +**日期**: 2026-06-18 +**项目**: AI 客服系统 - VOLT/HESU +**目标**: 将写死的 WhatsApp 号码和 Email 地址改为通过 ` + + + +``` + +--- + +## 三、改动详情 + +### 3.1 `static/widget.js`(嵌入式组件) + +**读取配置**:在 [widget.js:8-12](../../../static/widget.js#L8-L12) 现有 `getAttribute` 调用旁,新增两行(沿用现有写法): + +```js +var whatsapp = script.getAttribute("data-whatsapp") || "https://wa.me/+8619037179250"; +var email = script.getAttribute("data-email") || "mailto:info@borderlesscar.com"; +``` + +**使用配置**:把以下 3 处写死的 `href` 替换为字符串拼接 `+ whatsapp +` / `+ email +`: + +| 位置 | 当前写死值 | 改为 | +|------|------------|------| +| [widget.js:170](../../../static/widget.js#L170)(面板 help-block,含 WhatsApp 与 Email 两个 `href`) | `https://wa.me/+8619037179250` / `mailto:info@borderlesscar.com` | `+ whatsapp +` / `+ email +` | +| [widget.js:199](../../../static/widget.js#L199)(邀请卡 WhatsApp) | `https://wa.me/+8619037179250` | `+ whatsapp +` | +| [widget.js:203](../../../static/widget.js#L203)(邀请卡 Email) | `mailto:info@borderlesscar.com` | `+ email +` | + +> 注意:第 170 行是单行内同时包含 WhatsApp 与 Email 两个 ``,需保证两处拼接都正确,不要漏改其中一个。 + +### 3.2 `static/js/chat.js` + `static/chat.html`(独立页,方案 A) + +`chat.html` 是独立整页,加载 `/static/js/chat.js`(**不**加载 widget.js)。为保持与组件**同一套**配置机制,让 `chat.js` 读取自身 `` 标签上添加 `data-whatsapp` / `data-email` 属性,使演示页展示配置能力。 +- 第 35、39 行原有的静态 `href` **保留为默认值不动**,作为 `chat.js` 执行前的 fallback(避免 JS 未执行时出现空链接),`chat.js` 启动后会按配置覆盖。 +- **执行时序安全**:`chat.js` 在 `` 末尾加载([chat.html:80](../../../static/chat.html#L80),晚于聊天容器 DOM),故 IIFE 顶部同步 `querySelector('.whatsapp-btn' / '.email-btn')` 时两个锚点已存在,同步赋值 `href` 安全。这两个 class 仅出现在 `chat.html` 的 light DOM 中(widget.js 里同名 class 在其 shadow DOM 内,互不干扰)。 + +### 3.3 `static/widget-test.html`(组件测试/演示页) + +- 在 [widget-test.html:69](../../../static/widget-test.html#L69) 的组件 ` + + + + + + +``` + +两个开关互相独立,可任意组合。 + +--- + +## 三、改动详情 + +全部改动集中在 [static/widget.js](../../../static/widget.js) 与测试页 [static/widget-test.html](../../../static/widget-test.html)。 + +### 3.1 `static/widget.js` — 读取两个新属性 + +在 [widget.js:8-14](../../../static/widget.js#L8-L14) 现有 `getAttribute` 调用旁,新增两行: + +```js +var autoInvite = script.getAttribute("data-auto-invite") !== "false"; +var isMobile = script.getAttribute("data-mobile") === "true"; +``` + +### 3.2 `static/widget.js` — 邀请卡自动弹出开关 + +在 [widget.js:306](../../../static/widget.js#L306) 的 `startInviteTimer()` 函数**最开头**加一句短路: + +```js +function startInviteTimer() { + if (!autoInvite) return; // ← 新增:配置关闭则不启动计时器 + if (checkInviteStorage()) { + return; // 已被永久关闭 + } + inviteTimer = window.setTimeout(function () { ... }, 1800); +} +``` + +效果:`data-auto-invite="false"` 时计时器根本不启动,邀请卡永不自动弹出。点悬浮按钮仍照常打开聊天面板;邀请卡内部的 "Start Chat" / "No Thanks" 等逻辑因卡片不出现而自然不触发,无需额外改动。 + +### 3.3 `static/widget.js` — 移动端悬浮按钮(D2) + +悬浮按钮当前在 [widget.js:233-244](../../../static/widget.js#L233-L244) 一处生成,`toggleBtn.innerHTML` 为桌面款模板。改动为**按 `isMobile` 分两套模板**,点击事件不变。 + +**实现路径选择(见第四节):采用「独立移动端 DOM 模板」**,桌面款模板逐字不动搬入 `else` 分支。 + +**DOM 结构(D2,竖排:圆钮在上、文字在外在下)**: + +```js +var toggleBtn = document.createElement("button"); +toggleBtn.className = "toggle-btn" + (isMobile ? " mobile" : ""); + +if (isMobile) { + toggleBtn.innerHTML = ` +
🤖
+ Chat with us + `; +} else { + toggleBtn.innerHTML = `/* 现有桌面款模板(widget.js:235-244),原样照搬、逐字不动 */`; +} +``` + +`toggleBtn` 仍是接收点击的元素([widget.js:367](../../../static/widget.js#L367) 的 `toggleBtn.addEventListener("click", toggle)` 不变),点击圆钮或文字均触发 `toggle()`。 + +**新增 CSS(追加到 [widget.js:40](../../../static/widget.js#L40) 注入的样式数组中)**: + +```js +// 移动端竖排按钮(D2):覆盖桌面款药丸背景,把橙色挪到圆钮上 +".toggle-btn.mobile { flex-direction:column; gap:5px; padding:0; background:transparent; box-shadow:none; border-radius:0; }", +".toggle-btn.mobile:hover { transform:scale(1.05); }", +".toggle-btn.mobile .mobile-circle { position:relative; width:56px; height:56px; border-radius:50%; background:#f08a31; display:flex; align-items:center; justify-content:center; font-size:28px; box-shadow:0 4px 16px rgba(240,138,49,0.45); }", +".toggle-btn.mobile .mobile-dot { position:absolute; bottom:2px; right:2px; width:13px; height:13px; background:#22c55e; border-radius:50%; border:2px solid #f08a31; }", +".toggle-btn.mobile .mobile-label { color:#8C4D1D; font-size:10px; font-weight:600; line-height:1.1; }", +``` + +> **位置**:桌面端位置逻辑不变——按钮仍位于由 `positionStyles` 决定的容器锚点(默认右下)。移动端采用更贴角的位置表(见下「位置偏移」)。 +> +> **颜色与主题**:移动端按钮颜色硬编码固定橙色(`#f08a31` 圆钮 + `#8C4D1D` 文字),**不随 `data-theme` 切换**——这与现有桌面款按钮(同样固定橙色、忽略 `data-theme`)行为一致,实现时无需特殊处理主题。 + +**位置偏移(移动端贴角)**: + +现有 `positionStyles`([widget.js:16-21](../../../static/widget.js#L16-L21))的 `bottom-right` 取 `bottom:80px`(为高药丸按钮预留)。移动端圆钮仅 56px,沿用 80px 会在手机上离底边偏高、显得"飘"。故 `isMobile` 时改用一份更贴角的位置表 `positionStylesMobile`: + +```js +var positionStylesMobile = { + "bottom-right": { bottom: "20px", right: "16px" }, + "bottom-left": { bottom: "20px", left: "16px" }, + "top-right": { top: "20px", right: "16px" }, + "top-left": { top: "20px", left: "16px" }, +}; +var pos = (isMobile ? positionStylesMobile : positionStyles)[position] + || (isMobile ? positionStylesMobile : positionStyles)["bottom-right"]; +``` + +桌面端 `positionStyles` 逐字不动;仅当 `data-mobile="true"` 时切换到 `positionStylesMobile`。聊天面板/邀请卡因相对容器定位(`bottom:80px`),随容器下移后仍开在按钮上方,不重叠。 + +### 3.4 `static/widget-test.html` — 演示 / 测试属性 + +在 [widget-test.html:69](../../../static/widget-test.html#L69) 的组件 ` + + diff --git a/static/chat.html b/static/chat.html new file mode 100644 index 0000000..e218b0e --- /dev/null +++ b/static/chat.html @@ -0,0 +1,82 @@ + + + + + + VOLT + + + + +
+
+
🤖
+
+

HESU Support

+
Online now - Usually replies in minutes
+
+ +
+ +
+ Chat ended. We'll be in touch soon! +
+
+
+
+
+
Hey there! Looking for a ride? Tell me what you need.
+
+
+ +
+ +
+ + + +
+ +
+
+ + +
+
+
+ + + + diff --git a/static/css/style.css b/static/css/style.css new file mode 100644 index 0000000..554ee44 --- /dev/null +++ b/static/css/style.css @@ -0,0 +1,468 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +:root { + --w-primary: #f08a31; + --w-primary-rgb: 240, 138, 49; + --w-gradient-end: #f08e2c; + --w-deep-text: #8a4c1d; + --w-caption-text: #c16d2d; + --w-soft-bg: #fef8f4; + --w-border-soft: #f0d3bd; + --bg: #f5f5f5; + --chat-bg: #ffffff; + --ai-bubble: #f0f0f0; + --text: #333333; + --text-light: #666666; + --text-white: #ffffff; + --border: #e0e0e0; + --success: #34a853; + --shadow: 0 2px 8px rgba(0, 0, 0, 0.1); +} + +html, body { + height: 100%; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + background: var(--bg); + color: var(--text); +} + +.chat-container { + display: flex; + flex-direction: column; + height: 100vh; + max-width: 800px; + margin: 0 auto; + background: var(--chat-bg); + box-shadow: var(--shadow); +} + +/* Header */ +.chat-header { + display: flex; + align-items: center; + gap: 12px; + padding: 14px 18px; + background: var(--w-primary); + color: white; + flex-shrink: 0; +} + +.chat-header .avatar { + width: 48px; + height: 48px; + background: rgba(255, 255, 255, 0.2); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-size: 22px; + position: relative; +} + +/* 头像通用:emoji 兜底层 + 品牌图片层 */ +.avatar-emoji { line-height: 1; } +.avatar-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; border-radius: 50%; } + +/* 在线状态点 */ +.chat-header .avatar::after { + content: ''; + position: absolute; + bottom: 1px; + right: 1px; + width: 14px; + height: 14px; + background: #22c55e; + border-radius: 50%; + border: 3px solid var(--w-primary); +} + +.chat-header .info h1 { + font-size: 17px; + font-weight: 600; + margin: 0; +} + +.chat-header .info .status { + font-size: 13px; + opacity: 0.95; + margin: 0; +} + +/* 头部操作按钮 */ +.chat-header .actions { + display: flex; + gap: 8px; +} + +.chat-header .action-btn { + width: 32px; + height: 32px; + border-radius: 8px; + background: rgba(255, 255, 255, 0.25); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + border: none; + transition: background 0.2s; + color: #fff; +} + +.chat-header .action-btn:hover { + background: rgba(255, 255, 255, 0.25); +} + +/* Messages area */ +.chat-messages { + flex: 1; + overflow-y: auto; + padding: 20px; + padding-bottom: 8px; + display: flex; + flex-direction: column; + gap: 12px; +} + +.message { + display: flex; + max-width: 80%; +} + +.message.user { + align-self: flex-end; +} + +.message.assistant { + align-self: flex-start; + display: flex; + align-items: flex-start; + gap: 10px; +} + +.message .bubble { + padding: 10px 16px; + border-radius: 16px; + line-height: 1.5; + font-size: 14px; + word-break: break-word; +} + +.message.user .bubble { + background: var(--w-primary); + color: var(--text-white); + border-bottom-right-radius: 4px; +} + +.message.assistant .avatar { + width: 32px; + height: 32px; + background: var(--w-primary); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-size: 14px; + color: white; + flex-shrink: 0; + box-shadow: 0 2px 8px rgba(var(--w-primary-rgb),0.3); +} + +.message.assistant .bubble { + background: #f3f4f6; + color: #1f2937; + padding: 12px 16px; + border-bottom-left-radius: 4px; + max-width: 280px; +} + +.message .time { + font-size: 11px; + color: var(--text-light); + margin-top: 4px; + padding: 0 4px; +} + +.message.user .time { + text-align: right; +} + +/* Typing indicator */ +.typing-indicator { + display: none; + align-self: flex-start; + padding: 10px 16px; + background: var(--ai-bubble); + border-radius: 16px; + border-bottom-left-radius: 4px; +} + +.typing-indicator.active { + display: flex; + gap: 4px; + align-items: center; +} + +.typing-indicator span { + width: 8px; + height: 8px; + background: #999; + border-radius: 50%; + animation: typing 1.4s infinite; +} + +.typing-indicator span:nth-child(2) { animation-delay: 0.2s; } +.typing-indicator span:nth-child(3) { animation-delay: 0.4s; } + +@keyframes typing { + 0%, 60%, 100% { transform: translateY(0); opacity: 0.4; } + 30% { transform: translateY(-6px); opacity: 1; } +} + +/* 消息区分隔线 */ +.chat-separator { + height: 1px; + background: var(--w-primary); + opacity: 0.3; + flex-shrink: 0; +} + +/* 输入区域容器 */ +.chat-input-container { + padding: 10px 10px; + background: white; + flex-shrink: 0; +} + +/* 输入容器 */ +.input-wrapper { + display: flex; + align-items: center; + gap: 0; + padding: 8px 16px; + background: var(--w-soft-bg); /* 主题浅底 */ + border-radius: 28px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); +} + +/* 输入框 */ +.chat-input-container input { + flex: 1; + padding: 0; + border: none; + font-size: 14px; + background: transparent; + outline: none; + min-height: 20px; + color: #1f2937; +} + +.chat-input-container input:focus { + box-shadow: inset 0 0 0 2px rgba(var(--w-primary-rgb),0.2); +} + +.chat-input-container input::placeholder { + color: #9ca3af; +} + +/* 分隔线 */ +.input-separator { + width: 1px; + height: 24px; + background: #e5e7eb; + margin: 0 8px; + flex-shrink: 0; +} + +/* 发送按钮 */ +.send-btn { + padding: 8px 16px; + border: none; + border-radius: 12px; + background: linear-gradient(135deg, var(--w-primary), var(--w-gradient-end)); + color: white; + font-size: 14px; + font-weight: 500; + cursor: pointer; + flex-shrink: 0; + box-shadow: 0 2px 8px rgba(var(--w-primary-rgb),0.25); + display: flex; + align-items: center; + gap: 6px; + white-space: nowrap; +} + +.send-btn:hover { + box-shadow: 0 4px 12px rgba(var(--w-primary-rgb),0.35); +} + +.send-btn .send-icon { + font-size: 16px; +} + +.send-btn .send-text { + font-size: 14px; +} + +.send-btn:disabled { + background: #ccc; + cursor: not-allowed; + box-shadow: none; +} + +/* Ended banner */ +.chat-ended { + display: none; + text-align: center; + padding: 12px; + background: #e8f5e9; + color: var(--success); + font-size: 13px; + font-weight: 500; +} + +.chat-ended.active { + display: block; +} + +/* Help 区块 */ +.help-block { + background: var(--w-soft-bg); + border-radius: 12px; + padding: 10px 14px; + margin-bottom: 16px; + border: 1px solid var(--w-border-soft); +} +.panel-top { + flex-shrink: 0; + padding: 10px 16px; + background: var(--w-soft-bg); +} +.help-block .help-content { + flex: 1; + min-width: 0; +} + +.help-block .help-title { + font-size: 16px; + font-weight: 700; + color: #111827; + margin-bottom: 3px; +} + +.help-block .help-description { + font-size: 12px; + color: #6b7280; + line-height: 1.4; +} + +.help-block .help-actions { + display: grid; + gap: 8px; + flex-shrink: 0; +} + +.help-block .call-btn { + background: #fff; + color: var(--w-deep-text); + border: 1px solid var(--w-border-soft); + padding: 6px 10px; + border-radius: 20px; + font-size: 13px; + font-weight: 600; + cursor: pointer; + display: flex; + align-items: center; + gap: 5px; + text-decoration: none; + flex-shrink: 0; + transition: all 0.2s; +} + +.help-block .call-btn:hover { + background: var(--w-soft-bg); + transform: translateY(-1px); +} + +.help-block .call-btn svg { + flex-shrink: 0; +} + +/* POPULAR TOPICS 区块 */ +.popular-topics-fixed { + flex-shrink: 0; + padding: 12px 20px 8px; + background: white; +} + +.chat-separator-topics { + height: 1px; + background: var(--w-primary); + opacity: 0.15; + flex-shrink: 0; +} + +.popular-topics-label { + font-size: 11px; + font-weight: 600; + color: var(--w-caption-text); + letter-spacing: 0.14em; + margin-bottom: 8px; + text-transform: uppercase; +} + +.popular-topics-grid { + display: flex; + gap: 8px; + flex-wrap: wrap; +} + +.popular-topic-btn { + border-radius: 20px; + border: 1px solid var(--w-border-soft); + background: var(--w-soft-bg); + padding: 8px 16px; + font-size: 12px; + font-weight: 500; + color: var(--w-deep-text); + cursor: pointer; + transition: background 0.2s; + white-space: nowrap; +} + +.popular-topic-btn:hover { + background: white; +} + +/* 底部信息栏 */ +.chat-footer { + padding: 10px 10px; + background: white; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 11px; + color: var(--w-caption-text); + gap: 20px; +} + +.chat-footer .footer-left { + flex: 1; +} + +.chat-footer .footer-right { + flex-shrink: 0; +} + +/* Mobile */ +@media (max-width: 600px) { + .chat-container { + max-width: 100%; + } + .message { + max-width: 88%; + } +} diff --git a/static/js/chat.js b/static/js/chat.js new file mode 100644 index 0000000..fd15015 --- /dev/null +++ b/static/js/chat.js @@ -0,0 +1,231 @@ +// ---- 动态主题色 bootstrap(spec §3):?color= → 派生 → :root 变量 ---- +(function () { + if (typeof ChatTheme === "undefined") return; // theme.js 加载失败→style.css :root 默认橙兜底 + var m = /(?:^|[?&])color=([^&]*)/.exec(location.search); + function safeDecode(s) { try { return decodeURIComponent(s); } catch (e) { return ""; } } + var color = m ? safeDecode(m[1]).trim() : ""; + var palette = ChatTheme.derivePalette(color || ChatTheme.DEFAULT_COLOR); + var root = document.documentElement.style; + root.setProperty("--w-primary", palette.primary); + root.setProperty("--w-primary-rgb", palette.primaryRgb); + root.setProperty("--w-gradient-end", palette.gradientEnd); + root.setProperty("--w-deep-text", palette.deepText); + root.setProperty("--w-caption-text", palette.captionText); + root.setProperty("--w-soft-bg", palette.softBg); + root.setProperty("--w-border-soft", palette.borderSoft); + + // 头像兜底(与挂件同机制) + Array.prototype.forEach.call(document.querySelectorAll(".avatar-img"), function (img) { + function hideEmoji() { + var s = img.parentElement && img.parentElement.querySelector(".avatar-emoji"); + if (s) s.style.display = "none"; + } + if (img.complete && img.naturalWidth > 0) { hideEmoji(); return; } + img.addEventListener("load", hideEmoji); + img.addEventListener("error", function () { img.remove(); }); + }); +})(); + +(function () { + // 联系方式配置(与 widget.js 的 data-* 机制一致) + var chatScript = document.currentScript || document.querySelector('script[src*="chat.js"]'); + var whatsapp = (chatScript && chatScript.getAttribute("data-whatsapp")) || "https://wa.me/+8619037179250"; + var email = (chatScript && chatScript.getAttribute("data-email")) || "mailto:info@borderlesscar.com"; + var waBtn = document.querySelector('.whatsapp-btn'); + var emBtn = document.querySelector('.email-btn'); + if (waBtn) waBtn.href = whatsapp; + if (emBtn) emBtn.href = email; + var sessionId = localStorage.getItem("cc_session_id"); + var messagesEl = document.getElementById("messages"); + var inputEl = document.getElementById("input"); + var sendBtn = document.getElementById("sendBtn"); + var typingEl = document.getElementById("typing"); + var endedEl = document.getElementById("chatEnded"); + var popularTopicsEl = document.getElementById("popular-topics"); + var ws = null; + var ended = false; + + // Current streaming message element + var streamBubble = null; + var statusTimer = null; + + function getWsUrl() { + var loc = window.location; + var proto = loc.protocol === "https:" ? "wss:" : "ws:"; + return proto + "//" + loc.host + "/ws/chat"; + } + + function connect() { + ws = new WebSocket(getWsUrl()); + + ws.onopen = function () { + if (sessionId) { + ws.send(JSON.stringify({ session_id: sessionId })); + } else { + ws.send(JSON.stringify({ source: "standalone" })); + } + }; + + ws.onmessage = function (e) { + var data = JSON.parse(e.data); + + if (data.type === "init" || data.type === "resumed") { + sessionId = data.session_id; + localStorage.setItem("cc_session_id", sessionId); + if (data.type === "resumed") { + loadHistory(); + } + } + + if (data.type === "stream_start") { + clearStatusTimer(); + hideTyping(); + streamBubble = addStreamBubble(); + } + + if (data.type === "stream_chunk") { + if (streamBubble) { + streamBubble.textContent += data.content; + messagesEl.scrollTop = messagesEl.scrollHeight; + } + } + + if (data.type === "stream_end") { + streamBubble = null; + } + + if (data.type === "evaluated") { + if (data.ended) { + ended = true; + endedEl.classList.add("active"); + inputEl.disabled = true; + sendBtn.disabled = true; + } + } + + if (data.type === "error") { + clearStatusTimer(); + hideTyping(); + streamBubble = null; + addMessage("assistant", "抱歉,出了点问题,请稍后再试。"); + } + }; + + ws.onclose = function () { + if (!ended) { + setTimeout(connect, 3000); + } + }; + + ws.onerror = function () { + ws.close(); + }; + } + + function send() { + var text = inputEl.value.trim(); + if (!text || ended || !ws || ws.readyState !== WebSocket.OPEN) return; + + addMessage("user", text); + inputEl.value = ""; + hidePopularTopics(); + + // Immediate feedback: show status then typing + showStatusThenTyping(); + + ws.send(JSON.stringify({ content: text })); + } + + function sendTopicMessage(topic) { + if (ended || !ws || ws.readyState !== WebSocket.OPEN) return; + + addMessage("user", topic); + hidePopularTopics(); + + // Immediate feedback: show status then typing + showStatusThenTyping(); + + ws.send(JSON.stringify({ content: topic })); + } + + function hidePopularTopics() { + if (popularTopicsEl) { + popularTopicsEl.style.display = "none"; + } + } + + function showStatusThenTyping() { + clearStatusTimer(); + showTyping(); + // Auto-hide typing is handled by stream_start replacing it + } + + function clearStatusTimer() { + if (statusTimer) { + clearTimeout(statusTimer); + statusTimer = null; + } + } + + function addMessage(role, content) { + var div = document.createElement("div"); + div.className = "message " + role; + + var wrapper = document.createElement("div"); + var bubble = document.createElement("div"); + bubble.className = "bubble"; + bubble.textContent = content; + + wrapper.appendChild(bubble); + div.appendChild(wrapper); + messagesEl.appendChild(div); + messagesEl.scrollTop = messagesEl.scrollHeight; + } + + function addStreamBubble() { + var div = document.createElement("div"); + div.className = "message assistant"; + + var wrapper = document.createElement("div"); + var bubble = document.createElement("div"); + bubble.className = "bubble"; + bubble.textContent = ""; + + wrapper.appendChild(bubble); + div.appendChild(wrapper); + messagesEl.appendChild(div); + messagesEl.scrollTop = messagesEl.scrollHeight; + return bubble; + } + + function showTyping() { + typingEl.classList.add("active"); + messagesEl.scrollTop = messagesEl.scrollHeight; + } + + function hideTyping() { + typingEl.classList.remove("active"); + } + + function loadHistory() { + } + + sendBtn.addEventListener("click", send); + inputEl.addEventListener("keydown", function (e) { + if (e.key === "Enter" && !e.shiftKey) { + e.preventDefault(); + send(); + } + }); + + // Popular topics buttons + var topicBtns = document.querySelectorAll(".popular-topic-btn"); + topicBtns.forEach(function (btn) { + btn.addEventListener("click", function () { + var topic = this.getAttribute("data-topic"); + sendTopicMessage(topic); + }); + }); + + connect(); +})(); diff --git a/static/js/theme.js b/static/js/theme.js new file mode 100644 index 0000000..90b64d0 --- /dev/null +++ b/static/js/theme.js @@ -0,0 +1,103 @@ +/* 客服主题派生——单品牌色 → 7 槽位色板(spec 2026-08-31 §5)。 + * 注意:此文件与 static/widget.js 内联拷贝必须逐字符一致(空白归一化后), + * 由 tests/test_theme_static.py 强制;修改务必两边同步。 */ +(function (global) { + "use strict"; + + var DEFAULT_COLOR = "#f08a31"; + + var DEFAULT_PALETTE = { + primary: "#f08a31", + primaryRgb: "240,138,49", + gradientEnd: "#f08e2c", + deepText: "#8a4c1d", + captionText: "#c16d2d", + softBg: "#fef8f4", + borderSoft: "#f0d3bd" + }; + + function clampNum(v, lo, hi) { + return Math.min(hi, Math.max(lo, v)); + } + + function hexToRgb(hex) { + hex = String(hex || "").replace(/^#/, ""); + if (hex.length === 3) { + hex = hex.split("").map(function (ch) { return ch + ch; }).join(""); + } + if (!/^[0-9a-fA-F]{6}$/.test(hex)) return null; + return { + r: parseInt(hex.slice(0, 2), 16), + g: parseInt(hex.slice(2, 4), 16), + b: parseInt(hex.slice(4, 6), 16) + }; + } + + function rgbToHsl(r, g, b) { + r /= 255; g /= 255; b /= 255; + var max = Math.max(r, g, b), min = Math.min(r, g, b); + var l = (max + min) / 2; + var d = max - min; + var h = 0, s = 0; + if (d !== 0) { + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + if (max === r) h = ((g - b) / d) % 6; + else if (max === g) h = (b - r) / d + 2; + else h = (r - g) / d + 4; + h *= 60; + if (h < 0) h += 360; + } + return { h: h, s: s * 100, l: l * 100 }; + } + + function toHex2(v) { + var s = Math.round(clampNum(v, 0, 255)).toString(16); + return s.length < 2 ? "0" + s : s; + } + + function hslToHex(h, s, l) { + h = ((h % 360) + 360) % 360; + s = clampNum(s, 0, 100) / 100; + l = clampNum(l, 0, 100) / 100; + var c = (1 - Math.abs(2 * l - 1)) * s; + var x = c * (1 - Math.abs(((h / 60) % 2) - 1)); + var m = l - c / 2; + var rp = 0, gp = 0, bp = 0; + if (h < 60) { rp = c; gp = x; } + else if (h < 120) { rp = x; gp = c; } + else if (h < 180) { gp = c; bp = x; } + else if (h < 240) { gp = x; bp = c; } + else if (h < 300) { rp = x; bp = c; } + else { rp = c; bp = x; } + return "#" + toHex2((rp + m) * 255) + toHex2((gp + m) * 255) + toHex2((bp + m) * 255); + } + + function derivePalette(color) { + try { + var rgb = hexToRgb(color); + if (!rgb) { + if (typeof console !== "undefined" && console.warn) console.warn("[chat-theme] invalid color, fallback:", color); + return DEFAULT_PALETTE; + } + var hsl = rgbToHsl(rgb.r, rgb.g, rgb.b); + var h = hsl.h, s = hsl.s, l = hsl.l; + return { + primary: "#" + toHex2(rgb.r) + toHex2(rgb.g) + toHex2(rgb.b), + primaryRgb: rgb.r + "," + rgb.g + "," + rgb.b, + gradientEnd: hslToHex(h + 2, s, l - 1), + deepText: hslToHex(h - 2, s * 0.76, clampNum(l - 24, 28, 40)), + captionText: hslToHex(h - 2, s * 0.72, clampNum(l - 10, 40, 52)), + softBg: hslToHex(h, s * 0.9, 97.5), + borderSoft: hslToHex(h - 2, s * 0.72, 84) + }; + } catch (e) { + return DEFAULT_PALETTE; + } + } + + global.ChatTheme = { + derivePalette: derivePalette, + DEFAULT_COLOR: DEFAULT_COLOR, + DEFAULT_PALETTE: DEFAULT_PALETTE + }; +})(typeof window !== "undefined" ? window : this); diff --git a/static/kefu-small.png b/static/kefu-small.png new file mode 100644 index 0000000000000000000000000000000000000000..2f234e39a4c919fce9e97d191b04856d0257a999 GIT binary patch literal 30204 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 literal 0 HcmV?d00001 diff --git a/static/kefu.png b/static/kefu.png new file mode 100644 index 0000000000000000000000000000000000000000..8bddbbfe1c091f9eb260a4e35490f65d0299f861 GIT binary patch literal 682482 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 O0000 + + + + + Widget Test — Invite Card + Theme Color + Assertions + + + + + +
+

Widget Invite Card Test Page

+

This page tests the auto-popup invite card feature.

+

Expected behavior:

+
    +
  • Invite card appears after 5 seconds
  • +
  • Invite card has orange gradient header with robot emoji
  • +
  • Two topic buttons: "Get Quotation" and "Distributor Cooperation"
  • +
  • Action buttons: "Start Chat" and "No Thanks"
  • +
  • Click "Get Quotation" → invite closes → chat opens → message auto-sends
  • +
  • Click "Distributor Cooperation" → invite closes → chat opens → message auto-sends
  • +
  • Click "Start Chat" → invite closes → chat opens
  • +
  • Click "No Thanks" → invite permanently closes
  • +
  • Click "No Thanks" or X → refresh → invite stays hidden AND the old card area stays clickable (no invisible overlay; regression 2026-09-01)
  • +
  • Click toggle button (while invite visible) → invite closes → chat opens
  • +
  • Refresh page → invite appears again after 5s (unless "No Thanks" was clicked)
  • +
+
+ +
+

Popular Topics in Chat Panel

+
    +
  • Chat panel shows "POPULAR TOPICS" section with two buttons
  • +
  • Click topic → message auto-sends → topics section hides
  • +
+
+ +
+

Theme Color Preview

+

Pick a color and Apply, or use a preset. Each click tears down the old widget (host + script + invite dismissal state) and re-embeds with data-color. "Test Broken Avatar" points data-avatar at a missing image to verify the 🤖 emoji fallback.

+

+ + + + + + + + +

+
+ +
+

Assertion Panel

+

Runs on every widget (re)embed. Checks: derived default palette vs current hardcoded values (max per-channel Δ ≤ 8), derive(default) === DEFAULT_PALETTE, inline widget.js copy === theme.js copy, invalid input falls back to DEFAULT_PALETTE.

+
+
+ +
+

Current Page:

+

Storage Key: widget_invite_dismissed_

+

+
+ + + + diff --git a/static/widget.js b/static/widget.js new file mode 100644 index 0000000..e5b2617 --- /dev/null +++ b/static/widget.js @@ -0,0 +1,687 @@ +(function () { + var script = document.currentScript || (function () { + var scripts = document.getElementsByTagName("script"); + return scripts[scripts.length - 1]; + })(); + + // Save config immediately (before DOM ready) + var position = script.getAttribute("data-position") || "bottom-right"; + var theme = script.getAttribute("data-theme") || "light"; + var title = script.getAttribute("data-title") || "HESU Support"; + var autoOpen = script.getAttribute("data-auto-open") === "true"; + var whatsapp = script.getAttribute("data-whatsapp") || "https://wa.me/+8619037179250"; + var email = script.getAttribute("data-email") || "mailto:info@borderlesscar.com"; + var autoInvite = script.getAttribute("data-auto-invite") !== "false"; + var isMobile = script.getAttribute("data-mobile") === "true"; + var wsBase = new URL(script.src).origin; + + /* ===== 主题派生单元:与 static/js/theme.js 逐字同步,tests/test_theme_static.py 强制;只可整块替换,不可单边修改 ===== */ + var DEFAULT_COLOR = "#f08a31"; + + var DEFAULT_PALETTE = { + primary: "#f08a31", + primaryRgb: "240,138,49", + gradientEnd: "#f08e2c", + deepText: "#8a4c1d", + captionText: "#c16d2d", + softBg: "#fef8f4", + borderSoft: "#f0d3bd" + }; + + function clampNum(v, lo, hi) { + return Math.min(hi, Math.max(lo, v)); + } + + function hexToRgb(hex) { + hex = String(hex || "").replace(/^#/, ""); + if (hex.length === 3) { + hex = hex.split("").map(function (ch) { return ch + ch; }).join(""); + } + if (!/^[0-9a-fA-F]{6}$/.test(hex)) return null; + return { + r: parseInt(hex.slice(0, 2), 16), + g: parseInt(hex.slice(2, 4), 16), + b: parseInt(hex.slice(4, 6), 16) + }; + } + + function rgbToHsl(r, g, b) { + r /= 255; g /= 255; b /= 255; + var max = Math.max(r, g, b), min = Math.min(r, g, b); + var l = (max + min) / 2; + var d = max - min; + var h = 0, s = 0; + if (d !== 0) { + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + if (max === r) h = ((g - b) / d) % 6; + else if (max === g) h = (b - r) / d + 2; + else h = (r - g) / d + 4; + h *= 60; + if (h < 0) h += 360; + } + return { h: h, s: s * 100, l: l * 100 }; + } + + function toHex2(v) { + var s = Math.round(clampNum(v, 0, 255)).toString(16); + return s.length < 2 ? "0" + s : s; + } + + function hslToHex(h, s, l) { + h = ((h % 360) + 360) % 360; + s = clampNum(s, 0, 100) / 100; + l = clampNum(l, 0, 100) / 100; + var c = (1 - Math.abs(2 * l - 1)) * s; + var x = c * (1 - Math.abs(((h / 60) % 2) - 1)); + var m = l - c / 2; + var rp = 0, gp = 0, bp = 0; + if (h < 60) { rp = c; gp = x; } + else if (h < 120) { rp = x; gp = c; } + else if (h < 180) { gp = c; bp = x; } + else if (h < 240) { gp = x; bp = c; } + else if (h < 300) { rp = x; bp = c; } + else { rp = c; bp = x; } + return "#" + toHex2((rp + m) * 255) + toHex2((gp + m) * 255) + toHex2((bp + m) * 255); + } + + function derivePalette(color) { + try { + var rgb = hexToRgb(color); + if (!rgb) { + if (typeof console !== "undefined" && console.warn) console.warn("[chat-theme] invalid color, fallback:", color); + return DEFAULT_PALETTE; + } + var hsl = rgbToHsl(rgb.r, rgb.g, rgb.b); + var h = hsl.h, s = hsl.s, l = hsl.l; + return { + primary: "#" + toHex2(rgb.r) + toHex2(rgb.g) + toHex2(rgb.b), + primaryRgb: rgb.r + "," + rgb.g + "," + rgb.b, + gradientEnd: hslToHex(h + 2, s, l - 1), + deepText: hslToHex(h - 2, s * 0.76, clampNum(l - 24, 28, 40)), + captionText: hslToHex(h - 2, s * 0.72, clampNum(l - 10, 40, 52)), + softBg: hslToHex(h, s * 0.9, 97.5), + borderSoft: hslToHex(h - 2, s * 0.72, 84) + }; + } catch (e) { + return DEFAULT_PALETTE; + } + } + + /* ===== 主题派生单元结束 ===== */ + var DEFAULT_AVATAR_PATH = "/static/kefu-small.png"; + var avatarAttr = (script.getAttribute("data-avatar") || "").trim(); + var avatarUrl = avatarAttr + ? (/^https?:\/\//i.test(avatarAttr) ? avatarAttr : wsBase + "/" + avatarAttr.replace(/^\//, "")) + : wsBase + DEFAULT_AVATAR_PATH; + var colorAttr = (script.getAttribute("data-color") || "").trim(); + var palette = derivePalette(colorAttr || DEFAULT_COLOR); + if (script.getAttribute("data-debug") === "true") { + window.__chatWidgetDebug = { derivePalette: derivePalette, palette: palette }; + } + + var positionStyles = { + "bottom-right": { bottom: "80px", right: "10px" }, + "bottom-left": { bottom: "20px", left: "20px" }, + "top-right": { top: "20px", right: "20px" }, + "top-left": { top: "20px", left: "20px" }, + }; + var positionStylesMobile = { + "bottom-right": { bottom: "20px", right: "16px" }, + "bottom-left": { bottom: "20px", left: "16px" }, + "top-right": { top: "20px", right: "16px" }, + "top-left": { top: "20px", left: "16px" }, + }; + + var colors = { + light: { bg: "#ffffff", text: "#333", bubble: "#f0f0f0" }, + dark: { bg: "#1e1e1e", text: "#e0e0e0", bubble: "#2d2d2d" }, + }; + + var c = colors[theme] || colors.light; + var pos = (isMobile ? positionStylesMobile : positionStyles)[position] + || (isMobile ? positionStylesMobile : positionStyles)["bottom-right"]; + + function init() { + var host = document.createElement("div"); + host.id = "cc-widget-host"; + document.body.appendChild(host); + + var shadow = host.attachShadow({ mode: "open" }); + + // Inject styles + var style = document.createElement("style"); + style.textContent = [ + ":host{--w-primary:" + palette.primary + ";--w-primary-rgb:" + palette.primaryRgb + ";--w-gradient-end:" + palette.gradientEnd + ";--w-deep-text:" + palette.deepText + ";--w-caption-text:" + palette.captionText + ";--w-soft-bg:" + palette.softBg + ";--w-border-soft:" + palette.borderSoft + "}", + "* { margin:0; padding:0; box-sizing:border-box; }", + ".widget-container { position:fixed; z-index:99999; font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; }", + ".widget-container { " + Object.keys(pos).map(function (k) { return k + ":" + pos[k]; }).join(";") + "; }", + + // Toggle button + ".toggle-btn { width:auto; height:auto; background:var(--w-primary); border-radius:30px; padding:8px 20px; display:flex; align-items:center; gap:12px; box-shadow:0 4px 16px rgba(var(--w-primary-rgb),0.4); transition:transform 0.2s; cursor:pointer; border:none; }", + ".toggle-btn:hover { transform:scale(1.1); }", + ".toggle-btn.mobile { flex-direction:column; gap:5px; padding:0; background:transparent; box-shadow:none; border-radius:0; }", + ".toggle-btn.mobile:hover { transform:scale(1.05); }", + ".toggle-btn.mobile .mobile-circle { position:relative; width:56px; height:56px; border-radius:50%; background:var(--w-primary); display:flex; align-items:center; justify-content:center; font-size:28px; box-shadow:0 4px 16px rgba(var(--w-primary-rgb),0.45); }", + ".toggle-btn.mobile .mobile-dot { position:absolute; bottom:2px; right:2px; width:13px; height:13px; background:#22c55e; border-radius:50%; border:2px solid var(--w-primary); }", + ".toggle-btn.mobile .mobile-label { color:var(--w-deep-text); font-size:10px; font-weight:600; line-height:1.1; }", + ".toggle-avatar-wrap { position:relative; }", + ".toggle-avatar-circle { position:relative; width:36px; height:36px; background:rgba(255,255,255,0.2); border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:18px; }", + ".toggle-avatar-dot { position:absolute; top:0; right:0; width:10px; height:10px; background:#22c55e; border-radius:50%; border:2px solid var(--w-primary); }", + ".avatar-emoji { line-height:1; }", + ".avatar-img { position:absolute; inset:0; width:100%; height:100%; object-fit:contain; border-radius:50%; }", + // 移动端 D2 按钮比桌面药丸高(72px vs 52px),抬高面板底边避免压住按钮(覆盖面板默认 80px 与 @media 60px) + ".widget-container.mobile-host .chat-panel { bottom:84px; }", + ".widget-container.mobile-host { bottom:70px; }", + + // Chat panel + ".chat-panel { position:absolute; bottom:80px; right:0; width:400px; height:540px; background:" + c.bg + "; border-radius:16px; box-shadow:0 10px 40px rgba(0,0,0,0.15); display:none; flex-direction:column; overflow:hidden; }", + ".chat-panel.open { display:flex; }", + + // Panel header + ".panel-header { display:flex; align-items:center; gap:12px; padding:14px 18px; background:var(--w-primary); color:white; }", + ".panel-header .avatar { width:48px; height:48px; background:rgba(255,255,255,0.2); border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:22px; position:relative; }", + ".panel-header .avatar::after { content:''; position:absolute; bottom:1px; right:1px; width:14px; height:14px; background:#22c55e; border-radius:50%; border:3px solid var(--w-primary); }", + ".panel-header .info { flex:1; }", + ".panel-header .info h3 { font-size:17px; font-weight:600; margin:0; }", + ".panel-header .info .status { font-size:13px; opacity:0.95; margin:0; }", + ".panel-header .actions { display:flex; gap:8px; }", + ".panel-header .action-btn { width:32px; height:32px; border-radius:8px; background:rgba(255,255,255,0.15); cursor:pointer; display:flex; align-items:center; justify-content:center; transition:background 0.2s; border:none; color:white; }", + ".panel-header .action-btn:hover { background:rgba(255,255,255,0.25); }", + + // Messages + ".panel-top { flex-shrink:0; padding:10px 16px; background:var(--w-soft-bg); }", + ".panel-messages { flex:1; overflow-y:auto; padding:16px; background:#ffffff; display:flex; flex-direction:column; gap:8px; padding-bottom:8px; }", + ".popular-topics-fixed { flex-shrink:0; padding:12px 16px 8px; background:#ffffff; }", + ".chat-separator-topics { height:1px; background:var(--w-primary); opacity:0.15; flex-shrink:0; }", + ".help-block { background:var(--w-soft-bg); border-radius:12px; padding:10px 14px; border:1px solid var(--w-border-soft); }", + ".help-block .help-content { flex:1; min-width:0; }", + ".help-block .help-title { font-size:16px; font-weight:700; color:#111827; margin-bottom:3px; }", + ".help-block .help-description { font-size:12px; color:#6b7280; line-height:1.4; }", + ".help-block .help-actions { display:grid; gap:8px; flex-shrink:0; }", + ".help-block .call-btn { justify-content: center;background: #fff; color: var(--w-deep-text);border: 1px solid var(--w-border-soft);padding: 6px 10px; border-radius:20px; font-size:13px; font-weight:600; cursor:pointer; display:flex; align-items:center; gap:5px; text-decoration:none; flex-shrink:0; transition:all 0.2s; }", + // ".help-block .whatsapp-btn:hover { box-shadow:0 4px 12px rgba(37,211,102,0.4); transform:translateY(-1px); }", + // ".help-block .email-btn { background:linear-gradient(135deg, #EA4335 0%, #C5221F 100%); }", + // ".help-block .email-btn:hover { box-shadow:0 4px 12px rgba(234,67,53,0.4); transform:translateY(-1px); }", + ".popular-topics-label { font-size:11px; font-weight:600; color:var(--w-caption-text); letter-spacing:0.14em; margin-bottom:8px; text-transform:uppercase; }", + ".popular-topics-grid { display:flex; gap:8px; flex-wrap:wrap; }", + ".popular-topic-btn { border-radius:20px; border:1px solid var(--w-border-soft); background:var(--w-soft-bg); padding:8px 16px; font-size:12px; font-weight:500; color:var(--w-deep-text); cursor:pointer; transition:background 0.2s; white-space:nowrap; }", + ".popular-topic-btn:hover { background:white; }", + ".msg-wrapper { display:flex; gap:10px; }", + ".msg-wrapper .avatar { width:32px; height:32px; background:var(--w-primary); border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:14px; color:white; flex-shrink:0; box-shadow:0 2px 8px rgba(var(--w-primary-rgb),0.3); }", + ".msg { max-width:280px; padding:12px 16px; border-radius:16px; font-size:14px; line-height:1.5; word-break:break-word; }", + ".msg.user { align-self:flex-end; background:var(--w-primary); color:#fff; border-bottom-right-radius:4px; }", + ".msg.ai { background:#f3f4f6; color:#1f2937; border-bottom-left-radius:4px; }", + + // Separator + ".chat-separator { height:1px; background:var(--w-primary); opacity:0.3; flex-shrink:0; }", + + // Footer + ".chat-footer { padding:10px 10px; background:white; display:flex; align-items:center; justify-content:space-between; font-size:11px; color:var(--w-caption-text); gap:20px; }", + ".chat-footer .footer-left { flex:1; }", + ".chat-footer .footer-right { flex-shrink:0; }", + + // Typing + ".typing { display:none; align-self:flex-start; padding:8px 12px; background:" + c.bubble + "; border-radius:12px; }", + ".typing.active { display:flex; gap:4px; align-items:center; }", + ".typing span { width:6px; height:6px; background:#999; border-radius:50%; animation:blink 1.4s infinite; }", + ".typing span:nth-child(2){animation-delay:0.2s} .typing span:nth-child(3){animation-delay:0.4s}", + "@keyframes blink { 0%,60%,100%{transform:translateY(0);opacity:0.4} 30%{transform:translateY(-4px);opacity:1} }", + + // Input + ".input-container { padding:10px 10px; background:white; }", + ".input-wrapper { display:flex; align-items:center; gap:0; padding:8px 16px; background:var(--w-soft-bg); border-radius:28px; box-shadow:0 1px 3px rgba(0,0,0,0.05); }", + ".input-wrapper input { flex:1; padding:0; border:none; font-size:14px; background:transparent; outline:none; min-height:20px; color:#1f2937; }", + ".input-wrapper input::placeholder { color:#9ca3af; }", + ".input-separator { width:1px; height:24px; background:#e5e7eb; margin:0 8px; flex-shrink:0; }", + ".input-wrapper button { padding:8px 16px; border:none; border-radius:12px; background:linear-gradient(135deg, var(--w-primary), var(--w-gradient-end)); color:#fff; font-size:14px; font-weight:500; cursor:pointer; display:flex; align-items:center; gap:6px; white-space:nowrap; box-shadow:0 2px 8px rgba(var(--w-primary-rgb),0.25); flex-shrink:0; }", + ".input-wrapper button:disabled { background:#ccc; box-shadow:none; }", + + // Ended + ".ended { display:none; text-align:center; padding:8px; background:#e8f5e9; color:#34a853; font-size:12px; }", + ".ended.active { display:block; }", + + // Invite card container + // pointer-events:none:容器永不拦截点击,展示态由 .invite-panel.show 的 auto 恢复交互 + ".invite-container { z-index:99998;position: absolute;bottom: 80px;right: 0;pointer-events:none; }", + ".invite-panel { width:360px; max-width:calc(100vw - 24px); overflow:hidden; border-radius:26px; border:1px solid var(--w-border-soft); background:white; box-shadow:0 28px 80px rgba(var(--w-primary-rgb),0.22); opacity:0; transform:translateY(20px); transition:opacity 0.3s, transform 0.3s; pointer-events:none; }", + ".invite-panel.show { opacity:1; transform:translateY(0); pointer-events:auto; }", + ".invite-panel.hide { display:none; }", + + // Invite header + ".invite-header { background:linear-gradient(135deg, var(--w-primary), var(--w-gradient-end)); padding:16px 20px; color:white; display:flex; gap:12px; }", + ".invite-icon-wrapper { flex-shrink:0; }", + ".invite-icon { position:relative;width:40px; height:40px; background:rgba(255,255,255,0.18); border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:18px; backdrop-filter:blur(10px); }", + ".invite-status-dot { position:absolute; bottom:-2px; right:-2px; width:12px; height:12px; background:#22c55e; border-radius:50%; border:3px solid var(--w-primary); }", + ".invite-header-content { flex:1; min-width:0; }", + ".invite-title { font-size:15px; font-weight:600; line-height:1.3; }", + ".invite-subtitle { font-size:12px; margin-top:2px; opacity:0.9; line-height:1.4; }", + ".invite-header-actions { display:flex; flex-direction:column; gap:6px; flex-shrink:0; margin-left:auto; }", + ".invite-close-btn { align-self: flex-end; width:28px; height:28px; border-radius:6px; background:rgba(255,255,255,0.1); border:none; color:white; cursor:pointer; display:flex; align-items:center; justify-content:center; transition:background 0.2s; flex-shrink:0; }", + ".invite-close-btn:hover { background:rgba(255,255,255,0.2); }", + ".invite-action-btn { justify-content: center; background:#fff; color:var(--w-deep-text); border:1px solid var(--w-border-soft); padding:5px 10px; border-radius:20px; font-size:12px; font-weight:600; cursor:pointer; display:flex; align-items:center; gap:5px; text-decoration:none; flex-shrink:0; transition:all 0.2s; white-space:nowrap; }", + ".invite-action-btn:hover { background:var(--w-soft-bg); }", + + // Invite body + ".invite-body { padding:16px 8px; background:var(--w-soft-bg); }", + + // Topic buttons + ".invite-topics { display:grid; grid-template-columns:1fr 1fr; gap:5px; margin-bottom:16px; }", + ".invite-topic-btn { border-radius:22px; border:1px solid var(--w-border-soft); background:white; padding:14px 10px; text-align:center; font-size:13px; font-weight:500; color:var(--w-deep-text); cursor:pointer; transition:background 0.2s; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }", + ".invite-topic-btn:hover { background:var(--w-soft-bg); }", + + // Action buttons + ".invite-actions { display:flex; gap:10px; }", + ".invite-start-btn { flex:1; border-radius:20px; border:none; background:linear-gradient(135deg, var(--w-primary), var(--w-gradient-end)); padding:14px 20px; color:white; font-size:14px; font-weight:600; cursor:pointer; display:flex; align-items:center; justify-content:center; gap:8px; box-shadow:0 2px 8px rgba(var(--w-primary-rgb),0.25); transition:opacity 0.2s; }", + ".invite-start-btn:hover { opacity:0.95; }", + ".invite-dismiss-btn { border-radius:20px; border:1px solid var(--w-border-soft); background:white; padding:14px 20px; color:var(--w-deep-text); font-size:14px; font-weight:500; cursor:pointer; transition:background 0.2s; }", + ".invite-dismiss-btn:hover { background:#FEFEFE; }", + + // Responsive + "@media(max-width:450px){ .chat-panel{width:calc(100vw - 20px);height:calc(100vh - 200px);bottom:60px;right:0px;} .invite-panel{width:calc(100vw - 24px);} .invite-topics{grid-template-columns:1fr;} }", + ].join("\n"); + shadow.appendChild(style); + + // Build DOM + var container = document.createElement("div"); + container.className = "widget-container" + (isMobile ? " mobile-host" : ""); + + var panel = document.createElement("div"); + panel.className = "chat-panel"; + panel.innerHTML = [ + '
', + '
🤖
', + '

' + title + '

Online now · Usually replies in minutes
', + '
', + '', + // '', + '
', + '
Chat ended. We\'ll be in touch!
', + '
', + '
', + '
', + '
Hey! What kind of car are you looking for?
', + '
', + '
', + '', + '
', + '
', + '', + '', + '
', + ].join(""); + + // Invite card HTML template + var inviteTemplate = [ + '
', + '
', + '
', + '
🤖
', + '
', + '
', + '
Chat with us for available vehicles, delivery timing and distributor cooperation.
', + '
', + '
', + '', + '', + '', + 'WhatsApp', + '', + '', + '
', + '
', + '
', + '
', + '', + '', + '
', + '
', + '
', + '
', + '
', + '', + '', + '
', + '
', + '
' + ].join(""); + + var inviteEl = document.createElement("div"); + inviteEl.className = "invite-container"; + inviteEl.innerHTML = inviteTemplate; + // 不变量:面板出厂即 hide(display:none)—— 任何不经过 showInvite 的路径都零占位。 + // 2026-09-01 修复:此前 permanent 关闭后刷新时 showInvite 不运行、invitePanel 恒为 + // null、hideInvite 提前返回,隐形 invite-panel(display:block + opacity:0)在 + // z-index:99998 容器里拦截右下角点击。出厂 hide 取代原 !autoInvite 特判。 + + var toggleBtn = document.createElement("button"); + toggleBtn.className = "toggle-btn" + (isMobile ? " mobile" : ""); + if (isMobile) { + toggleBtn.innerHTML = ` +
🤖
+ Chat with us +`; + } else { + toggleBtn.innerHTML = ` +
+
🤖
+
+
+
+
Chat with us
+
Usually replies quickly
+
+`; + } + + container.appendChild(panel); + container.appendChild(inviteEl); + container.appendChild(toggleBtn); + shadow.appendChild(container); + + // 头像兜底:load 成功隐藏底层 emoji;error 移除 img 露出 emoji(spec §12.4) + Array.prototype.forEach.call(shadow.querySelectorAll(".avatar-img"), function (img) { + function hideEmoji() { + var s = img.parentElement && img.parentElement.querySelector(".avatar-emoji"); + if (s) s.style.display = "none"; + } + if (img.complete && img.naturalWidth > 0) { hideEmoji(); return; } + img.addEventListener("load", hideEmoji); + img.addEventListener("error", function () { img.remove(); }); + }); + + // Widget state + var isOpen = autoOpen; + var wSessionId = null; + var wWs = null; + var wEnded = false; + var streamBubble = null; + var pageToken = crypto.randomUUID(); + var pendingMessage = null; // Queue message to send after WebSocket opens + + // Invite card state management + var inviteTimer = null; + var invitePanel = null; + var inviteShown = false; + var inviteStorageKey = "widget_invite_dismissed_" + window.location.pathname; + var isPermanentlyClosed = false; + + function checkInviteStorage() { + try { + var dismissed = sessionStorage.getItem(inviteStorageKey); + if (dismissed === "permanent") { + isPermanentlyClosed = true; + return true; + } + return false; + } catch (e) { + return false; // Assume not dismissed on error + } + } + + function setInviteDismissed(type) { + try { + if (type !== "permanent" && type !== "temporary") { + type = "temporary"; // Default fallback + } + if (type === "permanent") { + sessionStorage.setItem(inviteStorageKey, "permanent"); + isPermanentlyClosed = true; + } else { + sessionStorage.setItem(inviteStorageKey, "temporary"); + } + } catch (e) { + // Silently fail - storage unavailable + } + } + + function clearInviteDismissed() { + try { + sessionStorage.removeItem(inviteStorageKey); + isPermanentlyClosed = false; + inviteShown = false; // Reset shown flag + } catch (e) { + // Silently fail - storage unavailable + } + } + + function startInviteTimer() { + if (!autoInvite) return; // 配置关闭则不启动计时器,邀请卡永不自动弹 + if (checkInviteStorage()) { + return; // Already dismissed, don't show + } + + inviteTimer = window.setTimeout(function() { + if (!isOpen) { + showInvite(); + } + }, 5000); // 5 seconds + } + + function showInvite() { + if (inviteShown || isPermanentlyClosed) return; + inviteShown = true; + invitePanel = shadow.querySelector(".invite-panel"); + if (invitePanel) { + invitePanel.classList.remove("hide"); + void invitePanel.offsetWidth; // 强制回流:remove 与 add 同帧会跳过 0.3s 淡入过渡 + invitePanel.classList.add("show"); + } + } + + function hideInvite(type) { + if (!invitePanel) return; + invitePanel.classList.remove("show"); + invitePanel.classList.add("hide"); + setInviteDismissed(type || "temporary"); + } + + var msgsEl = shadow.getElementById("w-msgs"); + var inputEl = shadow.getElementById("w-input"); + var sendEl = shadow.getElementById("w-send"); + var typingEl = shadow.getElementById("w-typing"); + var endedEl = shadow.getElementById("w-ended"); + var inviteCloseBtn = shadow.querySelector(".invite-close-btn"); + var inviteStartBtn = shadow.querySelector(".invite-start-btn"); + var inviteDismissBtn = shadow.querySelector(".invite-dismiss-btn"); + var inviteTopicBtns = shadow.querySelectorAll(".invite-topic-btn"); + + if (isOpen) panel.classList.add("open"); + + function toggle() { + isOpen = !isOpen; + panel.classList.toggle("open", isOpen); + + if (isOpen) { + if (inviteTimer) { + window.clearTimeout(inviteTimer); + inviteTimer = null; + } + hideInvite("temporary"); + if (!wWs) wConnect(); + } else { + // Only restart timer if not permanently closed + if (!isPermanentlyClosed && !checkInviteStorage()) { + inviteShown = false; + startInviteTimer(); + } + } + } + + toggleBtn.addEventListener("click", toggle); + // panel.querySelector(".close-btn").addEventListener("click", toggle); + panel.querySelector(".action-btn:not(.close-btn)")?.addEventListener("click", toggle); + + // Invite close button + // 2026-08-20 用户决策: 点 X 与点 No Thanks 同效(permanent)——本标签页会话+本页面 + // 路径内不再自动弹(含关面板后/刷新后);temporary 写了从未被 checkInviteStorage + // 消费,等于无抑制,原行为即"关面板5s后又弹"。 + inviteCloseBtn.addEventListener("click", function() { + hideInvite("permanent"); + }); + + // Invite Start Chat button + inviteStartBtn.addEventListener("click", function() { + hideInvite("temporary"); + if (!isOpen) { + toggle(); + } + }); + + // Invite No Thanks button + inviteDismissBtn.addEventListener("click", function() { + hideInvite("permanent"); + }); + + // Invite topic buttons - auto send message + Array.prototype.forEach.call(inviteTopicBtns, function(btn) { + btn.addEventListener("click", function() { + var topic = this.getAttribute("data-topic"); + hideInvite("temporary"); + + if (!isOpen) { + toggle(); + } + + // Queue message to send after WebSocket opens + pendingMessage = topic; + }); + }); + + // Popular topics buttons + var popularTopicBtns = shadow.querySelectorAll(".popular-topic-btn"); + Array.prototype.forEach.call(popularTopicBtns, function(btn) { + btn.addEventListener("click", function() { + var topic = this.getAttribute("data-topic"); + + // Hide popular topics after first interaction + var popularTopicsEl = shadow.getElementById("w-popular-topics"); + if (popularTopicsEl) { + popularTopicsEl.style.display = "none"; + } + + // Send message + autoSendMessage(topic); + }); + }); + + function wConnect() { + var proto = wsBase.indexOf("https") === 0 ? "wss" : "ws"; + var wsHost = wsBase.replace(/^https?/, proto); + wWs = new WebSocket(wsHost + "/ws/chat"); + + wWs.onopen = function () { + if (wSessionId) { + wWs.send(JSON.stringify({ session_id: wSessionId, page_token: pageToken })); + } else { + wWs.send(JSON.stringify({ source: "widget", page_token: pageToken })); + } + // Send any pending message after WebSocket opens + if (pendingMessage) { + wWs.send(JSON.stringify({ content: pendingMessage })); + addMsg("user", pendingMessage); + typingEl.classList.add("active"); + pendingMessage = null; + } + }; + + wWs.onmessage = function (e) { + var data = JSON.parse(e.data); + if (data.type === "init") { + wSessionId = data.session_id; + } + + if (data.type === "stream_start") { + typingEl.classList.remove("active"); + streamBubble = addStreamBubble(); + } + + if (data.type === "stream_chunk") { + if (streamBubble) { + streamBubble.textContent += data.content; + msgsEl.scrollTop = msgsEl.scrollHeight; + } + } + + if (data.type === "stream_end") { + streamBubble = null; + } + + if (data.type === "evaluated") { + if (data.ended) { + wEnded = true; + endedEl.classList.add("active"); + inputEl.disabled = true; + sendEl.disabled = true; + } + } + + if (data.type === "error") { + typingEl.classList.remove("active"); + streamBubble = null; + addMsg("ai", "Sorry, something went wrong."); + } + }; + + wWs.onclose = function () { + if (!wEnded && host.isConnected) setTimeout(wConnect, 3000); + }; + } + + function addMsg(role, text) { + var div = document.createElement("div"); + div.className = "msg " + role; + div.textContent = text; + msgsEl.appendChild(div); + msgsEl.scrollTop = msgsEl.scrollHeight; + } + + function addStreamBubble() { + var div = document.createElement("div"); + div.className = "msg ai"; + div.textContent = ""; + msgsEl.appendChild(div); + msgsEl.scrollTop = msgsEl.scrollHeight; + return div; + } + + function autoSendMessage(text) { + if (!text || !wWs || wWs.readyState !== WebSocket.OPEN) return; + addMsg("user", text); + typingEl.classList.add("active"); + wWs.send(JSON.stringify({ content: text })); + } + + function wSend() { + var text = inputEl.value.trim(); + if (!text || wEnded || !wWs || wWs.readyState !== WebSocket.OPEN) return; + addMsg("user", text); + inputEl.value = ""; + typingEl.classList.add("active"); + wWs.send(JSON.stringify({ content: text })); + } + + sendEl.addEventListener("click", wSend); + inputEl.addEventListener("keydown", function (e) { + if (e.key === "Enter") { e.preventDefault(); wSend(); } + }); + + // Start invite timer + startInviteTimer(); + } + + // Wait for body if script is in + if (document.body) { + init(); + } else { + document.addEventListener("DOMContentLoaded", init); + } +})(); diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..26d3079 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,120 @@ +import os +import tempfile +import asyncio + +import pytest +from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker +from sqlalchemy.pool import NullPool + +from app.models.database import Base + +# `chat_rest` is created in Task A4. Tolerate its absence so earlier tasks +# (e.g. A0's /health smoke) can use the `client` fixture without it. +# Import `app.main` FIRST so the natural main -> chat_rest load order resolves +# (chat_rest does `from app.main import async_session`; if conftest imports +# chat_rest before main is loaded, main's `from chat_rest import router` hits +# a partially-initialized module -> circular ImportError). +_HAS_CHAT_REST = False +chat_rest_mod = None +try: + import app.main # noqa: F401 + import app.api.routes.chat_rest as chat_rest_mod + _HAS_CHAT_REST = True +except ModuleNotFoundError: + pass + + +async def _create_all(engine): + async with engine.begin() as conn: + await conn.run_sync(Base.metadata.create_all) + + +@pytest.fixture(scope="session", autouse=True) +def _dispose_main_engine(): + """Dispose `app.main.engine` at session end. + + Best-effort cleanup: explicitly disposing the app-level engine before + interpreter shutdown reduces (but does NOT eliminate) the noisy + `Windows fatal exception: access violation` traces that aiosqlite worker + threads emit when interrupted mid-cleanup at interpreter exit. + + Reality check on Windows: + - All tests pass and pytest exits 0; the traces are written to stderr + AFTER the run completes and do not affect pass/fail or the exit code. + - They originate from aiosqlite background threads being torn down by the + interpreter and are harmless. + - They do not occur on Linux/CI. + """ + yield + from app.main import engine as main_engine + try: + asyncio.run(main_engine.dispose()) + except Exception: + pass + + +@pytest.fixture +def async_db(): + """Fresh temp-file SQLite sessionmaker for direct async-DB tests + (e.g. testing ConversationManager without HTTP). Isolated per test. + """ + fd, path = tempfile.mkstemp(suffix=".db") + os.close(fd) + engine = create_async_engine( + f"sqlite+aiosqlite:///{path}", poolclass=NullPool + ) + asyncio.run(_create_all(engine)) + sm = async_sessionmaker(engine, expire_on_commit=False) + yield sm + asyncio.run(engine.dispose()) + try: + os.remove(path) + except PermissionError: + pass + + +@pytest.fixture(autouse=True) +def _reset_rate_limit(): + """Reset the in-memory rate limiter before and after every test so that + module-global bucket state can never leak across tests.""" + from app.services.rate_limit import _reset_for_test + _reset_for_test() + yield + _reset_for_test() + + +@pytest.fixture +def client(monkeypatch): + """Temporary file-SQLite TestClient with `chat_rest.async_session` overridden. + + Design notes: + - File DB (not :memory:) avoids the StaticPool cross-loop reuse pitfall. + - `NullPool` closes each connection when the session returns it, so no + aiosqlite worker thread outlives the event loop that created it. + Together with `_dispose_main_engine`, this REDUCES but does NOT + eliminate the harmless Windows access-violation stderr traces described + above; it has no effect on test correctness or on Linux/CI. + - Monkeypatching the module-level `async_session` binding in `chat_rest` + works because the route handlers resolve it as a module global at call. + """ + from fastapi.testclient import TestClient + from app.main import app + + fd, path = tempfile.mkstemp(suffix=".db") + os.close(fd) + engine = create_async_engine( + f"sqlite+aiosqlite:///{path}", poolclass=NullPool + ) + asyncio.run(_create_all(engine)) + sm = async_sessionmaker(engine, expire_on_commit=False) + if _HAS_CHAT_REST: + monkeypatch.setattr(chat_rest_mod, "async_session", sm) + + with TestClient(app) as c: + yield c + + asyncio.run(engine.dispose()) + try: + os.remove(path) + except PermissionError: + pass diff --git a/tests/test_admin_push_logs.py b/tests/test_admin_push_logs.py new file mode 100644 index 0000000..83dea31 --- /dev/null +++ b/tests/test_admin_push_logs.py @@ -0,0 +1,149 @@ +"""admin 推送日志查询接口(设计 §9): 鉴权/筛选/分页/不含 payload。""" +import asyncio +import os +import tempfile + +import pytest +from fastapi.testclient import TestClient +from sqlalchemy import select +from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker +from sqlalchemy.pool import NullPool + +from app.models.database import ( + Base, Conversation, CustomerProfile, Evaluation, IntentLevel, LeadPushLog, +) + +# admin 路由用 `from app.main import async_session` 的模块级绑定—— +# 测试必须 patch admin 模块自己的绑定(client fixture 只 patch 了 chat_rest) +import app.api.routes.admin as admin_mod + + +@pytest.fixture +def admin_client(monkeypatch): + from app.main import app + fd, path = tempfile.mkstemp(suffix=".db") + os.close(fd) + engine = create_async_engine( + f"sqlite+aiosqlite:///{path}", poolclass=NullPool) + + async def create_all(): + async with engine.begin() as conn: + await conn.run_sync(Base.metadata.create_all) + asyncio.run(create_all()) + sm = async_sessionmaker(engine, expire_on_commit=False) + monkeypatch.setattr(admin_mod, "async_session", sm) + with TestClient(app) as c: + yield c, sm + asyncio.run(engine.dispose()) + try: + os.remove(path) + except PermissionError: + pass + + +def _seed(sm): + async def run(): + async with sm() as db: + conv = Conversation(session_id="s-admin") + db.add(conv) + await db.flush() + ev = Evaluation(conversation_id=conv.id, + intent_level=IntentLevel.pending, contact_info={}) + db.add(ev) + await db.flush() + db.add_all([ + LeadPushLog(evaluation_id=ev.id, conversation_id=conv.id, + push_type="lead", status="success", attempts=1, + outcome="accepted", response_status=200, + request_payload={"big": "x" * 1000}), + LeadPushLog(evaluation_id=ev.id, conversation_id=conv.id, + push_type="correction", status="failed", attempts=3, + response_status=500, error_message="http 500", + request_payload={"big": "y" * 1000}), + LeadPushLog(evaluation_id=ev.id, conversation_id=conv.id, + push_type="lead", status="skipped", attempts=0, + error_message="no valid contact", + request_payload=None), + ]) + await db.commit() + asyncio.run(run()) + + +def test_push_logs_requires_auth(admin_client): + c, _ = admin_client + resp = c.get("/api/admin/push-logs") + assert resp.json() == {"error": "unauthorized"} + + +def test_push_logs_list_filter_pagination(admin_client): + c, sm = admin_client + _seed(sm) + assert c.post("/api/admin/login", + json={"password": "admin123"}).json()["ok"] is True + + body = c.get("/api/admin/push-logs").json() + assert body["total"] == 3 and len(body["items"]) == 3 + item = body["items"][0] + assert "request_payload" not in item # 设计 §9: 列表不回 payload + assert {i["status"] for i in body["items"]} == {"success", "failed", "skipped"} + + only_failed = c.get("/api/admin/push-logs", params={"status": "failed"}).json() + assert only_failed["total"] == 1 + assert only_failed["items"][0]["push_type"] == "correction" + assert only_failed["items"][0]["error_message"] == "http 500" + assert only_failed["items"][0]["attempts"] == 3 + + page2 = c.get("/api/admin/push-logs", + params={"page": 2, "size": 2}).json() + assert page2["total"] == 3 and len(page2["items"]) == 1 + + by_conv = c.get("/api/admin/push-logs", + params={"conversation_id": "no-such"}).json() + assert by_conv["total"] == 0 + + +def test_push_logs_invalid_status_ignored(admin_client): + """非法 status 值当未筛(与 conversations 的 intent 白名单风格一致)。""" + c, sm = admin_client + _seed(sm) + c.post("/api/admin/login", json={"password": "admin123"}) + body = c.get("/api/admin/push-logs", params={"status": "bogus"}).json() + assert body["total"] == 3 + + +def test_admin_page_has_push_logs_entry(): + """后台页静态回归:推送日志入口/视图容器/接口引用三件套在场。""" + from pathlib import Path + html = (Path(__file__).resolve().parent.parent / "static" / "admin.html" + ).read_text(encoding="utf-8") + assert 'onclick="toggleLogs()"' in html # header 入口按钮 + assert 'id="logsView"' in html # 日志视图容器 + assert "/api/admin/push-logs" in html # 数据接口引用 + + +def test_push_logs_pending_filter_and_page_overflow(admin_client): + """pending 筛选分支 + 超界页码(items 空、total 不变)。""" + c, sm = admin_client + _seed(sm) # 3 条: success/failed/skipped + + async def add_pending(): + async with sm() as db: + ev = (await db.execute(select(Evaluation))).scalar_one() + conv_id = ev.conversation_id + db.add(LeadPushLog(evaluation_id=ev.id, conversation_id=conv_id, + push_type="lead", status="pending", attempts=0, + request_payload={"external_key": "k"})) + await db.commit() + asyncio.run(add_pending()) + + assert c.post("/api/admin/login", + json={"password": "admin123"}).json()["ok"] is True + + only_pending = c.get("/api/admin/push-logs", + params={"status": "pending"}).json() + assert only_pending["total"] == 1 + assert only_pending["items"][0]["status"] == "pending" + + # 超界页码: items 空而 total 仍是全量(4) + overflow = c.get("/api/admin/push-logs", params={"page": 99}).json() + assert overflow["total"] == 4 and overflow["items"] == [] diff --git a/tests/test_boundary_filter.py b/tests/test_boundary_filter.py new file mode 100644 index 0000000..c2a8979 --- /dev/null +++ b/tests/test_boundary_filter.py @@ -0,0 +1,225 @@ +from app.services.boundary_filter import ( + deflection_for, pivot_for, split_sentences, violates_boundary, +) + + +def test_dollar_form_violates(): + assert violates_boundary("the Tang starts at $25k") + assert violates_boundary("around $ 25,000 for the EV") + + +def test_currency_unit_violates(): + assert violates_boundary("that's 25000 usd") + assert violates_boundary("大概是2万左右") + assert violates_boundary("20万块") + + +def test_k_form_violates(): + assert violates_boundary("a budget of 20K sounds good") + assert violates_boundary("around 25k") + + +def test_verb_adjacency_violates(): + assert violates_boundary("the price is 25 for that one") + + +def test_time_promise_violates(): + assert violates_boundary("shipping takes about 3 weeks") + assert violates_boundary("2-3 days to Mombasa") + + +def test_whitelist_clean(): + assert not violates_boundary("the 2024 model is our best seller") + assert not violates_boundary("I'll send you a tailored quote for the L7 SUV") + assert not violates_boundary("600km range on the Tang EV") + assert not violates_boundary("85kWh battery, 7-seater layout") + assert not violates_boundary("we got tons of them, any preference on year?") + + +def test_deflection_language_routing(): + assert deflection_for("多少钱") in __import__( + "app.services.boundary_filter", fromlist=["DEFLECTIONS_ZH"]).DEFLECTIONS_ZH + assert deflection_for("how much?").endswith("?") + + +def test_deflection_rotates(): + a = deflection_for("how much?", 0) + b = deflection_for("how much?", 1) + assert a != b + + +def test_mileage_forms_clean(): + assert not violates_boundary("under 30k km on the clock") + assert not violates_boundary("45k miles, mostly highway") + assert not violates_boundary("这车表显3万公里") + + +def test_bare_budget_echo_violates(): + assert violates_boundary("with your budget of 20000 you have options") + assert violates_boundary("你的预算是20000,可以看看这几款") + assert violates_boundary("预算两万的话选择不少") + + +def test_financing_violates(): + assert violates_boundary("down payment is 5,000") + assert violates_boundary("monthly payment of 450") + + +def test_warranty_clean(): + # 政策变更(2026-09-10): 编造的保修期限承诺改为墙级违规(原先白名单放行) + assert violates_boundary("6 months warranty on the engine") + + +def test_deflection_contact_aware(): + from app.services.boundary_filter import DEFLECTIONS_EN_CONTACT + d = deflection_for("how much?", 0, has_contact=True) + assert d in DEFLECTIONS_EN_CONTACT + assert "WhatsApp?" not in d # 不再索要 + + +# ---- 13.7: 句子粒度门控 ---- +def test_split_sentences_en_and_tail(): + complete, tail = split_sentences("Nice pick! The Tang comes in EV and DM-i.") + assert complete == ["Nice pick!"] + # 句间空白随下句保留(无损): 干净回复逐句流出后逐字还原,不多字不少字 + assert tail == " The Tang comes in EV and DM-i." + assert "".join(complete) + tail == "Nice pick! The Tang comes in EV and DM-i." + + +def test_split_sentences_cjk_no_space_needed(): + complete, tail = split_sentences("好的。下句") + assert complete == ["好的。"] + assert tail == "下句" + + +def test_split_sentences_decimal_not_split(): + # 意图锚定: 小数点不得把 "2.5..." 碎成 "2" + "5 engine..."(碎片会 + # 误触发价格动词邻接模式)。整句保持完整即达标;尾巴必然是 "Next one"。 + complete, tail = split_sentences("2.5 engine is strong. Next one") + assert complete == ["2.5 engine is strong."] + assert tail.strip() == "Next one" + + +def test_pivot_contact_aware(): + assert "WhatsApp?" in pivot_for("how much?") + assert "WhatsApp?" not in pivot_for("how much?", has_contact=True) + assert "客户经理" in pivot_for("多少钱") + + +# ---- 15.3: 零号码墙(doctrine v2) ---- +from app.services.boundary_filter import ( + NO_CONTACT_APP, NO_CONTACT_WEB, no_contact_value, +) + + +def test_no_contact_wall_blocks_any_number_or_email(): + assert no_contact_value("call us at +86 138 0013 8000") + assert no_contact_value("our email is sales@example.com") + + +def test_no_contact_wall_customer_echo_exempt(): + history = [{"role": "user", "content": "my number is 07012345678"}] + assert not no_contact_value("Got it, 07012345678!", history) + + +def test_no_contact_wall_whitelist_safe(): + assert not no_contact_value("the 2024 model with 45,000 km, VIN LFV3A23C8K3123456") + assert not no_contact_value("85kWh battery, 600km range") + + +def test_no_contact_templates_contain_no_numbers(): + # 替换句自身不得含号码/邮箱(防递归与自破) + assert not no_contact_value(NO_CONTACT_WEB) + assert not no_contact_value(NO_CONTACT_APP) + + +def test_no_contact_already_template_clean(): + from app.services.boundary_filter import NO_CONTACT_ALREADY + assert not no_contact_value(NO_CONTACT_ALREADY) # 模板自身无号码/邮箱 + assert "WhatsApp?" not in NO_CONTACT_ALREADY # 不索要 + + +# ---- Task 5b: 再索要墙 ---- +from app.services.boundary_filter import asks_contact + + +def test_asks_contact_detects_production_log_phrasings(): + # 2026-09 生产日志 4 次违规索要原句 + system.md 全部留资模板同型句,逐字钉死 + # (⚠️ 首版模式曾漏 "I'll need your WhatsApp"/"Tell me your WhatsApp" 两句 + # system.md 模板原句——GLM 背的就是这些,必须全收;已实证 13/13) + assert asks_contact("What's your WhatsApp or email?") + assert asks_contact("Could you leave your WhatsApp?") + assert asks_contact("Got your WhatsApp so our manager can send the details?") + assert asks_contact("Got your WhatsApp?") + assert asks_contact("Drop your WhatsApp and our manager will reach out to you directly with the full quote!") + assert asks_contact("Want me to get you a proper quote? I'll need your WhatsApp so our manager can reach you.") + assert asks_contact("Tell me your WhatsApp and our manager will send you an accurate quote for your budget.") + assert asks_contact("leave your contact and our manager will give you an exact schedule") + assert asks_contact("Drop yours too and our manager will send you the full quote!") + assert asks_contact("留个WhatsApp或者邮箱吧?") + assert asks_contact("你WhatsApp多少?") + assert asks_contact("你给我个联系方式,我让客户经理给你推几个车型。") + + +def test_asks_contact_clean_phrasings_pass(): + assert not asks_contact("Got your number, thanks!") # 确认,非问句 + assert not asks_contact("Just tap the WhatsApp button at the top of this chat — our manager replies fast!") + assert not asks_contact("Which color do you prefer?") + assert not asks_contact("What's your budget range for this one?") + assert not asks_contact("Can you send me more details about the Tang?") # 泛请求无渠道词 + assert not asks_contact("Our manager will send you all the details.") + assert not asks_contact("I want your advice on the Song L EV.") # want+非渠道词 + assert not asks_contact("Could you drop it here once more?") # 核对恢复话术(suspect场景) + assert not asks_contact("Our manager needs your config and destination.") # 合法迂回句 + + +def test_asks_contact_bare_fragment_asks(): + # Ghana 生产案例: "Your number, please?" 曾穿透(只覆盖动词/疑问词形态) + assert asks_contact("Your number, please?") + assert asks_contact("Your WhatsApp?") + assert asks_contact("So... your number?") + assert asks_contact("And your contact?") + # 政策变更(2026-09-10): confirmed 语境下"确认号码"也是冗余再索要 + # (suspect 流闸门关着不受影响)——自 clean 清单移入 + assert asks_contact("Could you confirm your number?") + + +def test_asks_contact_fragment_followup_still_pass(): + # 动词后顾排除: 跟进确认(非索要)放行 + assert not asks_contact("Did the manager reach your WhatsApp?") + assert not asks_contact("Got your number, thanks!") + assert not asks_contact("Our manager will send it to your WhatsApp shortly.") + # "to your <渠道>" 是送达/核对语境,不是索要(评审修正: 补 (?" 曾从门控模式掉落(extractor 漏时彻底失联) + found = scan_user_messages(m("my phone is 07123456789")) + assert found == {"phone": "07123456789"} + + +def test_latest_stated_my_phone_is_form(): + msgs = m("hi", "my phone is 07123456789") + assert latest_stated_contacts(msgs) == {"phone": "07123456789"} + + +from app.services.contact_pipeline import resolve_by_recency + + +def _u(*texts): + return [{"role": "user", "content": t} for t in texts] + + +def test_recency_mirror_lag_newest_wins(): + # Task 12b 场景: extractor 只翻新 phone,镜像 whatsapp 滞后 → 最新提及统一 + before = {"phone": "+8613800138000", "whatsapp": "+8613800138000"} + after = {"phone": "+8613999999999", "whatsapp": "+8613800138000"} + msgs = _u("my phone is +8613800138000", "wrong number, use +8613999999999") + assert resolve_by_recency(before, after, msgs) == { + "phone": "+8613999999999", "whatsapp": "+8613999999999"} + + +def test_recency_kills_extractor_oscillation(): + # 实测bug场景: extractor 翻回更早消息里的旧号 → 裁决回最新的 ...004 + before = {"phone": "+8613800138004", "whatsapp": "+8613800138004"} + after = {"phone": "+8613800138000", "whatsapp": "+8613800138004"} # extractor 振荡 + msgs = _u("my whatsapp is +8613800138000", "my whatsapp is +8613800138004", + "any car talk") + assert resolve_by_recency(before, after, msgs) == before # 无变化→不触发更正 + + +def test_recency_suppresses_hallucinated_value(): + # 幻觉值从未出现在消息里(last_idx=-1) → 真实陈述胜 + before = {"phone": "+8613800138004", "whatsapp": "+8613800138004"} + after = {"phone": "+8613999999999", "whatsapp": "+8613800138004"} + msgs = _u("my whatsapp is +8613800138004") + assert resolve_by_recency(before, after, msgs) == before + + +def test_recency_bare_newest_number_wins(): + # 用户实测终局: 最晚消息里的裸新号(extractor 抓到)胜过更早的陈述 + before = {"phone": "+8613800138004", "whatsapp": "+8613800138004"} + after = {"phone": "18325698745", "whatsapp": "+8613800138004"} + msgs = _u("my whatsapp is +8613800138004", "chat", "18325698745") + assert resolve_by_recency(before, after, msgs) == { + "phone": "18325698745", "whatsapp": "18325698745"} + + +def test_recency_genuinely_different_untouched(): + before = {"phone": "+8613800138000", "whatsapp": "+254712345678"} + after = {"phone": "+8613999999999", "whatsapp": "+254712345678"} + msgs = _u("my phone is +8613800138000", "my whatsapp is +254712345678", + "wrong number, use +8613999999999") + assert resolve_by_recency(before, after, msgs) == after # 不同组不动 + + +from app.services.contact_pipeline import standalone_number + + +def test_standalone_number_captures_cn_and_ke_mobiles(): + assert standalone_number("15236541128") == "15236541128" + assert standalone_number("0712345678") == "0712345678" + assert standalone_number("+86 138 0013 8000") == "+86 138 0013 8000" + + +def test_standalone_number_rejects_prices_years_and_prose(): + assert standalone_number("2024") is None # 年份 + assert standalone_number("25000") is None # 美元价 + assert standalone_number("1500000") is None # 先令价(7位) + assert standalone_number("50,000 km") is None # 含字母逗号 + assert standalone_number("I want 5 units") is None + + +def test_latest_stated_standalone_overrides(): + msgs = m("my number is +254712345678", "chat", "15236541128") + assert latest_stated_contacts(msgs) == {"phone": "15236541128"} + + +# ---- P0 捕获缺口扩充: 号码在前/无is/msg me/wa冒号 ---- +# 全部经 scan_user_messages 断言,不直接 import 新正则符号 + + +def test_scan_number_before_whatsapp(): + # 倒装: "0712 345 678 is my whatsapp" + assert scan_user_messages(m("0712 345 678 is my whatsapp")) == { + "whatsapp": "0712 345 678"} + + +def test_scan_number_before_wechat_cn(): + # 中文倒装(我的后无空格——正则必须用 \s* 而非 \s+,实证 \s+ 永不命中) + assert scan_user_messages(m("13800138000 我的微信")) == { + "wechat": "13800138000"} + assert scan_user_messages(m("13800138000 这是我的微信")) == { + "wechat": "13800138000"} + + +def test_scan_my_number_without_is(): + # "my number 0712345678"(无 is/冒号) + assert scan_user_messages(m("my number 0712345678")) == { + "phone": "0712345678"} + + +def test_scan_text_me_forms(): + assert scan_user_messages(m("text me at 07123456789")) == { + "phone": "07123456789"} + assert scan_user_messages(m("msg me 07123456789")) == { + "phone": "07123456789"} + + +def test_scan_wa_colon_local_number(): + assert scan_user_messages(m("wa: 07123456789")) == { + "whatsapp": "07123456789"} + + +def test_scan_new_forms_do_not_grab_prices(): + # 误报防护: 价格/单号即使与 whatsapp 词同现也不得捕获(无 my 指称/无邻接) + assert scan_user_messages(m("paid 2500000 via whatsapp transfer")) == {} + assert scan_user_messages(m("my budget 25000 number one priority")) == {} + assert scan_user_messages(m("order 1234567 is my order number")) == {} + # 排位表述(实证: 若倒装正则收 number/phone,"2500000 is my number" 被误捕, + # 且 latest_stated_contacts 覆盖权会把真实号码翻新成价格)——倒装只收显式渠道词 + assert scan_user_messages(m("2500000 is my number one choice")) == {} + # wa 词界守卫: "my watch/way" 的 wa 后无词边界,不得命中 + assert scan_user_messages(m("0712345678 my watch")) == {} + assert scan_user_messages(m("0712345678 my way home")) == {} + + +def test_bare_my_number_has_no_latest_authority(): + # 回归钉死: 裸 "my number X"(无 is/冒号)只进扫描辅源,不得进 + # latest_stated_contacts 获覆盖权——否则首轮旧值长期压制 extractor + # 后续改号(实证: test_correction_up_to_three 两封更正邮件全灭)。 + # 预期 {} 依赖 "wrong,"(逗号后无 number/phone)不命中 CORRECTION_CTX_RE。 + msgs = m("my number +8613800138000", "wrong, use +8613800139999", + "again +8613800122222") + assert latest_stated_contacts(msgs) == {} + + +def test_number_first_whatsapp_whitespace_variants(): + # 回归(评审): whats\s*app 捕获的任意空白变体(双空格/NBSP)不得让 + # _NUMBER_FIRST_CHANNEL 查表 KeyError——scan 在每条用户消息的热路径上 + # 运行(conversation.py 无 try/except),崩溃即断流整轮对话。 + assert scan_user_messages(m("0712345678 is my whats app")) == { + "whatsapp": "0712345678"} + assert scan_user_messages(m("0712345678 is my whats\xa0app")) == { + "whatsapp": "0712345678"} + # 两个接线位(scan + latest)都要走空白归一,任一崩都算回归 + assert latest_stated_contacts(m("0712345678 is my whats app")) == { + "whatsapp": "0712345678"} diff --git a/tests/test_context_seeding.py b/tests/test_context_seeding.py new file mode 100644 index 0000000..24c7fae --- /dev/null +++ b/tests/test_context_seeding.py @@ -0,0 +1,45 @@ +"""Red-line: `context` injection must be CONDITIONAL + WHITELIST only. + +- No `context` passed -> `raw_info` stays `{}` (widget WS path unchanged). +- `context` passed -> only `vehicle_name`/`vehicle_id` map to `app_*`. +""" +from sqlalchemy import select + +from app.models.database import CustomerProfile +from app.services.conversation import ConversationManager + + +async def _raw_info_for(async_db, conv_id) -> dict: + async with async_db() as db: + result = await db.execute( + select(CustomerProfile).where( + CustomerProfile.conversation_id == conv_id + ) + ) + profile = result.scalar_one() + return profile.raw_info or {} + + +async def test_no_context_keeps_raw_info_empty(async_db): + async with async_db() as db: + mgr = ConversationManager(db) + conv = await mgr.create_conversation(context=None) + raw = await _raw_info_for(async_db, conv.id) + assert raw == {} + + +async def test_context_seeds_whitelist_only(async_db): + async with async_db() as db: + mgr = ConversationManager(db) + conv = await mgr.create_conversation( + context={ + "vehicle_name": "Tesla Model Y", + "vehicle_id": "v123", + "evil_key": "should_be_ignored", + } + ) + raw = await _raw_info_for(async_db, conv.id) + assert raw == { + "app_vehicle_name": "Tesla Model Y", + "app_vehicle_id": "v123", + } diff --git a/tests/test_email_rendering.py b/tests/test_email_rendering.py new file mode 100644 index 0000000..e14f818 --- /dev/null +++ b/tests/test_email_rendering.py @@ -0,0 +1,66 @@ +"""邮件渲染单测: 标签主题/HTML转义/内部key过滤(D2/D12)。不触网。""" +import asyncio + +from app.services import email_service + + +def _capture_send(monkeypatch): + captured = {} + + async def fake_send(msg): + captured["msg"] = msg + return True + + monkeypatch.setattr(email_service, "_send", fake_send) + return captured + + +def _html(msg) -> str: + return msg.get_payload()[0].get_payload(decode=True).decode("utf-8") + + +def test_lead_email_subject_tag_and_escaped_body(monkeypatch): + captured = _capture_send(monkeypatch) + ok = asyncio.run(email_service.send_lead_email( + customer_profile={"目标国家": "肯尼亚", "_internal": "x", "备注": "bold"}, + contact_info={"phone": "+254712345678", "wechat": "wx"}, + reasoning="强意向", + conversation_messages=[ + {"role": "user", "content": ""}, + {"role": "assistant", "content": "ok"}, + ], + intent_level="interested", + )) + assert ok is True + subject = str(captured["msg"]["Subject"]) + assert "[新询盘·意向强]" in subject and "肯尼亚" in subject + body = _html(captured["msg"]) + assert "

W>?o@-6dcr%pH1K)u}wV0HnTf1uF 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μ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 z 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