hyapp-server/docs/openapi/room.swagger.yaml
2026-05-29 11:59:57 +08:00

1273 lines
35 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

swagger: "2.0"
info:
title: HY Room Service API
version: "1.0.0"
description: |
room-service 当前只暴露内部 gRPC + protobuf 接口,没有 HTTP JSON router。
本文件用 OpenAPI 2.0 记录 gRPC 合约,`paths` 使用 gRPC full method 作为文档路径,不代表真实 HTTP endpoint。
腾讯云 IM 房间系统消息是 room-service 的外发消息契约,记录在 definitions 中。
host: localhost:13001
basePath: /
schemes:
- http
consumes:
- application/grpc+proto
produces:
- application/grpc+proto
tags:
- name: room-command
description: RoomCommandService改变房间状态的命令接口。
- name: room-query
description: RoomQueryService不改变 Room Cell 状态的读模型查询。
- name: room-guard
description: RoomGuardService腾讯云 IM 入群和发言前的同步守卫。
- name: health
description: 标准 grpc.health.v1.Health。
responses:
GRPCError:
description: gRPC status error稳定业务原因放在 google.rpc.ErrorInfo.reason。
schema:
$ref: "#/definitions/GRPCError"
paths:
/hyapp.room.v1.RoomCommandService/CreateRoom:
post:
tags:
- room-command
summary: 创建房间
operationId: roomCreateRoom
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/CreateRoom
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/CreateRoomRequest"
responses:
"200":
description: 创建成功CreateRoom 会确保腾讯云 IM 群组存在后再提交房间状态;同一个 actor 只能作为 owner 创建一个房间,重复创建返回 Conflict。
schema:
$ref: "#/definitions/CreateRoomResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomCommandService/UpdateRoomProfile:
post:
tags:
- room-command
summary: 修改房间资料和座位数
operationId: roomUpdateRoomProfile
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/UpdateRoomProfile
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/UpdateRoomProfileRequest"
responses:
"200":
description: 修改成功资料、座位数、snapshot、command log 和 outbox 已经通过 Room Cell 提交。
schema:
$ref: "#/definitions/UpdateRoomProfileResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomCommandService/JoinRoom:
post:
tags:
- room-command
summary: 加入房间业务 presence
operationId: roomJoinRoom
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/JoinRoom
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/JoinRoomRequest"
responses:
"200":
description: 加入成功;只维护 room-service presence不创建腾讯云 IM 连接。
schema:
$ref: "#/definitions/JoinRoomResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomCommandService/LeaveRoom:
post:
tags:
- room-command
summary: 离开房间业务 presence
operationId: roomLeaveRoom
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/LeaveRoom
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/LeaveRoomRequest"
responses:
"200":
description: 离房成功;若用户在麦上会释放麦位。
schema:
$ref: "#/definitions/LeaveRoomResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomCommandService/MicUp:
post:
tags:
- room-command
summary: 上麦
operationId: roomMicUp
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/MicUp
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/MicUpRequest"
responses:
"200":
description: 上麦成功。
schema:
$ref: "#/definitions/MicUpResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomCommandService/MicDown:
post:
tags:
- room-command
summary: 下麦
operationId: roomMicDown
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/MicDown
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/MicDownRequest"
responses:
"200":
description: 下麦成功。
schema:
$ref: "#/definitions/MicDownResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomCommandService/ChangeMicSeat:
post:
tags:
- room-command
summary: 调整麦位
operationId: roomChangeMicSeat
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/ChangeMicSeat
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/ChangeMicSeatRequest"
responses:
"200":
description: 调整成功。
schema:
$ref: "#/definitions/ChangeMicSeatResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomCommandService/ConfirmMicPublishing:
post:
tags:
- room-command
summary: 确认 RTC 音频发布成功
operationId: roomConfirmMicPublishing
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/ConfirmMicPublishing
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/ConfirmMicPublishingRequest"
responses:
"200":
description: 当前 mic_session 确认成功;旧 session、旧 room_version 或旧 event_time 会被安全忽略。
schema:
$ref: "#/definitions/ConfirmMicPublishingResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomCommandService/SetMicSeatLock:
post:
tags:
- room-command
summary: 锁定或解锁麦位
operationId: roomSetMicSeatLock
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/SetMicSeatLock
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/SetMicSeatLockRequest"
responses:
"200":
description: 锁麦状态修改成功。
schema:
$ref: "#/definitions/SetMicSeatLockResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomCommandService/SetChatEnabled:
post:
tags:
- room-command
summary: 开启或关闭公屏
operationId: roomSetChatEnabled
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/SetChatEnabled
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/SetChatEnabledRequest"
responses:
"200":
description: 公屏开关修改成功;结果会影响 CheckSpeakPermission。
schema:
$ref: "#/definitions/SetChatEnabledResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomCommandService/SetRoomAdmin:
post:
tags:
- room-command
summary: 添加或移除房间管理员
operationId: roomSetRoomAdmin
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/SetRoomAdmin
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/SetRoomAdminRequest"
responses:
"200":
description: 管理员集合修改成功。
schema:
$ref: "#/definitions/SetRoomAdminResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomCommandService/MuteUser:
post:
tags:
- room-command
summary: 设置房间内禁言
operationId: roomMuteUser
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/MuteUser
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/MuteUserRequest"
responses:
"200":
description: 禁言状态修改成功;结果会影响 CheckSpeakPermission。
schema:
$ref: "#/definitions/MuteUserResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomCommandService/KickUser:
post:
tags:
- room-command
summary: 踢出房间用户
operationId: roomKickUser
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/KickUser
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/KickUserRequest"
responses:
"200":
description: 踢人成功;结果会影响 VerifyRoomPresence 和 CheckSpeakPermission。
schema:
$ref: "#/definitions/KickUserResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomCommandService/UnbanUser:
post:
tags:
- room-command
summary: 解除房间 ban
operationId: roomUnbanUser
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/UnbanUser
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/UnbanUserRequest"
responses:
"200":
description: 解封成功;不会自动恢复 presence、麦位或管理员身份。
schema:
$ref: "#/definitions/UnbanUserResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomCommandService/SendGift:
post:
tags:
- room-command
summary: 发送礼物
operationId: roomSendGift
x-grpc-full-method: /hyapp.room.v1.RoomCommandService/SendGift
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/SendGiftRequest"
responses:
"200":
description: 扣费成功并落入房间状态。
schema:
$ref: "#/definitions/SendGiftResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomGuardService/CheckSpeakPermission:
post:
tags:
- room-guard
summary: 发言前守卫
operationId: roomCheckSpeakPermission
x-grpc-full-method: /hyapp.room.v1.RoomGuardService/CheckSpeakPermission
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/CheckSpeakPermissionRequest"
responses:
"200":
description: 返回是否允许用户在房间发言。
schema:
$ref: "#/definitions/CheckSpeakPermissionResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomGuardService/VerifyRoomPresence:
post:
tags:
- room-guard
summary: 入群前 presence 守卫
operationId: roomVerifyRoomPresence
x-grpc-full-method: /hyapp.room.v1.RoomGuardService/VerifyRoomPresence
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/VerifyRoomPresenceRequest"
responses:
"200":
description: 返回用户业务上是否仍在房间内。
schema:
$ref: "#/definitions/VerifyRoomPresenceResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomQueryService/GetCurrentRoom:
post:
tags:
- room-query
summary: 查询用户当前可恢复房间
operationId: roomGetCurrentRoom
description: 启动、回前台和网络恢复时使用;只读 room_user_presence 投影并用 Room Cell 快照二次校验,不会隐式 JoinRoom 或刷新 presence。
x-grpc-full-method: /hyapp.room.v1.RoomQueryService/GetCurrentRoom
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/GetCurrentRoomRequest"
responses:
"200":
description: 返回是否存在可恢复房间,以及是否需要重新入 IM 群和重新签 RTC token。
schema:
$ref: "#/definitions/GetCurrentRoomResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomQueryService/GetRoomSnapshot:
post:
tags:
- room-query
summary: 查询房间完整快照
operationId: roomGetRoomSnapshot
description: 房间页主动同步使用;只读 Room Cell/snapshot不刷新 presence不隐式 JoinRoomviewer 必须仍在该房间。
x-grpc-full-method: /hyapp.room.v1.RoomQueryService/GetRoomSnapshot
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/GetRoomSnapshotRequest"
responses:
"200":
description: 返回当前完整房间快照。
schema:
$ref: "#/definitions/GetRoomSnapshotResponse"
default:
$ref: "#/responses/GRPCError"
/hyapp.room.v1.RoomQueryService/ListRoomBannedUsers:
post:
tags:
- room-query
summary: 查询房间黑名单列表
operationId: roomListRoomBannedUsers
description: 读取 Room Cell 当前仍有效的 ban 状态viewer 必须是当前房间 owner/admin。
x-grpc-full-method: /hyapp.room.v1.RoomQueryService/ListRoomBannedUsers
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/ListRoomBannedUsersRequest"
responses:
"200":
description: 返回当前仍有效的房间黑名单。
schema:
$ref: "#/definitions/ListRoomBannedUsersResponse"
default:
$ref: "#/responses/GRPCError"
/grpc.health.v1.Health/Check:
post:
tags:
- health
summary: 标准 gRPC health check
operationId: roomHealthCheck
x-grpc-full-method: /grpc.health.v1.Health/Check
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/HealthCheckRequest"
responses:
"200":
description: 返回 SERVING 或 NOT_SERVING未知 service 返回 gRPC NotFound。
schema:
$ref: "#/definitions/HealthCheckResponse"
default:
$ref: "#/responses/GRPCError"
/grpc.health.v1.Health/Watch:
post:
tags:
- health
summary: 标准 gRPC health watch
operationId: roomHealthWatch
x-grpc-full-method: /grpc.health.v1.Health/Watch
x-server-streaming: true
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/HealthCheckRequest"
responses:
"200":
description: 服务端流式推送健康状态变化。
schema:
$ref: "#/definitions/HealthCheckResponse"
default:
$ref: "#/responses/GRPCError"
definitions:
RequestMeta:
type: object
required:
- request_id
- command_id
- actor_user_id
- room_id
properties:
request_id:
type: string
description: 后端生成的链路追踪 ID不参与幂等。
command_id:
type: string
description: 客户端按用户写动作生成的幂等命令 ID同一动作重试必须复用。
actor_user_id:
type: integer
format: int64
room_id:
type: string
pattern: "^[A-Za-z0-9_-]{1,48}$"
maxLength: 48
description: 命令所属房间 IDCreateRoom 时必须同时满足腾讯 IM GroupID 和 RTC strRoomId 限制。
gateway_node_id:
type: string
session_id:
type: string
sent_at_ms:
type: integer
format: int64
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 表示已确认发布音频;空麦可为空或 idle。
mic_session_id:
type: string
description: 单次上麦发流会话 ID客户端确认和 RTC webhook 必须原样带回。
publish_deadline_ms:
type: integer
format: int64
description: pending_publish 必须完成确认的截止时间;超时会自动下麦。
mic_session_room_version:
type: integer
format: int64
description: 创建当前 mic_session 的房间版本,用于丢弃旧版本 RTC 事件。
last_publish_event_time_ms:
type: integer
format: int64
description: 当前麦位已接受的最新发布事件时间。
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
owner_user_id:
type: integer
format: int64
mode:
type: string
status:
type: string
chat_enabled:
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
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 毫秒后可重新进房。
CreateRoomRequest:
type: object
description: 同一个 `meta.actor_user_id` 只能作为 owner 创建一个房间owner/host 不接受外部字段自报。
required:
- meta
- mode
- room_name
properties:
meta:
$ref: "#/definitions/RequestMeta"
seat_count:
type: integer
format: int32
minimum: 0
description: 麦位数量0 或省略时使用后台默认值,正数必须命中后台启用座位数。
mode:
type: string
minLength: 1
description: 房间模式,不能为空;当前 room-service 保存并通过快照透出。
room_name:
type: string
minLength: 1
maxLength: 128
description: 房间展示名称room-service 写入 `RoomSnapshot.room_ext["title"]`。
room_avatar:
type: string
maxLength: 512
description: 房间头像;为空时写入默认系统头像 `hyapp://room/default-avatar`。
room_description:
type: string
maxLength: 512
description: 房间简介;写入 `RoomSnapshot.room_ext["description"]`,不参与房间状态决策。
CreateRoomResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
UpdateRoomProfileRequest:
type: object
required:
- meta
properties:
meta:
$ref: "#/definitions/RequestMeta"
room_name:
type: string
maxLength: 128
description: proto3 optional传入时更新 RoomExt title。
room_avatar:
type: string
maxLength: 512
description: proto3 optional传空字符串时恢复系统默认头像。
room_description:
type: string
maxLength: 512
description: proto3 optional允许传空字符串清空简介。
seat_count:
type: integer
format: int32
enum:
- 10
- 15
- 20
- 25
- 30
description: proto3 optional必须是后台启用座位数缩容要求被删除麦位空闲且未锁。
UpdateRoomProfileResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
JoinRoomRequest:
type: object
properties:
meta:
$ref: "#/definitions/RequestMeta"
role:
type: string
JoinRoomResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
user:
$ref: "#/definitions/RoomUser"
room:
$ref: "#/definitions/RoomSnapshot"
LeaveRoomRequest:
type: object
properties:
meta:
$ref: "#/definitions/RequestMeta"
LeaveRoomResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
MicUpRequest:
type: object
properties:
meta:
$ref: "#/definitions/RequestMeta"
seat_no:
type: integer
format: int32
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
MicDownRequest:
type: object
properties:
meta:
$ref: "#/definitions/RequestMeta"
target_user_id:
type: integer
format: int64
reason:
type: string
description: 主动下麦可为空;系统自动下麦会使用 publish_timeout 等稳定原因。
MicDownResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
seat_no:
type: integer
format: int32
room:
$ref: "#/definitions/RoomSnapshot"
ConfirmMicPublishingRequest:
type: object
required:
- meta
- mic_session_id
- room_version
- event_time_ms
properties:
meta:
$ref: "#/definitions/RequestMeta"
target_user_id:
type: integer
format: int64
description: 为空时默认确认 actor_user_idRTC webhook 编排可显式指定目标用户。
mic_session_id:
type: string
room_version:
type: integer
format: int64
description: 客户端传 MicUp 返回或快照中的 room_version旧版本事件不会覆盖新会话。
event_time_ms:
type: integer
format: int64
description: 客户端 SDK 或 RTC webhook 事件发生时间;只接受当前会话更新的事件。
source:
type: string
description: 例如 client 或 rtc_webhook。
ConfirmMicPublishingResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
seat_no:
type: integer
format: int32
room:
$ref: "#/definitions/RoomSnapshot"
ChangeMicSeatRequest:
type: object
properties:
meta:
$ref: "#/definitions/RequestMeta"
target_user_id:
type: integer
format: int64
seat_no:
type: integer
format: int32
ChangeMicSeatResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
SetMicSeatLockRequest:
type: object
properties:
meta:
$ref: "#/definitions/RequestMeta"
seat_no:
type: integer
format: int32
locked:
type: boolean
SetMicSeatLockResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
SetChatEnabledRequest:
type: object
properties:
meta:
$ref: "#/definitions/RequestMeta"
enabled:
type: boolean
SetChatEnabledResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
SetRoomAdminRequest:
type: object
properties:
meta:
$ref: "#/definitions/RequestMeta"
target_user_id:
type: integer
format: int64
enabled:
type: boolean
SetRoomAdminResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
MuteUserRequest:
type: object
properties:
meta:
$ref: "#/definitions/RequestMeta"
target_user_id:
type: integer
format: int64
muted:
type: boolean
MuteUserResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
KickUserRequest:
type: object
properties:
meta:
$ref: "#/definitions/RequestMeta"
target_user_id:
type: integer
format: int64
duration_ms:
type: integer
format: int64
description: 0 表示永久禁止进房;大于 0 表示从服务端当前 UTC 时间起禁止进房的毫秒时长。
KickUserResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
UnbanUserRequest:
type: object
properties:
meta:
$ref: "#/definitions/RequestMeta"
target_user_id:
type: integer
format: int64
UnbanUserResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
SendGiftRequest:
type: object
properties:
meta:
$ref: "#/definitions/RequestMeta"
target_user_id:
type: integer
format: int64
gift_id:
type: string
gift_count:
type: integer
format: int32
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"
CheckSpeakPermissionRequest:
type: object
properties:
room_id:
type: string
user_id:
type: integer
format: int64
CheckSpeakPermissionResponse:
type: object
properties:
allowed:
type: boolean
reason:
type: string
enum:
- room_not_found
- not_in_room
- user_banned
- user_muted
- chat_disabled
room_version:
type: integer
format: int64
VerifyRoomPresenceRequest:
type: object
properties:
room_id:
type: string
user_id:
type: integer
format: int64
session_id:
type: string
request_id:
type: string
description: 外部守卫调用的追踪 ID不作为幂等键。
VerifyRoomPresenceResponse:
type: object
properties:
present:
type: boolean
reason:
type: string
enum:
- room_not_found
- not_in_room
- user_banned
room_version:
type: integer
format: int64
GetCurrentRoomRequest:
type: object
required:
- meta
- user_id
properties:
meta:
$ref: "#/definitions/RequestMeta"
user_id:
type: integer
format: int64
description: 由 gateway 从 token user_id 注入,客户端不能自报。
GetCurrentRoomResponse:
type: object
properties:
has_current_room:
type: boolean
room_id:
type: string
room_version:
type: integer
format: int64
role:
type: string
description: 用户在房间快照中的角色。
mic_session_id:
type: string
description: 用户当前在麦时返回;客户端确认发流必须带回该 session。
publish_state:
type: string
enum:
- pending_publish
- publishing
- idle
need_join_im_group:
type: boolean
description: true 表示客户端应重新确保加入腾讯云 IM 群。
need_rtc_token:
type: boolean
description: true 表示用户处于 pending_publish/publishing需要重新获取 RTC token。
server_time_ms:
type: integer
format: int64
GetRoomSnapshotRequest:
type: object
required:
- meta
- room_id
- viewer_user_id
properties:
meta:
$ref: "#/definitions/RequestMeta"
room_id:
type: string
pattern: "^[A-Za-z0-9_-]{1,48}$"
maxLength: 48
viewer_user_id:
type: integer
format: int64
description: 由 gateway 从 token user_id 注入,客户端不能自报。
GetRoomSnapshotResponse:
type: object
properties:
room:
$ref: "#/definitions/RoomSnapshot"
server_time_ms:
type: integer
format: int64
RoomBannedUser:
type: object
properties:
user_id:
type: integer
format: int64
actor_user_id:
type: integer
format: int64
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
ListRoomBannedUsersRequest:
type: object
properties:
meta:
$ref: "#/definitions/RequestMeta"
room_id:
type: string
viewer_user_id:
type: integer
format: int64
description: 由 gateway 从 token user_id 注入,客户端不能自报。
page:
type: integer
format: int32
page_size:
type: integer
format: int32
ListRoomBannedUsersResponse:
type: object
properties:
items:
type: array
items:
$ref: "#/definitions/RoomBannedUser"
total:
type: integer
format: int64
page:
type: integer
format: int32
page_size:
type: integer
format: int32
server_time_ms:
type: integer
format: int64
RoomSystemMessage:
type: object
properties:
event_id:
type: string
room_id:
type: string
event_type:
type: string
enum:
- room_created
- room_user_joined
- room_user_left
- room_mic_changed
- room_mic_seat_locked
- room_chat_enabled_changed
- room_admin_changed
- room_user_muted
- room_user_kicked
- room_user_unbanned
- room_gift_sent
- room_heat_changed
- room_rank_changed
actor_user_id:
type: integer
format: int64
target_user_id:
type: integer
format: int64
seat_no:
type: integer
format: int32
gift_value:
type: integer
format: int64
room_heat:
type: integer
format: int64
room_version:
type: integer
format: int64
text:
type: string
attributes:
type: object
additionalProperties:
type: string
description: room-service 发送到腾讯云 IM 的 `TIMCustomElem.Data` 和 `CloudCustomData` 稳定载荷。
TencentTIMCustomElem:
type: object
properties:
MsgType:
type: string
enum:
- TIMCustomElem
MsgContent:
type: object
properties:
Data:
$ref: "#/definitions/RoomSystemMessage"
Desc:
type: string
description: 与 `RoomSystemMessage.event_type` 一致。
Ext:
type: string
enum:
- room_system_message
Sound:
type: string
description: 腾讯云 IM 群系统消息元素结构。
HealthCheckRequest:
type: object
properties:
service:
type: string
description: 空字符串或 `room-service`。
HealthCheckResponse:
type: object
properties:
status:
type: integer
format: int32
enum:
- 0
- 1
- 2
- 3
x-enum-names:
- UNKNOWN
- SERVING
- NOT_SERVING
- SERVICE_UNKNOWN
GRPCError:
type: object
properties:
grpc_code:
type: string
enum:
- InvalidArgument
- NotFound
- FailedPrecondition
- Unauthenticated
- PermissionDenied
- Unavailable
- AlreadyExists
- Internal
- Aborted
reason:
type: string
message:
type: string
error_info_domain:
type: string
enum:
- hyapp