116 lines
3.4 KiB
Python
116 lines
3.4 KiB
Python
"""
|
|
主账 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 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")
|