一、场景说明
在游戏场景中,需要对音频进行切片送审。
二、计费说明
语音内容安全计费,按照时长计费,详情见:语音内容安全服务计费。
三、功能说明
开通 GME3.0内容安全功能,可对通过 GME 产生的音频内容进行内容安全处理。
四、开通方法
步骤1:进入到 腾讯云游戏多媒体引擎控制台,左侧导航栏选择语音内容安全管理。
步骤2:开通实时语音场景审核和语音消息场景审核。
五、配置审核结果回调 url 和验签 key
可以配置你的业务服务端接收审核结果的回调 url,审核结果可以及时触达到此链接。
六、验签说明
验签说明包含 实时语音审核验签说明 和 语音消息审核验签说明。
七、实时语音审核验签说明
回调密钥和验签:
我们会在回调结果的 header 里,添加 sign 字段,你可以根据签名文档进行合法性校验
签名文档和代码示例见:签名校验示例
八、音频切片文件投递
你需要绑定一个存储桶,我们会按15秒一个切片,投递到你的存储桶里,后台会将需要转存的命中文件上传到你指定的云存储平台(对象存储 COS,AWS S3 或者 阿里云 OSS)
九、访问密钥与密钥
腾讯云 COS
| COS 名称 | 又名 | 作用 | 可见性 |
| SecretId | 访问密钥 | 账号标识(用户名) | 可公开 |
| SecretKey | 密钥 | 签名密码 | 仅创建时可见,必须保存 |
查询入口:
1. 登录 腾讯云控制台。
2. 点击右上角头像,选择访问管理 CAM。
3. 左侧导航栏,选择访问密钥下的 API 密钥管理。
4. 点击新建密钥,短信验证后,生成:
·SecretId(访问密钥)
·SecretKey(密钥)
阿里云 OSS
| OSS 名称 | 又名 | 作用 | 可见性 |
| AccessKey ID | 访问密钥 ID | 账号标识(用户名) | 可公开 |
| AccessKey Secret | 密钥 | 签名密码 | 仅创建时可见,必须保存 |
查询入口:
1. 登录阿里云控制台。
2. 点击右上角头像,选择 AccessKey 管理。
3. 选择 继续使用 AccessKey(或通过 RAM 访问控制创建子账号密钥)。
4. 点击 创建 AccessKey。
5. 完成安全验证后,页面会显示 AccessKey ID 和 AccessKey Secret。
6. 点击 下载 CSV 或直接复制保存,文件包含:
·AccessKey ID(访问密钥)
·AccessKey Secret(密钥)
AWS S3
| S3名称 | 又名 | 作用 | 可见性 |
| Access Key ID | 访问密钥 | 账号标识(用户名) | 可公开 |
| Secret Access Key | 密钥 | 签名密码 | 仅创建时可见,必须保存 |
查询入口:
1. 登录 AWS 控制台,进入 IAM。
2. 选择 Users,选择你的用户下的 Security credentials。
3. 选择 Access keys,点击 Create access key。
4. 生成后下载 CSV,里面包含:
·Access Key ID(访问密钥)
·Secret Access Key(密钥)
十、音频切片文件路径
音频切片默认命名为:
{你的桶名称}/{taskId}/{userId}/audios/{sdkappid}_{roomId}_{userid}_{UTC 时间}.ogg
字段含义说明:
| 字段 | 含义 |
| <taskId> | 审核的任务 ID。 |
| <sdkappid> | 审核任务的 SDKAppId。 |
| <roomId> | 审核的房间号。 |
| <userid> | 用户 ID。 |
| <UTC 时间> | 当前时间字符串 例如:20250106143143。 |
十二、审核策略
你可以编辑需要识别的策略配置。
十三、自定义词
你可以添加自定义词库,添加需要命中的关键词,精确匹配。
十四、审核回调
包含 实时语音审核回调 和 语音消息审核回调。
十五、实时语音审核回调
你可以提供一个接收回调的 HTTP/HTTPS 服务网关来订阅回调消息。当相关事件发生时,审核系统会回调事件通知到你的消息接收服务器。
事件回调消息格式:HTTP/HTTPS POST 请求发送给你的服务器,其中:
字符编码格式:UTF-8。
请求:body 格式为 JSON。
应答:HTTP status code = 200,服务端忽略应答包具体内容
为了协议友好,建议你的应答内容携带 JSON: {"code":0}。
十六、审核回调字段
事件回调消息的 body 中包含以下字段:
| 字段名 | 类型 | 含义 |
| EventGroupId | Number | 事件组 ID, 云端审核固定为11。 |
| EventType | Number | 回调通知的事件类型。 |
| CallbackTs | Number | 事件回调服务器向你的服务器发出回调请求的 Unix 时间戳,单位为毫秒。 |
| EventInfo | JSON Object | 事件信息。 |
十七、审核回调类型
事件类型说明:
| 字段名 | 类型 | 含义 |
| EVENT_TYPE_CLOUD_Moderation_START | 1101 | 云端审核模块启动。 |
| EVENT_TYPE_CLOUD_Moderation_STOP | 1102 | 云端审核模块退出。 |
| EVENT_TYPE_CLOUD_Moderation_SEND_START | 1103 | 云端审核开始送审。 |
| EVENT_TYPE_CLOUD_Moderation_TASK_INFO | 1104 | 审核结果回调。 |
| EVENT_TYPE_CLOUD_Moderation_SEND_STOP | 1105 | 云端审核结束送审。 |
| EVENT_TYPE_CLOUD_Moderation_UPLOAD_ERROR | 1106 | 云端审核投递模块发生错误。 |
事件信息说明:
| 字段名 | 类型 | 含义 |
| RoomId | String | 房间名(类型与客户端房间号类型一致)。 |
| EventTs | Number | 事件发生的 Unix 时间戳,单位为秒 (不建议使用该字段,建议使用 EventMsTs)。 |
| EventMsTs | Number | 事件发生的 Unix 时间戳,单位为毫秒。 |
| UserId | String | 审核机器人的用户 ID。 |
| StreamUserId | String | 当前用户 ID。 |
| TaskId | String | 审核任务 ID,一次云端审核任务唯一的 ID。 |
| Payload | JSONObject | 根据不同事件类型定义不同。 |
十九、事件类型为1101 ,审核任务启动:
EVENT_TYPE_CLOUD_Moderation_START 时 Payload 的定义:
| 字段名 | 类型 | 含义 |
| Status | Number | 0 代表审核模块启动成功,1 代表审核模块启动失败。 |
{ "EventGroupId": 11, "EventType": 1101, "CallbackTs": 1726125338219, "EventInfo": { "RoomId": "960025", "EventTs": 1726125338, "EventMsTs": 1726125338219, "UserId": "inspect", "TaskId": "npVqpdU7sBobiK1iskE3BwlLIebCMrbKUbnL4KrO+8oZWQndib9uvO4Deq9P1NasXGNGNuAE", "Payload": { "Status": 0 } }}
20、事件类型为1102,审核任务结束
EVENT_TYPE_CLOUD_Moderation_STOP 时 Payload 的定义:
| 字段名 | 类型 | 含义 |
| LeaveCode | Number | 0:代表审核模块正常调用停止审核退出。1:审核机器人被客户踢出房间。2:客户解散房间。3:服务器将审核机器人踢出。4:服务器解散房间。99:代表房间内除了审核机器人没有其他用户流,超过指定时间退出。100:房间超时退出。101:同一用户重复进入相同房间导致机器人退出。 |
{ "EventGroupId": 11, "EventType": 1102, "CallbackTs": 1729601782073, "EventInfo": { "RoomId": "975626", "EventTs": "1729601782", "EventMsTs": 1729601782073, "UserId": "SliceTaskDuration1-partner-robot", "TaskId": "nHRjqhU7gTG0UIL-MquzG8D0Q+wehTbVTeeIIK-rO+8oZWQndibtueIpQ8A0F3n9PEVRk0rngE", "Payload": { "LeaveCode": 99 } }}
21、事件类型为1103,开始送审文件
EVENT_TYPE_CLOUD_Moderation_SEND_START 时 Payload 的定义:
| 字段名 | 类型 | 含义 |
| Status | Number | 0:代表开始送审文件。 |
{ "EventGroupId": 11, "EventType": 1103, "CallbackTs": 1726750023538, "EventInfo": { "RoomId": "295210", "EventTs": 1726750023, "EventMsTs": 1726750023538, "UserId": "inspect", "TaskId": "nHwXIdU7mJvL22pFsXZ-v7OgEzq1OzbNXe9L4K-4pycoZWQndib3ZfzqN7Wq+AdiPLMBLxd0gE", "Payload": { "Status": 0 } }}
22、事件类型为1104,审核结果回调
EVENT_TYPE_CLOUD_Moderation_FILE_INFO 时 Payload 的定义:
| 字段名 | 类型 | 含义 |
| DataId | String | 审核任务 ID。 |
| MediaType | Number | 1:代表实时语音内容审核。 |
| Suggest | Number | 0:建议通过。1 :建议人工复审。2:建议屏蔽。 |
| Label | String | Normal:正常语音内容 Ad:广告Porn:色情Abuse:谩骂Illegal: 违禁Polity: 涉政Terror: 暴恐Sexy: 性感Moan: 呻吟/娇喘Custom: 自定义 |
| Audio | String | 用户桶音频路径。 |
| AudioText | String | 音频识别文本。 |
| CheckDetail | 对象 | 审核详细结果。 |
| Keywords | []String | 关键词。 |
| Rate | Number | 置信度分数;示例值:100 |
23、CheckDetail 的定义
| 字段名 | 类型 | 含义 |
| Label | String | Normal:正常语音内容。Ad:广告。Porn:色情。Abuse:谩骂。Illegal: 违禁。Polity: 涉政。Terror: 暴恐。Sexy: 性感。Moan: 呻吟/娇喘。Custom: 自定义。 |
| Keywords | []string | 关键词 |
| Desc | String | 二级标签 |
| Score | Number | 置信度分数;示例值:100 |
| Suggest | Number | 0:建议通过。1:建议人工复审。2:建议屏蔽。 |
音频审核结果示例
{ "EventGroupId": 11, "EventType": 1104, "CallbackTs": 1726750309161, "EventInfo": { "RoomId": "963239", "EventTs": 1735872251, "EventMsTs": 1735872251524, "UserId": "TRTCModerationCase2-user0", "StreamerUserId": "SliceCustomUploadCase6-user0", "TaskId": "-m9lm+lU7tOlL2mFgsPuzHeyNThbhZzbJlKQI4K-raO8oZWQndibARGYcSDohF0Zfgo7RNCuGQE.", "Payload": { "DataId": "547512114953106866", "RequestId": "", "MediaType": 1, "Suggest": 2, "Label": "Polity", "Image": "", "Rate": 100, "Audio": "https://x.xx.com/-m9lm+lU7tOlL2mFgsPuzHeyNThbhZzbJlKQI4K-raO8oZWQndibARGYcSDohF0Zfgo7RNCuGQE./547512114835666354.ogg", "AudioText": "XXX认真听取讲解,观看反映延安时期重大战役运筹指挥情况的历史图表,感悟党中央和中央军委的领导智慧和艺术。", "CheckDetail": [ { "Label": "Polity", "Suggest": 2, "Keywords": [ "XXX" ], "Score": 100, "Desc": "", "AudioSegments": {}, "ImageLocation": {} } ] } }}
24、事件类型为1105,结束文件送审
EVENT_TYPE_CLOUD_Moderation_SEND_STOP 时 Payload 的定义:
| 字段名 | 类型 | 含义 |
| Status | Number | 结束送审。 |
{ "EventGroupId": 11, "EventType": 1105, "CallbackTs": 1726751347072, "EventInfo": { "RoomId": "295211", "EventTs": 1726751347, "EventMsTs": 1726751347072, "UserId": "inspect", "TaskId": "-nHwXIdU7jx6C00Nt8Vr+3h4GwYdP7zbeHi9L4K-4pycoZWQndibqFeEaV4LvjFqSuQvaAkrNQE.", "Payload": { "Status": 0 } }}
25、事件类型为1106,投递文件失败
EVENT_TYPE_CLOUD_Moderation_SEND_ERROR 时 Payload 的定义:
| 字段名 | 类型 | 含义 |
| Code | Number | COS 或者第三方存储错误码。 |
| Message | String | COS 或者第三方存储错误消息。 |
{ "EventGroupId": 11, "EventType": 1106, "CallbackTs": 1726751347072, "EventInfo": { "RoomId": "295211", "EventTs": 1726751347, "EventMsTs": 1726751347072, "UserId": "inspect", "TaskId": "-nHwXIdU7jx6C00Nt8Vr+3h4GwYdP7zbeHi9L4K-4pycoZWQndibqFeEaV4LvjFqSuQvaAkrNQE.", "Payload": { "Code": 10002, "Message": "BadRequest" } }}
26、语音消息
语音消息和实时语音是两个不同的功能,语音消息审核结果除了在语音消息接口里直接返回 audit_result 字段外,还会回调你配置的服务端回调 url
27、语音消息审核验签说明
审核回调结构体 sign 字段是待验签的字段
步骤1:组成待签名的字符串
//待签名字符串body: "biz_id=" +biz_id + "&audit_res=" +audit_res+ "&DataId=" + DataId + "&Label=" + Label
步骤2:使用 sha256签名算法签名
func createSignature(signKey string, body string) string { mac := hmac.New(sha256.New, []byte(signKey)) mac.Write([]byte(body)) sha := hex.EncodeToString(mac.Sum(nil)) return sha}
28、语音审核结果回调
字段定义:
| 名称 | 类型 | 描述 |
| user_id | Number | 业务方玩家用户 ID。 |
| player_uin | String | 业务方玩家用户 ID,字符串类型。 |
| biz_id | Number | GME Sdkappid。 |
| sign | String | 签名字符串。 |
| audit_res | Number | 审核状态,对应如下:1:审核完成。2:审核中。3:语言不支持。4:没有勾选该语言送审。 |
| DataId | String | 数据唯一标识。 |
| HitFlag | Boolean | 是否违规:true 违规,false 不违规。 |
| Label | String | 审核结果标签,对应如下:normal:正常音频内容。politics:政治。porn:色情。abuse:谩骂。ad:广告。illegal:违法。terrorism: 暴恐。moan: 呻吟/娇喘。customized:自定义词库。 |
| AsrText | String | 语音转文本结果。 |
| ScanDetail | Array of ScanDetail | 包含语音消息的审核结果和违规内容。 |
| RequestId | String | 唯一请求 ID,用于跟踪查询问题。 |
29、ScanDetail 字段说明:
| 名称 | 类型 | 描述 |
| Label | String | 审核结果标签,对应如下:normal:正常文本。politics:政治。porn:色情。abuse:谩骂。ad:广告。illegal:违法。terrorism: 暴恐。moan: 呻吟/娇喘。customized:自定义词库。 |
| KeyWords | []String | 命中关键词。 |
| Rate | String | 置信度分数。示例值:100 |
| StartTime | Number | 违规事件结束时间,单位为秒(s)。示例值:15 |
| EndTime | Number | 违规事件结束时间,单位为秒(s)。示例值:15 |
{ "user_id": 9920413420219, "player_uin": "9920413420219", "biz_id": 1400367018, "sign": "f7067c7020dc384879f273738f76319235d94aef60b7d83cec575a300e548199", "audit_res": 1, "DataId": "A1A3E84F-4C9A-4A51-B7EC-10DFBC49959F", "HitFlag": true, "Label": "porn", "AsrText": "怎么,还想你的奶了?", "ScanDetail": [ { "Label": "porn", "Rate": "72", "StartTime": 0, "EndTime": 0 } ], "RequestId": "a61df1f6-e0e2-4a5b-805c-e277463d7bc3"}