优化864扫码后收口失败提示与启动任务重载

This commit is contained in:
liuwei
2026-05-07 14:59:25 +08:00
parent 44a3545bbb
commit e6396fafed
2 changed files with 22 additions and 2 deletions

View File

@@ -154,7 +154,11 @@ def jobs(robot: Robot):
# 系统级定时任务统一改为数据库驱动,不再在 main.py 里硬编码维护。
# 这里保留入口,只负责按表配置重新加载,便于运行时刷新。
if hasattr(robot, "system_job_loader") and robot.system_job_loader:
robot.system_job_loader.reload_from_db()
# 启动阶段再次 reload 只需要同步最新数据库配置,不应重新触发漏执行补偿:
# 1. Robot.__init__ 里已经完成过一次注册;
# 2. 若这里使用默认参数再次 reload会把启动期补偿又执行一遍抵消前面的提速优化
# 3. 因此这里显式关闭 startup compensation保持启动路径轻量且幂等。
robot.system_job_loader.reload_from_db(run_startup_compensation=False)

View File

@@ -51,6 +51,22 @@ class Server864RuntimeMixin:
return f"{normalized} 请更换更高版本的 864 client/server 组合后再登录。"
return normalized
@staticmethod
def _normalize_post_scan_failure_message(message: str) -> str:
"""把扫码成功后的收口阶段错误翻译成更接近真实原因的提示。"""
normalized = Server864RuntimeMixin._normalize_login_runtime_message(message)
if "该链接不存在" in normalized:
# 864 在扫码成功后如果 ManualAuth 失败,会直接把长连接停掉:
# 1. ABOT 随后再调 `GetInItStatus/GetProfile` 时,就只会看到“该链接不存在”;
# 2. 但这并不是根因,根因往往已经出现在服务端控制台,例如“当前客户端版本过低”;
# 3. 因此前端这里给出更贴近真实情况的兼容提示,帮助用户把注意力放到版本兼容上。
return (
"扫码成功后服务端登录收口失败,连接已被主动关闭。"
"这通常表示当前 864 client/server 版本组合不兼容;"
"若服务端日志已出现“当前客户端版本过低”,请升级到更高版本后再登录。"
)
return normalized
async def run_runtime(
self,
*,
@@ -376,7 +392,7 @@ class Server864RuntimeMixin:
logger=logger,
)
except Exception as e:
error_message = self._normalize_login_runtime_message(str(e))
error_message = self._normalize_post_scan_failure_message(str(e))
# 扫码成功后的收口阶段同样需要把异常同步给前端:
# 1. 这类错误往往发生在“state=2 之后但正式进入业务前”,最容易被误判成前端没刷新;
# 2. 例如当前用户遇到的“客户端版本过低”就是在这个阶段由服务端主动断开;