直播语音离线接口方式获取接口

直播语音离线接口方式获取

接口地址

http://as-liveaudio.dun.163.com/v2/liveaudio/callback/results

接口描述

直播语音检测结果获取接口,获取离线处理的数据后,下次调用,不会再次返回之前获取过的离线数据。

接口请求频率

小于10s/20次,请求频率过快服务器会拒绝处理。

请求参数

该接口参数与请求公共参数一致,详细见 请求公共参数

参数名称类型是否必选最大长度描述
versionStringY4接口版本v2.1

响应结果

响应字段如下,响应通用字段已省略,详细见 响应通用字段

result 数组数据结构

参数名称类型描述
taskIdString唯一标识
dataIdString数据id
callbackString产品调用直播语音在线检测传递的 callback 字段数据
evidencesjson对象直播断句证据信息
reviewEvidencesjson对象人审证据信息

机审证据信息

evidences 数据结构

参数名称类型描述
asrStatusNumber音频翻译结果,2:检测中,3:检测完成,4:检测失败
asrResultNumber音频翻译检测失败原因,1:文件下载失败,2:音频流不存在,3:解析失败,4:文件格式错误
actionNumber检测结果,0:通过,1:嫌疑,2:不通过
startTimeNumber最近开始时间点,单位毫秒
endTimeNumber最近结束时间点,单位毫秒
speakerIDString针对接入SDK监听客户,可能返回的说话人ID信息
segmentsjson数组证据信息,通过时数据为空
contentString音频数据所在断句语音识别原文内容,支持返回异常数据所在断句内容或全部原文内容

segments 数据结构

参数名称类型描述
labelNumber分类信息,100:色情,200:广告,260:广告法,300:暴恐,400:违禁,500:涉政,600:谩骂
levelNumber分类级别,1:不确定,2:确定
subLabelsjson数组细分类信息,可能包含多个,可能为空

subLabels 数据结构

参数名称类型描述
detailsjson对象其他信息
subLabelNumber细分类,详细编码请参考下方对应细分类编码对应表

details 数据结构

参数名称类型描述
evidenceString命中的敏感词或者问题数据的具体分值

音频墙人审证据信息

reviewEvidences 数据结构

参数名称类型描述
actionNumber审核操作, 1为忽略, 2为警告, 3为断流, 4为提示
actionTimeNumber操作时间, UNIX_TIME时间戳, 毫秒为单位
spamTypeNumber违规类型, 100-色情, 115-歌曲低俗, 116-言论低俗涉黄, 121-发出涉黄声音, 122-ASMR, 200-广告, 211-商业推广, 212-提及竞品, 300-暴恐, 400-违禁, 500-涉政, 511-影响政府形象, 512-邪教迷信, 513-涉军事, 514-涉宗教, 515-国歌、严肃歌曲, 516-涉及少数民族, 800-不文明, 826-传播负面情绪, 827-违反公序良俗, 828-侵害他人隐私, 1000-其他, 1023-无营养, 1027-话题炒作, 1030-挂机, 1050-自定义
spamDetailString违规详细说明
warnCountNumber警告次数
promptCountNumber提示次数
segmentsjson数组人审断句信息, 可为空, 详细结构如下

segments 数据结构

参数名称类型描述
startTimeNumber语音开始时间
endTimeNumber语音结束时间

响应示例

当获取到离线结果时,输出示例如下:

{
    "code":200,
    "msg":"ok",
    "result":[
        {
    "taskId":"67af8eb4c74d4d768a5ff76257d4e7b5",
    "callback":"8brNbu9c5Z",
    "dataId":"970584153600754",
    "status":101,
    "evidences":{
        "audio":{
            "action":2,
            "asrStatus":2,
            "startTime":1596709020230,
            "endTime":1596709037230,
            "content":"0.99994856",
            "segments":[
                {
                    "label":100,
                    "level":2,
                    "subLabels":[
                        {
                            "details":{
                                "evidence":"0.99994856"
                            },
                            "subLabel":"13000"
                        }
                    ]
                }
            ]
        }
    }
},
 {
    "code":200,
    "msg":"ok",
    "result":[
        {
            "taskId":"76abd07d22b24624b585b088cdc77edb",
            "callback":"",
            "dataId":"",
            "censorSource":2,
            "evidences":{
                "action":2,
                "asrStatus":2,
                "startTime":1597717710292,
                "endTime":1597717722472,
                "content":"前不久,我们隆重庆祝了中华人民共和国成立同胞们。",
                "segments":[
                    {
                        "label":500,
                        "level":2,
                        "subLabels":[
                            {
                                "details":{
                                    "evidence":"中华人民共和国"
                                },
                                "subLabel":"500015"
                            }
                        ]
                    }
                ]
            }
        }
    ]
},
			{
            "taskId":"2e81550098974e30b59b6f364348a2b9",
            "callback":"",
            "dataId":"157473",
            "reviewEvidences":{
                "action":4,
                "actionTime":1587634142122,
                "spamType":828,
                "spamDetail":"2132",
                "warnCount":0,
                "promptCount":2,
                "segments":[

                ],
                "status":2
            }
        }
    ]
}

当无最新离线结果需要获取时,输出示例如下:

{
    "code": 200,
    "msg": "ok",
    "result":[]
}

直播语音回调方式获取结果

回调方式以数据为维度由客户设置回调地址;直播视频实时检测当检测到异常数据时,调用客户提供的回调接口。

回调接入说明

接入回调方式很简单,只需要在调用在线检测接口请求参数中指定了回调通知参数callbackUrl(即一个http(s)协议接口的URL)。需要您的回调接口支持http协议,支持POST方法,传输数据编码采用utf-8。

业务类型回调参数名称类型最大长度描述
文本callbackUrlString256文本在线检测参数中添加callbackUrl字段

回调状态

您服务端接收到我们回调的结果后,返回的HTTP状态码为200时,表示推送成功,其他的HTTP状态码均视为您接收失败,我们将每隔10分钟推送一次,如果一直失败,持续一天后不再推送;回调接口超时时间设置为2s,为了保证顺利接收数据,客户需保证接收接口性能稳定并且保证幂等性。

请求公共参数

参数名称类型是否必传描述
secretIdStringY产品秘钥 id ,由易盾反垃圾云服务分配,产品标识
businessIdStringY业务id ,由易盾反垃圾云服务分配,业务标识
signatureStringY请求签名,用来验证此次请求的合法性,具体算法见 接口鉴权
callbackDataStringY主动推送推送数据,格式为json字符串

secretId,businessId,signature参数用来给数据接收接口做签名鉴权用

接口鉴权

回调结果可以通过业务开通时易盾分配的密钥信息字段进行接口鉴权,鉴权粒度是否要精确到业务级别,用户可以根据需要自行决定

/**
 * 通过HttpServletRequest做签名验证
 * 
 * @param request
 * @return
 */
public static boolean verifySignature(HttpServletRequest request) {
    String secretId = request.getParameter("secretId");
    String businessId = request.getParameter("businessId");
    String signature = request.getParameter("signature");
    if (StringUtils.isEmpty(secretId) || StringUtils.isEmpty(signature)) {
        // 签名参数为空,直接返回失败
        return false;
    }
    Map<String, String> params = Maps.newHashMap();
    for (String paramName : request.getParameterMap().keySet()) {
        if (!"signature".equals(paramName)) {
            params.put(paramName, request.getParameter(paramName));
        }
    }
    // SECRETKEY:产品私有密钥 SECRETID:产品密钥ID BUSINESSID:业务ID,开通服务时,易盾会提供相关密钥信息
    String serverSignature = getSignature(SECRETKEY, params);
    return signature.equals(serverSignature) && SECRETID.equals(secretId) && BUSINESSID.equals(businessId);
}
/**
* 生成签名信息
* @param secretKey 产品私钥
* @param params 接口请求参数名和参数值map,不包括signature参数名
* @return
* @throws UnsupportedEncodingException
*/
public static String genSignature(String secretKey, Map<String, String> params) throws UnsupportedEncodingException {
    // 1. 参数名按照ASCII码表升序排序
    String[] keys = params.keySet().toArray(new String[0]);
    Arrays.sort(keys);

    // 2. 按照排序拼接参数名与参数值
    StringBuffer paramBuffer = new StringBuffer();
    for (String key : keys) {
        paramBuffer.append(key).append(params.get(key) == null ? "" : params.get(key));
    }
    // 3. 将secretKey拼接到最后
    paramBuffer.append(secretKey);

    // 4. MD5是128位长度的摘要算法,用16进制表示,一个十六进制的字符能表示4个位,所以签名后的字符串长度固定为32个十六进制字符。
    return DigestUtils.md5Hex(paramBuffer.toString().getBytes("UTF-8"));
}

直播语音回调数据结构

callbackData为Json字符串,数据结构如下:

{
            "taskId":"67af8eb4c74d4d768a5ff76257d4e7b5",
            "callback":"8brNbu9c5Z",
            "dataId":"970584153600754",
            "status":101,
            "evidences":{
                "audio":{
                    "action":2,
                    "asrStatus":2,
                    "startTime":1596709020230,
                    "endTime":1596709037230,
                    "content":"0.99994856",
                    "segments":[
                        {
                            "label":100,
                            "level":2,
                            "subLabels":[
                                {
                                    "details":{
                                        "evidence":"0.99994856"
                                    },
                                    "subLabel":"13000"
                                }
                            ]
                        }
                    ]
                }
            },
        {
            "taskId":"2e81550098974e30b59b6f364348a2b9",
            "callback":"",
            "dataId":"157473",
            "reviewEvidences":{
                "action":4,
                "actionTime":1587634142122,
                "spamType":828,
                "spamDetail":"2132",
                "warnCount":0,
                "promptCount":2,
                "segments":[

                ],
                "status":2
            }
        }
    ]
}