# ============================================================================= # 企微IT智能服务台 — 阶段5 自动化闭环 常量定义 # ============================================================================= # 说明:集中定义自动化引擎的 WS 事件名、执行模式、风险等级、会话/动作状态、 # 映射源优先级、以及自动化专用错误码。 # # 约定说明(重要,与架构设计的一致性取舍): # 1. 统一响应格式沿用项目既有 {code: int, data: {}, message: str}, # 因此架构文档中的错误码段 AUT-001~AUT-0xx 在此以数值形式落地为 4001~40xx, # WS 的 automation.error 事件同样携带该数值 code。 # 2. WS 事件名统一以 automation. 为前缀(架构约定)。 # ============================================================================= # -------------------------------------------------------------------------- # WebSocket 事件名(前缀 automation.) # -------------------------------------------------------------------------- AUTOMATION_WS_PROGRESS = "automation.progress" # 进度推送(步骤开始/完成) AUTOMATION_WS_ACTION_REQUIRED = "automation.action_required" # 需要坐席审批 / 员工二次确认 AUTOMATION_WS_RESOLVED = "automation.resolved" # 处置成功,等待/已关单 AUTOMATION_WS_TAKEOVER = "automation.takeover" # 转人工接管 AUTOMATION_WS_ERROR = "automation.error" # 异常(转人工 + 通知) AUTOMATION_WS_EVENTS = { "progress": AUTOMATION_WS_PROGRESS, "action_required": AUTOMATION_WS_ACTION_REQUIRED, "resolved": AUTOMATION_WS_RESOLVED, "takeover": AUTOMATION_WS_TAKEOVER, "error": AUTOMATION_WS_ERROR, } # -------------------------------------------------------------------------- # 执行模式(双模式执行引擎) # -------------------------------------------------------------------------- AUTOMATION_MODE_PLAN_ONLY = "plan_only" # 仅生成处置方案,不真正执行外部动作 AUTOMATION_MODE_REAL_EXEC = "real_exec" # 真正执行外部系统动作 # -------------------------------------------------------------------------- # 风险等级 # -------------------------------------------------------------------------- AUTOMATION_RISK_READ = "read" # 只读:默认可自动执行 AUTOMATION_RISK_LOW = "low" # 低风险写操作:默认可自动执行 AUTOMATION_RISK_HIGH = "high" # 高危:必须审批或员工 H5 二次确认 # 默认可自动执行的风险等级集合(其余必须走审批/确认) AUTOMATION_AUTO_EXECUTABLE_RISKS = {AUTOMATION_RISK_READ, AUTOMATION_RISK_LOW} # -------------------------------------------------------------------------- # 会话状态机 # -------------------------------------------------------------------------- AUTOMATION_SESSION_CREATED = "created" AUTOMATION_SESSION_RUNNING = "running" AUTOMATION_SESSION_PAUSED = "paused" # 等待审批/确认时挂起 AUTOMATION_SESSION_RESOLVED = "resolved" # 处置成功,等待静默关单/员工确认 AUTOMATION_SESSION_CLOSED = "closed" # 已关单 AUTOMATION_SESSION_HANDOFF = "handoff" # 已转人工 AUTOMATION_SESSION_ERROR = "error" # 终态集合(不再流转) AUTOMATION_SESSION_TERMINAL_STATES = { AUTOMATION_SESSION_CLOSED, AUTOMATION_SESSION_HANDOFF, AUTOMATION_SESSION_ERROR, } # -------------------------------------------------------------------------- # 动作状态机 # -------------------------------------------------------------------------- AUTOMATION_ACTION_PENDING = "pending" AUTOMATION_ACTION_RUNNING = "running" AUTOMATION_ACTION_SUCCESS = "success" AUTOMATION_ACTION_FAILED = "failed" AUTOMATION_ACTION_SKIPPED = "skipped" AUTOMATION_ACTION_AWAIT_APPROVAL = "await_approval" AUTOMATION_ACTION_APPROVED = "approved" AUTOMATION_ACTION_REJECTED = "rejected" # -------------------------------------------------------------------------- # 映射源与优先级(联软主,eHR 兜底;aTrust 密钥未到后置) # -------------------------------------------------------------------------- MAPPING_SOURCES = ["lianruan", "atrust", "ehr"] MAPPING_SOURCE_PRIORITY = { "lianruan": 0, # 联软终端安全管理(主,支持 strusername 直接映射) "atrust": 1, # 零信任 / aTrust(密钥未到,预留占位) "ehr": 2, # 北森 EHR 静态映射(兜底) } # 静默关单 Redis TTL(秒):处置成功后 10 分钟内员工无异议则自动关单 AUTOMATION_SILENT_CLOSE_TTL = 600 # -------------------------------------------------------------------------- # 自动化错误码(数值,沿用项目 {code:int} 约定) # 架构文档 AUT-001~AUT-0xx → 4001~40xx # -------------------------------------------------------------------------- class AutomationErrorCode: SCENARIO_NOT_FOUND = 4001 # 场景未启用或未配置 INTENT_FAILED = 4002 # 意图识别失败 EXTERNAL_CALL_FAILED = 4003 # 外部系统调用失败 ACTION_REJECTED = 4004 # 动作被拒绝(风险/需审批未通过) SESSION_NOT_FOUND = 4005 # 自动化会话不存在 APPROVAL_REJECTED = 4006 # 审批被驳回 TIMEOUT_HANDOFF = 4007 # 超时自动接管 EMPLOYEE_DECLINED = 4008 # 员工拒绝/未二次确认 CONFIG_ERROR = 4009 # 配置错误(阈值/场景/映射) MAPPING_FAILED = 4010 # 终端/员工映射失败 INVALID_MODE = 4011 # 非法执行模式 ROLLBACK_FAILED = 4012 # 回滚补偿失败 AUTOMATION_ERROR_MESSAGES = { AutomationErrorCode.SCENARIO_NOT_FOUND: "场景未启用或未配置", AutomationErrorCode.INTENT_FAILED: "意图识别失败", AutomationErrorCode.EXTERNAL_CALL_FAILED: "外部系统调用失败", AutomationErrorCode.ACTION_REJECTED: "动作被拒绝(需审批或高危)", AutomationErrorCode.SESSION_NOT_FOUND: "自动化会话不存在", AutomationErrorCode.APPROVAL_REJECTED: "审批被驳回", AutomationErrorCode.TIMEOUT_HANDOFF: "处置超时,已自动转人工", AutomationErrorCode.EMPLOYEE_DECLINED: "员工未确认或已拒绝", AutomationErrorCode.CONFIG_ERROR: "自动化配置错误", AutomationErrorCode.MAPPING_FAILED: "终端/员工映射失败", AutomationErrorCode.INVALID_MODE: "非法的执行模式", AutomationErrorCode.ROLLBACK_FAILED: "回滚补偿失败", } def automation_error_message(code: int) -> str: """根据自动化错误码返回默认中文消息。""" return AUTOMATION_ERROR_MESSAGES.get(code, "自动化处理异常")