test: 真人验收清单+API级联调验收
真实 GLM 五轮实跑(EN/ES/ZH/换号/敏感问)+mock推送+admin三视图,核心项全过。 修复: 中文轮漂英文→语言跟随提醒; extractor裸字符串联系方式→500崩溃兜形; 号码回显/样品承诺/标记词泄漏 prompt加固; 测试env耦合断言; .env前缀对齐。 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -38,12 +38,30 @@ KEY_ALIASES = {
|
||||
}
|
||||
|
||||
|
||||
def _coerce_contact_map(raw) -> dict:
|
||||
"""真实 GLM extractor 偶发把联系方式压成裸字符串(Task 11 真人验收实测,
|
||||
mock 测不出)——唯一事实源处兜形,绝不让 .items() 崩掉整个消息轮:
|
||||
裸串按内容归类(含 @ → email,否则 → phone);列表逐项归类;
|
||||
其余非 dict 形态按空处理。"""
|
||||
if isinstance(raw, dict):
|
||||
return raw
|
||||
if isinstance(raw, str):
|
||||
s = raw.strip()
|
||||
return {"email": s} if "@" in s else ({"phone": s} if s else {})
|
||||
if isinstance(raw, (list, tuple)):
|
||||
out: dict = {}
|
||||
for item in raw:
|
||||
out.update(_coerce_contact_map(item))
|
||||
return out
|
||||
return {}
|
||||
|
||||
|
||||
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():
|
||||
for k, v in _coerce_contact_map(raw).items():
|
||||
key = str(k).strip().lower()
|
||||
alias = KEY_ALIASES.get(key)
|
||||
if alias is None:
|
||||
|
||||
Reference in New Issue
Block a user