|
|
@@ -0,0 +1,3804 @@
|
|
|
+openapi: 3.0.3
|
|
|
+info:
|
|
|
+ title: EMOON AI OpenPlatform External API
|
|
|
+ version: 1.2.0
|
|
|
+ description: 医梦 AI 中台对外接口契约 v1.2,正式联调基准版。P0/P1 为厂商联调主基线;P2 为受控规划接口。FHIR 映射从主 YAML 移出,避免误解为当前交付承诺。
|
|
|
+servers:
|
|
|
+- url: https://api.{hospital}.emoon.local/api/v1
|
|
|
+ variables:
|
|
|
+ hospital:
|
|
|
+ default: demo
|
|
|
+- url: https://sandbox-api.emoon-ai.com/api/v1
|
|
|
+security:
|
|
|
+- BearerAuth: []
|
|
|
+- HmacAuth: []
|
|
|
+tags:
|
|
|
+- name: Auth
|
|
|
+- name: Platform
|
|
|
+- name: Agent
|
|
|
+- name: Conversation
|
|
|
+- name: File
|
|
|
+- name: Device
|
|
|
+- name: Card
|
|
|
+- name: MCP Tool
|
|
|
+- name: Webhook
|
|
|
+- name: Event
|
|
|
+- name: Usage
|
|
|
+- name: License
|
|
|
+- name: Partner
|
|
|
+- name: Contract
|
|
|
+- name: Credit
|
|
|
+- name: Billing
|
|
|
+- name: Operation
|
|
|
+- name: Audit
|
|
|
+paths:
|
|
|
+ /auth/token:
|
|
|
+ post:
|
|
|
+ summary: 获取短期访问 Token
|
|
|
+ tags:
|
|
|
+ - Auth
|
|
|
+ x-emoon-priority: P0
|
|
|
+ description: client_credentials 模式。
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/TokenRequest'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseToken'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /health:
|
|
|
+ get:
|
|
|
+ summary: 平台健康检查
|
|
|
+ tags:
|
|
|
+ - Platform
|
|
|
+ x-emoon-priority: P0
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseHealth'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /capabilities:
|
|
|
+ get:
|
|
|
+ summary: 查询项目已开通能力
|
|
|
+ tags:
|
|
|
+ - Platform
|
|
|
+ x-emoon-priority: P0
|
|
|
+ parameters: &id005
|
|
|
+ - &id001
|
|
|
+ $ref: '#/components/parameters/ProjectId'
|
|
|
+ - &id002
|
|
|
+ $ref: '#/components/parameters/PartnerId'
|
|
|
+ - &id003
|
|
|
+ $ref: '#/components/parameters/TraceId'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseCapabilities'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /agent/chat:
|
|
|
+ post:
|
|
|
+ summary: 智能体同步对话
|
|
|
+ tags:
|
|
|
+ - Agent
|
|
|
+ x-emoon-priority: P0
|
|
|
+ description: 首轮 conversationId 可为空,平台自动创建会话并返回。支持 Bearer Token;HMAC 模式需携带 X-Emoon-Timestamp、X-Emoon-Nonce、X-Emoon-Signature。
|
|
|
+ parameters: &id004
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - &id006
|
|
|
+ $ref: '#/components/parameters/IdempotencyKey'
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/AgentChatRequest'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseAgentChat'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /agent/chat/stream:
|
|
|
+ post:
|
|
|
+ summary: 智能体流式对话 SSE
|
|
|
+ tags:
|
|
|
+ - Agent
|
|
|
+ x-emoon-priority: P0
|
|
|
+ description: POST + text/event-stream。断线后使用 conversationId 查询最终消息。
|
|
|
+ parameters: *id004
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/AgentChatRequest'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: SSE stream
|
|
|
+ content:
|
|
|
+ text/event-stream:
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /conversations:
|
|
|
+ post:
|
|
|
+ summary: 创建会话
|
|
|
+ tags:
|
|
|
+ - Conversation
|
|
|
+ x-emoon-priority: P0
|
|
|
+ parameters: *id005
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ConversationCreateRequest'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseConversation'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ get:
|
|
|
+ summary: 查询会话列表
|
|
|
+ tags:
|
|
|
+ - Conversation
|
|
|
+ x-emoon-priority: P1
|
|
|
+ parameters:
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - $ref: '#/components/parameters/Page'
|
|
|
+ - $ref: '#/components/parameters/PageSize'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseConversationList'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /conversations/{conversationId}:
|
|
|
+ get:
|
|
|
+ summary: 查询会话详情
|
|
|
+ tags:
|
|
|
+ - Conversation
|
|
|
+ x-emoon-priority: P0
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/ConversationIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseConversation'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /conversations/{conversationId}/messages:
|
|
|
+ get:
|
|
|
+ summary: 查询会话消息
|
|
|
+ tags:
|
|
|
+ - Conversation
|
|
|
+ x-emoon-priority: P0
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/ConversationIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - $ref: '#/components/parameters/Page'
|
|
|
+ - $ref: '#/components/parameters/PageSize'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseMessageList'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /files/upload:
|
|
|
+ post:
|
|
|
+ summary: 上传图片/音频/文档
|
|
|
+ tags:
|
|
|
+ - File
|
|
|
+ x-emoon-priority: P0
|
|
|
+ description: multipart/form-data 上传,返回 fileId;后续 Agent 调用只传 fileId。
|
|
|
+ parameters: *id004
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseFileUpload'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ multipart/form-data:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/FileUploadRequest'
|
|
|
+ /files/{fileId}:
|
|
|
+ get:
|
|
|
+ summary: 查询文件元数据
|
|
|
+ tags:
|
|
|
+ - File
|
|
|
+ x-emoon-priority: P0
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/FileIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseFileMeta'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ delete:
|
|
|
+ summary: 删除或作废文件
|
|
|
+ tags:
|
|
|
+ - File
|
|
|
+ x-emoon-priority: P1
|
|
|
+ description: 删除或作废授权范围内未被锁定的文件。DELETE 本身应保持幂等;正式厂商联调要求传 X-Emoon-Idempotency-Key。同一文件重复删除返回首次处理结果或当前已删除状态。
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/FileIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - $ref: '#/components/parameters/IdempotencyKey'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponse'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /devices/register:
|
|
|
+ post:
|
|
|
+ summary: 设备注册或激活
|
|
|
+ tags:
|
|
|
+ - Device
|
|
|
+ x-emoon-priority: P0
|
|
|
+ parameters: *id005
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/DeviceRegisterRequest'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseDeviceRegister'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /devices/{deviceId}/heartbeat:
|
|
|
+ post:
|
|
|
+ summary: 设备心跳
|
|
|
+ tags:
|
|
|
+ - Device
|
|
|
+ x-emoon-priority: P0
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/DeviceIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/DeviceHeartbeatRequest'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseDeviceHeartbeat'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /devices/{deviceId}/scene:
|
|
|
+ get:
|
|
|
+ summary: 获取设备当前场景配置
|
|
|
+ tags:
|
|
|
+ - Device
|
|
|
+ x-emoon-priority: P0
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/DeviceIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseDeviceScene'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ patch:
|
|
|
+ summary: 更新设备场景绑定
|
|
|
+ tags:
|
|
|
+ - Device
|
|
|
+ x-emoon-priority: P1
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/DeviceIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/DeviceSceneUpdateRequest'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseDeviceScene'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /devices/{deviceId}/events:
|
|
|
+ post:
|
|
|
+ summary: 上报设备事件
|
|
|
+ tags:
|
|
|
+ - Device
|
|
|
+ x-emoon-priority: P0
|
|
|
+ description: 异步事件,正常返回 202 Accepted。
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/DeviceIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - *id006
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/DeviceEventRequest'
|
|
|
+ responses:
|
|
|
+ '202':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseAccepted'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ get:
|
|
|
+ summary: 查询设备事件
|
|
|
+ tags:
|
|
|
+ - Device
|
|
|
+ x-emoon-priority: P1
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/DeviceIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - $ref: '#/components/parameters/Page'
|
|
|
+ - $ref: '#/components/parameters/PageSize'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseDeviceEventList'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /devices/{deviceId}/commands/poll:
|
|
|
+ get:
|
|
|
+ summary: 设备轮询待执行命令
|
|
|
+ tags:
|
|
|
+ - Device
|
|
|
+ x-emoon-priority: P0
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/DeviceIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseDeviceCommands'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /devices/{deviceId}/commands/{commandId}/ack:
|
|
|
+ post:
|
|
|
+ summary: 设备命令执行回执
|
|
|
+ tags:
|
|
|
+ - Device
|
|
|
+ x-emoon-priority: P0
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/DeviceIdPath'
|
|
|
+ - $ref: '#/components/parameters/CommandIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - *id006
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/DeviceCommandAckRequest'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponse'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /cards/{cardInstanceId}:
|
|
|
+ get:
|
|
|
+ summary: 查询卡片实例
|
|
|
+ tags:
|
|
|
+ - Card
|
|
|
+ x-emoon-priority: P0
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/CardInstanceIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseCardInstance'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /cards/{cardInstanceId}/actions/{actionName}:
|
|
|
+ post:
|
|
|
+ summary: 执行卡片动作
|
|
|
+ tags:
|
|
|
+ - Card
|
|
|
+ x-emoon-priority: P0
|
|
|
+ description: 所有产生业务后果的卡片动作必须幂等,且必须携带 operator 与 deviceContext。
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/CardInstanceIdPath'
|
|
|
+ - $ref: '#/components/parameters/ActionNamePath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - *id006
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/CardActionRequest'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseCardAction'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /tools/{toolName}/invoke:
|
|
|
+ post:
|
|
|
+ summary: 调用院内系统工具,面向受控适配方
|
|
|
+ tags:
|
|
|
+ - MCP Tool
|
|
|
+ x-emoon-priority: P0
|
|
|
+ description: 需要 tool:read 或 tool:write scope。普通设备厂商默认不开放。
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/ToolNamePath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - *id006
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ToolInvokeRequest'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseToolInvoke'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ x-emoon-required-scopes:
|
|
|
+ - tool:read
|
|
|
+ - tool:write
|
|
|
+ x-emoon-partner-level:
|
|
|
+ - trusted_system_adapter
|
|
|
+ - his_vendor
|
|
|
+ - emoon_internal
|
|
|
+ /usage/summary:
|
|
|
+ get:
|
|
|
+ summary: 查询用量汇总
|
|
|
+ tags:
|
|
|
+ - Usage
|
|
|
+ x-emoon-priority: P0
|
|
|
+ parameters:
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - $ref: '#/components/parameters/FromDate'
|
|
|
+ - $ref: '#/components/parameters/ToDate'
|
|
|
+ - $ref: '#/components/parameters/GroupBy'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseUsageSummary'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /meter/events:
|
|
|
+ get:
|
|
|
+ summary: 查询计量事件
|
|
|
+ tags:
|
|
|
+ - Usage
|
|
|
+ x-emoon-priority: P0
|
|
|
+ parameters:
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - $ref: '#/components/parameters/BillingEpisodeId'
|
|
|
+ - $ref: '#/components/parameters/Page'
|
|
|
+ - $ref: '#/components/parameters/PageSize'
|
|
|
+ - $ref: '#/components/parameters/QueryTraceId'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseMeterEvents'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ description: 查询计量事件。P0 阶段仅支持按 billingEpisodeId 或 traceId 做精确查询,用于联调排障和计量核验;不作为正式账单查询接口,不开放项目级、设备级、时间范围复杂过滤给普通厂商。
|
|
|
+ /agents:
|
|
|
+ get:
|
|
|
+ summary: 查询可用智能体列表
|
|
|
+ tags:
|
|
|
+ - Agent
|
|
|
+ x-emoon-priority: P1
|
|
|
+ parameters:
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - $ref: '#/components/parameters/ScenarioCode'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseAgentList'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /agents/{agentId}:
|
|
|
+ get:
|
|
|
+ summary: 查询智能体详情
|
|
|
+ tags:
|
|
|
+ - Agent
|
|
|
+ x-emoon-priority: P1
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/AgentIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseAgentDetail'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /devices:
|
|
|
+ get:
|
|
|
+ summary: 查询设备列表
|
|
|
+ tags:
|
|
|
+ - Device
|
|
|
+ x-emoon-priority: P1
|
|
|
+ parameters:
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - $ref: '#/components/parameters/Page'
|
|
|
+ - $ref: '#/components/parameters/PageSize'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseDeviceList'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /devices/{deviceId}:
|
|
|
+ get:
|
|
|
+ summary: 查询设备详情
|
|
|
+ tags:
|
|
|
+ - Device
|
|
|
+ x-emoon-priority: P1
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/DeviceIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseDeviceDetail'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /webhooks:
|
|
|
+ post:
|
|
|
+ summary: 注册 Webhook
|
|
|
+ tags:
|
|
|
+ - Webhook
|
|
|
+ x-emoon-priority: P1
|
|
|
+ parameters: *id005
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/WebhookRegisterRequest'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseWebhook'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ get:
|
|
|
+ summary: 查询 Webhook 列表
|
|
|
+ tags:
|
|
|
+ - Webhook
|
|
|
+ x-emoon-priority: P1
|
|
|
+ parameters:
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - $ref: '#/components/parameters/Page'
|
|
|
+ - $ref: '#/components/parameters/PageSize'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseWebhookList'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /webhooks/{webhookId}:
|
|
|
+ delete:
|
|
|
+ summary: 删除 Webhook
|
|
|
+ tags:
|
|
|
+ - Webhook
|
|
|
+ x-emoon-priority: P1
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/WebhookIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponse'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /events/ingest:
|
|
|
+ post:
|
|
|
+ summary: 接收外部系统业务事件
|
|
|
+ tags:
|
|
|
+ - Event
|
|
|
+ x-emoon-priority: P1
|
|
|
+ description: 用于 HIS、叫号、迪耐克/病房系统向医梦上报事件。
|
|
|
+ parameters: *id004
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ExternalEventRequest'
|
|
|
+ responses:
|
|
|
+ '202':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseAccepted'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /tools/catalog:
|
|
|
+ get:
|
|
|
+ summary: 查询授权工具目录
|
|
|
+ tags:
|
|
|
+ - MCP Tool
|
|
|
+ x-emoon-priority: P1
|
|
|
+ parameters: *id005
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseToolCatalog'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ x-emoon-required-scopes:
|
|
|
+ - tool:read
|
|
|
+ /licenses/devices:
|
|
|
+ get:
|
|
|
+ summary: 查询设备授权状态
|
|
|
+ tags:
|
|
|
+ - License
|
|
|
+ x-emoon-priority: P1
|
|
|
+ parameters:
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - $ref: '#/components/parameters/Page'
|
|
|
+ - $ref: '#/components/parameters/PageSize'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponseDeviceLicenses'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /partners:
|
|
|
+ post:
|
|
|
+ summary: 创建合作方接入档案
|
|
|
+ tags:
|
|
|
+ - Partner
|
|
|
+ x-emoon-priority: P2
|
|
|
+ description: P2 规划接口,不建议进入春节前 MVP。
|
|
|
+ parameters: *id005
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/PartnerCreateRequest'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponse'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /contracts:
|
|
|
+ get:
|
|
|
+ summary: 查询合同与套餐
|
|
|
+ tags:
|
|
|
+ - Contract
|
|
|
+ x-emoon-priority: P2
|
|
|
+ description: P2 规划接口,不建议进入春节前 MVP。
|
|
|
+ parameters: *id005
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponse'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /credit/accounts:
|
|
|
+ get:
|
|
|
+ summary: 查询能力值账户
|
|
|
+ tags:
|
|
|
+ - Credit
|
|
|
+ x-emoon-priority: P2
|
|
|
+ description: P2 规划接口,不建议进入春节前 MVP。
|
|
|
+ parameters: *id005
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponse'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /billing/invoices:
|
|
|
+ get:
|
|
|
+ summary: 查询账单
|
|
|
+ tags:
|
|
|
+ - Billing
|
|
|
+ x-emoon-priority: P2
|
|
|
+ description: P2 规划接口,不建议进入春节前 MVP。
|
|
|
+ parameters: *id005
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponse'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /operation/reports:
|
|
|
+ get:
|
|
|
+ summary: 查询运营报告
|
|
|
+ tags:
|
|
|
+ - Operation
|
|
|
+ x-emoon-priority: P2
|
|
|
+ description: P2 规划接口,不建议进入春节前 MVP。
|
|
|
+ parameters: *id005
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponse'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /audit/logs:
|
|
|
+ get:
|
|
|
+ summary: 查询审计日志
|
|
|
+ tags:
|
|
|
+ - Audit
|
|
|
+ x-emoon-priority: P2
|
|
|
+ description: P2 规划接口,不建议进入春节前 MVP。
|
|
|
+ parameters: *id005
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponse'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /partners/{partnerId}:
|
|
|
+ get:
|
|
|
+ summary: 查询合作方档案
|
|
|
+ tags:
|
|
|
+ - Partner
|
|
|
+ x-emoon-priority: P2
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/PartnerIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponse'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /credit/accounts/{accountId}/freeze:
|
|
|
+ post:
|
|
|
+ summary: 冻结能力值
|
|
|
+ tags:
|
|
|
+ - Credit
|
|
|
+ x-emoon-priority: P2
|
|
|
+ description: 内部高风险接口,通常不对外开放。
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/AccountIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - *id006
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/CreditFreezeRequest'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponse'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ /credit/accounts/{accountId}/settle:
|
|
|
+ post:
|
|
|
+ summary: 结算能力值
|
|
|
+ tags:
|
|
|
+ - Credit
|
|
|
+ x-emoon-priority: P2
|
|
|
+ description: 内部高风险接口,通常不对外开放。
|
|
|
+ parameters:
|
|
|
+ - $ref: '#/components/parameters/AccountIdPath'
|
|
|
+ - *id001
|
|
|
+ - *id002
|
|
|
+ - *id003
|
|
|
+ - *id006
|
|
|
+ requestBody:
|
|
|
+ required: true
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/CreditSettleRequest'
|
|
|
+ responses:
|
|
|
+ '200':
|
|
|
+ description: OK
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ApiResponse'
|
|
|
+ '400':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '401':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '403':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '429':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ '500':
|
|
|
+ description: Error
|
|
|
+ content:
|
|
|
+ application/json:
|
|
|
+ schema:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+components:
|
|
|
+ securitySchemes:
|
|
|
+ BearerAuth:
|
|
|
+ type: http
|
|
|
+ scheme: bearer
|
|
|
+ bearerFormat: JWT
|
|
|
+ HmacAuth:
|
|
|
+ type: apiKey
|
|
|
+ in: header
|
|
|
+ name: Authorization
|
|
|
+ description: 格式:EMOON-HMAC <access_key>;同时必须携带 X-Emoon-Timestamp、X-Emoon-Nonce、X-Emoon-Signature。
|
|
|
+ parameters:
|
|
|
+ ProjectId:
|
|
|
+ name: X-Emoon-Project-Id
|
|
|
+ in: header
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ description: 项目/医院标识。
|
|
|
+ PartnerId:
|
|
|
+ name: X-Emoon-Partner-Id
|
|
|
+ in: header
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ description: 合作厂商标识。
|
|
|
+ TraceId:
|
|
|
+ name: X-Emoon-Trace-Id
|
|
|
+ in: header
|
|
|
+ required: false
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ description: 链路追踪 ID;不传则平台生成。
|
|
|
+ IdempotencyKey:
|
|
|
+ name: X-Emoon-Idempotency-Key
|
|
|
+ in: header
|
|
|
+ required: false
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ description: 写操作和产生业务事实的请求必须传。
|
|
|
+ Timestamp:
|
|
|
+ name: X-Emoon-Timestamp
|
|
|
+ in: header
|
|
|
+ required: false
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ description: HMAC 模式必填,Unix 毫秒时间戳。
|
|
|
+ Nonce:
|
|
|
+ name: X-Emoon-Nonce
|
|
|
+ in: header
|
|
|
+ required: false
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ description: HMAC 模式必填,防重放随机串。
|
|
|
+ Signature:
|
|
|
+ name: X-Emoon-Signature
|
|
|
+ in: header
|
|
|
+ required: false
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ description: HMAC 模式必填,HMAC-SHA256 签名。
|
|
|
+ DeviceIdHeader:
|
|
|
+ name: X-Emoon-Device-Id
|
|
|
+ in: header
|
|
|
+ required: false
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ description: 设备调用建议传,作为 deviceContext 兜底。
|
|
|
+ DeviceIdPath:
|
|
|
+ name: deviceId
|
|
|
+ in: path
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ ConversationIdPath:
|
|
|
+ name: conversationId
|
|
|
+ in: path
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ FileIdPath:
|
|
|
+ name: fileId
|
|
|
+ in: path
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ CardInstanceIdPath:
|
|
|
+ name: cardInstanceId
|
|
|
+ in: path
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ ActionNamePath:
|
|
|
+ name: actionName
|
|
|
+ in: path
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ CommandIdPath:
|
|
|
+ name: commandId
|
|
|
+ in: path
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ ToolNamePath:
|
|
|
+ name: toolName
|
|
|
+ in: path
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ WebhookIdPath:
|
|
|
+ name: webhookId
|
|
|
+ in: path
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ PartnerIdPath:
|
|
|
+ name: partnerId
|
|
|
+ in: path
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ AccountIdPath:
|
|
|
+ name: accountId
|
|
|
+ in: path
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ AgentIdPath:
|
|
|
+ name: agentId
|
|
|
+ in: path
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ Page:
|
|
|
+ name: page
|
|
|
+ in: query
|
|
|
+ required: false
|
|
|
+ schema:
|
|
|
+ type: integer
|
|
|
+ default: 1
|
|
|
+ PageSize:
|
|
|
+ name: pageSize
|
|
|
+ in: query
|
|
|
+ required: false
|
|
|
+ schema:
|
|
|
+ type: integer
|
|
|
+ default: 20
|
|
|
+ maximum: 200
|
|
|
+ FromDate:
|
|
|
+ name: from
|
|
|
+ in: query
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ format: date
|
|
|
+ ToDate:
|
|
|
+ name: to
|
|
|
+ in: query
|
|
|
+ required: true
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ format: date
|
|
|
+ GroupBy:
|
|
|
+ name: groupBy
|
|
|
+ in: query
|
|
|
+ required: false
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - project
|
|
|
+ - partner
|
|
|
+ - agent
|
|
|
+ - device
|
|
|
+ - scenario
|
|
|
+ - department
|
|
|
+ - day
|
|
|
+ BillingEpisodeId:
|
|
|
+ name: billingEpisodeId
|
|
|
+ in: query
|
|
|
+ required: false
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ description: 按 billingEpisodeId 查询同一业务 episode 下的计量事件。P0 阶段 /meter/events 仅支持 billingEpisodeId 或 traceId 这类精确查询,不开放项目级、设备级、时间范围复杂过滤。
|
|
|
+ ScenarioCode:
|
|
|
+ name: scenarioCode
|
|
|
+ in: query
|
|
|
+ required: false
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ QueryTraceId:
|
|
|
+ name: traceId
|
|
|
+ in: query
|
|
|
+ required: false
|
|
|
+ schema:
|
|
|
+ type: string
|
|
|
+ description: 按 traceId 查询联调排障相关计量事件。P0 仅用于联调排障,不代表完整账单查询。
|
|
|
+ schemas:
|
|
|
+ ApiResponse:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ code:
|
|
|
+ type: string
|
|
|
+ example: OK
|
|
|
+ message:
|
|
|
+ type: string
|
|
|
+ example: success
|
|
|
+ traceId:
|
|
|
+ type: string
|
|
|
+ requestId:
|
|
|
+ type: string
|
|
|
+ details:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ data:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ ErrorResponse:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ code:
|
|
|
+ type: string
|
|
|
+ example: INVALID_PARAM
|
|
|
+ message:
|
|
|
+ type: string
|
|
|
+ details:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ traceId:
|
|
|
+ type: string
|
|
|
+ requestId:
|
|
|
+ type: string
|
|
|
+ required:
|
|
|
+ - code
|
|
|
+ - message
|
|
|
+ - traceId
|
|
|
+ ApiResponseAccepted:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/AcceptedData'
|
|
|
+ AcceptedData:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ accepted:
|
|
|
+ type: boolean
|
|
|
+ eventId:
|
|
|
+ type: string
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - accepted
|
|
|
+ - duplicate
|
|
|
+ - ignored
|
|
|
+ TokenRequest:
|
|
|
+ type: object
|
|
|
+ required:
|
|
|
+ - grantType
|
|
|
+ - clientId
|
|
|
+ - clientSecret
|
|
|
+ - projectId
|
|
|
+ properties:
|
|
|
+ grantType:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - client_credentials
|
|
|
+ clientId:
|
|
|
+ type: string
|
|
|
+ clientSecret:
|
|
|
+ type: string
|
|
|
+ projectId:
|
|
|
+ type: string
|
|
|
+ scopes:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ type: string
|
|
|
+ TokenData:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ accessToken:
|
|
|
+ type: string
|
|
|
+ tokenType:
|
|
|
+ type: string
|
|
|
+ example: Bearer
|
|
|
+ expiresIn:
|
|
|
+ type: integer
|
|
|
+ example: 7200
|
|
|
+ scopes:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ type: string
|
|
|
+ ApiResponseToken:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/TokenData'
|
|
|
+ HealthData:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - UP
|
|
|
+ - DOWN
|
|
|
+ - DEGRADED
|
|
|
+ timestamp:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ version:
|
|
|
+ type: string
|
|
|
+ ApiResponseHealth:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/HealthData'
|
|
|
+ CapabilitiesData:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ projectId:
|
|
|
+ type: string
|
|
|
+ agents:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/AgentSummary'
|
|
|
+ enabledFeatures:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ type: string
|
|
|
+ toolScopes:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ type: string
|
|
|
+ rateLimit:
|
|
|
+ $ref: '#/components/schemas/RateLimitPolicy'
|
|
|
+ ApiResponseCapabilities:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/CapabilitiesData'
|
|
|
+ RateLimitPolicy:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ windowSeconds:
|
|
|
+ type: integer
|
|
|
+ limit:
|
|
|
+ type: integer
|
|
|
+ UserContext:
|
|
|
+ type: object
|
|
|
+ required:
|
|
|
+ - externalUserId
|
|
|
+ - role
|
|
|
+ properties:
|
|
|
+ externalUserId:
|
|
|
+ type: string
|
|
|
+ role:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - patient
|
|
|
+ - doctor
|
|
|
+ - nurse
|
|
|
+ - admin
|
|
|
+ - system
|
|
|
+ - anonymous
|
|
|
+ patientId:
|
|
|
+ type: string
|
|
|
+ description: HIS 患者 ID,第一期可选。
|
|
|
+ visitId:
|
|
|
+ type: string
|
|
|
+ description: 门诊/住院就诊 ID,第一期可选。
|
|
|
+ encounterId:
|
|
|
+ type: string
|
|
|
+ authorizationId:
|
|
|
+ type: string
|
|
|
+ description: 患者授权记录 ID。
|
|
|
+ DeviceContext:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ deviceId:
|
|
|
+ type: string
|
|
|
+ deviceType:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - mobile_app
|
|
|
+ - guide_screen
|
|
|
+ - self_service_kiosk
|
|
|
+ - robot
|
|
|
+ - waiting_screen
|
|
|
+ - clinic_door_screen
|
|
|
+ - clinic_desktop_screen
|
|
|
+ - doctor_station
|
|
|
+ - four_diagnosis_device
|
|
|
+ - nurse_pda
|
|
|
+ - nursing_whiteboard
|
|
|
+ - bedside_screen
|
|
|
+ - ward_robot
|
|
|
+ - unknown
|
|
|
+ description: 设备类型。门诊类型可进入医梦统一入口直接管理;住院侧类型仅表示 AI 能力映射对象,不代表医梦接管住院硬件。
|
|
|
+ locationCode:
|
|
|
+ type: string
|
|
|
+ sceneCode:
|
|
|
+ type: string
|
|
|
+ clientVersion:
|
|
|
+ type: string
|
|
|
+ managementMode:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - emoon_managed
|
|
|
+ - partner_managed
|
|
|
+ - mapped_external
|
|
|
+ description: 设备管理模式。emoon_managed=医梦统一入口客户端和 Device Registry 管理;partner_managed=合作设备厂商管理,医梦通过标准接口接入;mapped_external=迪耐克/鸿蒙病房等外部体系管理,医梦只做映射和事件互通。
|
|
|
+ externalSystem:
|
|
|
+ type: string
|
|
|
+ description: 外部系统标识,例如 dinaike_ward、harmony_ward、his_queue。管理模式为 mapped_external 或 partner_managed 时建议填写。
|
|
|
+ externalDeviceId:
|
|
|
+ type: string
|
|
|
+ description: 外部系统中的设备或终端 ID,用于住院互通和第三方设备映射。
|
|
|
+ required:
|
|
|
+ - deviceId
|
|
|
+ description: 设备上下文。门诊设备原则上由医梦 Device Registry 管理;住院侧类型(nurse_pda / nursing_whiteboard / bedside_screen / ward_robot)通常通过迪耐克/鸿蒙病房体系映射接入,医梦只负责 AI 能力、事件互通和审计,不承担住院硬件基础管理责任。
|
|
|
+ BillingContext:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ scenarioCode:
|
|
|
+ type: string
|
|
|
+ billingEpisodeId:
|
|
|
+ type: string
|
|
|
+ chargePolicy:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - customer_charge
|
|
|
+ - license_covered
|
|
|
+ - bundle_included
|
|
|
+ - internal_cost
|
|
|
+ - no_charge
|
|
|
+ ChatMessage:
|
|
|
+ type: object
|
|
|
+ required:
|
|
|
+ - type
|
|
|
+ - content
|
|
|
+ properties:
|
|
|
+ type:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - text
|
|
|
+ - image
|
|
|
+ - audio
|
|
|
+ - file
|
|
|
+ content:
|
|
|
+ type: string
|
|
|
+ description: 文本内容或 fileId。
|
|
|
+ fileId:
|
|
|
+ type: string
|
|
|
+ description: 多模态文件推荐传 fileId。
|
|
|
+ clientMessageId:
|
|
|
+ type: string
|
|
|
+ AgentChatRequest:
|
|
|
+ type: object
|
|
|
+ required:
|
|
|
+ - agentId
|
|
|
+ - message
|
|
|
+ properties:
|
|
|
+ agentId:
|
|
|
+ type: string
|
|
|
+ conversationId:
|
|
|
+ type: string
|
|
|
+ description: 首轮可为空,平台自动创建。
|
|
|
+ user:
|
|
|
+ $ref: '#/components/schemas/UserContext'
|
|
|
+ deviceContext:
|
|
|
+ $ref: '#/components/schemas/DeviceContext'
|
|
|
+ message:
|
|
|
+ $ref: '#/components/schemas/ChatMessage'
|
|
|
+ inputs:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ billingContext:
|
|
|
+ $ref: '#/components/schemas/BillingContext'
|
|
|
+ AgentChatData:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ conversationId:
|
|
|
+ type: string
|
|
|
+ messageId:
|
|
|
+ type: string
|
|
|
+ answer:
|
|
|
+ type: string
|
|
|
+ cards:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/CardRef'
|
|
|
+ riskLevel:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - low
|
|
|
+ - medium
|
|
|
+ - high
|
|
|
+ - critical
|
|
|
+ - unknown
|
|
|
+ usage:
|
|
|
+ $ref: '#/components/schemas/UsageBrief'
|
|
|
+ CardRef:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ cardInstanceId:
|
|
|
+ type: string
|
|
|
+ cardKey:
|
|
|
+ type: string
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ UsageBrief:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ meterEventId:
|
|
|
+ type: string
|
|
|
+ billingEpisodeId:
|
|
|
+ type: string
|
|
|
+ chargePolicy:
|
|
|
+ type: string
|
|
|
+ credits:
|
|
|
+ type: number
|
|
|
+ ApiResponseAgentChat:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/AgentChatData'
|
|
|
+ ConversationCreateRequest:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ agentId:
|
|
|
+ type: string
|
|
|
+ user:
|
|
|
+ $ref: '#/components/schemas/UserContext'
|
|
|
+ deviceContext:
|
|
|
+ $ref: '#/components/schemas/DeviceContext'
|
|
|
+ title:
|
|
|
+ type: string
|
|
|
+ metadata:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ Conversation:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ conversationId:
|
|
|
+ type: string
|
|
|
+ agentId:
|
|
|
+ type: string
|
|
|
+ title:
|
|
|
+ type: string
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - active
|
|
|
+ - closed
|
|
|
+ - archived
|
|
|
+ createdAt:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ updatedAt:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ ApiResponseConversation:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/Conversation'
|
|
|
+ ApiResponseConversationList:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ items:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/Conversation'
|
|
|
+ page:
|
|
|
+ $ref: '#/components/schemas/PageInfo'
|
|
|
+ ConversationMessage:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ messageId:
|
|
|
+ type: string
|
|
|
+ role:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - user
|
|
|
+ - assistant
|
|
|
+ - system
|
|
|
+ - tool
|
|
|
+ content:
|
|
|
+ type: string
|
|
|
+ cards:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/CardRef'
|
|
|
+ createdAt:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ ApiResponseMessageList:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ items:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/ConversationMessage'
|
|
|
+ page:
|
|
|
+ $ref: '#/components/schemas/PageInfo'
|
|
|
+ FileUploadRequest:
|
|
|
+ type: object
|
|
|
+ required:
|
|
|
+ - file
|
|
|
+ properties:
|
|
|
+ file:
|
|
|
+ type: string
|
|
|
+ format: binary
|
|
|
+ purpose:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - tongue_diagnosis
|
|
|
+ - face_diagnosis
|
|
|
+ - report_interpretation
|
|
|
+ - medical_record
|
|
|
+ - audio_transcription
|
|
|
+ - other
|
|
|
+ user:
|
|
|
+ $ref: '#/components/schemas/UserContext'
|
|
|
+ deviceContext:
|
|
|
+ $ref: '#/components/schemas/DeviceContext'
|
|
|
+ metadata:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ clientFileId:
|
|
|
+ type: string
|
|
|
+ description: 厂商侧文件唯一 ID。同一文件重试上传时必须保持不变,推荐用于文件上传幂等。
|
|
|
+ sha256:
|
|
|
+ type: string
|
|
|
+ description: 文件 SHA-256 摘要。用于完整性校验、重复文件识别和审计。
|
|
|
+ source:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - patient_app
|
|
|
+ - self_service_kiosk
|
|
|
+ - robot
|
|
|
+ - four_diagnosis_device
|
|
|
+ - doctor_station
|
|
|
+ - ward_terminal
|
|
|
+ - third_party_system
|
|
|
+ description: 文件来源终端或系统。
|
|
|
+ retentionPolicy:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - transient
|
|
|
+ - episode
|
|
|
+ - medical_record
|
|
|
+ - audit_only
|
|
|
+ description: 文件保存策略。transient=临时分析;episode=本次就诊 episode 内保存;medical_record=进入病历或正式医疗材料;audit_only=只保留审计摘要。
|
|
|
+ description: 文件上传请求。正式联调推荐幂等键 projectId + partnerId + clientFileId;clientFileId 缺失时可降级使用 projectId + partnerId + sha256 + purpose + user.visitId。
|
|
|
+ FileMeta:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ fileId:
|
|
|
+ type: string
|
|
|
+ fileType:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - image
|
|
|
+ - audio
|
|
|
+ - document
|
|
|
+ - other
|
|
|
+ mimeType:
|
|
|
+ type: string
|
|
|
+ sizeBytes:
|
|
|
+ type: integer
|
|
|
+ sha256:
|
|
|
+ type: string
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - uploaded
|
|
|
+ - scanning
|
|
|
+ - available
|
|
|
+ - blocked
|
|
|
+ - deleted
|
|
|
+ uploadedAt:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ clientFileId:
|
|
|
+ type: string
|
|
|
+ purpose:
|
|
|
+ type: string
|
|
|
+ retentionPolicy:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - transient
|
|
|
+ - episode
|
|
|
+ - medical_record
|
|
|
+ - audit_only
|
|
|
+ source:
|
|
|
+ type: string
|
|
|
+ ApiResponseFileUpload:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/FileMeta'
|
|
|
+ ApiResponseFileMeta:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/FileMeta'
|
|
|
+ DeviceRegisterRequest:
|
|
|
+ type: object
|
|
|
+ required:
|
|
|
+ - deviceCode
|
|
|
+ - deviceType
|
|
|
+ - vendor
|
|
|
+ - model
|
|
|
+ - os
|
|
|
+ - clientVersion
|
|
|
+ properties:
|
|
|
+ deviceCode:
|
|
|
+ type: string
|
|
|
+ deviceType:
|
|
|
+ type: string
|
|
|
+ vendor:
|
|
|
+ type: string
|
|
|
+ model:
|
|
|
+ type: string
|
|
|
+ os:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - android
|
|
|
+ - harmony
|
|
|
+ - windows
|
|
|
+ - linux
|
|
|
+ - web
|
|
|
+ - unknown
|
|
|
+ clientVersion:
|
|
|
+ type: string
|
|
|
+ capabilities:
|
|
|
+ $ref: '#/components/schemas/DeviceCapabilities'
|
|
|
+ location:
|
|
|
+ $ref: '#/components/schemas/DeviceLocation'
|
|
|
+ DeviceCapabilities:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ touch:
|
|
|
+ type: boolean
|
|
|
+ screen:
|
|
|
+ type: boolean
|
|
|
+ voiceInput:
|
|
|
+ type: boolean
|
|
|
+ voiceOutput:
|
|
|
+ type: boolean
|
|
|
+ camera:
|
|
|
+ type: boolean
|
|
|
+ qrScan:
|
|
|
+ type: boolean
|
|
|
+ idCardReader:
|
|
|
+ type: boolean
|
|
|
+ medicalCardReader:
|
|
|
+ type: boolean
|
|
|
+ printer:
|
|
|
+ type: boolean
|
|
|
+ navigation:
|
|
|
+ type: boolean
|
|
|
+ nearbyDetect:
|
|
|
+ type: boolean
|
|
|
+ DeviceLocation:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ building:
|
|
|
+ type: string
|
|
|
+ floor:
|
|
|
+ type: string
|
|
|
+ area:
|
|
|
+ type: string
|
|
|
+ room:
|
|
|
+ type: string
|
|
|
+ bed:
|
|
|
+ type: string
|
|
|
+ locationCode:
|
|
|
+ type: string
|
|
|
+ DeviceRegisterData:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ deviceId:
|
|
|
+ type: string
|
|
|
+ deviceSecret:
|
|
|
+ type: string
|
|
|
+ admissionLevel:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - A
|
|
|
+ - B
|
|
|
+ - C
|
|
|
+ - D
|
|
|
+ defaultSceneCode:
|
|
|
+ type: string
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ ApiResponseDeviceRegister:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/DeviceRegisterData'
|
|
|
+ DeviceHeartbeatRequest:
|
|
|
+ type: object
|
|
|
+ required:
|
|
|
+ - status
|
|
|
+ - clientVersion
|
|
|
+ properties:
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - online
|
|
|
+ - offline
|
|
|
+ - error
|
|
|
+ - maintenance
|
|
|
+ clientVersion:
|
|
|
+ type: string
|
|
|
+ ip:
|
|
|
+ type: string
|
|
|
+ currentSceneCode:
|
|
|
+ type: string
|
|
|
+ metrics:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ errors:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/DeviceError'
|
|
|
+ DeviceError:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ code:
|
|
|
+ type: string
|
|
|
+ message:
|
|
|
+ type: string
|
|
|
+ occurredAt:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ DeviceHeartbeatData:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ accepted:
|
|
|
+ type: boolean
|
|
|
+ serverTime:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ nextHeartbeatSeconds:
|
|
|
+ type: integer
|
|
|
+ ApiResponseDeviceHeartbeat:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/DeviceHeartbeatData'
|
|
|
+ DeviceSceneData:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ deviceId:
|
|
|
+ type: string
|
|
|
+ sceneCode:
|
|
|
+ type: string
|
|
|
+ uiTemplate:
|
|
|
+ type: string
|
|
|
+ agentBindings:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/AgentBinding'
|
|
|
+ toolScopes:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ type: string
|
|
|
+ features:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ expiresAt:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ AgentBinding:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ agentId:
|
|
|
+ type: string
|
|
|
+ role:
|
|
|
+ type: string
|
|
|
+ default:
|
|
|
+ type: boolean
|
|
|
+ ApiResponseDeviceScene:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/DeviceSceneData'
|
|
|
+ DeviceSceneUpdateRequest:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ sceneCode:
|
|
|
+ type: string
|
|
|
+ uiTemplate:
|
|
|
+ type: string
|
|
|
+ agentBindings:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/AgentBinding'
|
|
|
+ effectiveAt:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ DeviceEventRequest:
|
|
|
+ type: object
|
|
|
+ required:
|
|
|
+ - clientEventId
|
|
|
+ - eventType
|
|
|
+ - occurredAt
|
|
|
+ properties:
|
|
|
+ clientEventId:
|
|
|
+ type: string
|
|
|
+ eventType:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - qr_scanned
|
|
|
+ - card_read
|
|
|
+ - print_completed
|
|
|
+ - print_failed
|
|
|
+ - nearby_detected
|
|
|
+ - navigation_started
|
|
|
+ - navigation_completed
|
|
|
+ - device_error
|
|
|
+ - user_interaction
|
|
|
+ - custom
|
|
|
+ occurredAt:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ payload:
|
|
|
+ oneOf:
|
|
|
+ - $ref: '#/components/schemas/NearbyDetectedPayload'
|
|
|
+ - type: object
|
|
|
+ additionalProperties: true
|
|
|
+ billingContext:
|
|
|
+ $ref: '#/components/schemas/BillingContext'
|
|
|
+ NearbyDetectedPayload:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ subject:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ type:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - temporary_token
|
|
|
+ - ble_device_id
|
|
|
+ - nfc_token
|
|
|
+ - qr_session
|
|
|
+ value:
|
|
|
+ type: string
|
|
|
+ signal:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ type:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - ble
|
|
|
+ - nfc
|
|
|
+ - wifi
|
|
|
+ - harmony
|
|
|
+ - qrcode
|
|
|
+ rssi:
|
|
|
+ type: integer
|
|
|
+ confidence:
|
|
|
+ type: number
|
|
|
+ format: float
|
|
|
+ areaCode:
|
|
|
+ type: string
|
|
|
+ DeviceCommand:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ commandId:
|
|
|
+ type: string
|
|
|
+ commandType:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - show_page
|
|
|
+ - render_card
|
|
|
+ - play_tts
|
|
|
+ - start_navigation
|
|
|
+ - stop_navigation
|
|
|
+ - return_dock
|
|
|
+ - print_receipt
|
|
|
+ - refresh_scene
|
|
|
+ - upgrade_client
|
|
|
+ - custom
|
|
|
+ payload:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ expiresAt:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ ApiResponseDeviceCommands:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ commands:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/DeviceCommand'
|
|
|
+ DeviceCommandAckRequest:
|
|
|
+ type: object
|
|
|
+ required:
|
|
|
+ - status
|
|
|
+ properties:
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - success
|
|
|
+ - failed
|
|
|
+ - processing
|
|
|
+ - rejected
|
|
|
+ message:
|
|
|
+ type: string
|
|
|
+ result:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ CardInstance:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ cardInstanceId:
|
|
|
+ type: string
|
|
|
+ cardKey:
|
|
|
+ type: string
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - active
|
|
|
+ - submitted
|
|
|
+ - processing
|
|
|
+ - completed
|
|
|
+ - failed
|
|
|
+ - expired
|
|
|
+ - cancelled
|
|
|
+ renderPayload:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ actions:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ type: string
|
|
|
+ expiresAt:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ ApiResponseCardInstance:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/CardInstance'
|
|
|
+ OperatorContext:
|
|
|
+ type: object
|
|
|
+ required:
|
|
|
+ - role
|
|
|
+ - externalUserId
|
|
|
+ properties:
|
|
|
+ role:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - patient
|
|
|
+ - doctor
|
|
|
+ - nurse
|
|
|
+ - admin
|
|
|
+ - system
|
|
|
+ externalUserId:
|
|
|
+ type: string
|
|
|
+ patientId:
|
|
|
+ type: string
|
|
|
+ doctorId:
|
|
|
+ type: string
|
|
|
+ nurseId:
|
|
|
+ type: string
|
|
|
+ CardActionRequest:
|
|
|
+ type: object
|
|
|
+ required:
|
|
|
+ - clientActionId
|
|
|
+ - operator
|
|
|
+ - deviceContext
|
|
|
+ - payload
|
|
|
+ properties:
|
|
|
+ clientActionId:
|
|
|
+ type: string
|
|
|
+ operator:
|
|
|
+ $ref: '#/components/schemas/OperatorContext'
|
|
|
+ deviceContext:
|
|
|
+ $ref: '#/components/schemas/DeviceContext'
|
|
|
+ payload:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ confirm:
|
|
|
+ type: boolean
|
|
|
+ billingContext:
|
|
|
+ $ref: '#/components/schemas/BillingContext'
|
|
|
+ CardActionData:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ cardInstanceId:
|
|
|
+ type: string
|
|
|
+ actionName:
|
|
|
+ type: string
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - accepted
|
|
|
+ - processing
|
|
|
+ - completed
|
|
|
+ - failed
|
|
|
+ - duplicate
|
|
|
+ result:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ nextCard:
|
|
|
+ $ref: '#/components/schemas/CardRef'
|
|
|
+ ApiResponseCardAction:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/CardActionData'
|
|
|
+ ToolInvokeRequest:
|
|
|
+ type: object
|
|
|
+ required:
|
|
|
+ - toolCallId
|
|
|
+ - context
|
|
|
+ - input
|
|
|
+ properties:
|
|
|
+ toolCallId:
|
|
|
+ type: string
|
|
|
+ context:
|
|
|
+ $ref: '#/components/schemas/ToolContext'
|
|
|
+ input:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ billingContext:
|
|
|
+ $ref: '#/components/schemas/BillingContext'
|
|
|
+ riskLevel:
|
|
|
+ $ref: '#/components/schemas/ToolRiskLevel'
|
|
|
+ description: 受控工具调用请求。仅开放给医梦 MCP Tool Server、HIS/EMR/LIS/PACS/叫号/支付等受控适配方;普通设备厂商不得直接调用。写操作必须幂等,并按 riskLevel 执行确认、权限和审计策略。
|
|
|
+ ToolContext:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ projectId:
|
|
|
+ type: string
|
|
|
+ user:
|
|
|
+ $ref: '#/components/schemas/UserContext'
|
|
|
+ deviceContext:
|
|
|
+ $ref: '#/components/schemas/DeviceContext'
|
|
|
+ cardInstanceId:
|
|
|
+ type: string
|
|
|
+ traceId:
|
|
|
+ type: string
|
|
|
+ ToolInvokeData:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ toolCallId:
|
|
|
+ type: string
|
|
|
+ toolName:
|
|
|
+ type: string
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - success
|
|
|
+ - failed
|
|
|
+ - timeout
|
|
|
+ - forbidden
|
|
|
+ result:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ error:
|
|
|
+ $ref: '#/components/schemas/ErrorResponse'
|
|
|
+ ApiResponseToolInvoke:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/ToolInvokeData'
|
|
|
+ WebhookRegisterRequest:
|
|
|
+ type: object
|
|
|
+ required:
|
|
|
+ - url
|
|
|
+ - eventTypes
|
|
|
+ properties:
|
|
|
+ url:
|
|
|
+ type: string
|
|
|
+ format: uri
|
|
|
+ eventTypes:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ type: string
|
|
|
+ secret:
|
|
|
+ type: string
|
|
|
+ description:
|
|
|
+ type: string
|
|
|
+ WebhookData:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ webhookId:
|
|
|
+ type: string
|
|
|
+ url:
|
|
|
+ type: string
|
|
|
+ eventTypes:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ type: string
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - active
|
|
|
+ - disabled
|
|
|
+ ApiResponseWebhook:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/WebhookData'
|
|
|
+ ApiResponseWebhookList:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ items:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/WebhookData'
|
|
|
+ page:
|
|
|
+ $ref: '#/components/schemas/PageInfo'
|
|
|
+ ExternalEventRequest:
|
|
|
+ type: object
|
|
|
+ required:
|
|
|
+ - eventId
|
|
|
+ - eventType
|
|
|
+ - occurredAt
|
|
|
+ - sourceSystem
|
|
|
+ properties:
|
|
|
+ eventId:
|
|
|
+ type: string
|
|
|
+ eventType:
|
|
|
+ type: string
|
|
|
+ sourceSystem:
|
|
|
+ type: string
|
|
|
+ occurredAt:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ user:
|
|
|
+ $ref: '#/components/schemas/UserContext'
|
|
|
+ deviceContext:
|
|
|
+ $ref: '#/components/schemas/DeviceContext'
|
|
|
+ payload:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ ToolCatalogItem:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ toolName:
|
|
|
+ type: string
|
|
|
+ toolType:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - read
|
|
|
+ - write
|
|
|
+ description:
|
|
|
+ type: string
|
|
|
+ inputSchema:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ outputSchema:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ riskLevel:
|
|
|
+ $ref: '#/components/schemas/ToolRiskLevel'
|
|
|
+ ApiResponseToolCatalog:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ tools:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/ToolCatalogItem'
|
|
|
+ UsageSummaryData:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ from:
|
|
|
+ type: string
|
|
|
+ format: date
|
|
|
+ to:
|
|
|
+ type: string
|
|
|
+ format: date
|
|
|
+ groupBy:
|
|
|
+ type: string
|
|
|
+ items:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ type: object
|
|
|
+ additionalProperties: true
|
|
|
+ ApiResponseUsageSummary:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/UsageSummaryData'
|
|
|
+ MeterEvent:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ meterEventId:
|
|
|
+ type: string
|
|
|
+ billingEpisodeId:
|
|
|
+ type: string
|
|
|
+ projectId:
|
|
|
+ type: string
|
|
|
+ partnerId:
|
|
|
+ type: string
|
|
|
+ agentId:
|
|
|
+ type: string
|
|
|
+ deviceId:
|
|
|
+ type: string
|
|
|
+ scenarioCode:
|
|
|
+ type: string
|
|
|
+ sourceType:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - openplatform
|
|
|
+ - dify
|
|
|
+ - mcp
|
|
|
+ - card
|
|
|
+ - device
|
|
|
+ - file
|
|
|
+ - webhook
|
|
|
+ sourceId:
|
|
|
+ type: string
|
|
|
+ meterItem:
|
|
|
+ type: string
|
|
|
+ rawQuantity:
|
|
|
+ type: number
|
|
|
+ credits:
|
|
|
+ type: number
|
|
|
+ chargePolicy:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - customer_charge
|
|
|
+ - license_covered
|
|
|
+ - bundle_included
|
|
|
+ - internal_cost
|
|
|
+ - no_charge
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - pending
|
|
|
+ - settled
|
|
|
+ - reversed
|
|
|
+ - failed
|
|
|
+ occurredAt:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ ApiResponseMeterEvents:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ items:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/MeterEvent'
|
|
|
+ page:
|
|
|
+ $ref: '#/components/schemas/PageInfo'
|
|
|
+ DeviceLicense:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ deviceId:
|
|
|
+ type: string
|
|
|
+ licenseStatus:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - active
|
|
|
+ - expired
|
|
|
+ - suspended
|
|
|
+ - not_bound
|
|
|
+ licenseType:
|
|
|
+ type: string
|
|
|
+ validTo:
|
|
|
+ type: string
|
|
|
+ format: date
|
|
|
+ ApiResponseDeviceLicenses:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ items:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/DeviceLicense'
|
|
|
+ page:
|
|
|
+ $ref: '#/components/schemas/PageInfo'
|
|
|
+ AgentSummary:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ agentId:
|
|
|
+ type: string
|
|
|
+ name:
|
|
|
+ type: string
|
|
|
+ scenarioCode:
|
|
|
+ type: string
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ ApiResponseAgentList:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ items:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/AgentSummary'
|
|
|
+ AgentDetail:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/AgentSummary'
|
|
|
+ properties:
|
|
|
+ description:
|
|
|
+ type: string
|
|
|
+ supportedMessageTypes:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ type: string
|
|
|
+ supportedCards:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ type: string
|
|
|
+ ApiResponseAgentDetail:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/AgentDetail'
|
|
|
+ DeviceDetail:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ deviceId:
|
|
|
+ type: string
|
|
|
+ deviceCode:
|
|
|
+ type: string
|
|
|
+ deviceType:
|
|
|
+ type: string
|
|
|
+ vendor:
|
|
|
+ type: string
|
|
|
+ model:
|
|
|
+ type: string
|
|
|
+ location:
|
|
|
+ $ref: '#/components/schemas/DeviceLocation'
|
|
|
+ capabilities:
|
|
|
+ $ref: '#/components/schemas/DeviceCapabilities'
|
|
|
+ status:
|
|
|
+ type: string
|
|
|
+ clientVersion:
|
|
|
+ type: string
|
|
|
+ lastHeartbeat:
|
|
|
+ type: string
|
|
|
+ format: date-time
|
|
|
+ ApiResponseDeviceDetail:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ $ref: '#/components/schemas/DeviceDetail'
|
|
|
+ ApiResponseDeviceList:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ items:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/DeviceDetail'
|
|
|
+ page:
|
|
|
+ $ref: '#/components/schemas/PageInfo'
|
|
|
+ ApiResponseDeviceEventList:
|
|
|
+ allOf:
|
|
|
+ - $ref: '#/components/schemas/ApiResponse'
|
|
|
+ properties:
|
|
|
+ data:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ items:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ $ref: '#/components/schemas/DeviceEventRequest'
|
|
|
+ page:
|
|
|
+ $ref: '#/components/schemas/PageInfo'
|
|
|
+ PageInfo:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ page:
|
|
|
+ type: integer
|
|
|
+ pageSize:
|
|
|
+ type: integer
|
|
|
+ total:
|
|
|
+ type: integer
|
|
|
+ PartnerCreateRequest:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ partnerName:
|
|
|
+ type: string
|
|
|
+ partnerType:
|
|
|
+ type: string
|
|
|
+ scopes:
|
|
|
+ type: array
|
|
|
+ items:
|
|
|
+ type: string
|
|
|
+ CreditFreezeRequest:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ sourceEventId:
|
|
|
+ type: string
|
|
|
+ credits:
|
|
|
+ type: number
|
|
|
+ reason:
|
|
|
+ type: string
|
|
|
+ CreditSettleRequest:
|
|
|
+ type: object
|
|
|
+ properties:
|
|
|
+ freezeId:
|
|
|
+ type: string
|
|
|
+ meterEventId:
|
|
|
+ type: string
|
|
|
+ actualCredits:
|
|
|
+ type: number
|
|
|
+ ToolRiskLevel:
|
|
|
+ type: string
|
|
|
+ enum:
|
|
|
+ - L1_QUERY
|
|
|
+ - L2_SENSITIVE_READ
|
|
|
+ - L3_BUSINESS_WRITE
|
|
|
+ - L4_FINANCIAL_ACTION
|
|
|
+ - L5_MEDICAL_WRITE
|
|
|
+ description: 工具风险等级。L1 查询、L2 敏感查询、L3 业务写入、L4 财务动作、L5 医疗正式写入。
|
|
|
+x-emoon-api-version: 2026-05-29-v1.2
|
|
|
+x-emoon-document-status: 正式联调基准版
|