""" 主账 API 方法签名壳。 本文件职责:列出智能体将调用的主账端点形状;默认返回 not_implemented,不假装成功。 禁止:直连 TMS / MySQL;Graph 成功不能冒充本文件成功。 """ from __future__ import annotations import logging from typing import Any, Optional from agent.ledger import LedgerClient, LedgerResponse logger = logging.getLogger(__name__) class LedgerApiShell: """ 主账业务 API 空壳(签名齐、实现空)。 正式:各方法改走 request_json 打真实路径;路径以主账 OpenAPI 为准。 """ def __init__(self, client: Optional[LedgerClient] = None) -> None: self.client = client or LedgerClient.from_settings() def _nyi(self, name: str) -> LedgerResponse: logger.info("ledger.api_shell.%s not_implemented", name) return LedgerResponse( ok=False, status_code=501, error=f"not_implemented:{name}", data={"method": name}, ) def create_ticket( self, *, payload: dict[str, Any], idempotency_key: str, ) -> LedgerResponse: """建单壳。""" _ = (payload, idempotency_key) return self._nyi("create_ticket") def transition_ticket( self, *, inquiry_no: str, to_status: str, idempotency_key: str, reason: str = "", ) -> LedgerResponse: """六态迁移壳。""" _ = (inquiry_no, to_status, idempotency_key, reason) return self._nyi("transition_ticket") def get_ticket(self, *, inquiry_no: str) -> LedgerResponse: """查工单壳。""" _ = inquiry_no return self._nyi("get_ticket") def upsert_quote_version( self, *, inquiry_no: str, quote_version: int, payload: dict[str, Any], idempotency_key: str, ) -> LedgerResponse: """报价版本壳。""" _ = (inquiry_no, quote_version, payload, idempotency_key) return self._nyi("upsert_quote_version") def register_attachment( self, *, inquiry_no: str, object_key: str, meta: dict[str, Any], idempotency_key: str, ) -> LedgerResponse: """附件元数据登记壳。""" _ = (inquiry_no, object_key, meta, idempotency_key) return self._nyi("register_attachment") def get_staff_by_wecom_id(self, *, wecom_id: str) -> LedgerResponse: """人员角色壳(按已有 wecom_id)。""" _ = wecom_id return self._nyi("get_staff_by_wecom_id") def list_quote_templates(self, *, enabled_only: bool = True) -> LedgerResponse: """ 报价模板列表。 真相:后台上传/启用;智能体只读已启用项,再经对象存储/本地路径取字节。 """ path = "/inquiry/quoteTemplate/agent/listEnabled" return self.client.request_json( "GET", path, params={"enabledOnly": str(bool(enabled_only)).lower()}, ) def list_bot_replies(self) -> LedgerResponse: """ 已启用机器人回复语。 正式路径:GET /inquiry/agent/botReply/listEnabled 只读;停用项不在列表里。 """ return self.client.request_json("GET", "/inquiry/agent/botReply/listEnabled") def wake_agent_ack( self, *, inquiry_no: str, quote_version: int, wait_version: int, ) -> LedgerResponse: """主账侧唤醒回执壳(智能体被唤醒后可选回写)。""" _ = (inquiry_no, quote_version, wait_version) return self._nyi("wake_agent_ack")