7854 lines
218 KiB
YAML
7854 lines
218 KiB
YAML
swagger: "2.0"
|
||
info:
|
||
title: HY Gateway Service API
|
||
version: "1.0.0"
|
||
description: |
|
||
gateway-service 对外暴露 HTTP + JSON API。
|
||
`/api/v1/**` 业务接口统一返回 `code/message/request_id/data` 外壳;`request_id` 和响应 `X-Request-ID` 均由服务端生成,并透传到内部 gRPC RequestMeta。
|
||
`/healthz/**` 是健康检查接口,不使用业务响应外壳。
|
||
host: localhost:13000
|
||
basePath: /
|
||
schemes:
|
||
- http
|
||
consumes:
|
||
- application/json
|
||
produces:
|
||
- application/json
|
||
tags:
|
||
- name: health
|
||
description: Gateway 进程和依赖探测。
|
||
- name: auth
|
||
description: 登录、刷新、登出和密码初始化。
|
||
- name: tencent-im
|
||
description: 腾讯云 IM 登录票据和服务端回调入口。
|
||
- name: tencent-rtc
|
||
description: 腾讯 RTC 语音进房票据入口。
|
||
- name: files
|
||
description: App 文件和头像上传入口。
|
||
- name: users
|
||
description: 当前展示短号查询和变更。
|
||
- name: countries
|
||
description: App 注册页国家选择公开读接口。
|
||
- name: app-config
|
||
description: App 运行时配置公开读接口。
|
||
- name: devices
|
||
description: App 设备推送 token 绑定和失效。
|
||
- name: rooms
|
||
description: 房间命令入口,最终由 room-service 执行。
|
||
- name: wallet
|
||
description: App 钱包余额、币商转账和充值口径入口。
|
||
- name: vip
|
||
description: App 维度 VIP 套餐、有效权益、体验卡和功能开关;Fami 使用 tiered_privilege_v1,Lalu 保持 legacy_timed。
|
||
- name: resources
|
||
description: App 资源库、资源组、礼物配置和我的资源入口。
|
||
- name: manager-center
|
||
description: H5 经理中心入口;服务端校验业务身份,客户端不能自报经理权限。
|
||
- name: business
|
||
description: 带业务场景权限裁剪的通用能力入口。
|
||
- name: messages
|
||
description: App 消息 tab,后端只负责 system/activity inbox,用户私聊来自腾讯云 IM SDK。
|
||
securityDefinitions:
|
||
BearerAuth:
|
||
type: apiKey
|
||
name: Authorization
|
||
in: header
|
||
description: 使用 `Bearer <JWT>`;JWT 使用 HS256,claims 中的 `user_id` 是数值型用户 ID 的字符串,避免 64 位 ID 精度丢失。
|
||
parameters:
|
||
DisplayUserIDPath:
|
||
name: display_user_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
description: 当前有效展示短号。
|
||
ResourceGroupIDPath:
|
||
name: group_id
|
||
in: path
|
||
required: true
|
||
type: integer
|
||
format: int64
|
||
description: 资源组 ID。
|
||
ResourceIDPath:
|
||
name: resource_id
|
||
in: path
|
||
required: true
|
||
type: integer
|
||
format: int64
|
||
description: 资源 ID。
|
||
TencentIMSDKAppID:
|
||
name: SdkAppid
|
||
in: query
|
||
required: true
|
||
type: integer
|
||
format: int64
|
||
description: 腾讯云 IM 回调携带的 SDKAppID;当前入口接受 `SdkAppid` 查询名。
|
||
TencentIMCallbackCommand:
|
||
name: CallbackCommand
|
||
in: query
|
||
required: false
|
||
type: string
|
||
enum:
|
||
- Group.CallbackBeforeApplyJoinGroup
|
||
- Group.CallbackBeforeSendMsg
|
||
description: 腾讯云 IM 回调命令;如果 query 和 body 同时存在,二者必须一致。
|
||
TencentIMCallbackAuthToken:
|
||
name: CallbackAuthToken
|
||
in: query
|
||
required: false
|
||
type: string
|
||
description: 腾讯云 IM 回调鉴权 token;也可通过 `X-Tencent-IM-Callback-Token` header 传入。
|
||
TencentIMCallbackTokenHeader:
|
||
name: X-Tencent-IM-Callback-Token
|
||
in: header
|
||
required: false
|
||
type: string
|
||
description: 腾讯云 IM 回调鉴权 token header。
|
||
TencentRTCSDKAppIDHeader:
|
||
name: SdkAppId
|
||
in: header
|
||
required: true
|
||
type: integer
|
||
format: int64
|
||
description: 腾讯 RTC 事件回调 header 中的 SDKAppID。
|
||
TencentRTCSignHeader:
|
||
name: Sign
|
||
in: header
|
||
required: true
|
||
type: string
|
||
description: 腾讯 RTC 事件回调签名,计算方式为 `base64(hmacsha256(callback_sign_key, raw_body))`。
|
||
responses:
|
||
BadRequest:
|
||
description: 请求体不是合法 JSON,或下游返回非法参数;常见 `code` 为 `INVALID_JSON`、`INVALID_ARGUMENT`、`DISPLAY_USER_ID_INVALID`。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
Unauthorized:
|
||
description: 未通过 access token 校验,或下游返回认证失败。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
Forbidden:
|
||
description: 已认证但资料未完成、被禁用、封禁或无权限;常见 `code` 为 `PROFILE_REQUIRED`、`USER_DISABLED`、`PERMISSION_DENIED`。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
NotFound:
|
||
description: 下游实体不存在。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
Conflict:
|
||
description: 下游唯一键、状态、租约或冷却期冲突。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
Internal:
|
||
description: gateway 或下游返回不可细分的内部错误。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
UpstreamError:
|
||
description: gateway 调内部服务失败,或内部服务返回不可映射错误。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
paths:
|
||
/healthz/live:
|
||
get:
|
||
tags:
|
||
- health
|
||
summary: 进程存活探测
|
||
operationId: gatewayLive
|
||
responses:
|
||
"200":
|
||
description: Gateway HTTP runtime 正在服务。
|
||
schema:
|
||
$ref: "#/definitions/HealthResponse"
|
||
"500":
|
||
description: Gateway HTTP runtime 不可用。
|
||
schema:
|
||
$ref: "#/definitions/HealthResponse"
|
||
/healthz/ready:
|
||
get:
|
||
tags:
|
||
- health
|
||
summary: 接流量就绪探测
|
||
operationId: gatewayReady
|
||
responses:
|
||
"200":
|
||
description: Gateway 可接新请求。
|
||
schema:
|
||
$ref: "#/definitions/HealthResponse"
|
||
"503":
|
||
description: Gateway 不应接新请求,失败详情在 `checks`。
|
||
schema:
|
||
$ref: "#/definitions/HealthResponse"
|
||
/api/v1/auth/account/login:
|
||
post:
|
||
tags:
|
||
- auth
|
||
summary: 账号密码登录
|
||
description: 账号就是用户当前有效短号。
|
||
operationId: loginAccountPassword
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/LoginPasswordRequest"
|
||
responses:
|
||
"200":
|
||
description: 登录成功,`data` 返回 token 集合。
|
||
schema:
|
||
$ref: "#/definitions/AuthTokenEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/auth/third-party/login:
|
||
post:
|
||
tags:
|
||
- auth
|
||
summary: 三方登录或注册
|
||
operationId: loginThirdParty
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/LoginThirdPartyRequest"
|
||
responses:
|
||
"200":
|
||
description: 登录或注册成功,`data` 返回 token 集合和 `is_new_user`。
|
||
schema:
|
||
$ref: "#/definitions/AuthTokenEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/auth/password/set:
|
||
post:
|
||
tags:
|
||
- auth
|
||
summary: 已登录用户首次设置密码
|
||
operationId: setPassword
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/SetPasswordRequest"
|
||
responses:
|
||
"200":
|
||
description: 密码设置成功。
|
||
schema:
|
||
$ref: "#/definitions/PasswordSetEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/auth/token/refresh:
|
||
post:
|
||
tags:
|
||
- auth
|
||
summary: 刷新 token
|
||
operationId: refreshToken
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/RefreshTokenRequest"
|
||
responses:
|
||
"200":
|
||
description: 刷新成功,`data` 返回新的 token 集合。
|
||
schema:
|
||
$ref: "#/definitions/AuthTokenEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/auth/logout:
|
||
post:
|
||
tags:
|
||
- auth
|
||
summary: 登出并失效 refresh session
|
||
operationId: logout
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/LogoutRequest"
|
||
responses:
|
||
"200":
|
||
description: 登出处理完成。
|
||
schema:
|
||
$ref: "#/definitions/LogoutEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/countries:
|
||
get:
|
||
tags:
|
||
- countries
|
||
summary: 获取 App 注册页可选国家
|
||
operationId: listRegistrationCountries
|
||
description: 公开读接口,只返回 user-service 判定的 `enabled=true` 国家,并按 `sort_order,country_code` 排序。
|
||
parameters:
|
||
responses:
|
||
"200":
|
||
description: 查询成功,`data.countries` 返回当前开放国家。
|
||
schema:
|
||
$ref: "#/definitions/CountryListEnvelope"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/app/bootstrap:
|
||
get:
|
||
tags:
|
||
- app-config
|
||
summary: 获取 App 启动配置摘要
|
||
operationId: getAppBootstrap
|
||
description: 公开读接口,只返回版本、维护、feature flags、底部 tab 和配置版本号,不返回 banner、礼物或资源大列表。
|
||
parameters:
|
||
responses:
|
||
"200":
|
||
description: 查询成功,`data` 返回 App 启动状态机需要的轻量配置摘要。
|
||
schema:
|
||
$ref: "#/definitions/AppBootstrapEnvelope"
|
||
/api/v1/app/version:
|
||
get:
|
||
tags:
|
||
- app-config
|
||
summary: 获取 App 最新版本信息
|
||
operationId: getAppVersion
|
||
description: 公开读接口,gateway 根据 App 平台返回后台 APP配置/版本管理 中最高 `build_number` 版本,并按客户端当前 `build_number` 计算是否需要提示更新。
|
||
parameters:
|
||
- name: platform
|
||
in: query
|
||
required: false
|
||
type: string
|
||
enum: [android, ios]
|
||
description: 可选平台覆盖值;不传时读取 `X-App-Platform` / `X-Platform`。
|
||
- name: build_number
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int64
|
||
description: 当前客户端编译版本号;不传时读取 `X-App-Build-Number` / `X-Build-Number`。
|
||
- name: X-App-Platform
|
||
in: header
|
||
required: false
|
||
type: string
|
||
enum: [android, ios]
|
||
- name: X-App-Build-Number
|
||
in: header
|
||
required: false
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
"200":
|
||
description: 查询成功,`data` 返回最新版本和更新判定。
|
||
schema:
|
||
$ref: "#/definitions/AppVersionEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/app/h5-links:
|
||
get:
|
||
tags:
|
||
- app-config
|
||
summary: 获取 App H5 入口地址
|
||
operationId: listAppH5Links
|
||
description: 公开读接口,返回后台管理系统 APP配置/H5配置 维护的 H5 地址。未配置 URL 的入口仍按固定 key 返回空字符串。
|
||
parameters:
|
||
responses:
|
||
"200":
|
||
description: 查询成功,`data.items` 返回固定 H5 入口集合。
|
||
schema:
|
||
$ref: "#/definitions/H5LinkListEnvelope"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/app/splash-screens:
|
||
get:
|
||
tags:
|
||
- app-config
|
||
summary: 获取 App 开屏配置
|
||
operationId: listSplashScreens
|
||
description: 公开读接口,返回后台 APP配置/开屏配置 中当前有效的开屏列表,客户端按列表顺序取最高优先级配置展示。
|
||
parameters:
|
||
- name: platform
|
||
in: query
|
||
required: false
|
||
type: string
|
||
enum: [android, ios]
|
||
description: 可选平台覆盖值;不传时读取 `X-App-Platform` / `X-Platform`。
|
||
- name: region_id
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int64
|
||
description: 当前用户区域 ID;0 或不传只命中全区域配置。
|
||
- name: country
|
||
in: query
|
||
required: false
|
||
type: string
|
||
description: 当前用户国家码;不传时读取 `X-Country-Code` / `X-App-Country`。
|
||
- name: X-App-Platform
|
||
in: header
|
||
required: false
|
||
type: string
|
||
enum: [android, ios]
|
||
- name: X-Country-Code
|
||
in: header
|
||
required: false
|
||
type: string
|
||
responses:
|
||
"200":
|
||
description: 查询成功,`data.items` 返回当前可展示的开屏配置。
|
||
schema:
|
||
$ref: "#/definitions/SplashScreenListEnvelope"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/app/popups:
|
||
get:
|
||
tags:
|
||
- app-config
|
||
summary: 获取 App 弹窗配置
|
||
operationId: listAppPopups
|
||
description: 公开读接口,返回后台 APP配置/弹窗配置 中当前有效的弹窗列表。客户端按列表顺序选择弹窗,并按 display_period_days 做本地展示频控。
|
||
parameters:
|
||
responses:
|
||
"200":
|
||
description: 查询成功,`data.items` 返回当前可展示的弹窗配置。
|
||
schema:
|
||
$ref: "#/definitions/PopupListEnvelope"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/im/usersig:
|
||
get:
|
||
tags:
|
||
- tencent-im
|
||
summary: 获取腾讯云 IM UserSig
|
||
operationId: issueTencentIMUserSig
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
responses:
|
||
"200":
|
||
description: 签发成功,`data.user_id` 使用内部长 `user_id` 的十进制字符串。
|
||
schema:
|
||
$ref: "#/definitions/TencentIMUserSigEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"500":
|
||
description: 腾讯云 IM SDKAppID、SecretKey 或 TTL 配置缺失,fail-closed。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
/api/v1/rtc/token:
|
||
post:
|
||
tags:
|
||
- tencent-rtc
|
||
summary: 获取腾讯 RTC 进房 UserSig
|
||
operationId: issueTencentRTCToken
|
||
description: |
|
||
gateway 使用 access token 中的内部 `user_id` 签发腾讯 RTC UserSig,并在签发前调用 room-service `VerifyRoomPresence`。
|
||
当前只支持 TRTC 字符串房间 `strRoomId`,客户端不能把 `room_id` 转成数字 `roomId`。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/TencentRTCTokenRequest"
|
||
responses:
|
||
"200":
|
||
description: 签发成功,`data.user_id` 和 `data.rtc_user_id` 都是内部长 `user_id` 的十进制字符串。
|
||
schema:
|
||
$ref: "#/definitions/TencentRTCTokenEnvelope"
|
||
"400":
|
||
description: "`room_id` 为空或不满足 `^[A-Za-z0-9_-]{1,48}$`。"
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
description: 用户不在房间、已被踢出或被封禁,gateway 不返回 UserSig。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"404":
|
||
description: room-service guard 返回 `room_not_found`。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"500":
|
||
description: 腾讯 RTC 未启用、SDKAppID、SecretKey、TTL 或固定策略配置缺失,fail-closed。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/tencent-rtc/callback:
|
||
post:
|
||
tags:
|
||
- tencent-rtc
|
||
summary: 腾讯 RTC 服务端事件回调
|
||
operationId: handleTencentRTCCallback
|
||
description: |
|
||
腾讯 RTC 控制台配置的房间/媒体事件回调入口。gateway 校验 `SdkAppId` 与 `Sign` 后,只消费房间退出 `104`、开始推送音频 `203`、停止推送音频 `204`。
|
||
该接口不使用业务 envelope;成功或可忽略业务错误返回 `{"code":0}`。
|
||
parameters:
|
||
- $ref: "#/parameters/TencentRTCSDKAppIDHeader"
|
||
- $ref: "#/parameters/TencentRTCSignHeader"
|
||
- name: app_code
|
||
in: query
|
||
required: false
|
||
type: string
|
||
description: 多 App 部署时建议把腾讯控制台回调 URL 配置为携带 `app_code`,用于 room-service 租户路由。
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/TencentRTCCallbackRequest"
|
||
responses:
|
||
"200":
|
||
description: 回调已接受,未知事件或不可恢复业务错误也按成功 ACK,避免无意义重试。
|
||
schema:
|
||
$ref: "#/definitions/TencentRTCCallbackResponse"
|
||
"400":
|
||
description: 回调 body 非法。
|
||
schema:
|
||
$ref: "#/definitions/TencentRTCCallbackResponse"
|
||
"403":
|
||
description: SDKAppID 不匹配或签名校验失败。
|
||
schema:
|
||
$ref: "#/definitions/TencentRTCCallbackResponse"
|
||
"500":
|
||
description: room-service 暂时不可用,返回非 200 让腾讯 RTC 按平台策略重试。
|
||
schema:
|
||
$ref: "#/definitions/TencentRTCCallbackResponse"
|
||
/api/v1/files/upload:
|
||
post:
|
||
tags:
|
||
- files
|
||
summary: 上传 App 通用文件
|
||
operationId: uploadFile
|
||
description: 上传到腾讯云 COS,返回可直接写入业务资料的公开访问 URL;该接口只要求已登录,不要求注册资料已完成。
|
||
consumes:
|
||
- multipart/form-data
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: file
|
||
in: formData
|
||
required: true
|
||
type: file
|
||
description: 文件字段;单文件最大 20 MiB。
|
||
responses:
|
||
"200":
|
||
description: 上传成功,`data.url` 为 `tencent-cos.access-url` 下的对象访问地址。
|
||
schema:
|
||
$ref: "#/definitions/UploadFileEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/files/avatar/upload:
|
||
post:
|
||
tags:
|
||
- files
|
||
summary: 上传用户头像
|
||
operationId: uploadAvatar
|
||
description: 上传头像到腾讯云 COS;服务端按文件头嗅探,只接受 JPEG、PNG、WebP,单文件最大 5 MiB。
|
||
consumes:
|
||
- multipart/form-data
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: file
|
||
in: formData
|
||
required: true
|
||
type: file
|
||
description: 头像文件字段,也兼容字段名 `avatar`。
|
||
responses:
|
||
"200":
|
||
description: 上传成功,`data.url` 可作为注册资料或用户资料里的 `avatar`。
|
||
schema:
|
||
$ref: "#/definitions/UploadFileEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/devices/push-token:
|
||
post:
|
||
tags:
|
||
- devices
|
||
summary: 绑定设备推送 token
|
||
operationId: bindPushToken
|
||
description: 资料完成后由客户端上报系统推送 token;gateway 只使用 access token 中的用户身份,user-service 负责落库。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/BindPushTokenRequest"
|
||
responses:
|
||
"200":
|
||
description: 绑定成功。
|
||
schema:
|
||
$ref: "#/definitions/BindPushTokenEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
delete:
|
||
tags:
|
||
- devices
|
||
summary: 删除设备推送 token
|
||
operationId: deletePushToken
|
||
description: 登出、关闭通知或 token 失效时调用;`push_token` 可为空,为空时按当前用户和 `device_id` 失效。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/DeletePushTokenRequest"
|
||
responses:
|
||
"200":
|
||
description: 删除或失效处理完成。
|
||
schema:
|
||
$ref: "#/definitions/DeletePushTokenEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/tencent-im/callback:
|
||
post:
|
||
tags:
|
||
- tencent-im
|
||
summary: 腾讯云 IM 服务端回调
|
||
operationId: handleTencentIMCallback
|
||
description: |
|
||
该接口不使用项目业务 envelope,直接返回腾讯云 IM 要求的 `ActionStatus/ErrorCode/ErrorInfo`。
|
||
当前支持入群前守卫 `Group.CallbackBeforeApplyJoinGroup` 和发言前守卫 `Group.CallbackBeforeSendMsg`。
|
||
白名单外回调在通过来源校验和 SDKAppID 校验后返回允许,避免阻断腾讯云新增回调。
|
||
parameters:
|
||
- $ref: "#/parameters/TencentIMSDKAppID"
|
||
- $ref: "#/parameters/TencentIMCallbackCommand"
|
||
- $ref: "#/parameters/TencentIMCallbackAuthToken"
|
||
- $ref: "#/parameters/TencentIMCallbackTokenHeader"
|
||
- name: body
|
||
in: body
|
||
required: false
|
||
schema:
|
||
$ref: "#/definitions/TencentIMCallbackRequest"
|
||
responses:
|
||
"200":
|
||
description: 腾讯云 IM 回调处理结果;业务拒绝也返回 HTTP 200,通过 `ErrorCode=1` 表示拒绝。
|
||
schema:
|
||
$ref: "#/definitions/TencentIMCallbackResponse"
|
||
"405":
|
||
description: 非 POST 请求会返回腾讯云原生结构,`ErrorCode=1`。
|
||
schema:
|
||
$ref: "#/definitions/TencentIMCallbackResponse"
|
||
/api/v1/users/by-display-user-id/{display_user_id}:
|
||
get:
|
||
tags:
|
||
- users
|
||
summary: 通过当前展示短号解析用户
|
||
operationId: resolveDisplayUserID
|
||
parameters:
|
||
- $ref: "#/parameters/DisplayUserIDPath"
|
||
responses:
|
||
"200":
|
||
description: 解析成功,`data` 返回短号归属。
|
||
schema:
|
||
$ref: "#/definitions/UserIdentityEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/profiles:batch:
|
||
get:
|
||
tags:
|
||
- users
|
||
summary: 批量查询会话展示资料
|
||
operationId: batchUserProfiles
|
||
description: 用于腾讯云 IM 会话列表补头像、昵称和短号;只返回展示字段,不返回登录、实名或后台身份信息。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: user_ids
|
||
in: query
|
||
required: true
|
||
type: string
|
||
description: 逗号分隔或重复传入的用户 ID,最多 100 个。
|
||
responses:
|
||
"200":
|
||
description: 查询成功。
|
||
schema:
|
||
$ref: "#/definitions/UserProfilesBatchEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/me/identity:
|
||
get:
|
||
tags:
|
||
- users
|
||
summary: 查询当前用户展示短号状态
|
||
operationId: getMyIdentity
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
responses:
|
||
"200":
|
||
description: 查询成功,`data` 返回当前用户短号状态。
|
||
schema:
|
||
$ref: "#/definitions/UserIdentityEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/me/host-identity:
|
||
get:
|
||
tags:
|
||
- users
|
||
summary: 查询当前用户 Host/Agency/BD 身份
|
||
operationId: getMyHostIdentity
|
||
description: App 用于判断是否展示 H5 入口;不存在的身份返回 false,不按 404 处理。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
responses:
|
||
"200":
|
||
description: 查询成功,`data` 返回当前用户身份开关。
|
||
schema:
|
||
$ref: "#/definitions/UserHostIdentityEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/me/overview:
|
||
get:
|
||
tags:
|
||
- users
|
||
summary: 我的页首屏聚合摘要
|
||
operationId: getMyOverview
|
||
description: 聚合当前用户资料、顶部计数、金币钱包卡片、VIP、Host/Agency/BD/币商身份和入口显隐。该接口不查消息红点、邀请码、钻石、美元余额、流水、成员或工资;钱包、VIP、计数和角色上游失败时按字段 `unavailable=true` 局部降级。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
responses:
|
||
"200":
|
||
description: 查询成功,`data` 返回我的页首屏渲染摘要。
|
||
schema:
|
||
$ref: "#/definitions/MyOverviewEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/me/invite-overview:
|
||
get:
|
||
tags:
|
||
- users
|
||
summary: 查询当前用户邀请概览
|
||
operationId: getMyInviteOverview
|
||
description: 返回当前登录用户自己的邀请码和邀请计数;该接口只服务私有 H5 分享页,不并入我的页首屏聚合摘要。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
responses:
|
||
"200":
|
||
description: 查询成功,`data` 返回当前用户邀请概览。
|
||
schema:
|
||
$ref: "#/definitions/MyInviteOverviewEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/me/onboarding/complete:
|
||
post:
|
||
tags:
|
||
- users
|
||
summary: 完成注册页必填资料
|
||
operationId: completeMyOnboarding
|
||
description: 三方登录即注册后唯一资料提交入口;`username/avatar/gender/country` 在 user-service 同事务校验并写入。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/CompleteOnboardingRequest"
|
||
responses:
|
||
"200":
|
||
description: 注册资料完成,`data.profile_completed=true`,`data.token.access_token` 是替换旧 JWT 的新 access token。
|
||
schema:
|
||
$ref: "#/definitions/CompleteOnboardingEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/me/profile/update:
|
||
post:
|
||
tags:
|
||
- users
|
||
summary: 修改当前用户基础资料
|
||
operationId: updateMyProfile
|
||
description: 只修改 `username`、`avatar`、`birth`;主页背景图和国家修改都走独立接口。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/UpdateUserProfileRequest"
|
||
responses:
|
||
"200":
|
||
description: 修改成功,`data` 返回最新用户资料。
|
||
schema:
|
||
$ref: "#/definitions/UserProfileEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/me/profile-bg-img:
|
||
post:
|
||
tags:
|
||
- users
|
||
summary: 修改当前用户主页背景图
|
||
operationId: updateMyProfileBackground
|
||
description: App 先自行上传图片,本接口只接收图片 URL 并保存到 `profile_bg_img`,和背包、`profile_card`、佩戴无关。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/UpdateUserProfileBackgroundRequest"
|
||
responses:
|
||
"200":
|
||
description: 修改成功,`data.profile_bg_img` 返回最新背景图 URL。
|
||
schema:
|
||
$ref: "#/definitions/UpdateUserProfileBackgroundEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/me/country/change:
|
||
post:
|
||
tags:
|
||
- users
|
||
summary: 修改当前用户国家
|
||
operationId: changeMyCountry
|
||
description: 国家修改单独写变更日志;同一用户按滚动 30 天冷却窗口只能成功修改一次。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/ChangeUserCountryRequest"
|
||
responses:
|
||
"200":
|
||
description: 修改成功,`data.next_country_change_allowed_at_ms` 返回下一次可修改时间。
|
||
schema:
|
||
$ref: "#/definitions/UserProfileEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/me/display-id/change:
|
||
post:
|
||
tags:
|
||
- users
|
||
summary: 修改当前用户默认短号
|
||
operationId: changeMyDisplayUserID
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/ChangeDisplayUserIDRequest"
|
||
responses:
|
||
"200":
|
||
description: 修改成功,`data` 返回最新短号状态。
|
||
schema:
|
||
$ref: "#/definitions/UserIdentityEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/me/display-id/pretty/apply:
|
||
post:
|
||
tags:
|
||
- users
|
||
summary: 申请临时靓号
|
||
operationId: applyMyPrettyDisplayUserID
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/ApplyPrettyDisplayUserIDRequest"
|
||
responses:
|
||
"200":
|
||
description: 申请成功,`data` 返回最新短号状态和租约 ID。
|
||
schema:
|
||
$ref: "#/definitions/UserIdentityEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/{user_id}/visit:
|
||
post:
|
||
tags:
|
||
- users
|
||
summary: 记录一次主页访问并返回目标资料展示状态
|
||
operationId: recordProfileVisit
|
||
description: >-
|
||
匿名身份在写入时按访问者当时生效的 anonymous_profile_visit 权益与开关固化;历史记录不会因开关变化反向改名。
|
||
目标用户当前 hide_profile_data 生效时返回 target_stats_hidden=true,并完全省略 target_stats。
|
||
当前 App 访问链路无好友或管理员白名单,所有非本人查看者使用同一隐藏结论。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: user_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
pattern: "^[1-9][0-9]*$"
|
||
description: 被访问用户的系统 user_id,不是展示短号。
|
||
responses:
|
||
"200":
|
||
description: 访问事实已写入或命中同一访客聚合记录。
|
||
schema:
|
||
$ref: "#/definitions/ProfileVisitEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
description: 极低概率的匿名展示 ID 碰撞,code=CONFLICT;本次事务已回滚,不会降级写入公开访问记录。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/me/visitors:
|
||
get:
|
||
tags:
|
||
- users
|
||
summary: 查询访问我的主页的公开与匿名访客
|
||
operationId: listMyProfileVisitors
|
||
description: 匿名记录只返回 anonymous_visit_id,省略真实 visitor_user_id;anonymous_visit_id 仅在同一目标用户下稳定,不能用于资料查询。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: page
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
default: 1
|
||
minimum: 1
|
||
maximum: 100
|
||
- name: page_size
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
default: 20
|
||
minimum: 1
|
||
maximum: 100
|
||
responses:
|
||
"200":
|
||
description: 查询成功,公开和匿名记录按最后访问时间统一排序、分别聚合。
|
||
schema:
|
||
$ref: "#/definitions/ProfileVisitorListEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/me/appearance:
|
||
get:
|
||
tags:
|
||
- users
|
||
- resources
|
||
summary: 查询当前用户已佩戴外观资源
|
||
operationId: getMyAppearance
|
||
description: >-
|
||
返回 wallet 已过滤过期状态后的当前佩戴快照。mic_seat_animation.format 只来自资源 metadata_json 的显式
|
||
format/animation_format;字段缺省表示格式未配置,客户端不得从素材 URL 后缀推断。
|
||
security:
|
||
- BearerAuth: []
|
||
responses:
|
||
"200":
|
||
description: 查询成功;没有佩戴的单资源槽位返回空对象。
|
||
schema:
|
||
$ref: "#/definitions/AppearanceEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/by-id/{user_id}/appearance:
|
||
get:
|
||
tags:
|
||
- users
|
||
- resources
|
||
summary: 查询指定用户的公开已佩戴外观资源
|
||
operationId: getUserAppearance
|
||
description: 房间外用户资料展示入口;返回结构与当前用户 appearance 相同,不返回未佩戴或已过期资源。
|
||
parameters:
|
||
- name: user_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
pattern: "^[1-9][0-9]*$"
|
||
responses:
|
||
"200":
|
||
description: 查询成功。
|
||
schema:
|
||
$ref: "#/definitions/AppearanceEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/filters:
|
||
get:
|
||
tags:
|
||
- rooms
|
||
summary: 首页房间区域与国家筛选目录
|
||
operationId: listRoomFilters
|
||
description: >-
|
||
返回可直接用于房间发现列表的筛选项。每个 option 的 query_key/query_value 可原样作为
|
||
GET /api/v1/rooms 的查询参数;All 的两个字段为空,表示不附加 region_id/country_code。
|
||
Huwaa 返回当前 app scope 的全部 active 区域及其 enabled 国家,其他 App 只返回当前登录用户所在 active 区域,防止下发不可用的跨区选项。
|
||
该路由要求 access token 有效且用户资料已完成;资料未完成返回 403/PROFILE_REQUIRED。
|
||
security:
|
||
- BearerAuth: []
|
||
responses:
|
||
"200":
|
||
description: 查询成功;国家项只包含 enabled 国家与 active 区域映射的交集。
|
||
schema:
|
||
$ref: "#/definitions/RoomFilterCatalogEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms:
|
||
get:
|
||
tags:
|
||
- rooms
|
||
summary: 房间发现列表
|
||
operationId: listRooms
|
||
description: >-
|
||
Huwaa 不传 region_id/country_code 时查询 All,传 region_id 时查指定 active 区域,传 country_code 时查指定 enabled 国家,两者互斥。
|
||
非 Huwaa App 仍按当前登录用户的服务端 region_id 隔离,不接受客户端 region_id。
|
||
置顶之后的普通房依次是本国家有人、其他国家/区域有人、本国家没人、其他国家/区域没人。
|
||
响应卡片显式返回 im_group_id,当前值等于 room_id,但客户端不能硬编码该映射。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: tab
|
||
in: query
|
||
required: false
|
||
type: string
|
||
enum:
|
||
- hot
|
||
- new
|
||
- name: cursor
|
||
in: query
|
||
required: false
|
||
type: string
|
||
- name: limit
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
- name: q
|
||
in: query
|
||
required: false
|
||
type: string
|
||
description: 房间标题或用户 ID 搜索词;`query` 是兼容别名。
|
||
- name: query
|
||
in: query
|
||
required: false
|
||
type: string
|
||
- name: region_id
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int64
|
||
minimum: 1
|
||
description: Huwaa 区域筛选;必须原样使用 `/api/v1/rooms/filters` 的 active `region_id`,不得与 `country_code` 同传。
|
||
- name: country_code
|
||
in: query
|
||
required: false
|
||
type: string
|
||
description: Huwaa 国家筛选;必须原样使用 `/api/v1/rooms/filters` 的 enabled 大写国家码,不得与 `region_id` 同传。
|
||
- name: country
|
||
in: query
|
||
required: false
|
||
type: string
|
||
description: 旧客户端兼容别名,等价于 `country_code`;新客户端统一使用 `country_code`。
|
||
responses:
|
||
"200":
|
||
description: 查询成功,`data.rooms[*].im_group_id` 是 JoinRoom 成功后客户端加入的腾讯 IM 房间群 ID。
|
||
schema:
|
||
$ref: "#/definitions/RoomListEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/feeds:
|
||
get:
|
||
tags:
|
||
- rooms
|
||
summary: Mine 房间关系流
|
||
operationId: listRoomFeeds
|
||
description: 查询 Mine 页下方 Visited/Friend/Following/Followed 房间流;`visited` 读取 JoinRoom 写入的房间访问索引,`friend/following` 由 gateway 先读取 user-service 关系事实,`followed` 读取 room-service 房间关注关系,再让 room-service 返回 active 房间卡片和 `im_group_id`,不作为公共房间发现列表。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: tab
|
||
in: query
|
||
required: true
|
||
type: string
|
||
enum:
|
||
- visited
|
||
- friend
|
||
- following
|
||
- followed
|
||
- name: cursor
|
||
in: query
|
||
required: false
|
||
type: string
|
||
- name: limit
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
responses:
|
||
"200":
|
||
description: 查询成功;`visited` 由 JoinRoom 成功写入,`friend/following` 同步使用 user-service 好友/关注关系,`followed` 同步使用 room-service 房间关注关系,不依赖 Redis 缓存命中。
|
||
schema:
|
||
$ref: "#/definitions/RoomListEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/me:
|
||
get:
|
||
tags:
|
||
- rooms
|
||
summary: 查询我的房间卡片
|
||
operationId: getMyRoom
|
||
description: Mine 顶部“我的房间”权威查询;gateway 使用 access token user_id,room-service 直接读取 rooms 元数据并用 Room Cell 快照补齐卡片字段,不依赖发现页 `room_list_entries` 投影命中。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
responses:
|
||
"200":
|
||
description: 查询成功,`data.has_room=false` 表示当前用户尚未创建房间;有房间时 `data.room.im_group_id` 显式返回腾讯 IM 房间群 ID。
|
||
schema:
|
||
$ref: "#/definitions/MyRoomEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/current:
|
||
get:
|
||
tags:
|
||
- rooms
|
||
summary: 查询当前可恢复房间
|
||
operationId: getCurrentRoom
|
||
description: App 启动、回前台或网络恢复时调用;gateway 使用 access token user_id,room-service 用 presence 读模型和 Room Cell 快照二次校验,不会隐式 JoinRoom。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
responses:
|
||
"200":
|
||
description: 查询成功,`data.has_current_room=false` 表示无需恢复。
|
||
schema:
|
||
$ref: "#/definitions/CurrentRoomEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/snapshot:
|
||
get:
|
||
tags:
|
||
- rooms
|
||
summary: 查询房间完整快照
|
||
operationId: getRoomSnapshot
|
||
description: 房间页主动同步当前 Room Cell 快照;只读,不刷新 heartbeat,不隐式 JoinRoom。gateway 使用 access token user_id 作为 viewer,room-service 要求 viewer 仍在该房间。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: room_id
|
||
in: query
|
||
required: true
|
||
type: string
|
||
pattern: "^[A-Za-z0-9_-]{1,48}$"
|
||
maxLength: 48
|
||
responses:
|
||
"200":
|
||
description: 查询成功,`data.room` 返回完整房间快照。
|
||
schema:
|
||
$ref: "#/definitions/RoomSnapshotEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/{room_id}/detail:
|
||
get:
|
||
tags:
|
||
- rooms
|
||
summary: 查询房间详情最终快照
|
||
operationId: getRoomDetail
|
||
description: 房间首屏、IM 断线重连和版本断层时的权威恢复入口;返回当前背景、房间边框和彩色房名最终态,不依赖历史 IM 是否到达。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: room_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
pattern: "^[A-Za-z0-9_-]{1,48}$"
|
||
maxLength: 48
|
||
responses:
|
||
"200":
|
||
description: 查询成功;`data.room.active_background/room_border/room_name_style` 缺省表示当前没有对应有效素材。
|
||
schema:
|
||
$ref: "#/definitions/RoomDetailEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/{room_id}/banned-users:
|
||
get:
|
||
tags:
|
||
- rooms
|
||
summary: 查询房间黑名单列表
|
||
operationId: listRoomBannedUsers
|
||
description: 房主或房管分页查看当前仍有效的房间踢人列表;已过期和已解封用户不返回。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: room_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
pattern: "^[A-Za-z0-9_-]{1,48}$"
|
||
maxLength: 48
|
||
- name: page
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
default: 1
|
||
- name: page_size
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
default: 20
|
||
responses:
|
||
"200":
|
||
description: 返回房间当前仍有效的黑名单用户及展示资料。
|
||
schema:
|
||
$ref: "#/definitions/RoomBannedUsersEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/{room_id}/contribution-rank:
|
||
get:
|
||
tags:
|
||
- rooms
|
||
summary: 查询房内用户贡献周期榜
|
||
operationId: getRoomContributionRank
|
||
description: 房间内 day/week/month 三个 tab 使用的用户贡献榜;gateway 使用 access token user_id 作为 viewer,room-service 要求 viewer 仍在该房间。查询只读周期统计表,不刷新 presence。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: room_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
pattern: "^[A-Za-z0-9_-]{1,48}$"
|
||
maxLength: 48
|
||
- name: period
|
||
in: query
|
||
required: false
|
||
type: string
|
||
default: day
|
||
enum:
|
||
- day
|
||
- week
|
||
- month
|
||
- name: limit
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
default: 20
|
||
minimum: 1
|
||
maximum: 100
|
||
responses:
|
||
"200":
|
||
description: 返回当前房间指定周期的用户贡献榜和榜单用户展示资料。
|
||
schema:
|
||
$ref: "#/definitions/RoomContributionRankEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/{room_id}/follow:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 关注房间
|
||
operationId: followRoom
|
||
description: 使用 access token user_id 建立当前用户对房间的关注关系;重复关注幂等,`followed_at_ms` 不因重复点击刷新。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: room_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
pattern: "^[A-Za-z0-9_-]{1,48}$"
|
||
maxLength: 48
|
||
responses:
|
||
"200":
|
||
description: 关注成功,`data.is_followed=true`。
|
||
schema:
|
||
$ref: "#/definitions/RoomFollowEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
delete:
|
||
tags:
|
||
- rooms
|
||
summary: 取消关注房间
|
||
operationId: unfollowRoom
|
||
description: 使用 access token user_id 取消当前用户对房间的关注关系;未关注时按幂等成功返回 `is_followed=false`。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: room_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
pattern: "^[A-Za-z0-9_-]{1,48}$"
|
||
maxLength: 48
|
||
responses:
|
||
"200":
|
||
description: 取消成功,`data.is_followed=false`。
|
||
schema:
|
||
$ref: "#/definitions/RoomFollowEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/create:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 创建房间
|
||
operationId: createRoom
|
||
description: |
|
||
gateway 从 access token 取当前 `user_id` 写入 room-service `RequestMeta.actor_user_id`,room-service 由该 actor 确定 owner。
|
||
请求体不接收 `room_id` 或 `owner_user_id`;`command_id` 由客户端按创建动作生成,gateway 生成内部 room_id。
|
||
room-service 会在返回前同步确保腾讯 IM 房间群存在;创建成功后 `data.room.im_group_id` 可直接用于 JoinRoom 成功后的腾讯 IM SDK joinGroup。
|
||
同一个登录用户只能作为 owner 创建一个房间;已有房间时返回 409 Conflict。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/CreateRoomRequest"
|
||
responses:
|
||
"200":
|
||
description: 创建成功,`data` 返回房间首屏基础数据和已存在的腾讯 IM 群 ID。
|
||
schema:
|
||
$ref: "#/definitions/CreateRoomEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/profile/update:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 修改房间资料和座位数
|
||
operationId: updateRoomProfile
|
||
description: |
|
||
App 房主在房间内修改房间名、头像、简介和座位数。所有状态变更经过 room-service Room Cell;缩小座位数时,被删除的高编号麦位必须全部空闲且未锁。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/UpdateRoomProfileRequest"
|
||
responses:
|
||
"200":
|
||
description: 修改成功,`data` 返回最新房间信息和麦位列表。
|
||
schema:
|
||
$ref: "#/definitions/UpdateRoomProfileEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/join:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 加入房间
|
||
operationId: joinRoom
|
||
description: JoinRoom 是业务 presence、IM 入群和 RTC 进房的权限分界点。成功后响应返回首屏房间数据、`im.group_id` 和内嵌 `rtc.token`;RTC 签发失败时仍返回房间数据,并设置 `rtc.available=false`。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/JoinRoomRequest"
|
||
responses:
|
||
"200":
|
||
description: 加入成功,`data` 返回首屏初始化数据和可选 RTC token。
|
||
schema:
|
||
$ref: "#/definitions/JoinRoomEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/heartbeat:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 刷新房间业务 presence
|
||
operationId: roomHeartbeat
|
||
description: 心跳只刷新已经存在的房间 presence;用户不在房间时返回 404,不会隐式 JoinRoom。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/RoomHeartbeatRequest"
|
||
responses:
|
||
"200":
|
||
description: 心跳成功,`data` 返回刷新后的用户房间态和房间快照。
|
||
schema:
|
||
$ref: "#/definitions/RoomHeartbeatEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/leave:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 离开房间
|
||
operationId: leaveRoom
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/LeaveRoomRequest"
|
||
responses:
|
||
"200":
|
||
description: 离房成功,`data` 返回最新房间快照。
|
||
schema:
|
||
$ref: "#/definitions/LeaveRoomEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/mic/up:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 上麦
|
||
operationId: micUp
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/MicUpRequest"
|
||
responses:
|
||
"200":
|
||
description: 上麦成功,`data` 返回目标麦位和最新房间快照。
|
||
schema:
|
||
$ref: "#/definitions/MicUpEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/mic/down:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 下麦
|
||
operationId: micDown
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/MicDownRequest"
|
||
responses:
|
||
"200":
|
||
description: 下麦成功,`data` 返回目标麦位和最新房间快照。
|
||
schema:
|
||
$ref: "#/definitions/MicDownEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/mic/change:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 调整麦位
|
||
operationId: changeMicSeat
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/ChangeMicSeatRequest"
|
||
responses:
|
||
"200":
|
||
description: 调整成功,`data` 返回最新房间快照。
|
||
schema:
|
||
$ref: "#/definitions/ChangeMicSeatEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/mic/publishing/confirm:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 确认 RTC 音频发布成功
|
||
operationId: confirmMicPublishing
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/ConfirmMicPublishingRequest"
|
||
responses:
|
||
"200":
|
||
description: 确认成功或旧事件被安全忽略,`data` 返回最新房间快照。
|
||
schema:
|
||
$ref: "#/definitions/ConfirmMicPublishingEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/mic/lock:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 锁定或解锁麦位
|
||
operationId: setMicSeatLock
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/SetMicSeatLockRequest"
|
||
responses:
|
||
"200":
|
||
description: 锁麦状态修改成功,`data` 返回最新房间快照。
|
||
schema:
|
||
$ref: "#/definitions/SetMicSeatLockEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/chat/enabled:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 开启或关闭房间公屏
|
||
operationId: setChatEnabled
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/SetChatEnabledRequest"
|
||
responses:
|
||
"200":
|
||
description: 公屏开关修改成功,`data` 返回最新房间快照。
|
||
schema:
|
||
$ref: "#/definitions/SetChatEnabledEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/password:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 设置或清空房间密码
|
||
operationId: setRoomPassword
|
||
description: 仅房主可调用。`locked=true` 时 `password` 必须非空;`locked=false` 清空密码并解除锁房。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/SetRoomPasswordRequest"
|
||
responses:
|
||
"200":
|
||
description: 密码状态修改成功,`data.room.locked` 返回最新锁房标识。
|
||
schema:
|
||
$ref: "#/definitions/SetRoomPasswordEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/admin/set:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 添加或移除房间管理员
|
||
operationId: setRoomAdmin
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/SetRoomAdminRequest"
|
||
responses:
|
||
"200":
|
||
description: 管理员集合修改成功,`data` 返回最新房间快照。
|
||
schema:
|
||
$ref: "#/definitions/SetRoomAdminEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/user/mute:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 设置房间内禁言
|
||
operationId: muteUser
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/MuteUserRequest"
|
||
responses:
|
||
"200":
|
||
description: 禁言状态修改成功,`data` 返回最新房间快照。
|
||
schema:
|
||
$ref: "#/definitions/MuteUserEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/user/kick:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 踢出房间用户
|
||
operationId: kickUser
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/KickUserRequest"
|
||
responses:
|
||
"200":
|
||
description: 踢人成功,`data` 返回最新房间快照。
|
||
schema:
|
||
$ref: "#/definitions/KickUserEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/user/unban:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 解除房间 ban
|
||
operationId: unbanUser
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/UnbanUserRequest"
|
||
responses:
|
||
"200":
|
||
description: 解封成功,`data` 返回最新房间快照,不自动恢复 presence、麦位或管理员身份。
|
||
schema:
|
||
$ref: "#/definitions/UnbanUserEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/gift/send:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 发送礼物
|
||
operationId: sendGift
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/SendGiftRequest"
|
||
responses:
|
||
"200":
|
||
description: 送礼成功,`data` 返回账单凭证、热度、本地礼物榜和房间快照。
|
||
schema:
|
||
$ref: "#/definitions/SendGiftEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/{room_id}/backgrounds:
|
||
get:
|
||
tags:
|
||
- rooms
|
||
summary: 查询房间已保存背景与当前生效背景
|
||
operationId: listRoomBackgrounds
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: room_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
responses:
|
||
"200":
|
||
description: 查询成功;selected_background 返回完整可信媒体快照。
|
||
schema:
|
||
$ref: "#/definitions/RoomBackgroundListEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/{room_id}/backgrounds/upload:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 校验权益后上传房间背景媒体
|
||
operationId: uploadRoomBackground
|
||
description: 只接受文件头、multipart MIME 和扩展名一致的 JPEG/PNG/GIF/WebP;APNG 不支持。上传不改变房间背景。
|
||
consumes:
|
||
- multipart/form-data
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: room_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
- name: command_id
|
||
in: formData
|
||
required: true
|
||
type: string
|
||
maxLength: 128
|
||
description: 本次“上传并保存背景”的业务幂等键;后续 save 复用同一个值。
|
||
- name: file
|
||
in: formData
|
||
required: true
|
||
type: file
|
||
description: 最大 12MiB;宽不超过 2160、高不超过 3840、总像素不超过 8294400;动画最多 120 帧且最长 15 秒。
|
||
responses:
|
||
"200":
|
||
description: 对象已上传,返回后续保存必须原样提交的 media。
|
||
schema:
|
||
$ref: "#/definitions/RoomMediaUploadEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
description: 非房主,或缺少 custom_room_background;后者返回 VIP_BENEFIT_REQUIRED,data.action=upload_room_background。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"413":
|
||
description: 文件超过 12MiB,code=FILE_TOO_LARGE。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"415":
|
||
description: 文件签名、MIME 或扩展名不一致,code=UNSUPPORTED_MEDIA_TYPE。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"409":
|
||
description: 同一 command_id 更换文件,或房间已关闭;更换文件时 code=IDEMPOTENCY_CONFLICT。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
"503":
|
||
description: 上传依赖未配置。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
/api/v1/rooms/backgrounds/save:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 把专用上传结果保存为房间背景素材
|
||
operationId: saveRoomBackground
|
||
description: Fami 必须提交 command_id 与完整 media;Lalu legacy_timed 继续兼容历史 image_url-only 请求。该动作不切换背景、不发 IM。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/SaveRoomBackgroundRequest"
|
||
responses:
|
||
"200":
|
||
description: 保存成功或命中同 command_id 的相同素材。
|
||
schema:
|
||
$ref: "#/definitions/SaveRoomBackgroundEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
description: 非房主,或 Fami 缺少 custom_room_background;后者返回 data.action=save_room_background。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/backgrounds/set:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 在 Room Cell 中切换当前房间背景
|
||
operationId: setRoomBackground
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/SetRoomBackgroundRequest"
|
||
responses:
|
||
"200":
|
||
description: 切换成功或幂等重放;随后异步投递 room_background_changed。
|
||
schema:
|
||
$ref: "#/definitions/SetRoomBackgroundEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
description: 非房主,或 Fami 缺少 custom_room_background;后者返回 data.action=set_room_background。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/{room_id}/decorations/apply:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 应用房间边框或彩色房名资源
|
||
operationId: applyRoomDecoration
|
||
description: 房主专用;wallet 会同时复验当前 VIP benefit、对应 resource_id 和有效 entitlement,再由 Room Cell 固化快照。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: room_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/ApplyRoomDecorationRequest"
|
||
responses:
|
||
"200":
|
||
description: 应用成功或幂等重放;随后异步投递 room_decoration_changed。
|
||
schema:
|
||
$ref: "#/definitions/ApplyRoomDecorationEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
description: 非房主或对应 VIP 权益未生效;VIP 拒绝包含结构化 data。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/rooms/{room_id}/messages/images/upload:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 校验发言权限与 VIP 权益后上传房间图片
|
||
operationId: uploadRoomImage
|
||
description: 只接受 JPEG/PNG/GIF/WebP;上传前校验房间 active、用户仍在房、未 ban/禁言、公屏开启且 room_image_message 生效。
|
||
consumes:
|
||
- multipart/form-data
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: room_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
- name: command_id
|
||
in: formData
|
||
required: true
|
||
type: string
|
||
maxLength: 128
|
||
description: 本次“上传并发送图片”的业务幂等键;后续 send 复用同一个值。
|
||
- name: file
|
||
in: formData
|
||
required: true
|
||
type: file
|
||
description: 最大 8MiB;宽高各不超过 4096、总像素不超过 16777216;动画最多 120 帧且最长 15 秒。
|
||
responses:
|
||
"200":
|
||
description: 对象已上传,返回发送接口必须原样提交的 media。
|
||
schema:
|
||
$ref: "#/definitions/RoomMediaUploadEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
description: 不在房、已 ban/禁言,或缺少 room_image_message;VIP 拒绝包含结构化 data。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"413":
|
||
description: 文件超过 8MiB,code=FILE_TOO_LARGE。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"415":
|
||
description: 文件签名、MIME 或扩展名不一致,code=UNSUPPORTED_MEDIA_TYPE。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
"503":
|
||
description: 上传依赖未配置。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
/api/v1/rooms/{room_id}/messages/image:
|
||
post:
|
||
tags:
|
||
- rooms
|
||
summary: 通过 Room Cell 与 durable outbox 发送房间图片
|
||
operationId: sendRoomImage
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: room_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/SendRoomImageRequest"
|
||
responses:
|
||
"200":
|
||
description: 发送事实已提交;accepted=true 不代表腾讯云 IM 已到达所有客户端。
|
||
schema:
|
||
$ref: "#/definitions/SendRoomImageEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
description: 发言权限或 room_image_message 权益未生效;VIP 拒绝包含结构化 data。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/vip/me:
|
||
get:
|
||
tags:
|
||
- vip
|
||
summary: 查询当前用户的付费、体验卡与最终生效 VIP 状态
|
||
operationId: getMyVIP
|
||
description: Flutter 必须以 state.effective_vip 和 state.effective_benefits 授权展示;根层 level/name/active 仅保留旧客户端兼容。
|
||
security:
|
||
- BearerAuth: []
|
||
responses:
|
||
"200":
|
||
description: 查询成功。
|
||
schema:
|
||
$ref: "#/definitions/VIPMeEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/vip/packages:
|
||
get:
|
||
tags:
|
||
- vip
|
||
summary: 查询当前 App 可购买 VIP 套餐和每级完整权益
|
||
operationId: listVIPPackages
|
||
description: >-
|
||
benefits[].resource 只有在 resource_id 指向同 App、active 且 resource_type 匹配的真实资源时返回;
|
||
为空时客户端不得根据 resource_id 或权益名拼接素材 URL。套餐目录不代表用户已经拥有权益。
|
||
security:
|
||
- BearerAuth: []
|
||
responses:
|
||
"200":
|
||
description: 查询成功;Fami program_type=tiered_privilege_v1,Lalu 保持 legacy_timed。
|
||
schema:
|
||
$ref: "#/definitions/VIPPackageListEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/vip/purchase:
|
||
post:
|
||
tags:
|
||
- vip
|
||
summary: 购买、同级续期或升级 VIP
|
||
operationId: purchaseVIP
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/VIPPurchaseRequest"
|
||
responses:
|
||
"200":
|
||
description: 购买成功;客户端用 data.state 原子替换 VIP store,并用 coin_balance 替换 COIN 余额。
|
||
schema:
|
||
$ref: "#/definitions/VIPPurchaseEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/vip/trial-cards/{entitlement_id}/equip:
|
||
post:
|
||
tags:
|
||
- vip
|
||
summary: 佩戴一张 VIP 体验卡
|
||
operationId: equipVIPTrialCard
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: entitlement_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
description: 背包权益实例 ID;不能用 resource_id 代替。
|
||
responses:
|
||
"200":
|
||
description: 佩戴成功;客户端使用返回 state,不自行合并付费 VIP。
|
||
schema:
|
||
$ref: "#/definitions/VIPTrialCardMutationEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/vip/trial-cards/equipped:
|
||
delete:
|
||
tags:
|
||
- vip
|
||
summary: 卸下当前 VIP 体验卡
|
||
operationId: unequipVIPTrialCard
|
||
security:
|
||
- BearerAuth: []
|
||
responses:
|
||
"200":
|
||
description: 卸下成功或当前无卡;卡实例和绝对到期时间不会被删除。
|
||
schema:
|
||
$ref: "#/definitions/VIPTrialCardMutationEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/vip/settings:
|
||
get:
|
||
tags:
|
||
- vip
|
||
summary: 查询当前 App 的 VIP 功能开关
|
||
operationId: getVIPSettings
|
||
security:
|
||
- BearerAuth: []
|
||
responses:
|
||
"200":
|
||
description: 查询成功;开关是偏好,不单独授予权益。
|
||
schema:
|
||
$ref: "#/definitions/VIPSettingsEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
patch:
|
||
tags:
|
||
- vip
|
||
summary: 局部更新当前 App 的 VIP 功能开关
|
||
operationId: patchVIPSettings
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/VIPSettingsPatchRequest"
|
||
responses:
|
||
"200":
|
||
description: 更新成功;显式 false 与字段未提交语义不同。
|
||
schema:
|
||
$ref: "#/definitions/VIPSettingsEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/vip/online-notice:
|
||
post:
|
||
tags:
|
||
- vip
|
||
summary: 请求服务端创建 VIP 上线全服通知
|
||
operationId: triggerVIPOnlineNotice
|
||
description: 服务端执行前重新校验 online_global_notice 权益和用户开关;Flutter 不能自行向全局群发消息。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/CommandIDRequest"
|
||
responses:
|
||
"200":
|
||
description: 已创建或命中相同 command_id 的异步播报事实。
|
||
schema:
|
||
$ref: "#/definitions/VIPOnlineNoticeEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
description: 权益或用户开关未生效;返回 VIP_BENEFIT_REQUIRED 结构化 data。
|
||
schema:
|
||
$ref: "#/definitions/VIPBenefitRequiredErrorEnvelope"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/resources:
|
||
get:
|
||
tags:
|
||
- resources
|
||
summary: App 资源列表
|
||
operationId: listResources
|
||
parameters:
|
||
- name: resource_type
|
||
in: query
|
||
required: false
|
||
type: string
|
||
enum: [avatar_frame, profile_card, coin, vehicle, chat_bubble, badge, floating_screen, gift, mic_seat_icon, mic_seat_animation, room_border, room_name_style, emoji_pack, vip_trial_card]
|
||
- name: keyword
|
||
in: query
|
||
required: false
|
||
type: string
|
||
- name: page
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
- name: page_size
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
- name: region_id
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int64
|
||
description: 区域 ID;传入后返回该区域和 GLOBAL 兜底礼物,不传时只返回 GLOBAL 兜底礼物。
|
||
responses:
|
||
"200":
|
||
description: 返回当前 App active 资源列表。
|
||
schema:
|
||
$ref: "#/definitions/ResourceListEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/manager-center/resource-grants/resources:
|
||
get:
|
||
tags:
|
||
- manager-center
|
||
summary: 经理中心可赠送资源列表
|
||
operationId: listManagerGrantResources
|
||
description: gateway 先校验当前用户拥有 `manager_resource_grant` capability,再从 wallet-service 查询 `status=active AND grantable=TRUE AND manager_grant_enabled=TRUE` 的资源。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: resource_type
|
||
in: query
|
||
required: false
|
||
type: string
|
||
enum: [avatar_frame, profile_card, coin, vehicle, chat_bubble, badge, floating_screen, gift, mic_seat_icon, mic_seat_animation, room_border, room_name_style, emoji_pack, vip_trial_card]
|
||
- name: page
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
- name: page_size
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
maximum: 20
|
||
responses:
|
||
"200":
|
||
description: 返回 H5 展示和提交所需的最小资源字段。
|
||
schema:
|
||
$ref: "#/definitions/ManagerGrantResourceListEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/manager-center/resource-grants:
|
||
post:
|
||
tags:
|
||
- manager-center
|
||
summary: 经理中心赠送单个资源
|
||
operationId: grantManagerResource
|
||
description: 客户端提交命令 ID、目标用户、资源 ID 和可选有效期;数量固定为 1,有效期只能是 7/30/90 天,未传默认 7 天,`grant_source` 固定为 `manager_center`。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/ManagerResourceGrantRequest"
|
||
responses:
|
||
"200":
|
||
description: 赠送成功,返回资源赠送事实。
|
||
schema:
|
||
$ref: "#/definitions/ManagerResourceGrantEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/business/users/lookup:
|
||
get:
|
||
tags:
|
||
- business
|
||
summary: 业务场景用户查询
|
||
operationId: lookupBusinessUsers
|
||
description: 首版只支持 `scene=manager_resource_grant`。user-service 会按 scene 校验 actor 能力,并只返回同 app_code 的 active 用户最小资料。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: scene
|
||
in: query
|
||
required: true
|
||
type: string
|
||
enum: [manager_resource_grant]
|
||
- name: keyword
|
||
in: query
|
||
required: true
|
||
type: string
|
||
description: 展示短号、用户 ID 或至少 2 个字符的昵称片段。
|
||
- name: page_size
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
maximum: 20
|
||
responses:
|
||
"200":
|
||
description: 查询成功。
|
||
schema:
|
||
$ref: "#/definitions/BusinessUserLookupEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/resource-groups/{group_id}:
|
||
get:
|
||
tags:
|
||
- resources
|
||
summary: App 资源组详情
|
||
operationId: getResourceGroup
|
||
parameters:
|
||
- $ref: "#/parameters/ResourceGroupIDPath"
|
||
responses:
|
||
"200":
|
||
description: 返回 active 资源组及组内资源。
|
||
schema:
|
||
$ref: "#/definitions/ResourceGroupEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/gifts:
|
||
get:
|
||
tags:
|
||
- resources
|
||
summary: App 礼物列表
|
||
operationId: listGifts
|
||
parameters:
|
||
- name: keyword
|
||
in: query
|
||
required: false
|
||
type: string
|
||
- name: page
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
- name: page_size
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
- name: region_id
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int64
|
||
description: 区域 ID;返回该区域和 GLOBAL 兜底礼物。
|
||
responses:
|
||
"200":
|
||
description: 返回当前 active、区域可用且在有效期内的礼物配置;礼物资源必须来自 `resource_type=gift`。
|
||
schema:
|
||
$ref: "#/definitions/GiftListEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/gift-tabs:
|
||
get:
|
||
tags:
|
||
- resources
|
||
summary: App 礼物 Tab 配置列表
|
||
operationId: listGiftTabs
|
||
parameters:
|
||
- name: region_id
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int64
|
||
description: 不传时预加载全部 active 礼物;传入时只返回 GLOBAL 和该区域可用礼物。
|
||
responses:
|
||
"200":
|
||
description: 返回后台启用的礼物 Tab 配置和当前 active 礼物;不按礼物数量过滤 Tab,即使 Tab 下当前没有礼物也返回 gifts 空数组。
|
||
schema:
|
||
$ref: "#/definitions/GiftTabListEnvelope"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/me/resources:
|
||
get:
|
||
tags:
|
||
- resources
|
||
summary: 我的资源权益
|
||
operationId: listMyResources
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: resource_type
|
||
in: query
|
||
required: false
|
||
type: string
|
||
enum: [avatar_frame, profile_card, coin, vehicle, chat_bubble, badge, floating_screen, gift, mic_seat_icon, mic_seat_animation, room_border, room_name_style, emoji_pack, vip_trial_card]
|
||
responses:
|
||
"200":
|
||
description: 返回当前用户有效资源权益。
|
||
schema:
|
||
$ref: "#/definitions/UserResourceListEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/users/me/resources/{resource_id}/equip:
|
||
post:
|
||
tags:
|
||
- resources
|
||
summary: 佩戴我的资源
|
||
description: >-
|
||
Fami 请求必须带 command_id,同一动作重试复用;wallet 在写入前重新校验当前 VIP benefit 与 resource_id 的绑定。
|
||
vip_trial_card 会委托 VIP 专用状态机;该通用响应不含完整 VipState,VIP 客户端应使用 /api/v1/vip/trial-cards/{entitlement_id}/equip。
|
||
operationId: equipMyResource
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- $ref: "#/parameters/ResourceIDPath"
|
||
- name: body
|
||
in: body
|
||
required: false
|
||
schema:
|
||
$ref: "#/definitions/EquipUserResourceRequest"
|
||
responses:
|
||
"200":
|
||
description: 返回被佩戴的有效资源权益。
|
||
schema:
|
||
$ref: "#/definitions/UserResourceEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
description: VIP 绑定资源的对应权益已失效时返回 VIP_BENEFIT_REQUIRED,并包含 benefit_code/required_level/current_effective_level/action。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
description: 同一 command_id 改变 resource_id 或 entitlement_id,code=IDEMPOTENCY_CONFLICT。
|
||
schema:
|
||
$ref: "#/definitions/ErrorEnvelope"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/messages/tabs:
|
||
get:
|
||
tags:
|
||
- messages
|
||
summary: 消息 tab 分区摘要
|
||
operationId: listMessageTabs
|
||
description: 返回 user/system/activity 三个分区;user 分区只声明来源为腾讯云 IM SDK,不返回私聊内容。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
responses:
|
||
"200":
|
||
description: 查询成功。
|
||
schema:
|
||
$ref: "#/definitions/MessageTabsEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/messages:
|
||
get:
|
||
tags:
|
||
- messages
|
||
summary: system/activity 消息列表
|
||
operationId: listInboxMessages
|
||
description: 只读取当前 app_code 和当前用户下 visible、未删除、未过期的 system/activity 消息,按 sent_at_ms 倒序游标分页。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: section
|
||
in: query
|
||
required: true
|
||
type: string
|
||
enum: [system, activity]
|
||
- name: page_size
|
||
in: query
|
||
required: false
|
||
type: integer
|
||
format: int32
|
||
- name: page_token
|
||
in: query
|
||
required: false
|
||
type: string
|
||
responses:
|
||
"200":
|
||
description: 查询成功。
|
||
schema:
|
||
$ref: "#/definitions/MessageListEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/messages/read-all:
|
||
post:
|
||
tags:
|
||
- messages
|
||
summary: 标记分区全部已读
|
||
operationId: markInboxSectionRead
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/MessageReadAllRequest"
|
||
responses:
|
||
"200":
|
||
description: 已读成功;重复请求成功且 read_count 可为 0。
|
||
schema:
|
||
$ref: "#/definitions/MessageReadAllEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/messages/{message_id}/read:
|
||
post:
|
||
tags:
|
||
- messages
|
||
summary: 标记单条消息已读
|
||
operationId: markInboxMessageRead
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: message_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
responses:
|
||
"200":
|
||
description: 已读成功;重复请求不覆盖首次 read_at_ms。
|
||
schema:
|
||
$ref: "#/definitions/MessageReadEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/messages/{message_id}:
|
||
delete:
|
||
tags:
|
||
- messages
|
||
summary: 删除单条消息
|
||
operationId: deleteInboxMessage
|
||
description: 删除是当前用户侧隐藏,不物理删除 inbox 事实;不存在、已删除或不属于当前用户均返回 NOT_FOUND。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: message_id
|
||
in: path
|
||
required: true
|
||
type: string
|
||
responses:
|
||
"200":
|
||
description: 删除成功。
|
||
schema:
|
||
$ref: "#/definitions/MessageDeleteEnvelope"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/wallet/recharge/products:
|
||
get:
|
||
tags:
|
||
- wallet
|
||
summary: 获取充值商品列表
|
||
operationId: listRechargeProducts
|
||
description: gateway 根据当前登录用户资料中的 `region_id` 和 App 平台筛选已上架内购商品;平台可通过 `platform` query 覆盖,默认读取 `X-App-Platform` / `X-Platform` 请求头。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: platform
|
||
in: query
|
||
required: false
|
||
type: string
|
||
enum: [android, ios]
|
||
description: 可选平台覆盖值;不传时读取 App 平台请求头。
|
||
- name: X-App-Platform
|
||
in: header
|
||
required: false
|
||
type: string
|
||
enum: [android, ios]
|
||
description: App 平台请求头。
|
||
- name: X-Platform
|
||
in: header
|
||
required: false
|
||
type: string
|
||
enum: [android, ios]
|
||
description: 兼容平台请求头。
|
||
responses:
|
||
"200":
|
||
description: 返回当前用户区域和平台可购买的上架商品。
|
||
schema:
|
||
$ref: "#/definitions/RechargeProductListEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/wallet/payments/google/confirm:
|
||
post:
|
||
tags:
|
||
- wallet
|
||
summary: 确认 Google Play 充值支付
|
||
operationId: confirmGooglePayment
|
||
description: App 支付成功后提交 Google purchase token;后端调用 Google Play Developer API 校验,成功后写入钱包账本、充值记录、payment_orders 审计并尝试 consume。接口支持按 purchase token 幂等重试。
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/GooglePaymentConfirmRequest"
|
||
responses:
|
||
"200":
|
||
description: 校验成功并已入账;`consume_state=consume_pending` 也表示已入账成功,只是 Google consume 待后续重试。
|
||
schema:
|
||
$ref: "#/definitions/GooglePaymentConfirmEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
/api/v1/wallet/coin-seller/transfer:
|
||
post:
|
||
tags:
|
||
- wallet
|
||
summary: 币商给玩家转金币
|
||
operationId: transferCoinFromSeller
|
||
security:
|
||
- BearerAuth: []
|
||
parameters:
|
||
- name: body
|
||
in: body
|
||
required: true
|
||
schema:
|
||
$ref: "#/definitions/CoinSellerTransferRequest"
|
||
responses:
|
||
"200":
|
||
description: 转账成功,`data` 返回账务交易、双方账后余额和充值金额口径。
|
||
schema:
|
||
$ref: "#/definitions/CoinSellerTransferEnvelope"
|
||
"400":
|
||
$ref: "#/responses/BadRequest"
|
||
"401":
|
||
$ref: "#/responses/Unauthorized"
|
||
"403":
|
||
$ref: "#/responses/Forbidden"
|
||
"404":
|
||
$ref: "#/responses/NotFound"
|
||
"409":
|
||
$ref: "#/responses/Conflict"
|
||
"500":
|
||
$ref: "#/responses/Internal"
|
||
"502":
|
||
$ref: "#/responses/UpstreamError"
|
||
definitions:
|
||
GatewayOKEnvelopeBase:
|
||
type: object
|
||
required:
|
||
- code
|
||
- message
|
||
- request_id
|
||
properties:
|
||
code:
|
||
type: string
|
||
enum:
|
||
- OK
|
||
message:
|
||
type: string
|
||
enum:
|
||
- ok
|
||
request_id:
|
||
type: string
|
||
description: gateway 业务 API 成功响应外壳。
|
||
ErrorEnvelope:
|
||
type: object
|
||
required:
|
||
- code
|
||
- message
|
||
- request_id
|
||
properties:
|
||
code:
|
||
type: string
|
||
enum:
|
||
- INVALID_JSON
|
||
- UNAUTHORIZED
|
||
- UPSTREAM_ERROR
|
||
- INTERNAL_ERROR
|
||
- INVALID_ARGUMENT
|
||
- RATE_LIMITED
|
||
- AUTH_FAILED
|
||
- SESSION_EXPIRED
|
||
- SESSION_REVOKED
|
||
- PASSWORD_ALREADY_SET
|
||
- DISPLAY_USER_ID_INVALID
|
||
- DISPLAY_USER_ID_EXISTS
|
||
- DISPLAY_USER_ID_COOLDOWN
|
||
- COUNTRY_CHANGE_COOLDOWN
|
||
- DISPLAY_USER_ID_NOT_FOUND
|
||
- DISPLAY_USER_ID_PRETTY_NOT_AVAILABLE
|
||
- DISPLAY_USER_ID_PRETTY_ACTIVE
|
||
- DISPLAY_USER_ID_LEASE_EXPIRED
|
||
- DISPLAY_USER_ID_PAYMENT_REQUIRED
|
||
- USER_DISABLED
|
||
- PROFILE_REQUIRED
|
||
- PERMISSION_DENIED
|
||
- NOT_FOUND
|
||
- CONFLICT
|
||
- ROOM_CLOSED
|
||
- INSUFFICIENT_BALANCE
|
||
- IDEMPOTENCY_CONFLICT
|
||
- FILE_TOO_LARGE
|
||
- UNSUPPORTED_MEDIA_TYPE
|
||
- INVALID_MEDIA_DIMENSIONS
|
||
- VIP_BENEFIT_REQUIRED
|
||
- VIP_PROGRAM_INACTIVE
|
||
- VIP_PACKAGE_NOT_PURCHASABLE
|
||
- VIP_DOWNGRADE_NOT_ALLOWED
|
||
- VIP_RECHARGE_REQUIRED
|
||
- VIP_INSUFFICIENT_COIN
|
||
- VIP_TRIAL_CARD_NOT_FOUND
|
||
- VIP_TRIAL_CARD_EXPIRED
|
||
- VIP_COIN_REBATE_NOT_FOUND
|
||
- VIP_COIN_REBATE_EXPIRED
|
||
message:
|
||
type: string
|
||
description: 稳定的短错误说明,仅用于兜底展示;客户端业务分支必须使用 code。
|
||
request_id:
|
||
type: string
|
||
data:
|
||
type: object
|
||
additionalProperties: {}
|
||
description: 可选的安全结构化业务详情;当前 `VIP_BENEFIT_REQUIRED` 返回 benefit_code、required_level、current_effective_level 和 action。不得包含内部错误。
|
||
description: gateway 业务 API 失败响应外壳;多数失败省略 `data`,需要客户端执行动作的错误可返回安全结构化详情。
|
||
HealthResponse:
|
||
type: object
|
||
properties:
|
||
status:
|
||
type: string
|
||
enum:
|
||
- ok
|
||
- fail
|
||
service:
|
||
type: string
|
||
example: gateway-service
|
||
node_id:
|
||
type: string
|
||
time_unix_ms:
|
||
type: integer
|
||
format: int64
|
||
checks:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/HealthCheck"
|
||
HealthCheck:
|
||
type: object
|
||
properties:
|
||
name:
|
||
type: string
|
||
example: room_grpc
|
||
status:
|
||
type: string
|
||
enum:
|
||
- ok
|
||
- fail
|
||
message:
|
||
type: string
|
||
LoginPasswordRequest:
|
||
type: object
|
||
required:
|
||
- account
|
||
- password
|
||
- device_id
|
||
description: 账号就是用户当前有效短号。
|
||
properties:
|
||
account:
|
||
type: string
|
||
example: "123456"
|
||
password:
|
||
type: string
|
||
example: "1234567"
|
||
device_id:
|
||
type: string
|
||
LoginThirdPartyRequest:
|
||
type: object
|
||
description: 三方登录即注册;首次注册时资料字段写入 user-service users 主记录。`ip`、`user_agent` 和 `country_by_ip` 由 gateway/服务端上下文生成,不接受客户端 JSON。
|
||
required:
|
||
- provider
|
||
- credential
|
||
- device_id
|
||
- platform
|
||
properties:
|
||
provider:
|
||
type: string
|
||
example: firebase
|
||
credential:
|
||
type: string
|
||
description: Firebase Auth ID token;不能提交 Google account id、email 或 access token。
|
||
username:
|
||
type: string
|
||
maxLength: 64
|
||
gender:
|
||
type: string
|
||
maxLength: 32
|
||
country:
|
||
type: string
|
||
maxLength: 3
|
||
pattern: "^[A-Za-z]{2,3}$"
|
||
description: 国家主数据 country_code,支持 2 到 3 位英文,服务端会转大写并要求 active。
|
||
invite_code:
|
||
type: string
|
||
maxLength: 64
|
||
description: 可选邀请码。
|
||
device_id:
|
||
type: string
|
||
maxLength: 128
|
||
device:
|
||
type: string
|
||
maxLength: 128
|
||
os_version:
|
||
type: string
|
||
maxLength: 64
|
||
avatar:
|
||
type: string
|
||
maxLength: 512
|
||
description: 绝对 http/https URL。
|
||
birth:
|
||
type: string
|
||
description: yyyy-mm-dd。
|
||
app_version:
|
||
type: string
|
||
maxLength: 64
|
||
build_number:
|
||
type: string
|
||
maxLength: 64
|
||
source:
|
||
type: string
|
||
maxLength: 64
|
||
install_channel:
|
||
type: string
|
||
maxLength: 64
|
||
campaign:
|
||
type: string
|
||
maxLength: 128
|
||
platform:
|
||
type: string
|
||
maxLength: 16
|
||
enum:
|
||
- android
|
||
- ios
|
||
language:
|
||
type: string
|
||
maxLength: 32
|
||
description: BCP 47 language tag subset,例如 en-US。
|
||
timezone:
|
||
type: string
|
||
maxLength: 64
|
||
description: IANA timezone name,例如 America/Los_Angeles。
|
||
SetPasswordRequest:
|
||
type: object
|
||
properties:
|
||
password:
|
||
type: string
|
||
RefreshTokenRequest:
|
||
type: object
|
||
properties:
|
||
refresh_token:
|
||
type: string
|
||
description: 登录和 refresh 响应返回;CompleteOnboarding 不轮换 refresh token,可能为空或缺失。
|
||
device_id:
|
||
type: string
|
||
LogoutRequest:
|
||
type: object
|
||
properties:
|
||
refresh_token:
|
||
type: string
|
||
session_id:
|
||
type: string
|
||
AuthTokenData:
|
||
type: object
|
||
properties:
|
||
user_id:
|
||
type: string
|
||
description: 数值型用户 ID 的字符串形式。
|
||
display_user_id:
|
||
type: string
|
||
default_display_user_id:
|
||
type: string
|
||
display_user_id_kind:
|
||
type: string
|
||
display_user_id_expires_at_ms:
|
||
type: integer
|
||
format: int64
|
||
session_id:
|
||
type: string
|
||
access_token:
|
||
type: string
|
||
refresh_token:
|
||
type: string
|
||
expires_in_sec:
|
||
type: integer
|
||
format: int64
|
||
token_type:
|
||
type: string
|
||
example: Bearer
|
||
is_new_user:
|
||
type: boolean
|
||
profile_completed:
|
||
type: boolean
|
||
onboarding_status:
|
||
type: string
|
||
enum:
|
||
- profile_required
|
||
- completed
|
||
PasswordSetData:
|
||
type: object
|
||
properties:
|
||
password_set:
|
||
type: boolean
|
||
LogoutData:
|
||
type: object
|
||
properties:
|
||
revoked:
|
||
type: boolean
|
||
TencentIMUserSigData:
|
||
type: object
|
||
properties:
|
||
sdk_app_id:
|
||
type: integer
|
||
format: int64
|
||
user_id:
|
||
type: string
|
||
description: 腾讯云 IM identifier;当前固定使用内部长 `user_id` 的十进制字符串。
|
||
user_sig:
|
||
type: string
|
||
expire_at_ms:
|
||
type: integer
|
||
format: int64
|
||
description: 客户端登录腾讯云 IM SDK 所需票据。
|
||
TencentRTCTokenRequest:
|
||
type: object
|
||
required:
|
||
- room_id
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
pattern: "^[A-Za-z0-9_-]{1,48}$"
|
||
maxLength: 48
|
||
description: 内部房间 ID,同时作为腾讯 RTC `strRoomId` 使用。
|
||
TencentRTCTokenData:
|
||
type: object
|
||
properties:
|
||
sdk_app_id:
|
||
type: integer
|
||
format: int64
|
||
user_id:
|
||
type: string
|
||
description: 腾讯 RTC UserID;当前固定使用内部长 `user_id` 的十进制字符串。
|
||
rtc_user_id:
|
||
type: string
|
||
description: 与 `user_id` 相同,帮助客户端显式区分业务身份和 RTC SDK 身份。
|
||
user_sig:
|
||
type: string
|
||
description: 腾讯 RTC UserSig,客户端用它进入腾讯 RTC;不是 SecretKey。
|
||
expire_at_ms:
|
||
type: integer
|
||
format: int64
|
||
room_id:
|
||
type: string
|
||
description: 内部房间 ID。
|
||
rtc_room_id:
|
||
type: string
|
||
description: 腾讯 RTC 字符串房间 ID,值等于 `room_id`。
|
||
rtc_room_id_type:
|
||
type: string
|
||
enum:
|
||
- string
|
||
str_room_id:
|
||
type: string
|
||
description: 客户端调用 TRTC enterRoom 时使用的 `strRoomId`。
|
||
app_scene:
|
||
type: string
|
||
enum:
|
||
- voice_chat_room
|
||
role:
|
||
type: string
|
||
enum:
|
||
- audience
|
||
description: 首版固定返回 audience;上麦成功后客户端再切换发布角色。
|
||
description: 客户端进入腾讯 RTC 语音房所需票据和字符串房间映射。
|
||
UploadFileData:
|
||
type: object
|
||
properties:
|
||
url:
|
||
type: string
|
||
description: 公开访问 URL,可写入用户头像、房间头像或其他业务资料字段。
|
||
object_key:
|
||
type: string
|
||
description: COS object key,便于后续服务端删除或审计。
|
||
content_type:
|
||
type: string
|
||
description: 服务端确认后的文件 MIME 类型。
|
||
size_bytes:
|
||
type: integer
|
||
format: int64
|
||
description: 上传文件字节数。
|
||
BindPushTokenRequest:
|
||
type: object
|
||
required:
|
||
- device_id
|
||
- push_token
|
||
- platform
|
||
properties:
|
||
device_id:
|
||
type: string
|
||
maxLength: 128
|
||
description: App 安装级稳定 ID。
|
||
push_token:
|
||
type: string
|
||
maxLength: 512
|
||
description: APNS/FCM 等系统推送 token。
|
||
provider:
|
||
type: string
|
||
maxLength: 32
|
||
description: 可选;为空时 android 默认 fcm,ios 默认 apns。
|
||
platform:
|
||
type: string
|
||
enum:
|
||
- android
|
||
- ios
|
||
app_version:
|
||
type: string
|
||
maxLength: 64
|
||
language:
|
||
type: string
|
||
maxLength: 32
|
||
timezone:
|
||
type: string
|
||
maxLength: 64
|
||
DeletePushTokenRequest:
|
||
type: object
|
||
required:
|
||
- device_id
|
||
properties:
|
||
device_id:
|
||
type: string
|
||
maxLength: 128
|
||
push_token:
|
||
type: string
|
||
maxLength: 512
|
||
description: 可选;为空时按当前用户和 device_id 失效 active token。
|
||
BindPushTokenData:
|
||
type: object
|
||
required:
|
||
- bound
|
||
- updated_at_ms
|
||
properties:
|
||
bound:
|
||
type: boolean
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
gifts:
|
||
type: array
|
||
description: 当前 Tab 下的 active 礼物列表;没有礼物时返回空数组。
|
||
items:
|
||
$ref: "#/definitions/GiftConfigData"
|
||
DeletePushTokenData:
|
||
type: object
|
||
required:
|
||
- deleted
|
||
- updated_at_ms
|
||
properties:
|
||
deleted:
|
||
type: boolean
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
TencentIMCallbackRequest:
|
||
type: object
|
||
properties:
|
||
CallbackCommand:
|
||
type: string
|
||
enum:
|
||
- Group.CallbackBeforeApplyJoinGroup
|
||
- Group.CallbackBeforeSendMsg
|
||
GroupId:
|
||
type: string
|
||
description: 映射为内部 `room_id`。
|
||
Requestor_Account:
|
||
type: string
|
||
description: 入群申请用户;必须是内部长 `user_id` 的十进制字符串。
|
||
From_Account:
|
||
type: string
|
||
description: 发言用户;必须是内部长 `user_id` 的十进制字符串。
|
||
Operator_Account:
|
||
type: string
|
||
description: 腾讯云 IM 回调操作者账号字段。
|
||
TencentIMCallbackResponse:
|
||
type: object
|
||
properties:
|
||
ActionStatus:
|
||
type: string
|
||
enum:
|
||
- OK
|
||
ErrorInfo:
|
||
type: string
|
||
ErrorCode:
|
||
type: integer
|
||
format: int32
|
||
enum:
|
||
- 0
|
||
- 1
|
||
description: 腾讯云 IM 原生回调响应;`ErrorCode=0` 允许,`ErrorCode=1` 拒绝本次入群或发言。
|
||
TencentRTCCallbackRequest:
|
||
type: object
|
||
properties:
|
||
EventGroupId:
|
||
type: integer
|
||
format: int32
|
||
enum:
|
||
- 1
|
||
- 2
|
||
description: 1 为房间事件组,2 为媒体事件组。
|
||
EventType:
|
||
type: integer
|
||
format: int32
|
||
enum:
|
||
- 104
|
||
- 203
|
||
- 204
|
||
description: 当前只消费退出房间、开始推送音频、停止推送音频。
|
||
CallbackTs:
|
||
type: integer
|
||
format: int64
|
||
EventInfo:
|
||
type: object
|
||
properties:
|
||
RoomId:
|
||
description: 腾讯 RTC 房间 ID;本系统要求等于内部字符串 `room_id`。
|
||
UserId:
|
||
type: string
|
||
description: 腾讯 RTC UserID;必须是内部长 `user_id` 的十进制字符串。
|
||
EventTs:
|
||
type: integer
|
||
format: int64
|
||
EventMsTs:
|
||
type: integer
|
||
format: int64
|
||
Reason:
|
||
type: integer
|
||
format: int32
|
||
description: 腾讯 RTC 原生回调请求;签名必须基于原始 body,不要重新序列化后计算。
|
||
TencentRTCCallbackResponse:
|
||
type: object
|
||
properties:
|
||
code:
|
||
type: integer
|
||
format: int32
|
||
enum:
|
||
- 0
|
||
- 1
|
||
message:
|
||
type: string
|
||
description: 腾讯 RTC 回调响应;`code=0` 表示 gateway 已接受或安全忽略该事件。
|
||
UserIdentityData:
|
||
type: object
|
||
properties:
|
||
user_id:
|
||
type: string
|
||
description: 数值型用户 ID 的字符串形式。
|
||
display_user_id:
|
||
type: string
|
||
status:
|
||
type: string
|
||
default_display_user_id:
|
||
type: string
|
||
display_user_id_kind:
|
||
type: string
|
||
display_user_id_expires_at_ms:
|
||
type: integer
|
||
format: int64
|
||
lease_id:
|
||
type: string
|
||
UserHostIdentityData:
|
||
type: object
|
||
properties:
|
||
is_host:
|
||
type: boolean
|
||
description: 用户是否拥有 active host profile。
|
||
is_agent:
|
||
type: boolean
|
||
description: 用户是否拥有 Agency 入口身份;active Agency owner 或 Agency 来源主播都可能为 true。
|
||
is_manager:
|
||
type: boolean
|
||
description: 用户是否拥有经理中心身份;首版等价于 active Agency owner。
|
||
is_bd:
|
||
type: boolean
|
||
description: 用户是否拥有 active BD 或 BD Leader 身份。
|
||
is_bd_leader:
|
||
type: boolean
|
||
description: 用户是否拥有 active BD Leader 身份。
|
||
is_coin_seller:
|
||
type: boolean
|
||
description: 用户是否拥有 active 币商身份。
|
||
MyOverviewRolesData:
|
||
type: object
|
||
required:
|
||
- is_host
|
||
- is_agency
|
||
- is_manager
|
||
- is_bd
|
||
- is_bd_leader
|
||
- is_coin_seller
|
||
- pending_role_invitations
|
||
properties:
|
||
is_host:
|
||
type: boolean
|
||
is_agency:
|
||
type: boolean
|
||
is_manager:
|
||
type: boolean
|
||
is_bd:
|
||
type: boolean
|
||
is_bd_leader:
|
||
type: boolean
|
||
is_coin_seller:
|
||
type: boolean
|
||
host_status:
|
||
type: string
|
||
agency_id:
|
||
type: integer
|
||
format: int64
|
||
bd_id:
|
||
type: integer
|
||
format: int64
|
||
bd_status:
|
||
type: string
|
||
coin_seller_status:
|
||
type: string
|
||
pending_role_invitations:
|
||
type: integer
|
||
format: int64
|
||
unavailable:
|
||
type: boolean
|
||
description: 角色上游不可用时为 true;此时所有特权身份按 false 返回。
|
||
MyOverviewProfileStatsData:
|
||
type: object
|
||
required:
|
||
- visitors_count
|
||
- following_count
|
||
- friends_count
|
||
- updated_at_ms
|
||
properties:
|
||
visitors_count:
|
||
type: integer
|
||
format: int64
|
||
following_count:
|
||
type: integer
|
||
format: int64
|
||
friends_count:
|
||
type: integer
|
||
format: int64
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
unavailable:
|
||
type: boolean
|
||
description: 计数 read model 上游不可用时为 true;客户端可按 0 展示。
|
||
MyOverviewWalletData:
|
||
type: object
|
||
required:
|
||
- coin_amount
|
||
- updated_at_ms
|
||
properties:
|
||
coin_amount:
|
||
type: integer
|
||
format: int64
|
||
description: 我的页首屏只展示金币余额。
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
unavailable:
|
||
type: boolean
|
||
description: 钱包上游不可用时为 true。
|
||
MyOverviewVIPData:
|
||
type: object
|
||
properties:
|
||
level:
|
||
type: integer
|
||
format: int32
|
||
name:
|
||
type: string
|
||
active:
|
||
type: boolean
|
||
started_at_ms:
|
||
type: integer
|
||
format: int64
|
||
expires_at_ms:
|
||
type: integer
|
||
format: int64
|
||
unavailable:
|
||
type: boolean
|
||
description: VIP 上游不可用时为 true。
|
||
MyOverviewEntryData:
|
||
type: object
|
||
required:
|
||
- key
|
||
- visible
|
||
- enabled
|
||
- route
|
||
- icon_key
|
||
- badge_count
|
||
- order
|
||
properties:
|
||
key:
|
||
type: string
|
||
enum:
|
||
- store
|
||
- bag
|
||
- level
|
||
- task
|
||
- apply_host
|
||
- host_center
|
||
- agency_center
|
||
- bd_center
|
||
- superadmin_center
|
||
- coin_seller_center
|
||
- settings
|
||
- language
|
||
visible:
|
||
type: boolean
|
||
enabled:
|
||
type: boolean
|
||
route:
|
||
type: string
|
||
icon_key:
|
||
type: string
|
||
badge_count:
|
||
type: integer
|
||
format: int64
|
||
order:
|
||
type: integer
|
||
format: int32
|
||
MyOverviewData:
|
||
type: object
|
||
required:
|
||
- profile
|
||
- profile_stats
|
||
- wallet
|
||
- vip
|
||
- roles
|
||
- entries
|
||
- server_time_ms
|
||
properties:
|
||
profile:
|
||
$ref: "#/definitions/UserProfileData"
|
||
profile_stats:
|
||
$ref: "#/definitions/MyOverviewProfileStatsData"
|
||
wallet:
|
||
$ref: "#/definitions/MyOverviewWalletData"
|
||
vip:
|
||
$ref: "#/definitions/MyOverviewVIPData"
|
||
roles:
|
||
$ref: "#/definitions/MyOverviewRolesData"
|
||
entries:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/MyOverviewEntryData"
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
MyInviteOverviewData:
|
||
type: object
|
||
required:
|
||
- my_invite_code
|
||
- invite_enabled
|
||
- invite_count
|
||
- valid_invite_count
|
||
- valid_invite_threshold_coin
|
||
properties:
|
||
my_invite_code:
|
||
type: string
|
||
invite_enabled:
|
||
type: boolean
|
||
invite_count:
|
||
type: integer
|
||
format: int64
|
||
valid_invite_count:
|
||
type: integer
|
||
format: int64
|
||
valid_invite_threshold_coin:
|
||
type: integer
|
||
format: int64
|
||
UserProfileData:
|
||
type: object
|
||
properties:
|
||
user_id:
|
||
type: string
|
||
description: 数值型用户 ID 的字符串形式。
|
||
display_user_id:
|
||
type: string
|
||
default_display_user_id:
|
||
type: string
|
||
display_user_id_kind:
|
||
type: string
|
||
display_user_id_expires_at_ms:
|
||
type: integer
|
||
format: int64
|
||
username:
|
||
type: string
|
||
gender:
|
||
type: string
|
||
country:
|
||
type: string
|
||
maxLength: 3
|
||
description: 用户选择的国家主数据 country_code。
|
||
country_id:
|
||
type: integer
|
||
format: int64
|
||
description: 国家主数据内部 ID;0 表示未命中国家表。
|
||
country_name:
|
||
type: string
|
||
country_display_name:
|
||
type: string
|
||
iso_numeric:
|
||
type: string
|
||
description: ISO numeric / UNSD M49 三位字符串,客户端不能按数字解析。
|
||
phone_country_code:
|
||
type: string
|
||
description: E.164 国家呼叫码,例如 `+86`;可能为空或多个国家共享。
|
||
country_enabled:
|
||
type: boolean
|
||
description: 当前国家是否仍对 App 注册和改国家开放。
|
||
region_id:
|
||
type: integer
|
||
format: int64
|
||
description: 国家映射出的区域 ID;0 表示无区域归属。
|
||
region_code:
|
||
type: string
|
||
region_name:
|
||
type: string
|
||
avatar:
|
||
type: string
|
||
birth:
|
||
type: string
|
||
description: yyyy-mm-dd。
|
||
language:
|
||
type: string
|
||
profile_completed:
|
||
type: boolean
|
||
profile_completed_at_ms:
|
||
type: integer
|
||
format: int64
|
||
onboarding_status:
|
||
type: string
|
||
enum:
|
||
- profile_required
|
||
- completed
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
profile_bg_img:
|
||
type: string
|
||
description: 用户主页信息卡背景图片 URL,来自 users.profile_bg_img;和 `profile_card` 装扮资源无关,未设置时为空字符串。
|
||
next_country_change_allowed_at_ms:
|
||
type: integer
|
||
format: int64
|
||
UserProfileBatchData:
|
||
type: object
|
||
required:
|
||
- user_id
|
||
- display_user_id
|
||
- username
|
||
- app_code
|
||
properties:
|
||
user_id:
|
||
type: string
|
||
description: 数值型用户 ID 的字符串形式,避免客户端 JS 精度丢失。
|
||
display_user_id:
|
||
type: string
|
||
username:
|
||
type: string
|
||
avatar:
|
||
type: string
|
||
gender:
|
||
type: string
|
||
country:
|
||
type: string
|
||
region_id:
|
||
type: integer
|
||
format: int64
|
||
app_code:
|
||
type: string
|
||
description: 腾讯云 IM 会话列表展示资料;不包含手机号、登录凭证、实名或后台身份字段。
|
||
UserProfilesBatchData:
|
||
type: object
|
||
required:
|
||
- profiles
|
||
properties:
|
||
profiles:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/UserProfileBatchData"
|
||
MessageTabSectionData:
|
||
type: object
|
||
required:
|
||
- section
|
||
- title
|
||
- unread_count
|
||
- source
|
||
properties:
|
||
section:
|
||
type: string
|
||
enum:
|
||
- user
|
||
- system
|
||
- activity
|
||
title:
|
||
type: string
|
||
unread_count:
|
||
type: integer
|
||
format: int64
|
||
source:
|
||
type: string
|
||
enum:
|
||
- tencent_im_sdk
|
||
- backend
|
||
MessageTabsData:
|
||
type: object
|
||
required:
|
||
- sections
|
||
properties:
|
||
sections:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/MessageTabSectionData"
|
||
InboxMessageData:
|
||
type: object
|
||
required:
|
||
- message_id
|
||
- title
|
||
- summary
|
||
- read
|
||
- sent_at_ms
|
||
properties:
|
||
message_id:
|
||
type: string
|
||
title:
|
||
type: string
|
||
summary:
|
||
type: string
|
||
body:
|
||
type: string
|
||
icon_url:
|
||
type: string
|
||
image_url:
|
||
type: string
|
||
action_type:
|
||
type: string
|
||
description: 服务端白名单动作,例如 wallet_withdraw_detail、activity_detail、room_detail。
|
||
action_param:
|
||
type: string
|
||
read:
|
||
type: boolean
|
||
sent_at_ms:
|
||
type: integer
|
||
format: int64
|
||
MessageListData:
|
||
type: object
|
||
required:
|
||
- section
|
||
- items
|
||
- next_page_token
|
||
properties:
|
||
section:
|
||
type: string
|
||
enum:
|
||
- system
|
||
- activity
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/InboxMessageData"
|
||
next_page_token:
|
||
type: string
|
||
MessageReadAllRequest:
|
||
type: object
|
||
required:
|
||
- section
|
||
properties:
|
||
section:
|
||
type: string
|
||
enum:
|
||
- system
|
||
- activity
|
||
MessageReadData:
|
||
type: object
|
||
required:
|
||
- message_id
|
||
- read
|
||
- read_at_ms
|
||
properties:
|
||
message_id:
|
||
type: string
|
||
read:
|
||
type: boolean
|
||
read_at_ms:
|
||
type: integer
|
||
format: int64
|
||
MessageReadAllData:
|
||
type: object
|
||
required:
|
||
- section
|
||
- read_count
|
||
properties:
|
||
section:
|
||
type: string
|
||
enum:
|
||
- system
|
||
- activity
|
||
read_count:
|
||
type: integer
|
||
format: int64
|
||
MessageDeleteData:
|
||
type: object
|
||
required:
|
||
- message_id
|
||
- deleted
|
||
properties:
|
||
message_id:
|
||
type: string
|
||
deleted:
|
||
type: boolean
|
||
CountryData:
|
||
type: object
|
||
properties:
|
||
country_id:
|
||
type: integer
|
||
format: int64
|
||
country_name:
|
||
type: string
|
||
country_code:
|
||
type: string
|
||
maxLength: 3
|
||
iso_alpha3:
|
||
type: string
|
||
maxLength: 3
|
||
iso_numeric:
|
||
type: string
|
||
description: 三位 numeric 字符串。
|
||
country_display_name:
|
||
type: string
|
||
phone_country_code:
|
||
type: string
|
||
enabled:
|
||
type: boolean
|
||
flag:
|
||
type: string
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
CountryListData:
|
||
type: object
|
||
properties:
|
||
countries:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/CountryData"
|
||
H5LinkData:
|
||
type: object
|
||
properties:
|
||
key:
|
||
type: string
|
||
description: 后台 H5 配置 key,App 只对已接入的 key 做入口展示,例如 rank、explore_game_rank、game_rock、game_dice、vip、level、task。
|
||
label:
|
||
type: string
|
||
url:
|
||
type: string
|
||
description: 后台配置的 H5 URL;未配置时为空字符串。
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
description: 该入口最近更新时间;未配置时为 0。
|
||
H5LinkListData:
|
||
type: object
|
||
properties:
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/H5LinkData"
|
||
total:
|
||
type: integer
|
||
format: int32
|
||
SplashScreenData:
|
||
type: object
|
||
properties:
|
||
id:
|
||
type: integer
|
||
format: uint64
|
||
cover_url:
|
||
type: string
|
||
background_url:
|
||
type: string
|
||
description: 开屏图片 URL。
|
||
type:
|
||
type: string
|
||
enum: [h5, app]
|
||
description: h5 表示 param 是 H5 链接;app 表示 param 由客户端解释。
|
||
param:
|
||
type: string
|
||
platform:
|
||
type: string
|
||
enum: [android, ios]
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
region_id:
|
||
type: integer
|
||
format: int64
|
||
country_code:
|
||
type: string
|
||
description:
|
||
type: string
|
||
starts_at_ms:
|
||
type: integer
|
||
format: int64
|
||
ends_at_ms:
|
||
type: integer
|
||
format: int64
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
SplashScreenListData:
|
||
type: object
|
||
properties:
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/SplashScreenData"
|
||
total:
|
||
type: integer
|
||
format: int32
|
||
PopupData:
|
||
type: object
|
||
properties:
|
||
id:
|
||
type: integer
|
||
format: uint64
|
||
code:
|
||
type: string
|
||
description: 弹窗编码,同一个 App 下唯一,用于客户端本地频控和埋点识别。
|
||
name:
|
||
type: string
|
||
description: 弹窗名字。
|
||
image_url:
|
||
type: string
|
||
description: 弹窗图片 URL;为空表示无图片。
|
||
jump_type:
|
||
type: string
|
||
enum: [h5, app]
|
||
description: h5 表示 jump_url 是 H5 链接;app 表示 jump_url 由客户端解释。
|
||
jump_url:
|
||
type: string
|
||
display_period_days:
|
||
type: integer
|
||
format: int32
|
||
description: 展示周期天数;0 表示每次打开都展示。
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
starts_at_ms:
|
||
type: integer
|
||
format: int64
|
||
ends_at_ms:
|
||
type: integer
|
||
format: int64
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
PopupListData:
|
||
type: object
|
||
properties:
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/PopupData"
|
||
total:
|
||
type: integer
|
||
format: int32
|
||
AppBootstrapTab:
|
||
type: object
|
||
properties:
|
||
key:
|
||
type: string
|
||
enum:
|
||
- rooms
|
||
- messages
|
||
- me
|
||
title:
|
||
type: string
|
||
enabled:
|
||
type: boolean
|
||
AppBootstrapData:
|
||
type: object
|
||
properties:
|
||
app_code:
|
||
type: string
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
force_upgrade:
|
||
type: boolean
|
||
maintenance:
|
||
type: boolean
|
||
minimum_version:
|
||
type: string
|
||
latest_version:
|
||
type: string
|
||
feature_flags:
|
||
type: object
|
||
additionalProperties:
|
||
type: boolean
|
||
bottom_tabs:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/AppBootstrapTab"
|
||
config_versions:
|
||
type: object
|
||
additionalProperties:
|
||
type: string
|
||
AppVersionData:
|
||
type: object
|
||
properties:
|
||
app_code:
|
||
type: string
|
||
platform:
|
||
type: string
|
||
enum: [android, ios]
|
||
version:
|
||
type: string
|
||
description: 最新版本号,例如 1.2.0。
|
||
build_number:
|
||
type: integer
|
||
format: int64
|
||
description: 最新编译版本号,App 使用它和本地 build number 比较。
|
||
force_update:
|
||
type: boolean
|
||
description: 当前客户端落后且后台最新版本要求强更时为 true。
|
||
download_url:
|
||
type: string
|
||
description:
|
||
type: string
|
||
has_update:
|
||
type: boolean
|
||
current_build_number:
|
||
type: integer
|
||
format: int64
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
CompleteOnboardingRequest:
|
||
type: object
|
||
required:
|
||
- username
|
||
- avatar
|
||
- gender
|
||
- country
|
||
properties:
|
||
username:
|
||
type: string
|
||
avatar:
|
||
type: string
|
||
description: HTTP/HTTPS 头像 URL。
|
||
gender:
|
||
type: string
|
||
maxLength: 32
|
||
country:
|
||
type: string
|
||
maxLength: 3
|
||
pattern: "^[A-Za-z]{2,3}$"
|
||
description: 注册页从 `/api/v1/countries` 取得的 country_code。
|
||
invite_code:
|
||
type: string
|
||
maxLength: 64
|
||
description: 可选邀请码;非空时必须解析到有效邀请人。
|
||
CompleteOnboardingData:
|
||
allOf:
|
||
- $ref: "#/definitions/UserProfileData"
|
||
- type: object
|
||
properties:
|
||
invite:
|
||
type: object
|
||
properties:
|
||
bound:
|
||
type: boolean
|
||
invite_code:
|
||
type: string
|
||
inviter_user_id:
|
||
type: string
|
||
description: 64 位用户 ID 使用字符串返回,未绑定时为空。
|
||
token:
|
||
$ref: "#/definitions/AuthTokenData"
|
||
description: 注册完成后替换旧 access token;refresh_token 为空或不返回。
|
||
UpdateUserProfileRequest:
|
||
type: object
|
||
properties:
|
||
username:
|
||
type: string
|
||
avatar:
|
||
type: string
|
||
birth:
|
||
type: string
|
||
description: yyyy-mm-dd;传空字符串表示清空生日。
|
||
UpdateUserProfileBackgroundRequest:
|
||
type: object
|
||
required:
|
||
- url
|
||
properties:
|
||
url:
|
||
type: string
|
||
description: App 已上传好的个人主页背景图 URL。
|
||
UpdateUserProfileBackgroundData:
|
||
type: object
|
||
properties:
|
||
profile_bg_img:
|
||
type: string
|
||
profile:
|
||
$ref: "#/definitions/UserProfileData"
|
||
UpdateUserProfileBackgroundEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/UpdateUserProfileBackgroundData"
|
||
ChangeUserCountryRequest:
|
||
type: object
|
||
properties:
|
||
country:
|
||
type: string
|
||
maxLength: 3
|
||
pattern: "^[A-Za-z]{2,3}$"
|
||
description: 国家主数据 country_code,服务端会转大写并要求 `enabled=true`。
|
||
ChangeDisplayUserIDRequest:
|
||
type: object
|
||
properties:
|
||
new_display_user_id:
|
||
type: string
|
||
reason:
|
||
type: string
|
||
ApplyPrettyDisplayUserIDRequest:
|
||
type: object
|
||
properties:
|
||
pretty_display_user_id:
|
||
type: string
|
||
lease_duration_ms:
|
||
type: integer
|
||
format: int64
|
||
payment_receipt_id:
|
||
type: string
|
||
ResourceData:
|
||
type: object
|
||
properties:
|
||
resource_id:
|
||
type: integer
|
||
format: int64
|
||
resource_code:
|
||
type: string
|
||
resource_type:
|
||
type: string
|
||
enum: [avatar_frame, profile_card, coin, vehicle, chat_bubble, badge, floating_screen, gift, mic_seat_icon, mic_seat_animation, room_border, room_name_style, emoji_pack, vip_trial_card]
|
||
name:
|
||
type: string
|
||
status:
|
||
type: string
|
||
grantable:
|
||
type: boolean
|
||
grant_strategy:
|
||
type: string
|
||
wallet_asset_type:
|
||
type: string
|
||
wallet_asset_amount:
|
||
type: integer
|
||
format: int64
|
||
price_type:
|
||
type: string
|
||
coin_price:
|
||
type: integer
|
||
format: int64
|
||
gift_point_amount:
|
||
type: integer
|
||
format: int64
|
||
usage_scopes:
|
||
type: array
|
||
items:
|
||
type: string
|
||
asset_url:
|
||
type: string
|
||
preview_url:
|
||
type: string
|
||
animation_url:
|
||
type: string
|
||
format:
|
||
type: string
|
||
description: 可选的客户端渲染格式。由 metadata_json.format 读取,缺省时兼容读取 metadata_json.animation_format,并统一转为小写;两个字段都没有时省略。mic_seat_animation 与 room_border 后台创建值限于 png/jpeg/webp/gif/svga/pag/mp4;其他资源类型可以返回自身样式标识。客户端不得根据 asset_url、preview_url 或 animation_url 的 URL 后缀推断格式。
|
||
metadata_json:
|
||
type: string
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
created_at_ms:
|
||
type: integer
|
||
format: int64
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
AppearanceResourceData:
|
||
type: object
|
||
description: >-
|
||
wallet 当前佩戴资源的客户端展示快照;单资源槽位没有佩戴时返回空对象。format 只来自 metadata_json
|
||
的显式 format/animation_format,字段缺省时客户端不得从任一 URL 后缀推断。
|
||
properties:
|
||
resource_id:
|
||
type: integer
|
||
format: int64
|
||
resource_code:
|
||
type: string
|
||
resource_type:
|
||
type: string
|
||
enum: [avatar_frame, profile_card, vehicle, badge, mic_seat_animation]
|
||
name:
|
||
type: string
|
||
asset_url:
|
||
type: string
|
||
preview_url:
|
||
type: string
|
||
animation_url:
|
||
type: string
|
||
format:
|
||
type: string
|
||
description: mic_seat_animation 当前只允许 png/jpeg/webp/gif/svga/pag/mp4;其它外观类型保留自身显式格式值。
|
||
metadata_json:
|
||
type: string
|
||
entitlement_id:
|
||
type: string
|
||
expires_at_ms:
|
||
type: integer
|
||
format: int64
|
||
badge_form:
|
||
type: string
|
||
badge_kind:
|
||
type: string
|
||
level_track:
|
||
type: string
|
||
AppearanceData:
|
||
type: object
|
||
required:
|
||
- user_id
|
||
- avatar_frame
|
||
- profile_card
|
||
- vehicle
|
||
- mic_seat_animation
|
||
- level
|
||
- level_badges
|
||
- equipped_badges
|
||
- badges
|
||
- badge_profile
|
||
- resources
|
||
- server_time_ms
|
||
properties:
|
||
user_id:
|
||
type: string
|
||
avatar_frame:
|
||
$ref: "#/definitions/AppearanceResourceData"
|
||
profile_card:
|
||
$ref: "#/definitions/AppearanceResourceData"
|
||
vehicle:
|
||
$ref: "#/definitions/AppearanceResourceData"
|
||
mic_seat_animation:
|
||
$ref: "#/definitions/AppearanceResourceData"
|
||
level:
|
||
type: object
|
||
level_badges:
|
||
type: object
|
||
equipped_badges:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/AppearanceResourceData"
|
||
badges:
|
||
type: array
|
||
items:
|
||
type: object
|
||
badge_profile:
|
||
type: object
|
||
resources:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/AppearanceResourceData"
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
AppearanceEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
required:
|
||
- data
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/AppearanceData"
|
||
ResourceListData:
|
||
type: object
|
||
properties:
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/ResourceData"
|
||
total:
|
||
type: integer
|
||
format: int64
|
||
page:
|
||
type: integer
|
||
format: int32
|
||
page_size:
|
||
type: integer
|
||
format: int32
|
||
ManagerGrantResourceData:
|
||
type: object
|
||
properties:
|
||
resource_id:
|
||
type: string
|
||
description: 资源 ID;按字符串返回避免 64 位整数在客户端丢精度。
|
||
resource_type:
|
||
type: string
|
||
enum: [avatar_frame, profile_card, coin, vehicle, chat_bubble, badge, floating_screen, gift, mic_seat_icon, mic_seat_animation, room_border, room_name_style, emoji_pack, vip_trial_card]
|
||
name:
|
||
type: string
|
||
asset_url:
|
||
type: string
|
||
preview_url:
|
||
type: string
|
||
wallet_asset_type:
|
||
type: string
|
||
wallet_asset_amount:
|
||
type: integer
|
||
format: int64
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
ManagerGrantResourceListData:
|
||
type: object
|
||
properties:
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/ManagerGrantResourceData"
|
||
total:
|
||
type: integer
|
||
format: int64
|
||
page:
|
||
type: integer
|
||
format: int32
|
||
page_size:
|
||
type: integer
|
||
format: int32
|
||
BusinessUserLookupItem:
|
||
type: object
|
||
properties:
|
||
user_id:
|
||
type: string
|
||
description: 用户 ID;按字符串返回避免 64 位整数在客户端丢精度。
|
||
display_user_id:
|
||
type: string
|
||
username:
|
||
type: string
|
||
avatar:
|
||
type: string
|
||
status:
|
||
type: string
|
||
enum: [active, disabled, banned, unspecified]
|
||
region_id:
|
||
type: integer
|
||
format: int64
|
||
region_code:
|
||
type: string
|
||
region_name:
|
||
type: string
|
||
BusinessUserLookupData:
|
||
type: object
|
||
properties:
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/BusinessUserLookupItem"
|
||
total:
|
||
type: integer
|
||
format: int32
|
||
page_size:
|
||
type: integer
|
||
format: int32
|
||
ManagerResourceGrantRequest:
|
||
type: object
|
||
required:
|
||
- command_id
|
||
- target_user_id
|
||
- resource_id
|
||
properties:
|
||
command_id:
|
||
type: string
|
||
description: 客户端按用户动作生成的幂等命令 ID;同一动作重试必须复用。
|
||
target_user_id:
|
||
type: string
|
||
description: 目标用户 ID;gateway 会校验用户存在且 active。
|
||
resource_id:
|
||
type: string
|
||
description: 资源 ID;wallet-service 会在事务内复验 `manager_grant_enabled`。
|
||
duration_ms:
|
||
type: integer
|
||
format: int64
|
||
enum: [604800000, 2592000000, 7776000000]
|
||
default: 604800000
|
||
description: 资源有效期,仅允许 7/30/90 天;未传时 gateway 默认 7 天。
|
||
reason:
|
||
type: string
|
||
default: manager_center
|
||
description: 不接受 `quantity`、`wallet_asset_amount` 等客户端计算字段。
|
||
ManagerResourceGrantData:
|
||
type: object
|
||
properties:
|
||
grant_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
target_user_id:
|
||
type: string
|
||
resource_id:
|
||
type: string
|
||
status:
|
||
type: string
|
||
grant_source:
|
||
type: string
|
||
enum: [manager_center]
|
||
operator_user_id:
|
||
type: string
|
||
created_at_ms:
|
||
type: integer
|
||
format: int64
|
||
ResourceGroupItemData:
|
||
type: object
|
||
properties:
|
||
group_item_id:
|
||
type: integer
|
||
format: int64
|
||
item_type:
|
||
type: string
|
||
enum: [resource, wallet_asset]
|
||
resource_id:
|
||
type: integer
|
||
format: int64
|
||
resource:
|
||
$ref: "#/definitions/ResourceData"
|
||
wallet_asset_type:
|
||
type: string
|
||
enum: [COIN, DIAMOND]
|
||
wallet_asset_amount:
|
||
type: integer
|
||
format: int64
|
||
quantity:
|
||
type: integer
|
||
format: int64
|
||
duration_ms:
|
||
type: integer
|
||
format: int64
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
ResourceGroupData:
|
||
type: object
|
||
properties:
|
||
group_id:
|
||
type: integer
|
||
format: int64
|
||
group_code:
|
||
type: string
|
||
name:
|
||
type: string
|
||
status:
|
||
type: string
|
||
description:
|
||
type: string
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/ResourceGroupItemData"
|
||
GiftConfigData:
|
||
type: object
|
||
properties:
|
||
gift_id:
|
||
type: string
|
||
resource_id:
|
||
type: integer
|
||
format: int64
|
||
resource:
|
||
$ref: "#/definitions/ResourceData"
|
||
status:
|
||
type: string
|
||
name:
|
||
type: string
|
||
presentation_json:
|
||
type: string
|
||
price_version:
|
||
type: string
|
||
gift_type_code:
|
||
type: string
|
||
enum:
|
||
- normal
|
||
- cp
|
||
- lucky
|
||
- super_lucky
|
||
- exclusive
|
||
- noble
|
||
- flag
|
||
- activity
|
||
- magic
|
||
- custom
|
||
charge_asset_type:
|
||
type: string
|
||
enum:
|
||
- COIN
|
||
- DIAMOND
|
||
coin_price:
|
||
type: integer
|
||
format: int64
|
||
gift_point_amount:
|
||
type: integer
|
||
format: int64
|
||
heat_value:
|
||
type: integer
|
||
format: int64
|
||
effective_from_ms:
|
||
type: integer
|
||
format: int64
|
||
description: 0 表示不限制开始时间。
|
||
effective_to_ms:
|
||
type: integer
|
||
format: int64
|
||
description: 0 表示不限制结束时间。
|
||
effect_types:
|
||
type: array
|
||
items:
|
||
type: string
|
||
enum:
|
||
- animation
|
||
- music
|
||
- global_broadcast
|
||
region_ids:
|
||
type: array
|
||
items:
|
||
type: integer
|
||
format: int64
|
||
GiftListData:
|
||
type: object
|
||
properties:
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/GiftConfigData"
|
||
total:
|
||
type: integer
|
||
format: int64
|
||
page:
|
||
type: integer
|
||
format: int32
|
||
page_size:
|
||
type: integer
|
||
format: int32
|
||
GiftTabData:
|
||
type: object
|
||
properties:
|
||
key:
|
||
type: string
|
||
description: Tab 稳定 key,等同于礼物类型编码。
|
||
gift_type_code:
|
||
type: string
|
||
description: 礼物类型编码,用于和 gifts[].gift_type_code 对齐。
|
||
name:
|
||
type: string
|
||
description: 后台配置的中文显示名。
|
||
label:
|
||
type: string
|
||
description: App Tab 展示名,来源于后台 tab_key。
|
||
tab_key:
|
||
type: string
|
||
description: 后台配置的 Tab Name。
|
||
status:
|
||
type: string
|
||
order:
|
||
type: integer
|
||
format: int32
|
||
description: App 排序值,等同于 sort_order。
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
created_at_ms:
|
||
type: integer
|
||
format: int64
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
GiftTabListData:
|
||
type: object
|
||
properties:
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/GiftTabData"
|
||
total:
|
||
type: integer
|
||
format: int32
|
||
UserResourceData:
|
||
type: object
|
||
properties:
|
||
entitlement_id:
|
||
type: string
|
||
resource_id:
|
||
type: integer
|
||
format: int64
|
||
resource:
|
||
$ref: "#/definitions/ResourceData"
|
||
status:
|
||
type: string
|
||
quantity:
|
||
type: integer
|
||
format: int64
|
||
remaining_quantity:
|
||
type: integer
|
||
format: int64
|
||
effective_at_ms:
|
||
type: integer
|
||
format: int64
|
||
expires_at_ms:
|
||
type: integer
|
||
format: int64
|
||
source_grant_id:
|
||
type: string
|
||
created_at_ms:
|
||
type: integer
|
||
format: int64
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
equipped:
|
||
type: boolean
|
||
description: 当前权益是否是该资源类型的已佩戴项。
|
||
UserResourceListData:
|
||
type: object
|
||
properties:
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/UserResourceData"
|
||
total:
|
||
type: integer
|
||
format: int32
|
||
EquipUserResourceRequest:
|
||
type: object
|
||
required:
|
||
- command_id
|
||
properties:
|
||
entitlement_id:
|
||
type: string
|
||
description: 可选;不传时服务端自动选择当前用户该资源最新有效权益。
|
||
command_id:
|
||
type: string
|
||
maxLength: 128
|
||
description: Fami 必填的业务幂等键;同一佩戴动作重试必须复用。Lalu 旧客户端未传时仅保留单请求兼容,不承诺跨请求重放。
|
||
RechargeProductData:
|
||
type: object
|
||
properties:
|
||
product_id:
|
||
type: integer
|
||
format: int64
|
||
product_code:
|
||
type: string
|
||
product_name:
|
||
type: string
|
||
description:
|
||
type: string
|
||
platform:
|
||
type: string
|
||
enum: [android, ios]
|
||
channel:
|
||
type: string
|
||
enum: [google, apple]
|
||
currency_code:
|
||
type: string
|
||
example: USDT
|
||
coin_amount:
|
||
type: integer
|
||
format: int64
|
||
amount_minor:
|
||
type: integer
|
||
format: int64
|
||
amount_micro:
|
||
type: integer
|
||
format: int64
|
||
description: USDT 微单位金额,1 USDT = 1000000。
|
||
policy_version:
|
||
type: string
|
||
region_ids:
|
||
type: array
|
||
items:
|
||
type: integer
|
||
format: int64
|
||
resource_asset_type:
|
||
type: string
|
||
example: COIN
|
||
status:
|
||
type: string
|
||
enum: [active, disabled]
|
||
enabled:
|
||
type: boolean
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
RechargeProductListData:
|
||
type: object
|
||
properties:
|
||
channels:
|
||
type: array
|
||
description: 当前结果涉及的充值渠道,例如 google、apple。
|
||
items:
|
||
type: string
|
||
products:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RechargeProductData"
|
||
GooglePaymentConfirmRequest:
|
||
type: object
|
||
required:
|
||
- command_id
|
||
- product_id
|
||
- package_name
|
||
- purchase_token
|
||
properties:
|
||
command_id:
|
||
type: string
|
||
description: 客户端确认支付幂等键;同一 purchase token 重试建议复用。
|
||
product_id:
|
||
type: integer
|
||
format: int64
|
||
description: 后端充值商品 ID。
|
||
product_code:
|
||
type: string
|
||
description: 后端返回的 Google productId,必须与 Play Console 商品 ID 一致。
|
||
package_name:
|
||
type: string
|
||
description: Android 包名。
|
||
purchase_token:
|
||
type: string
|
||
description: Google Play Billing 返回的 serverVerificationData,服务端只保存 SHA256。
|
||
order_id:
|
||
type: string
|
||
description: Google orderId;客户端拿不到时可不传。
|
||
purchase_time_ms:
|
||
type: integer
|
||
format: int64
|
||
description: 客户端购买时间,UTC epoch ms,仅用于排障。
|
||
GooglePaymentConfirmData:
|
||
type: object
|
||
properties:
|
||
payment_order_id:
|
||
type: string
|
||
transaction_id:
|
||
type: string
|
||
status:
|
||
type: string
|
||
enum: [credited]
|
||
product_id:
|
||
type: integer
|
||
format: int64
|
||
product_code:
|
||
type: string
|
||
coin_amount:
|
||
type: integer
|
||
format: int64
|
||
balance:
|
||
type: object
|
||
properties:
|
||
asset_type:
|
||
type: string
|
||
example: COIN
|
||
available_amount:
|
||
type: integer
|
||
format: int64
|
||
frozen_amount:
|
||
type: integer
|
||
format: int64
|
||
version:
|
||
type: integer
|
||
format: int64
|
||
idempotent_replay:
|
||
type: boolean
|
||
consume_state:
|
||
type: string
|
||
enum: [consume_pending, consumed]
|
||
CoinSellerTransferRequest:
|
||
type: object
|
||
required:
|
||
- command_id
|
||
- amount
|
||
- reason
|
||
description: "`target_user_id` 和 `target_display_user_id` 至少传一个;两者都是玩家短 ID/展示号,不是 user-service 内部长 ID。"
|
||
properties:
|
||
command_id:
|
||
type: string
|
||
description: 钱包命令幂等键;客户端按用户转账动作生成,同一动作重试必须复用。
|
||
target_user_id:
|
||
type: integer
|
||
format: int64
|
||
description: 目标玩家短 ID/展示号;gateway 会先解析成内部 user_id 再调用 wallet-service。
|
||
target_display_user_id:
|
||
type: string
|
||
description: 目标玩家短 ID/展示号;推荐新客户端使用该字段。
|
||
amount:
|
||
type: integer
|
||
format: int64
|
||
minimum: 1
|
||
description: 转给玩家的普通金币数量。
|
||
reason:
|
||
type: string
|
||
description: 转账原因或线下凭证摘要。
|
||
CoinSellerTransferResponse:
|
||
type: object
|
||
properties:
|
||
transaction_id:
|
||
type: string
|
||
seller_balance_after:
|
||
type: integer
|
||
format: int64
|
||
description: 币商 `COIN_SELLER_COIN` 账后余额。
|
||
target_balance_after:
|
||
type: integer
|
||
format: int64
|
||
description: 目标玩家 `COIN` 账后余额。
|
||
amount:
|
||
type: integer
|
||
format: int64
|
||
recharge_usd_minor:
|
||
type: integer
|
||
format: int64
|
||
description: 本次转账按区域充值政策折算的美元最小单位金额;100 表示 1 美元。
|
||
recharge_currency_code:
|
||
type: string
|
||
example: USD
|
||
recharge_policy_id:
|
||
type: integer
|
||
format: int64
|
||
recharge_policy_version:
|
||
type: string
|
||
recharge_policy_coin_amount:
|
||
type: integer
|
||
format: int64
|
||
description: 政策快照里的金币数量,例如 80000。
|
||
recharge_policy_usd_minor_amount:
|
||
type: integer
|
||
format: int64
|
||
description: 政策快照里的美元最小单位数量,例如 100。
|
||
CreateRoomRequest:
|
||
type: object
|
||
required:
|
||
- command_id
|
||
- mode
|
||
- room_name
|
||
properties:
|
||
command_id:
|
||
type: string
|
||
description: 房间创建命令幂等键;客户端按创建房间动作生成,同一动作的 HTTP 重试必须复用。
|
||
seat_count:
|
||
type: integer
|
||
format: int32
|
||
minimum: 0
|
||
description: 麦位数量,可省略;不传或传 0 时使用后台房间配置默认值,正数必须命中后台启用座位数。
|
||
mode:
|
||
type: string
|
||
minLength: 1
|
||
description: 房间模式,不能为空;当前服务只保存并透出该值,不在 gateway 做枚举分发。
|
||
room_name:
|
||
type: string
|
||
minLength: 1
|
||
maxLength: 128
|
||
description: 房间展示名称,必填;room-service 写入 `room_ext.title` 并投影到房间列表。
|
||
room_avatar:
|
||
type: string
|
||
maxLength: 512
|
||
description: 房间头像,可选;为空时 room-service 写入默认系统头像 `hyapp://room/default-avatar`。
|
||
room_description:
|
||
type: string
|
||
maxLength: 512
|
||
description: 房间简介,可选;只写入 `room_ext.description`,不进入房间高频核心字段。
|
||
UpdateRoomProfileRequest:
|
||
type: object
|
||
required:
|
||
- room_id
|
||
- command_id
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按用户动作生成,同一动作的 HTTP 重试必须复用。
|
||
room_name:
|
||
type: string
|
||
minLength: 1
|
||
maxLength: 128
|
||
description: 可选;传入时更新房间标题。
|
||
room_avatar:
|
||
type: string
|
||
maxLength: 512
|
||
description: 可选;传空字符串时 room-service 恢复系统默认头像。
|
||
room_description:
|
||
type: string
|
||
maxLength: 512
|
||
description: 可选;允许传空字符串清空简介。
|
||
seat_count:
|
||
type: integer
|
||
format: int32
|
||
enum:
|
||
- 10
|
||
- 15
|
||
- 20
|
||
- 25
|
||
- 30
|
||
description: 可选;必须是后台已启用座位数。缩容时高编号麦位必须空闲且未锁。
|
||
JoinRoomRequest:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按用户动作生成,同一动作的 HTTP 重试必须复用。
|
||
role:
|
||
type: string
|
||
enum:
|
||
- audience
|
||
description: 首版固定 audience;上麦成功后客户端再切换发布角色。
|
||
password:
|
||
type: string
|
||
maxLength: 64
|
||
description: 锁房时必填;只用于本次 JoinRoom 校验,服务端不保存明文。
|
||
RoomHeartbeatRequest:
|
||
type: object
|
||
required:
|
||
- room_id
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 心跳命令幂等键;客户端按单次心跳动作生成,HTTP 重试同一次心跳必须复用。
|
||
LeaveRoomRequest:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按用户动作生成,同一动作的 HTTP 重试必须复用。
|
||
MicUpRequest:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按用户动作生成,同一动作的 HTTP 重试必须复用。
|
||
seat_no:
|
||
type: integer
|
||
format: int32
|
||
MicDownRequest:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按用户动作生成,同一动作的 HTTP 重试必须复用。
|
||
target_user_id:
|
||
type: integer
|
||
format: int64
|
||
reason:
|
||
type: string
|
||
description: 主动下麦可为空;系统自动下麦会使用 publish_timeout 等稳定原因。
|
||
ChangeMicSeatRequest:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按用户动作生成,同一动作的 HTTP 重试必须复用。
|
||
target_user_id:
|
||
type: integer
|
||
format: int64
|
||
seat_no:
|
||
type: integer
|
||
format: int32
|
||
ConfirmMicPublishingRequest:
|
||
type: object
|
||
required:
|
||
- room_id
|
||
- mic_session_id
|
||
- room_version
|
||
- event_time_ms
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按单次确认事件生成,HTTP 重试同一确认事件必须复用。
|
||
target_user_id:
|
||
type: integer
|
||
format: int64
|
||
description: 为空时默认确认当前登录用户;RTC webhook 编排可显式传目标用户。
|
||
mic_session_id:
|
||
type: string
|
||
room_version:
|
||
type: integer
|
||
format: int64
|
||
event_time_ms:
|
||
type: integer
|
||
format: int64
|
||
source:
|
||
type: string
|
||
description: 例如 client 或 rtc_webhook。
|
||
SetMicSeatLockRequest:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按用户动作生成,同一动作的 HTTP 重试必须复用。
|
||
seat_no:
|
||
type: integer
|
||
format: int32
|
||
locked:
|
||
type: boolean
|
||
SetChatEnabledRequest:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按用户动作生成,同一动作的 HTTP 重试必须复用。
|
||
enabled:
|
||
type: boolean
|
||
SetRoomPasswordRequest:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按用户动作生成,同一动作的 HTTP 重试必须复用。
|
||
locked:
|
||
type: boolean
|
||
password:
|
||
type: string
|
||
description: "`locked=true` 时必填;`locked=false` 时忽略。"
|
||
SetRoomAdminRequest:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按用户动作生成,同一动作的 HTTP 重试必须复用。
|
||
target_user_id:
|
||
type: integer
|
||
format: int64
|
||
enabled:
|
||
type: boolean
|
||
MuteUserRequest:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按用户动作生成,同一动作的 HTTP 重试必须复用。
|
||
target_user_id:
|
||
type: integer
|
||
format: int64
|
||
muted:
|
||
type: boolean
|
||
KickUserRequest:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按用户动作生成,同一动作的 HTTP 重试必须复用。
|
||
target_user_id:
|
||
type: integer
|
||
format: int64
|
||
duration_ms:
|
||
type: integer
|
||
format: int64
|
||
description: 0 表示永久禁止进房;大于 0 表示从服务端当前 UTC 时间起禁止进房的毫秒时长。
|
||
UnbanUserRequest:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按用户动作生成,同一动作的 HTTP 重试必须复用。
|
||
target_user_id:
|
||
type: integer
|
||
format: int64
|
||
SendGiftRequest:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
description: 房间命令幂等键;客户端按用户动作生成,同一动作的 HTTP 重试必须复用。
|
||
target_user_id:
|
||
type: integer
|
||
format: int64
|
||
gift_id:
|
||
type: string
|
||
gift_count:
|
||
type: integer
|
||
format: int32
|
||
CommandResult:
|
||
type: object
|
||
properties:
|
||
applied:
|
||
type: boolean
|
||
room_version:
|
||
type: integer
|
||
format: int64
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
RoomUser:
|
||
type: object
|
||
properties:
|
||
user_id:
|
||
type: integer
|
||
format: int64
|
||
role:
|
||
type: string
|
||
joined_at_ms:
|
||
type: integer
|
||
format: int64
|
||
last_seen_at_ms:
|
||
type: integer
|
||
format: int64
|
||
SeatState:
|
||
type: object
|
||
properties:
|
||
seat_no:
|
||
type: integer
|
||
format: int32
|
||
user_id:
|
||
type: integer
|
||
format: int64
|
||
locked:
|
||
type: boolean
|
||
publish_state:
|
||
type: string
|
||
enum:
|
||
- pending_publish
|
||
- publishing
|
||
- idle
|
||
description: pending_publish 表示业务占麦成功但 RTC 尚未确认发流;publishing 表示已确认发布音频。
|
||
mic_session_id:
|
||
type: string
|
||
publish_deadline_ms:
|
||
type: integer
|
||
format: int64
|
||
mic_session_room_version:
|
||
type: integer
|
||
format: int64
|
||
last_publish_event_time_ms:
|
||
type: integer
|
||
format: int64
|
||
RankItem:
|
||
type: object
|
||
properties:
|
||
user_id:
|
||
type: integer
|
||
format: int64
|
||
score:
|
||
type: integer
|
||
format: int64
|
||
gift_value:
|
||
type: integer
|
||
format: int64
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
RoomSnapshot:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
description: App 作用域房间长 ID,格式为 `<app_code>_<uuid>`。
|
||
room_short_id:
|
||
type: string
|
||
description: 房间短 ID,首版等于创建者当前 `display_user_id`。
|
||
owner_user_id:
|
||
type: integer
|
||
format: int64
|
||
mode:
|
||
type: string
|
||
status:
|
||
type: string
|
||
chat_enabled:
|
||
type: boolean
|
||
locked:
|
||
type: boolean
|
||
mic_seats:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/SeatState"
|
||
online_users:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RoomUser"
|
||
admin_user_ids:
|
||
type: array
|
||
items:
|
||
type: integer
|
||
format: int64
|
||
ban_user_ids:
|
||
type: array
|
||
items:
|
||
type: integer
|
||
format: int64
|
||
ban_states:
|
||
type: array
|
||
description: 房间 ban 的时间边界;expires_at_ms 为 0 表示永久。
|
||
items:
|
||
$ref: "#/definitions/RoomBanState"
|
||
mute_user_ids:
|
||
type: array
|
||
items:
|
||
type: integer
|
||
format: int64
|
||
gift_rank:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RankItem"
|
||
room_ext:
|
||
type: object
|
||
description: 扩展字段集合;创建房间展示资料固定使用 `title`、`cover_url`、`description`。
|
||
additionalProperties:
|
||
type: string
|
||
heat:
|
||
type: integer
|
||
format: int64
|
||
version:
|
||
type: integer
|
||
format: int64
|
||
online_count:
|
||
type: integer
|
||
format: int32
|
||
room_border:
|
||
$ref: "#/definitions/RoomDecorationData"
|
||
room_name_style:
|
||
$ref: "#/definitions/RoomDecorationData"
|
||
active_background:
|
||
$ref: "#/definitions/RoomBackgroundData"
|
||
RoomBanState:
|
||
type: object
|
||
properties:
|
||
user_id:
|
||
type: integer
|
||
format: int64
|
||
actor_user_id:
|
||
type: integer
|
||
format: int64
|
||
created_at_ms:
|
||
type: integer
|
||
format: int64
|
||
expires_at_ms:
|
||
type: integer
|
||
format: int64
|
||
description: 0 表示永久;非 0 表示该 UTC 毫秒后可重新进房。
|
||
RoomBannedUserData:
|
||
type: object
|
||
properties:
|
||
user_id:
|
||
type: string
|
||
display_user_id:
|
||
type: string
|
||
username:
|
||
type: string
|
||
avatar:
|
||
type: string
|
||
country:
|
||
type: string
|
||
country_name:
|
||
type: string
|
||
country_display_name:
|
||
type: string
|
||
country_flag:
|
||
type: string
|
||
actor_user_id:
|
||
type: string
|
||
created_at_ms:
|
||
type: integer
|
||
format: int64
|
||
unban_at_ms:
|
||
type: integer
|
||
format: int64
|
||
description: 0 表示永久,需要手动解除;非 0 表示自动解封 UTC 毫秒。
|
||
remaining_ms:
|
||
type: integer
|
||
format: int64
|
||
permanent:
|
||
type: boolean
|
||
RoomBannedUsersData:
|
||
type: object
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RoomBannedUserData"
|
||
total:
|
||
type: integer
|
||
format: int64
|
||
page:
|
||
type: integer
|
||
format: int32
|
||
page_size:
|
||
type: integer
|
||
format: int32
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
RoomListItemData:
|
||
type: object
|
||
required:
|
||
- room_id
|
||
- im_group_id
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
im_group_id:
|
||
type: string
|
||
description: 腾讯 IM 房间群 ID。当前等于 `room_id`,只代表目标群,不代表入群授权。
|
||
owner_user_id:
|
||
type: string
|
||
title:
|
||
type: string
|
||
cover_url:
|
||
type: string
|
||
mode:
|
||
type: string
|
||
status:
|
||
type: string
|
||
locked:
|
||
type: boolean
|
||
description: true 表示该房间需要入房密码;列表和搜索只返回标识,不返回密码。
|
||
heat:
|
||
type: integer
|
||
format: int64
|
||
online_count:
|
||
type: integer
|
||
format: int32
|
||
seat_count:
|
||
type: integer
|
||
format: int32
|
||
occupied_seat_count:
|
||
type: integer
|
||
format: int32
|
||
visible_region_id:
|
||
type: integer
|
||
format: int64
|
||
app_code:
|
||
type: string
|
||
room_short_id:
|
||
type: string
|
||
country_code:
|
||
type: string
|
||
description: 房主国家投影的大写国家码,首页国家筛选和卡片展示均以该字段为准。
|
||
country_flag:
|
||
type: string
|
||
description: 根据 `country_code` 派生的国旗 emoji;无有效国家投影时省略。
|
||
RoomListData:
|
||
type: object
|
||
properties:
|
||
rooms:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RoomListItemData"
|
||
next_cursor:
|
||
type: string
|
||
countries:
|
||
type: array
|
||
description: 兼容旧客户端的当前用户区域国家列表;完整跨区域目录请使用 `/api/v1/rooms/filters`。
|
||
items:
|
||
$ref: "#/definitions/RoomListCountryData"
|
||
RoomListCountryData:
|
||
type: object
|
||
required:
|
||
- country_code
|
||
properties:
|
||
country_id:
|
||
type: integer
|
||
format: int64
|
||
country_code:
|
||
type: string
|
||
country_name:
|
||
type: string
|
||
country_display_name:
|
||
type: string
|
||
country_flag:
|
||
type: string
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
RoomFilterAllData:
|
||
type: object
|
||
required:
|
||
- filter_type
|
||
- query_key
|
||
- query_value
|
||
properties:
|
||
filter_type:
|
||
type: string
|
||
enum: [all]
|
||
query_key:
|
||
type: string
|
||
description: 固定为空字符串;客户端不附加筛选参数。
|
||
query_value:
|
||
type: string
|
||
description: 固定为空字符串。
|
||
RoomFilterRegionData:
|
||
type: object
|
||
required:
|
||
- filter_type
|
||
- query_key
|
||
- query_value
|
||
- region_id
|
||
- region_code
|
||
- region_name
|
||
- sort_order
|
||
properties:
|
||
filter_type:
|
||
type: string
|
||
enum: [region]
|
||
query_key:
|
||
type: string
|
||
enum: [region_id]
|
||
query_value:
|
||
type: string
|
||
description: region_id 的十进制字符串,可原样回传。
|
||
region_id:
|
||
type: integer
|
||
format: int64
|
||
region_code:
|
||
type: string
|
||
region_name:
|
||
type: string
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
RoomFilterCountryData:
|
||
type: object
|
||
required:
|
||
- filter_type
|
||
- query_key
|
||
- query_value
|
||
- parent_region_id
|
||
- country_id
|
||
- country_code
|
||
- country_name
|
||
- country_display_name
|
||
- country_flag
|
||
- sort_order
|
||
properties:
|
||
filter_type:
|
||
type: string
|
||
enum: [country]
|
||
query_key:
|
||
type: string
|
||
enum: [country_code]
|
||
query_value:
|
||
type: string
|
||
description: 规范化后的大写 country_code,可原样回传。
|
||
parent_region_id:
|
||
type: integer
|
||
format: int64
|
||
description: 仅用于客户端把国家分组到区域;筛选国家时不要同时传 region_id。
|
||
country_id:
|
||
type: integer
|
||
format: int64
|
||
country_code:
|
||
type: string
|
||
country_name:
|
||
type: string
|
||
country_display_name:
|
||
type: string
|
||
country_flag:
|
||
type: string
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
RoomFilterCatalogData:
|
||
type: object
|
||
required:
|
||
- all
|
||
- regions
|
||
- countries
|
||
properties:
|
||
all:
|
||
$ref: "#/definitions/RoomFilterAllData"
|
||
regions:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RoomFilterRegionData"
|
||
countries:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RoomFilterCountryData"
|
||
MyRoomData:
|
||
type: object
|
||
required:
|
||
- has_room
|
||
- server_time_ms
|
||
properties:
|
||
has_room:
|
||
type: boolean
|
||
room:
|
||
$ref: "#/definitions/RoomListItemData"
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
RoomInitialData:
|
||
type: object
|
||
required:
|
||
- room_id
|
||
- im_group_id
|
||
- chat_enabled
|
||
- online_count
|
||
- seat_count
|
||
- version
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
im_group_id:
|
||
type: string
|
||
room_short_id:
|
||
type: string
|
||
title:
|
||
type: string
|
||
cover_url:
|
||
type: string
|
||
background_url:
|
||
type: string
|
||
description:
|
||
type: string
|
||
owner_user_id:
|
||
type: string
|
||
mode:
|
||
type: string
|
||
status:
|
||
type: string
|
||
chat_enabled:
|
||
type: boolean
|
||
locked:
|
||
type: boolean
|
||
description: true 表示该房间需要入房密码。
|
||
heat:
|
||
type: integer
|
||
format: int64
|
||
online_count:
|
||
type: integer
|
||
format: int32
|
||
seat_count:
|
||
type: integer
|
||
format: int32
|
||
occupied_seat_count:
|
||
type: integer
|
||
format: int32
|
||
visible_region_id:
|
||
type: integer
|
||
format: int64
|
||
version:
|
||
type: integer
|
||
format: int64
|
||
active_background:
|
||
$ref: "#/definitions/RoomBackgroundData"
|
||
room_border:
|
||
$ref: "#/definitions/RoomDecorationData"
|
||
room_name_style:
|
||
$ref: "#/definitions/RoomDecorationData"
|
||
RoomViewerData:
|
||
type: object
|
||
properties:
|
||
user_id:
|
||
type: string
|
||
role:
|
||
type: string
|
||
joined_at_ms:
|
||
type: integer
|
||
format: int64
|
||
last_seen_at_ms:
|
||
type: integer
|
||
format: int64
|
||
RoomSeatData:
|
||
type: object
|
||
properties:
|
||
seat_no:
|
||
type: integer
|
||
format: int32
|
||
user_id:
|
||
type: string
|
||
locked:
|
||
type: boolean
|
||
publish_state:
|
||
type: string
|
||
mic_session_id:
|
||
type: string
|
||
publish_deadline_ms:
|
||
type: integer
|
||
format: int64
|
||
mic_muted:
|
||
type: boolean
|
||
seat_status:
|
||
type: string
|
||
mic_heartbeat_at_ms:
|
||
type: integer
|
||
format: int64
|
||
gift_value:
|
||
type: integer
|
||
format: int64
|
||
RoomRankItemData:
|
||
type: object
|
||
properties:
|
||
user_id:
|
||
type: string
|
||
score:
|
||
type: integer
|
||
format: int64
|
||
gift_value:
|
||
type: integer
|
||
format: int64
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
RoomContributionRankItemData:
|
||
type: object
|
||
properties:
|
||
rank:
|
||
type: integer
|
||
format: int64
|
||
user_id:
|
||
type: string
|
||
score:
|
||
type: integer
|
||
format: int64
|
||
gift_value:
|
||
type: integer
|
||
format: int64
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
profile:
|
||
$ref: "#/definitions/RoomUserProfileData"
|
||
RoomUserProfileData:
|
||
type: object
|
||
properties:
|
||
user_id:
|
||
type: string
|
||
display_user_id:
|
||
type: string
|
||
pretty_id:
|
||
type: string
|
||
pretty_display_user_id:
|
||
type: string
|
||
username:
|
||
type: string
|
||
avatar:
|
||
type: string
|
||
gender:
|
||
type: string
|
||
age:
|
||
type: integer
|
||
format: int32
|
||
country:
|
||
type: string
|
||
country_name:
|
||
type: string
|
||
country_display_name:
|
||
type: string
|
||
country_flag:
|
||
type: string
|
||
vip:
|
||
type: object
|
||
level:
|
||
type: object
|
||
level_badges:
|
||
type: object
|
||
badges:
|
||
type: array
|
||
items:
|
||
type: object
|
||
avatar_frame:
|
||
$ref: "#/definitions/AppearanceResourceData"
|
||
profile_card:
|
||
$ref: "#/definitions/AppearanceResourceData"
|
||
vehicle:
|
||
$ref: "#/definitions/AppearanceResourceData"
|
||
mic_seat_animation:
|
||
$ref: "#/definitions/AppearanceResourceData"
|
||
description: 当前麦位动效佩戴快照;空对象表示未佩戴,format 缺省表示后台没有配置受支持 renderer。
|
||
charm:
|
||
type: integer
|
||
format: int64
|
||
RoomIMData:
|
||
type: object
|
||
properties:
|
||
group_id:
|
||
type: string
|
||
need_join_group:
|
||
type: boolean
|
||
RoomRTCData:
|
||
type: object
|
||
required:
|
||
- need_token
|
||
- available
|
||
properties:
|
||
need_token:
|
||
type: boolean
|
||
available:
|
||
type: boolean
|
||
token:
|
||
$ref: "#/definitions/TencentRTCTokenData"
|
||
reason:
|
||
type: string
|
||
enum:
|
||
- rtc_token_unavailable
|
||
CurrentRoomData:
|
||
type: object
|
||
required:
|
||
- has_current_room
|
||
- room_id
|
||
- room_version
|
||
- role
|
||
- mic_session_id
|
||
- publish_state
|
||
- need_join_im_group
|
||
- need_rtc_token
|
||
- server_time_ms
|
||
properties:
|
||
has_current_room:
|
||
type: boolean
|
||
room_id:
|
||
type: string
|
||
room_version:
|
||
type: integer
|
||
format: int64
|
||
role:
|
||
type: string
|
||
enum:
|
||
- owner
|
||
- host
|
||
- admin
|
||
- audience
|
||
mic_session_id:
|
||
type: string
|
||
publish_state:
|
||
type: string
|
||
enum:
|
||
- ""
|
||
- pending_publish
|
||
- publishing
|
||
need_join_im_group:
|
||
type: boolean
|
||
need_rtc_token:
|
||
type: boolean
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
RoomSnapshotData:
|
||
type: object
|
||
required:
|
||
- room
|
||
- server_time_ms
|
||
properties:
|
||
room:
|
||
$ref: "#/definitions/RoomSnapshot"
|
||
is_followed:
|
||
type: boolean
|
||
description: 当前 token 用户是否已关注该房间;来自 room-service 房间关注关系,不属于 Room Cell 核心状态。
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
RoomPermissionsData:
|
||
type: object
|
||
properties:
|
||
is_owner:
|
||
type: boolean
|
||
is_admin:
|
||
type: boolean
|
||
is_muted:
|
||
type: boolean
|
||
can_speak:
|
||
type: boolean
|
||
can_send_gift:
|
||
type: boolean
|
||
can_mic_up:
|
||
type: boolean
|
||
can_manage_room:
|
||
type: boolean
|
||
can_leave_room:
|
||
type: boolean
|
||
can_close_room:
|
||
type: boolean
|
||
can_mute_mic:
|
||
type: boolean
|
||
can_open_gift_box:
|
||
type: boolean
|
||
RoomDetailData:
|
||
type: object
|
||
required:
|
||
- room
|
||
- viewer
|
||
- is_followed
|
||
- seats
|
||
- rank_top
|
||
- online_count
|
||
- permissions
|
||
- im
|
||
- rtc
|
||
- server_time_ms
|
||
properties:
|
||
room:
|
||
$ref: "#/definitions/RoomInitialData"
|
||
viewer:
|
||
$ref: "#/definitions/RoomViewerData"
|
||
is_followed:
|
||
type: boolean
|
||
seats:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RoomSeatData"
|
||
rank_top:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RoomRankItemData"
|
||
online_count:
|
||
type: integer
|
||
format: int32
|
||
permissions:
|
||
$ref: "#/definitions/RoomPermissionsData"
|
||
profiles:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RoomUserProfileData"
|
||
im:
|
||
$ref: "#/definitions/RoomIMData"
|
||
rtc:
|
||
$ref: "#/definitions/RoomRTCData"
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
RoomContributionRankData:
|
||
type: object
|
||
required:
|
||
- room_id
|
||
- period
|
||
- start_at_ms
|
||
- end_at_ms
|
||
- total
|
||
- contribution_rank
|
||
- profiles
|
||
- server_time_ms
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
period:
|
||
type: string
|
||
enum:
|
||
- day
|
||
- week
|
||
- month
|
||
start_at_ms:
|
||
type: integer
|
||
format: int64
|
||
description: 周期开始 UTC epoch ms,包含。
|
||
end_at_ms:
|
||
type: integer
|
||
format: int64
|
||
description: 周期结束 UTC epoch ms,不包含。
|
||
total:
|
||
type: integer
|
||
format: int64
|
||
contribution_rank:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RoomContributionRankItemData"
|
||
profiles:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RoomUserProfileData"
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
RoomFollowData:
|
||
type: object
|
||
required:
|
||
- room_id
|
||
- is_followed
|
||
- server_time_ms
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
is_followed:
|
||
type: boolean
|
||
followed_at_ms:
|
||
type: integer
|
||
format: int64
|
||
description: POST 关注成功时返回;DELETE 取消关注时省略。
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
CreateRoomResponse:
|
||
type: object
|
||
required:
|
||
- result
|
||
- room
|
||
- seats
|
||
- im
|
||
- server_time_ms
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
room:
|
||
$ref: "#/definitions/RoomInitialData"
|
||
seats:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RoomSeatData"
|
||
im:
|
||
$ref: "#/definitions/RoomIMData"
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
JoinRoomResponse:
|
||
type: object
|
||
required:
|
||
- result
|
||
- room
|
||
- viewer
|
||
- seats
|
||
- contribution_rank
|
||
- profiles
|
||
- im
|
||
- rtc
|
||
- server_time_ms
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
room:
|
||
$ref: "#/definitions/RoomInitialData"
|
||
viewer:
|
||
$ref: "#/definitions/RoomViewerData"
|
||
seats:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RoomSeatData"
|
||
contribution_rank:
|
||
type: array
|
||
description: 首屏贡献榜,当前最多返回前 10 名;完整榜单后续走分页接口。
|
||
items:
|
||
$ref: "#/definitions/RoomRankItemData"
|
||
profiles:
|
||
type: array
|
||
description: 只包含房主、当前用户、麦位用户和首屏贡献榜用户的展示资料。
|
||
items:
|
||
$ref: "#/definitions/RoomUserProfileData"
|
||
im:
|
||
$ref: "#/definitions/RoomIMData"
|
||
rtc:
|
||
$ref: "#/definitions/RoomRTCData"
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
UpdateRoomProfileResponse:
|
||
type: object
|
||
required:
|
||
- result
|
||
- room
|
||
- seats
|
||
- server_time_ms
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
room:
|
||
$ref: "#/definitions/RoomInitialData"
|
||
seats:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RoomSeatData"
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
RoomHeartbeatResponse:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
user:
|
||
$ref: "#/definitions/RoomUser"
|
||
room:
|
||
$ref: "#/definitions/RoomSnapshot"
|
||
LeaveRoomResponse:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
room:
|
||
$ref: "#/definitions/RoomSnapshot"
|
||
MicUpResponse:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
seat_no:
|
||
type: integer
|
||
format: int32
|
||
room:
|
||
$ref: "#/definitions/RoomSnapshot"
|
||
mic_session_id:
|
||
type: string
|
||
publish_deadline_ms:
|
||
type: integer
|
||
format: int64
|
||
MicDownResponse:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
seat_no:
|
||
type: integer
|
||
format: int32
|
||
room:
|
||
$ref: "#/definitions/RoomSnapshot"
|
||
ChangeMicSeatResponse:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
room:
|
||
$ref: "#/definitions/RoomSnapshot"
|
||
ConfirmMicPublishingResponse:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
seat_no:
|
||
type: integer
|
||
format: int32
|
||
room:
|
||
$ref: "#/definitions/RoomSnapshot"
|
||
SetMicSeatLockResponse:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
room:
|
||
$ref: "#/definitions/RoomSnapshot"
|
||
SetChatEnabledResponse:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
room:
|
||
$ref: "#/definitions/RoomSnapshot"
|
||
SetRoomAdminResponse:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
room:
|
||
$ref: "#/definitions/RoomSnapshot"
|
||
MuteUserResponse:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
room:
|
||
$ref: "#/definitions/RoomSnapshot"
|
||
KickUserResponse:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
room:
|
||
$ref: "#/definitions/RoomSnapshot"
|
||
rtc_kicked:
|
||
type: boolean
|
||
description: room-service 是否已通过 TRTC 服务端接口移除目标用户;失败不回滚踢人事实。
|
||
rtc_kick_error:
|
||
type: string
|
||
description: TRTC 服务端踢人失败原因,仅用于排障和告警。
|
||
UnbanUserResponse:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
room:
|
||
$ref: "#/definitions/RoomSnapshot"
|
||
SendGiftResponse:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
billing_receipt_id:
|
||
type: string
|
||
room_heat:
|
||
type: integer
|
||
format: int64
|
||
gift_rank:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RankItem"
|
||
room:
|
||
$ref: "#/definitions/RoomSnapshot"
|
||
AuthTokenEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/AuthTokenData"
|
||
PasswordSetEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/PasswordSetData"
|
||
LogoutEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/LogoutData"
|
||
TencentIMUserSigEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/TencentIMUserSigData"
|
||
TencentRTCTokenEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/TencentRTCTokenData"
|
||
UploadFileEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/UploadFileData"
|
||
BindPushTokenEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/BindPushTokenData"
|
||
DeletePushTokenEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/DeletePushTokenData"
|
||
UserIdentityEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/UserIdentityData"
|
||
UserHostIdentityEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/UserHostIdentityData"
|
||
MyOverviewEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/MyOverviewData"
|
||
MyInviteOverviewEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/MyInviteOverviewData"
|
||
UserProfileEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/UserProfileData"
|
||
UserProfilesBatchEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/UserProfilesBatchData"
|
||
MessageTabsEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/MessageTabsData"
|
||
MessageListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/MessageListData"
|
||
MessageReadEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/MessageReadData"
|
||
MessageReadAllEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/MessageReadAllData"
|
||
MessageDeleteEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/MessageDeleteData"
|
||
CompleteOnboardingEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/CompleteOnboardingData"
|
||
CountryListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/CountryListData"
|
||
AppBootstrapEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/AppBootstrapData"
|
||
AppVersionEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/AppVersionData"
|
||
H5LinkListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/H5LinkListData"
|
||
SplashScreenListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/SplashScreenListData"
|
||
PopupListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/PopupListData"
|
||
ResourceListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/ResourceListData"
|
||
ManagerGrantResourceListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/ManagerGrantResourceListData"
|
||
BusinessUserLookupEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/BusinessUserLookupData"
|
||
ManagerResourceGrantEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/ManagerResourceGrantData"
|
||
ResourceGroupEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/ResourceGroupData"
|
||
GiftListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/GiftListData"
|
||
GiftTabListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/GiftTabListData"
|
||
UserResourceListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/UserResourceListData"
|
||
UserResourceEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/UserResourceData"
|
||
CreateRoomEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/CreateRoomResponse"
|
||
UpdateRoomProfileEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/UpdateRoomProfileResponse"
|
||
RoomListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/RoomListData"
|
||
RoomFilterCatalogEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/RoomFilterCatalogData"
|
||
MyRoomEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/MyRoomData"
|
||
CurrentRoomEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/CurrentRoomData"
|
||
RoomSnapshotEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/RoomSnapshotData"
|
||
RoomDetailEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/RoomDetailData"
|
||
RoomContributionRankEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/RoomContributionRankData"
|
||
RoomFollowEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/RoomFollowData"
|
||
JoinRoomEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/JoinRoomResponse"
|
||
RoomHeartbeatEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/RoomHeartbeatResponse"
|
||
LeaveRoomEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/LeaveRoomResponse"
|
||
MicUpEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/MicUpResponse"
|
||
MicDownEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/MicDownResponse"
|
||
ChangeMicSeatEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/ChangeMicSeatResponse"
|
||
ConfirmMicPublishingEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/ConfirmMicPublishingResponse"
|
||
SetMicSeatLockEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/SetMicSeatLockResponse"
|
||
SetChatEnabledEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/SetChatEnabledResponse"
|
||
SetRoomPasswordEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/UpdateRoomProfileResponse"
|
||
SetRoomAdminEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/SetRoomAdminResponse"
|
||
MuteUserEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/MuteUserResponse"
|
||
KickUserEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/KickUserResponse"
|
||
UnbanUserEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/UnbanUserResponse"
|
||
RoomBannedUsersEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/RoomBannedUsersData"
|
||
SendGiftEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/SendGiftResponse"
|
||
RechargeProductListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/RechargeProductListData"
|
||
GooglePaymentConfirmEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/GooglePaymentConfirmData"
|
||
CoinSellerTransferEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/CoinSellerTransferResponse"
|
||
ProfileVisitData:
|
||
type: object
|
||
required:
|
||
- recorded
|
||
- target_stats_hidden
|
||
properties:
|
||
recorded:
|
||
type: boolean
|
||
target_stats_hidden:
|
||
type: boolean
|
||
description: true 时 target_stats 字段完全省略;该值按目标用户当前 VIP 权益实时判定。
|
||
target_stats:
|
||
$ref: "#/definitions/MyOverviewProfileStatsData"
|
||
target_profile:
|
||
$ref: "#/definitions/UserProfileData"
|
||
ProfileVisitEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/ProfileVisitData"
|
||
ProfileVisitorRecordData:
|
||
type: object
|
||
required:
|
||
- visitor_identity_hidden
|
||
- target_user_id
|
||
- visit_count
|
||
- last_visited_at_ms
|
||
properties:
|
||
visitor_user_id:
|
||
type: string
|
||
description: 只在 visitor_identity_hidden=false 时返回。
|
||
anonymous_visit_id:
|
||
type: string
|
||
description: 只在 visitor_identity_hidden=true 时返回;随机且仅在同一目标用户下稳定,不能查询资料。
|
||
visitor_identity_hidden:
|
||
type: boolean
|
||
target_user_id:
|
||
type: string
|
||
visit_count:
|
||
type: integer
|
||
format: int64
|
||
last_visited_at_ms:
|
||
type: integer
|
||
format: int64
|
||
ProfileVisitorListData:
|
||
type: object
|
||
required:
|
||
- records
|
||
- total
|
||
properties:
|
||
records:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/ProfileVisitorRecordData"
|
||
total:
|
||
type: integer
|
||
format: int64
|
||
ProfileVisitorListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/ProfileVisitorListData"
|
||
VIPStatusData:
|
||
type: object
|
||
required:
|
||
- level
|
||
- name
|
||
- active
|
||
- started_at_ms
|
||
- expires_at_ms
|
||
properties:
|
||
level:
|
||
type: integer
|
||
format: int32
|
||
name:
|
||
type: string
|
||
active:
|
||
type: boolean
|
||
started_at_ms:
|
||
type: integer
|
||
format: int64
|
||
expires_at_ms:
|
||
type: integer
|
||
format: int64
|
||
program_type:
|
||
type: string
|
||
enum: [tiered_privilege_v1, legacy_timed]
|
||
config_version:
|
||
type: integer
|
||
format: int64
|
||
VIPProgramConfigData:
|
||
type: object
|
||
properties:
|
||
app_code:
|
||
type: string
|
||
program_type:
|
||
type: string
|
||
enum: [tiered_privilege_v1, legacy_timed]
|
||
level_count:
|
||
type: integer
|
||
format: int32
|
||
same_level_expiry_policy:
|
||
type: string
|
||
upgrade_expiry_policy:
|
||
type: string
|
||
downgrade_purchase_policy:
|
||
type: string
|
||
benefit_inheritance_policy:
|
||
type: string
|
||
grant_mode:
|
||
type: string
|
||
trial_card_enabled:
|
||
type: boolean
|
||
status:
|
||
type: string
|
||
config_version:
|
||
type: integer
|
||
format: int64
|
||
updated_by_admin_id:
|
||
type: integer
|
||
format: int64
|
||
created_at_ms:
|
||
type: integer
|
||
format: int64
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
VIPBenefitPreviewItemData:
|
||
type: object
|
||
properties:
|
||
preview_id:
|
||
type: string
|
||
title:
|
||
type: string
|
||
media_type:
|
||
type: string
|
||
asset_url:
|
||
type: string
|
||
preview_url:
|
||
type: string
|
||
animation_url:
|
||
type: string
|
||
composition_type:
|
||
type: string
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
VIPBenefitNumericRewardData:
|
||
type: object
|
||
properties:
|
||
label:
|
||
type: string
|
||
value:
|
||
type: integer
|
||
format: int64
|
||
unit:
|
||
type: string
|
||
period:
|
||
type: string
|
||
VIPBenefitPresentationData:
|
||
type: object
|
||
required:
|
||
- description
|
||
- preview_items
|
||
- numeric_reward
|
||
properties:
|
||
description:
|
||
type: string
|
||
preview_items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/VIPBenefitPreviewItemData"
|
||
numeric_reward:
|
||
$ref: "#/definitions/VIPBenefitNumericRewardData"
|
||
x-nullable: true
|
||
description: 非数值奖励权益返回 null。
|
||
VIPBenefitData:
|
||
type: object
|
||
required:
|
||
- benefit_code
|
||
- name
|
||
- benefit_type
|
||
- unlock_level
|
||
- status
|
||
- trial_enabled
|
||
- resource_id
|
||
- resource_type
|
||
- execution_scope
|
||
- auto_equip
|
||
- sort_order
|
||
- metadata_json
|
||
- presentation
|
||
properties:
|
||
benefit_code:
|
||
type: string
|
||
name:
|
||
type: string
|
||
benefit_type:
|
||
type: string
|
||
unlock_level:
|
||
type: integer
|
||
format: int32
|
||
status:
|
||
type: string
|
||
trial_enabled:
|
||
type: boolean
|
||
resource_id:
|
||
type: integer
|
||
format: int64
|
||
resource_type:
|
||
type: string
|
||
execution_scope:
|
||
type: string
|
||
auto_equip:
|
||
type: boolean
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
metadata_json:
|
||
type: string
|
||
created_at_ms:
|
||
type: integer
|
||
format: int64
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
presentation:
|
||
$ref: "#/definitions/VIPBenefitPresentationData"
|
||
x-nullable: true
|
||
description: metadata_json 没有结构化 presentation 时固定返回 null。
|
||
resource:
|
||
$ref: "#/definitions/ResourceData"
|
||
description: 仅在 wallet 已确认资源真实、同 App、active 且类型匹配时返回;否则字段省略。真实资源缺失时 benefit 必须保持 disabled 且 resource_id=0,后台应先建 resource 再绑定。
|
||
VIPRewardItemData:
|
||
type: object
|
||
properties:
|
||
resource_id:
|
||
type: integer
|
||
format: int64
|
||
resource_code:
|
||
type: string
|
||
resource_type:
|
||
type: string
|
||
name:
|
||
type: string
|
||
quantity:
|
||
type: integer
|
||
format: int64
|
||
expires_at_ms:
|
||
type: integer
|
||
format: int64
|
||
cover_url:
|
||
type: string
|
||
asset_url:
|
||
type: string
|
||
preview_url:
|
||
type: string
|
||
animation_url:
|
||
type: string
|
||
VIPPackageData:
|
||
type: object
|
||
properties:
|
||
level:
|
||
type: integer
|
||
format: int32
|
||
name:
|
||
type: string
|
||
status:
|
||
type: string
|
||
price_coin:
|
||
type: integer
|
||
format: int64
|
||
duration_ms:
|
||
type: integer
|
||
format: int64
|
||
reward_resource_group_id:
|
||
type: integer
|
||
format: int64
|
||
reward_items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/VIPRewardItemData"
|
||
can_purchase:
|
||
type: boolean
|
||
sort_order:
|
||
type: integer
|
||
format: int32
|
||
recharge_gate_required:
|
||
type: boolean
|
||
required_recharge_coin_amount:
|
||
type: integer
|
||
format: int64
|
||
user_recharge_coin_amount:
|
||
type: integer
|
||
format: int64
|
||
purchase_locked_reason:
|
||
type: string
|
||
benefits:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/VIPBenefitData"
|
||
config_version:
|
||
type: integer
|
||
format: int64
|
||
VIPTrialCardData:
|
||
type: object
|
||
properties:
|
||
trial_card_id:
|
||
type: string
|
||
entitlement_id:
|
||
type: string
|
||
resource_id:
|
||
type: integer
|
||
format: int64
|
||
user_id:
|
||
type: integer
|
||
format: int64
|
||
level:
|
||
type: integer
|
||
format: int32
|
||
name:
|
||
type: string
|
||
status:
|
||
type: string
|
||
equipped:
|
||
type: boolean
|
||
duration_ms:
|
||
type: integer
|
||
format: int64
|
||
effective_at_ms:
|
||
type: integer
|
||
format: int64
|
||
expires_at_ms:
|
||
type: integer
|
||
format: int64
|
||
remaining_duration_ms:
|
||
type: integer
|
||
format: int64
|
||
grant_source:
|
||
type: string
|
||
source_grant_id:
|
||
type: string
|
||
created_at_ms:
|
||
type: integer
|
||
format: int64
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
VIPUserSettingsData:
|
||
type: object
|
||
required:
|
||
- app_code
|
||
- user_id
|
||
- room_entry_notice_enabled
|
||
- online_global_notice_enabled
|
||
- hide_profile_data_enabled
|
||
- anonymous_profile_visit_enabled
|
||
- leaderboard_invisible_enabled
|
||
- updated_at_ms
|
||
properties:
|
||
app_code:
|
||
type: string
|
||
user_id:
|
||
type: integer
|
||
format: int64
|
||
room_entry_notice_enabled:
|
||
type: boolean
|
||
online_global_notice_enabled:
|
||
type: boolean
|
||
hide_profile_data_enabled:
|
||
type: boolean
|
||
anonymous_profile_visit_enabled:
|
||
type: boolean
|
||
leaderboard_invisible_enabled:
|
||
type: boolean
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
VIPStateData:
|
||
type: object
|
||
required:
|
||
- paid_vip
|
||
- equipped_trial_card
|
||
- effective_vip
|
||
- effective_source
|
||
- effective_benefits
|
||
- evaluated_at_ms
|
||
- program_config
|
||
- user_settings
|
||
properties:
|
||
paid_vip:
|
||
$ref: "#/definitions/VIPStatusData"
|
||
equipped_trial_card:
|
||
$ref: "#/definitions/VIPTrialCardData"
|
||
x-nullable: true
|
||
description: 当前没有佩戴体验卡时固定返回 null。
|
||
effective_vip:
|
||
$ref: "#/definitions/VIPStatusData"
|
||
effective_source:
|
||
type: string
|
||
effective_benefits:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/VIPBenefitData"
|
||
evaluated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
program_config:
|
||
$ref: "#/definitions/VIPProgramConfigData"
|
||
user_settings:
|
||
$ref: "#/definitions/VIPUserSettingsData"
|
||
VIPMeData:
|
||
allOf:
|
||
- $ref: "#/definitions/VIPStatusData"
|
||
- type: object
|
||
required:
|
||
- program_config
|
||
- state
|
||
properties:
|
||
program_config:
|
||
$ref: "#/definitions/VIPProgramConfigData"
|
||
state:
|
||
$ref: "#/definitions/VIPStateData"
|
||
VIPMeEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/VIPMeData"
|
||
VIPPackageListData:
|
||
type: object
|
||
required:
|
||
- current_vip
|
||
- packages
|
||
- program_config
|
||
- state
|
||
properties:
|
||
current_vip:
|
||
$ref: "#/definitions/VIPStatusData"
|
||
packages:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/VIPPackageData"
|
||
program_config:
|
||
$ref: "#/definitions/VIPProgramConfigData"
|
||
state:
|
||
$ref: "#/definitions/VIPStateData"
|
||
VIPPackageListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/VIPPackageListData"
|
||
CommandIDRequest:
|
||
type: object
|
||
required:
|
||
- command_id
|
||
properties:
|
||
command_id:
|
||
type: string
|
||
minLength: 1
|
||
maxLength: 128
|
||
description: 业务幂等键;同一用户动作的超时或 5xx 重试必须复用。
|
||
VIPPurchaseRequest:
|
||
allOf:
|
||
- $ref: "#/definitions/CommandIDRequest"
|
||
- type: object
|
||
required:
|
||
- level
|
||
properties:
|
||
level:
|
||
type: integer
|
||
format: int32
|
||
minimum: 1
|
||
VIPAssetBalanceData:
|
||
type: object
|
||
properties:
|
||
asset_type:
|
||
type: string
|
||
available_amount:
|
||
type: integer
|
||
format: int64
|
||
frozen_amount:
|
||
type: integer
|
||
format: int64
|
||
version:
|
||
type: integer
|
||
format: int64
|
||
VIPPurchaseData:
|
||
type: object
|
||
properties:
|
||
order_id:
|
||
type: string
|
||
transaction_id:
|
||
type: string
|
||
vip:
|
||
$ref: "#/definitions/VIPStatusData"
|
||
coin_spent:
|
||
type: integer
|
||
format: int64
|
||
coin_balance_after:
|
||
type: integer
|
||
format: int64
|
||
coin_balance:
|
||
$ref: "#/definitions/VIPAssetBalanceData"
|
||
reward_items:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/VIPRewardItemData"
|
||
program_config:
|
||
$ref: "#/definitions/VIPProgramConfigData"
|
||
state:
|
||
$ref: "#/definitions/VIPStateData"
|
||
VIPPurchaseEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/VIPPurchaseData"
|
||
VIPTrialCardMutationData:
|
||
type: object
|
||
properties:
|
||
trial_card:
|
||
$ref: "#/definitions/VIPTrialCardData"
|
||
unequipped:
|
||
type: boolean
|
||
program_config:
|
||
$ref: "#/definitions/VIPProgramConfigData"
|
||
state:
|
||
$ref: "#/definitions/VIPStateData"
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
VIPTrialCardMutationEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/VIPTrialCardMutationData"
|
||
VIPSettingsPatchRequest:
|
||
type: object
|
||
minProperties: 1
|
||
properties:
|
||
room_entry_notice_enabled:
|
||
type: boolean
|
||
online_global_notice_enabled:
|
||
type: boolean
|
||
hide_profile_data_enabled:
|
||
type: boolean
|
||
anonymous_profile_visit_enabled:
|
||
type: boolean
|
||
leaderboard_invisible_enabled:
|
||
type: boolean
|
||
VIPSettingsData:
|
||
type: object
|
||
required:
|
||
- settings
|
||
properties:
|
||
settings:
|
||
$ref: "#/definitions/VIPUserSettingsData"
|
||
evaluated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
VIPSettingsEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/VIPSettingsData"
|
||
VIPOnlineNoticeData:
|
||
type: object
|
||
required:
|
||
- event_id
|
||
- group_id
|
||
- status
|
||
- created
|
||
- evaluated_at_ms
|
||
properties:
|
||
event_id:
|
||
type: string
|
||
group_id:
|
||
type: string
|
||
status:
|
||
type: string
|
||
enum: [pending]
|
||
created:
|
||
type: boolean
|
||
evaluated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
VIPOnlineNoticeEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/VIPOnlineNoticeData"
|
||
VIPBenefitRequiredData:
|
||
type: object
|
||
required:
|
||
- benefit_code
|
||
- required_level
|
||
- current_effective_level
|
||
- action
|
||
properties:
|
||
benefit_code:
|
||
type: string
|
||
required_level:
|
||
type: integer
|
||
format: int32
|
||
description: 当前 App 首个显式配置该权益的 active 等级;0 表示未配置。
|
||
current_effective_level:
|
||
type: integer
|
||
format: int32
|
||
action:
|
||
type: string
|
||
description: 稳定的被拒绝动作标识;背景链路分别为 upload_room_background、save_room_background、set_room_background。
|
||
VIPBenefitRequiredErrorEnvelope:
|
||
type: object
|
||
required:
|
||
- code
|
||
- message
|
||
- request_id
|
||
- data
|
||
properties:
|
||
code:
|
||
type: string
|
||
enum: [VIP_BENEFIT_REQUIRED]
|
||
message:
|
||
type: string
|
||
enum: [vip benefit is required]
|
||
request_id:
|
||
type: string
|
||
data:
|
||
$ref: "#/definitions/VIPBenefitRequiredData"
|
||
RoomMediaData:
|
||
type: object
|
||
required:
|
||
- url
|
||
- object_key
|
||
- content_type
|
||
- format
|
||
- size_bytes
|
||
- width
|
||
- height
|
||
- animated
|
||
- frame_count
|
||
- duration_ms
|
||
- sha256
|
||
- status
|
||
properties:
|
||
url:
|
||
type: string
|
||
description: 专用上传入口返回的 HTTPS 对象地址;提交 save/send 时必须原样回传。
|
||
object_key:
|
||
type: string
|
||
description: 专用上传入口返回的对象 key,绑定 App、用户、房间和用途。
|
||
content_type:
|
||
type: string
|
||
enum: [image/jpeg, image/png, image/gif, image/webp]
|
||
format:
|
||
type: string
|
||
enum: [jpeg, png, gif, webp]
|
||
size_bytes:
|
||
type: integer
|
||
format: int64
|
||
width:
|
||
type: integer
|
||
format: int32
|
||
height:
|
||
type: integer
|
||
format: int32
|
||
animated:
|
||
type: boolean
|
||
frame_count:
|
||
type: integer
|
||
format: int32
|
||
duration_ms:
|
||
type: integer
|
||
format: int64
|
||
description: 静态图固定为 0。
|
||
poster_url:
|
||
type: string
|
||
description: 当前上传链路不生成 poster,HTTP 空值时省略。
|
||
thumbnail_url:
|
||
type: string
|
||
description: 当前上传链路不生成 thumbnail,HTTP 空值时省略。
|
||
sha256:
|
||
type: string
|
||
pattern: "^[0-9a-f]{64}$"
|
||
status:
|
||
type: string
|
||
enum: [active]
|
||
RoomMediaUploadData:
|
||
type: object
|
||
required:
|
||
- purpose
|
||
- room_id
|
||
- command_id
|
||
- room_version
|
||
- media
|
||
- server_time_ms
|
||
properties:
|
||
purpose:
|
||
type: string
|
||
enum: [room_background, room_image]
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
room_version:
|
||
type: integer
|
||
format: int64
|
||
description: 上传授权时观察到的房间版本,不是后续 send/set 的成功版本。
|
||
media:
|
||
$ref: "#/definitions/RoomMediaData"
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
RoomMediaUploadEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/RoomMediaUploadData"
|
||
RoomBackgroundData:
|
||
type: object
|
||
required:
|
||
- background_id
|
||
- room_id
|
||
- image_url
|
||
- created_at_ms
|
||
- updated_at_ms
|
||
properties:
|
||
background_id:
|
||
type: integer
|
||
format: int64
|
||
room_id:
|
||
type: string
|
||
image_url:
|
||
type: string
|
||
created_by_user_id:
|
||
type: string
|
||
created_at_ms:
|
||
type: integer
|
||
format: int64
|
||
updated_at_ms:
|
||
type: integer
|
||
format: int64
|
||
command_id:
|
||
type: string
|
||
media:
|
||
$ref: "#/definitions/RoomMediaData"
|
||
SaveRoomBackgroundRequest:
|
||
type: object
|
||
required:
|
||
- room_id
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
maxLength: 128
|
||
description: Fami 必填;与专用上传复用。Lalu image_url-only 兼容请求可省略。
|
||
image_url:
|
||
type: string
|
||
description: Fami 可省略并由 media.url 补齐;Lalu 旧协议必填。
|
||
media:
|
||
$ref: "#/definitions/RoomMediaData"
|
||
description: Fami 必填,必须原样使用专用背景上传返回对象。
|
||
SaveRoomBackgroundData:
|
||
type: object
|
||
properties:
|
||
background:
|
||
$ref: "#/definitions/RoomBackgroundData"
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
SaveRoomBackgroundEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/SaveRoomBackgroundData"
|
||
RoomBackgroundListData:
|
||
type: object
|
||
required:
|
||
- backgrounds
|
||
- server_time_ms
|
||
properties:
|
||
backgrounds:
|
||
type: array
|
||
items:
|
||
$ref: "#/definitions/RoomBackgroundData"
|
||
selected_background_url:
|
||
type: string
|
||
selected_background:
|
||
$ref: "#/definitions/RoomBackgroundData"
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
RoomBackgroundListEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/RoomBackgroundListData"
|
||
SetRoomBackgroundRequest:
|
||
type: object
|
||
required:
|
||
- room_id
|
||
- command_id
|
||
- background_id
|
||
properties:
|
||
room_id:
|
||
type: string
|
||
command_id:
|
||
type: string
|
||
maxLength: 128
|
||
background_id:
|
||
type: string
|
||
pattern: "^[1-9][0-9]*$"
|
||
description: 支持 JSON 数字或数字字符串;这里按字符串建模避免 64 位精度丢失。
|
||
RoomDecorationData:
|
||
type: object
|
||
required:
|
||
- resource_id
|
||
- resource_code
|
||
- resource_type
|
||
- name
|
||
- asset_url
|
||
- entitlement_id
|
||
properties:
|
||
resource_id:
|
||
type: integer
|
||
format: int64
|
||
resource_code:
|
||
type: string
|
||
resource_type:
|
||
type: string
|
||
enum: [room_border, room_name_style]
|
||
name:
|
||
type: string
|
||
asset_url:
|
||
type: string
|
||
preview_url:
|
||
type: string
|
||
animation_url:
|
||
type: string
|
||
format:
|
||
type: string
|
||
metadata_json:
|
||
type: string
|
||
entitlement_id:
|
||
type: string
|
||
text_colors:
|
||
type: array
|
||
maxItems: 8
|
||
items:
|
||
type: string
|
||
pattern: "^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$"
|
||
stops:
|
||
type: array
|
||
items:
|
||
type: number
|
||
format: double
|
||
angle_degrees:
|
||
type: number
|
||
format: double
|
||
expires_at_ms:
|
||
type: integer
|
||
format: int64
|
||
SetRoomBackgroundData:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
room:
|
||
$ref: "#/definitions/RoomInitialData"
|
||
background:
|
||
$ref: "#/definitions/RoomBackgroundData"
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
SetRoomBackgroundEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/SetRoomBackgroundData"
|
||
ApplyRoomDecorationRequest:
|
||
type: object
|
||
required:
|
||
- command_id
|
||
- decoration_type
|
||
- resource_id
|
||
properties:
|
||
command_id:
|
||
type: string
|
||
maxLength: 128
|
||
decoration_type:
|
||
type: string
|
||
enum: [room_border, colored_room_name]
|
||
description: colored_room_name 对应资源目录类型 room_name_style。
|
||
resource_id:
|
||
type: string
|
||
pattern: "^[1-9][0-9]*$"
|
||
description: 支持 JSON 数字或数字字符串。
|
||
entitlement_id:
|
||
type: string
|
||
description: 可选;建议传背包实例 ID,省略时服务端选择一个当前有效实例。
|
||
ApplyRoomDecorationData:
|
||
type: object
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
room:
|
||
$ref: "#/definitions/RoomInitialData"
|
||
decoration_type:
|
||
type: string
|
||
enum: [room_border, colored_room_name]
|
||
resource:
|
||
$ref: "#/definitions/RoomDecorationData"
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
ApplyRoomDecorationEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/ApplyRoomDecorationData"
|
||
SendRoomImageRequest:
|
||
type: object
|
||
required:
|
||
- command_id
|
||
- image
|
||
properties:
|
||
command_id:
|
||
type: string
|
||
maxLength: 128
|
||
description: 与专用图片上传复用;同一动作重试不得更换。
|
||
image:
|
||
$ref: "#/definitions/RoomMediaData"
|
||
description: 必须原样使用专用图片上传返回的 media。
|
||
SendRoomImageData:
|
||
type: object
|
||
required:
|
||
- result
|
||
- accepted
|
||
- message_id
|
||
- room_id
|
||
- sender_user_id
|
||
- server_time_ms
|
||
- image
|
||
properties:
|
||
result:
|
||
$ref: "#/definitions/CommandResult"
|
||
accepted:
|
||
type: boolean
|
||
message_id:
|
||
type: string
|
||
description: 由 app_code、room_id 和 command_id 稳定生成;IM 去重优先使用 event_id,消息展示去重也可使用 message_id。
|
||
room_id:
|
||
type: string
|
||
sender_user_id:
|
||
type: string
|
||
server_time_ms:
|
||
type: integer
|
||
format: int64
|
||
image:
|
||
$ref: "#/definitions/RoomMediaData"
|
||
SendRoomImageEnvelope:
|
||
allOf:
|
||
- $ref: "#/definitions/GatewayOKEnvelopeBase"
|
||
- type: object
|
||
properties:
|
||
data:
|
||
$ref: "#/definitions/SendRoomImageData"
|