Table of Contents
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 | 否 | 审核建议;block、reject、violation、违规、不通过 会触发违规中断 |
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 | 是 | 前端配置声网审核时透传的当前侧身份:fan 或 artist |
请求体示例:
{
"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 | 本地处理结果:success、skipped 或 failed |
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_call 且 payload.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=4、ended_at、actual_duration_seconds、cancel_reason=审核违规中断,并更新房间room_status=5、ended_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补偿重试。