feat: complete device onboarding and mobile binding workflows
ci / verify (push) Canceled after 0s

This commit is contained in:
Codex Local
2026-09-12 08:57:29 +08:00
parent 7846f30d0b
commit 98fb2965d0
116 changed files with 15669 additions and 64 deletions
+68 -3
View File
@@ -1,12 +1,72 @@
openapi: 3.1.0
info:
title: 数据采集终端—云端系统 API
version: 0.77.0
version: 0.78.0
description: 工程框架、SaaS核心业务、设备v2 RTC/VoiceChat兼容链路、设备v3火山硬件对话智能体控制面、每次会话人设与授权记忆冻结、SDK和音频能力门禁、动态配置生效证明、可靠设备事件和终稿补传、通话中受控记忆工具、首次通话就绪与最低固件门禁、背景资料准备失败闭环、活动通话授权撤回安全停止、语音内容闭环、批量设备遥测、录音上传队列、隐私对账、固件、双轨录音、状态事件、具体资源分享、受控运营配置、Agent组合组件引用、质量证据门禁、运营自定义版本族投放、新通话运行时冻结与供应商启动传递、带并发版本校验的配置投放暂停恢复、带严重度和验收证据门禁的联调问题闭环、含阻断告警定位、当前主机健康及生产部署标记、实际应用环境、身份服务模式、异地备份、外部告警与模拟服务强制条件的发布候选技术验收快照、绑定候选版本与构建摘要并按业务时区生成的可审计试点日/周运行证据、可审计且不生成正式告警的接收器联通测试、外部依赖预检台账、证书到期清单,以及带价格版本冻结、供应商用量去重和硬额度控制的费用治理接口。
servers:
- url: http://localhost:58080
description: 本地开发
paths:
/api/v1/device/time-challenges:
$ref: './onboarding.yaml#/paths/~1api~1v1~1device~1time-challenges'
/api/v1/device/register:
$ref: './onboarding.yaml#/paths/~1api~1v1~1device~1register'
/api/v1/device/setup-sessions:
$ref: './onboarding.yaml#/paths/~1api~1v1~1device~1setup-sessions'
/api/v1/device/handoffs:
$ref: './onboarding.yaml#/paths/~1api~1v1~1device~1handoffs'
/api/v1/device/poll:
$ref: './onboarding.yaml#/paths/~1api~1v1~1device~1poll'
/api/v1/device/claim-confirmations:
$ref: './onboarding.yaml#/paths/~1api~1v1~1device~1claim-confirmations'
/api/v1/device/state-acks:
$ref: './onboarding.yaml#/paths/~1api~1v1~1device~1state-acks'
/api/v1/device/activation-attempts:
$ref: './onboarding.yaml#/paths/~1api~1v1~1device~1activation-attempts'
/api/v1/device/activation-results:
$ref: './onboarding.yaml#/paths/~1api~1v1~1device~1activation-results'
/api/v1/device/activation-acks:
$ref: './onboarding.yaml#/paths/~1api~1v1~1device~1activation-acks'
/api/v1/device/setup-close:
$ref: './onboarding.yaml#/paths/~1api~1v1~1device~1setup-close'
/api/v1/web/handoffs/exchange:
$ref: './onboarding.yaml#/paths/~1api~1v1~1web~1handoffs~1exchange'
/api/v1/web/setup/session:
$ref: './onboarding.yaml#/paths/~1api~1v1~1web~1setup~1session'
/api/v1/web/setup/auth-link:
$ref: './onboarding.yaml#/paths/~1api~1v1~1web~1setup~1auth-link'
/api/v1/web/auth/sms/send:
$ref: './onboarding.yaml#/paths/~1api~1v1~1web~1auth~1sms~1send'
/api/v1/web/auth/sms/verify:
$ref: './onboarding.yaml#/paths/~1api~1v1~1web~1auth~1sms~1verify'
/api/v1/web/profiles:
$ref: './onboarding.yaml#/paths/~1api~1v1~1web~1profiles'
/api/v1/web/profiles/create:
$ref: './onboarding.yaml#/paths/~1api~1v1~1web~1profiles~1create'
/api/v1/web/claims:
$ref: './onboarding.yaml#/paths/~1api~1v1~1web~1claims'
/api/v1/web/claims/cancel:
$ref: './onboarding.yaml#/paths/~1api~1v1~1web~1claims~1cancel'
/api/v1/web/setup/status:
$ref: './onboarding.yaml#/paths/~1api~1v1~1web~1setup~1status'
/api/v1/web/setup/ack:
$ref: './onboarding.yaml#/paths/~1api~1v1~1web~1setup~1ack'
/api/v1/web/onboarding/devices:
$ref: './onboarding.yaml#/paths/~1api~1v1~1web~1onboarding~1devices'
/api/v1/web/account/session:
$ref: './onboarding.yaml#/paths/~1api~1v1~1web~1account~1session'
/api/v1/web/auth/logout:
$ref: './onboarding.yaml#/paths/~1api~1v1~1web~1auth~1logout'
/api/v1/ops/device-inventory:
$ref: './onboarding.yaml#/paths/~1api~1v1~1ops~1device-inventory'
/api/v1/ops/device-inventory/{id}/credential-deliveries:
$ref: './onboarding.yaml#/paths/~1api~1v1~1ops~1device-inventory~1{id}~1credential-deliveries'
/api/v1/ops/device-inventory/{id}/release:
$ref: './onboarding.yaml#/paths/~1api~1v1~1ops~1device-inventory~1{id}~1release'
/api/v1/ops/device-inventory/{id}/credential-rotations:
$ref: './onboarding.yaml#/paths/~1api~1v1~1ops~1device-inventory~1{id}~1credential-rotations'
/api/v1/ops/onboarding-activations/{id}/reconcile:
$ref: './onboarding.yaml#/paths/~1api~1v1~1ops~1onboarding-activations~1{id}~1reconcile'
/internal/v1/tools/memory-search:
post:
operationId: searchInCallMemory
@@ -6494,7 +6554,7 @@ components:
DeviceFactoryResetResult:
type: object
additionalProperties: false
required: [reset_id, device_id, activation_state, reset_counter, binding_removed, provider_credential_status, license_action, ended_conversation_count, cancelled_command_count, config_revision, claim, local_actions, reset_at]
required: [reset_id, device_id, activation_state, reset_counter, binding_removed, provider_credential_status, license_action, ended_conversation_count, cancelled_command_count, config_revision, local_actions, reset_at]
properties:
reset_id: { type: string, format: uuid }
device_id: { type: string, format: uuid }
@@ -6517,6 +6577,10 @@ components:
additionalProperties: false
required: [device_time, capabilities, network, requested_goal, config_revision]
properties:
intent: { type: string, enum: [activation_test], description: 仅physical_confirm首通测试填写;普通会话省略。 }
activation_id: { type: string, format: uuid }
attempt_id: { type: string, format: uuid }
permit_token: { type: string, description: 历史接口兼容字段;ONBOARDING-1.1不下发且无需填写。 }
device_time: { type: string, format: date-time }
monotonic_ms: { type: integer, format: int64, minimum: 0 }
config_revision: { type: integer, format: int64, minimum: 1 }
@@ -6576,7 +6640,7 @@ components:
properties:
event_id: { type: string, minLength: 1, maxLength: 255 }
sequence_no: { type: integer, format: int64, minimum: 1 }
event_type: { type: string, enum: [session_started, session_updated, session_ended, session_failed] }
event_type: { type: string, enum: [session_started, first_audio_received, session_updated, session_ended, session_failed] }
occurred_at: { type: string, format: date-time }
provider_session_ref: { type: string }
session_nonce: { type: string }
@@ -6619,6 +6683,7 @@ components:
type: object
required: [engine_mode, heartbeat_interval_sec, allocation_expires_at]
properties:
maximum_duration_seconds: { type: integer, minimum: 1, description: 首通测试固定60秒;普通会话省略。 }
engine_mode:
type: string
enum: [s2s_pure, s2s_hybrid, cascade]