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 判断结果代码,如 oknot_enterable_timeparticipant_not_ready
reason string 判断结果说明
booking_id integer 视频通话预约 ID
booking_no string 视频通话预约编号
room_id string 本地房间编号,同 room_no
room_no string 本地房间编号
side string 当前请求侧:fanartist
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 未满足双方进入时返回,值为 fanartist
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-finish Redis 延迟队列,到 scheduled_end_at 自动完成通话;Crontab 每分钟兜底扫描仍处于通话中的到期记录。
  • 视频爽约按预约开始后 10 分钟判定,只处理状态 1/2started_at 为空的预约;无人进入为双方爽约,仅粉丝进入为艺人爽约,仅艺人进入为粉丝爽约,双方都曾进入但始终未开始通话也为双方爽约。艺人爽约和双方爽约全额退糖果,粉丝爽约不退款。