16.11 声网视频审核结果回调【未执行,需三方/真实联调】

POST /tieup/api/v1/webhooks/shengwang/video-moderation
Content-Type: application/json
Agora-Signature-V2: <signature>

说明:该接口只接收声网视频审核结果回调,不混入普通 RTC 频道事件。验签失败只写入 tieup_video_call_moderation_log 并跳过业务处理;验签通过且审核结果为违规时,服务端会保存违规信息、异常完成本地通话、调用声网频道管理解散频道,并通过融云系统消息通知粉丝和艺人退出通话。违规中断按“异常完成不入账”处理,不触发视频通话收入入账。

请求头:

参数 类型 必填 说明
Agora-Signature-V2 string 声网消息通知服务 HMAC/SHA256 签名;服务端使用后台 webhook_secret 校验
Content-Type string 固定 application/json

请求参数:

参数 类型 必填 说明
eventId / event_id / noticeId / sid string 审核回调事件 ID;缺失时服务端按原始请求体生成哈希,用于幂等
suggestion string 审核建议;blockrejectviolation违规不通过 会触发违规中断
reason_code string 审核原因代码,例如 porn
reason_label string 脱敏后的原因文案,例如 涉黄;APP 展示仍建议使用固定违规中断提示
channelName / channel_name / cname string 声网频道名,对应 tieup_video_call_room.rtc_channel_name
uid / userId integer/string 声网频道内 UID,用于推断违规侧
confidence / score number 审核置信度
snapshot_url / imageUrl string 审核截图或证据地址,仅后台排查使用,不下发 APP
extraInfo.booking_no string 前端配置声网审核时透传的视频预约单号
extraInfo.room_no string 前端配置声网审核时透传的本地房间号
extraInfo.channel_name string 前端配置声网审核时透传的声网频道名
extraInfo.uid integer/string 前端配置声网审核时透传的当前侧声网 UID
extraInfo.side string 前端配置声网审核时透传的当前侧身份:fanartist

请求体示例:

{
  "eventId": "moderation_202607040001",
  "suggestion": "block",
  "reason_code": "porn",
  "reason_label": "涉黄",
  "confidence": 98.5,
  "channelName": "sw_vc_VC202607040001",
  "uid": 135792468,
  "snapshot_url": "https://audit.example.com/snapshot/hidden.jpg",
  "extraInfo": {
    "booking_no": "VC202607040001",
    "room_no": "VR202607040001",
    "channel_name": "sw_vc_VC202607040001",
    "uid": 135792468,
    "side": "fan"
  }
}

响应字段:

字段 类型 说明
code integer 响应码,成功为 200
message string 响应提示
data.ack boolean 是否确认接收回调;验签失败也返回 true,但不会推进业务
data.verified boolean 是否验签通过
data.moderation_no string 视频审核违规日志编号
data.status string 本地处理结果:successskippedfailed
data.booking_no string 关联预约单号,未定位时可能为空

响应示例:

{
  "code": 200,
  "message": "成功",
  "data": {
    "ack": true,
    "verified": true,
    "moderation_no": "VM2026070412000012345678",
    "status": "success",
    "booking_no": "VC202607040001",
    "ended_at": "2026-07-04 12:03:20"
  }
}

融云系统消息:

审核违规中断后,服务端会分别给粉丝和艺人创建系统消息并通过融云自定义类型 Tieup:SysMsg 触达。该通知归入 business_type=feedback,APP 通过 source_type=video_callpayload.action=force_leave_video_call 识别强制退出场景,收到后立即调用声网 SDK 退出频道,并展示“检测到违规内容,通话已中断”类提示。

{
  "business_type": "feedback",
  "source_type": "video_call",
  "source_no": "VC202607040001",
  "payload": {
    "action": "force_leave_video_call",
    "reason_code": "porn",
    "reason_label": "涉黄",
    "booking_no": "VC202607040001",
    "room_no": "VR202607040001",
    "channel_name": "sw_vc_VC202607040001",
    "violation_side": "fan",
    "ended_by": "moderation"
  }
}

处理规则:

  • 仅处理仍为 3=通话中 的预约;已完成、已爽约、已取消或重复回调只记录并跳过。
  • 违规中断更新 tieup_video_call_booking.status=4ended_atactual_duration_secondscancel_reason=审核违规中断,并更新房间 room_status=5ended_at
  • 事件表写入 tieup_video_call_event.event_type=12,payload 标记 source=video_moderation、审核记录号、违规侧和原因。
  • 声网频道解散使用频道管理的加入权限封禁规则,按频道名让频道内用户立即失去加入权限;该调用失败不回滚本地状态,记录 dissolve_status=2 后由 video-moderation-repair 补偿重试。
  • 融云系统消息通知失败不影响本地通话结束和声网频道解散,记录 notify_status=2/4 后由 video-moderation-repair 补偿重试。