Table of Contents
16.5 视频通话统一入房校验【声网链路,待联调】
POST /tieup/api/v1/video-call-rooms/entry-check
鉴权:需要 Authorization: Bearer <access_token>。粉丝和偶像共用本接口。
请求体:
{
"room_id": "VR2026061719590012345678",
"type": 1,
"fan_user_id": 10001
}
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
room_id |
string | 是 | 本地房间编号,对应 tieup_video_call_room.room_no |
type |
integer | 是 | 1=单方进入前验证/RTC Token 签发或续签,2=双方已进入并开始通话 |
fan_user_id |
integer | 否 | 粉丝侧调用时传当前登录粉丝 ID;与 artist_id 二选一 |
artist_id |
integer | 否 | 偶像侧调用时传当前偶像 ID;与 fan_user_id 二选一 |
响应字段:
| 字段 | 类型 | 说明 |
|---|---|---|
can_enter |
boolean | type=1 返回,是否允许当前侧进入房间 |
can_start |
boolean | type=2 返回,是否已满足双方进入并开始通话 |
reason_code |
string | 判断结果代码,如 ok、not_enterable_time、participant_not_ready |
reason |
string | 判断结果说明 |
booking_id |
integer | 视频通话预约 ID |
booking_no |
string | 视频通话预约编号 |
room_id |
string | 本地房间编号,同 room_no |
room_no |
string | 本地房间编号 |
side |
string | 当前请求侧:fan 或 artist |
status |
integer | 通话状态:1=待通话,2=准备中,3=通话中,4=已完成,5=艺人爽约,6=粉丝爽约,7=双方爽约,8=已取消 |
status_label |
string | 状态文案 |
room_status |
integer | 房间状态:1=待创建,2=已创建,3=可进入,4=通话中,5=已结束,6=创建失败,7=已关闭 |
scheduled_start_at |
string | 当前有效预约开始时间;提前开始后会前移 |
scheduled_end_at |
string | 当前有效预约结束时间;提前开始后会同步前移 |
enterable_at |
string | 最早可进入时间,通常为当前有效开始时间前 10 分钟 |
fan_entered_at |
string/null | 粉丝首次通过入房校验时间 |
artist_entered_at |
string/null | 艺人首次通过入房校验时间 |
entered_at |
string/null | 当前请求侧首次进入时间 |
started_at |
string/null | 实际通话开始时间 |
remaining_seconds |
integer | 剩余通话秒数,按 scheduled_end_at - 当前时间 计算,最小为 0 |
finish_queue_dispatched |
boolean | type=2 首次开始时返回,是否已投递到点结束队列 |
missing_sides |
array | type=2 未满足双方进入时返回,值为 fan、artist |
rtc_provider |
string | type=1 且允许进入时返回,当前 RTC 供应商 |
rtc_channel_name |
string | type=1 且允许进入时返回,声网使用该字段作为 channelName |
fan_rtc_uid |
integer/null | 粉丝声网 UID |
artist_rtc_uid |
integer/null | 艺人声网 UID |
rtc_token_expires_at |
string/null | 最近一次声网 Token 签发过期时间 |
app_id |
string | type=1 且允许进入时返回,声网 App ID,和 rtc_config.app_id 一致 |
channel_name |
string | type=1 且允许进入时返回,声网频道名,和 rtc_config.channel_name 一致 |
uid |
integer | type=1 且允许进入时返回,当前请求侧在声网频道内使用的 UID |
token |
string | type=1 且允许进入时返回,声网 AccessToken2 |
token_expires_at |
string | type=1 且允许进入时返回,Token 过期时间,和 rtc_config.token_expires_at 一致 |
rtc_config.app_id |
string | 声网 App ID |
rtc_config.channel_name |
string | 声网频道名 |
rtc_config.uid |
integer | 当前请求侧在声网频道内使用的 UID |
rtc_config.token |
string | 声网 AccessToken2 |
rtc_config.token_expires_at |
string | Token 过期时间 |
rtc_config.role |
string | 声网角色,当前固定 publisher |
rtc_config.token_type |
string | 固定 AccessToken2 |
type=1 响应示例:
{
"code": 200,
"message": "成功",
"data": {
"can_enter": true,
"reason_code": "ok",
"reason": "可以进入房间",
"booking_id": 40001,
"booking_no": "VC202606170001",
"room_id": "VR2026061719590012345678",
"room_no": "VR2026061719590012345678",
"side": "fan",
"status": 2,
"status_label": "准备中",
"room_status": 3,
"scheduled_start_at": "2026-06-20 20:00:00",
"scheduled_end_at": "2026-06-20 20:10:00",
"enterable_at": "2026-06-20 19:50:00",
"fan_entered_at": "2026-06-20 19:55:00",
"artist_entered_at": null,
"entered_at": "2026-06-20 19:55:00",
"started_at": null,
"remaining_seconds": 900,
"server_time": "2026-06-20 19:55:00",
"rtc_provider": "shengwang",
"rtc_channel_name": "sw_vc_vc202606170001",
"fan_rtc_uid": 135792468,
"artist_rtc_uid": 246813579,
"rtc_token_expires_at": "2026-06-20 21:55:00",
"app_id": "shengwang_app_id",
"channel_name": "sw_vc_vc202606170001",
"uid": 135792468,
"token": "shengwang_access_token2",
"token_expires_at": "2026-06-20 21:55:00",
"rtc_config": {
"provider": "shengwang",
"app_id": "shengwang_app_id",
"channel_name": "sw_vc_vc202606170001",
"uid": 135792468,
"token": "shengwang_access_token2",
"token_expires_at": "2026-06-20 21:55:00",
"role": "publisher",
"token_type": "AccessToken2"
}
}
}
type=2 响应示例:
{
"code": 200,
"message": "成功",
"data": {
"can_start": true,
"reason_code": "ok",
"reason": "通话已开始",
"booking_id": 40001,
"booking_no": "VC202606170001",
"room_id": "VR2026061719590012345678",
"room_no": "VR2026061719590012345678",
"side": "artist",
"status": 3,
"status_label": "通话中",
"room_status": 4,
"scheduled_start_at": "2026-06-20 19:55:00",
"scheduled_end_at": "2026-06-20 20:05:00",
"enterable_at": "2026-06-20 19:45:00",
"fan_entered_at": "2026-06-20 19:55:00",
"artist_entered_at": "2026-06-20 19:55:10",
"entered_at": "2026-06-20 19:55:10",
"started_at": "2026-06-20 19:55:10",
"remaining_seconds": 590,
"server_time": "2026-06-20 19:55:10",
"time_shift_seconds": 300,
"finish_queue_dispatched": true
}
}
说明:
- APP 获取预约详情中的
room_no后调用本接口;不再单独调用获取房间、刷新 Token、进入、离开或手动完成接口。 -
type=1到达预约开始前 10 分钟后才允许进入;未到时间返回can_enter=false,不会修改状态。 -
type=1允许进入时写入当前侧首次进入时间,并将预约状态改为2=准备中;通话中重复调用只续签 Token,不回退状态。 -
type=2要求双方都已通过type=1;提前开始时预约开始和结束时间整体前移,延后开始时预约时间不变。 - 通话开始后服务端投递
video-call-finishRedis 延迟队列,到scheduled_end_at自动完成通话;Crontab 每分钟兜底扫描仍处于通话中的到期记录。 - 视频爽约按预约开始后 10 分钟判定,只处理状态
1/2且started_at为空的预约;无人进入为双方爽约,仅粉丝进入为艺人爽约,仅艺人进入为粉丝爽约,双方都曾进入但始终未开始通话也为双方爽约。艺人爽约和双方爽约全额退糖果,粉丝爽约不退款。