ci/woodpecker/push/main Pipeline was successful
- 删除 notify_wecom()(JSON body 打 8800/send,中继只解析 form-encoded,从未发出过消息)与吞异常的 except: pass - 客户咨询通知唯一通道:notify_boss 推任总 DM(经 ai-cs 分流) - 去掉随之无用的 urllib.request 导入 - 零行为变更:删的是从不生效的代码;防止后人「修成 form-encoded」把客户个人信息推进全员群 关联决策:ASK-20261021-09(任总 2026-10-22 11:16:8800 仅限 notice_class=content) 派单:finance-20261022-cma-lead-retire-8800-project(父任务 yanxue-20261022-relay-8800-koujing-finance)
54 lines
2.1 KiB
Python
54 lines
2.1 KiB
Python
"""AI获客 - 客户咨询接口"""
|
||
from fastapi import APIRouter, HTTPException
|
||
from pydantic import BaseModel
|
||
import json, os, datetime, subprocess
|
||
|
||
router = APIRouter(prefix="/api/cma/lead", tags=["AI获客"])
|
||
|
||
# ai-cs 实盘分流脚本(跨 profile 调用)
|
||
# 必须以 ai-cs 身份 + 其 HERMES_HOME/HOME 运行:脚本内用 `hermes send` 复用该 profile 的企微凭据;
|
||
# cma-backend.service 的 Environment 为空,不显式传入会解析到非 ai-cs 的 profile(root 默认 profile)。
|
||
AI_CS_USER = "ai-cs"
|
||
AI_CS_HOME = "/var/lib/wecom-ai-cs/profile"
|
||
AI_CS_ROUTING_SCRIPT = AI_CS_HOME + "/scripts/routing-live.py"
|
||
|
||
class LeadRequest(BaseModel):
|
||
name: str
|
||
phone: str
|
||
requirement: str = ""
|
||
source: str = "sxbh.ltd"
|
||
|
||
def notify_boss(name, phone, requirement):
|
||
"""额外推给任总(经 ai-cs 实盘分流脚本;失败不影响主流程)"""
|
||
try:
|
||
subprocess.run(
|
||
["runuser", "-u", AI_CS_USER, "--",
|
||
"env", f"HOME={AI_CS_HOME}", f"HERMES_HOME={AI_CS_HOME}",
|
||
f"USER={AI_CS_USER}", f"LOGNAME={AI_CS_USER}",
|
||
"/usr/bin/python3", AI_CS_ROUTING_SCRIPT,
|
||
requirement or "(未填需求)",
|
||
f"{name} {phone}",
|
||
"website:sxbh.ltd"],
|
||
timeout=30, capture_output=True,
|
||
)
|
||
except Exception:
|
||
pass
|
||
|
||
@router.post("")
|
||
def create_lead(data: LeadRequest):
|
||
"""接收客户咨询并保存"""
|
||
record = data.model_dump()
|
||
record["timestamp"] = datetime.datetime.now().isoformat()
|
||
record["status"] = "new"
|
||
|
||
log_dir = "/root/leads"
|
||
os.makedirs(log_dir, exist_ok=True)
|
||
with open(f"{log_dir}/leads.json", "a") as f:
|
||
f.write(json.dumps(record, ensure_ascii=False) + "\n")
|
||
|
||
# 客户咨询通知唯一通道:推任总 DM(经 ai-cs 分流);不再推 8800 全员群
|
||
# (2026-10-22 裁定:8800 仅限内容类群发,客户线索含个人信息,不得进全员群)
|
||
notify_boss(data.name, data.phone, data.requirement)
|
||
|
||
return {"success": True, "message": "咨询已提交,我们将在30分钟内联系您"}
|