机器人显示名与站点标题可配;多段联运列表投影;协同群监听对账;工单附件落存;模板与工单后台补强

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
linmianxun
2026-10-19 09:41:59 +08:00
co-authored by Cursor
parent 277cdc1c28
commit 2b528758b4
119 changed files with 6760 additions and 3516 deletions
+84
View File
@@ -0,0 +1,84 @@
"""企微机器人显示名:后台配置 + 新旧都认。"""
from __future__ import annotations
import os
import sys
import unittest
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
if ROOT not in sys.path:
sys.path.insert(0, ROOT)
os.environ.setdefault("LEDGER_BACKEND", "memory")
from agent.policy.bot_name import (
DEFAULT_BOT_DISPLAY_NAME,
REPLY_CODE,
at_bot,
bot_display_name,
bot_mention_names,
strip_bot_mention,
text_mentions_bot,
)
from agent.policy.bot_reply import override_catalog, render
from agent.policy import inquiry_copy as copy
class BotDisplayNameTests(unittest.TestCase):
def tearDown(self) -> None:
override_catalog(None)
def test_default_when_empty(self) -> None:
override_catalog({})
self.assertEqual(bot_display_name(), DEFAULT_BOT_DISPLAY_NAME)
self.assertEqual(at_bot(), f"@{DEFAULT_BOT_DISPLAY_NAME}")
self.assertIn("询价小助手", bot_mention_names())
self.assertIn(DEFAULT_BOT_DISPLAY_NAME, bot_mention_names())
def test_override_from_admin(self) -> None:
override_catalog({REPLY_CODE: "测试助手名"})
self.assertEqual(bot_display_name(), "测试助手名")
self.assertTrue(text_mentions_bot("@测试助手名 WO1"))
self.assertTrue(text_mentions_bot("@询价小助手 WO1"))
self.assertEqual(strip_bot_mention("@测试助手名 2"), "2")
self.assertEqual(strip_bot_mention("@询价小助手 2"), "2")
def test_collab_hint_uses_display_name(self) -> None:
override_catalog({REPLY_CODE: "智报通AIQ"})
hint = copy.collab_hint("WO202610060030")
self.assertIn("WO202610060030@智报通AIQ", hint)
self.assertNotIn("询价小助手", hint)
def test_template_bot_name_placeholder(self) -> None:
override_catalog(
{
REPLY_CODE: "智报通AIQ",
"inquiring.air_collab_hint": "请发送 {{ticket_no}}@{{bot_name}}",
}
)
self.assertEqual(
render("inquiring.air_collab_hint", "缺省", ticket_no="WO1"),
"请发送 WO1@智报通AIQ",
)
def test_legacy_and_new_strip(self) -> None:
override_catalog({REPLY_CODE: "智报通AIQ"})
rest_old = strip_bot_mention("工单编号WO202610070026@询价小助手")
rest_new = strip_bot_mention("@智报通AIQ WO202610070026")
self.assertNotIn("询价小助手", rest_old)
self.assertNotIn("智报通AIQ", rest_new)
self.assertIn("WO202610070026", rest_old)
self.assertIn("WO202610070026", rest_new)
def test_strip_wecom_lock_instruction(self) -> None:
"""锁舱 instructionText 不得把 @机器人 原样带给 TMS。"""
override_catalog({REPLY_CODE: "智价通AIQ"})
cleaned = strip_bot_mention("@智价通AIQ AIR-OPT01, TH, TH641")
self.assertEqual(cleaned, "AIR-OPT01, TH, TH641")
self.assertNotIn("@", cleaned)
self.assertNotIn("智价通AIQ", cleaned)
if __name__ == "__main__":
unittest.main()