点播语音结果获取接口
接口地址
https://as.dun.163.com/v3/audio/callback/results
接口描述
语音检测结果获取接口,获取离线处理的数据后,下次调用,不会再次返回之前获取过的离线数据。建议您使用POST请求, 且仅接受 application/x-www-form-urlencoded 编码格式。
接口请求频率
小于10s/20次,请求频率过快服务器会拒绝处理。
请求参数
该接口参数与请求公共参数一致,详细见 请求公共参数
参数名称 | 类型 | 是否必选 | 最大长度 | 描述 |
---|---|---|---|---|
version | String | Y | 4 | 接口版本v3.5 |
响应结果
响应字段如下,响应通用字段已省略,详细见 响应通用字段:
返回结果数据结构
反垃圾检测结果
antispam 数组数据结构
参数名称 | 类型 | 描述 |
---|---|---|
asrStatus | Number | 音频翻译结果,2:检测中,3:检测完成,4:检测失败 |
asrResult | Number | 音频翻译检测失败原因,1:文件格式错误,2:文件下载失败,3:解析失败,4:音频流不存在 |
action | Number | 检测结果,0:通过,1:嫌疑,2:不通过 |
taskId | String | 唯一标识 |
censorSource | Number | 审核来源,0:易盾人审,1:客户人审,2:易盾机审 |
censorTime | Number | 人工审核完成时间,毫秒单位时间戳(13位) |
segments | json数组 | 音频数据所在断句详细信息 |
labels | json数组 | 分类信息 |
censorLabels | json数据 | 支持在智能审核系统自定义标签分类信息 |
censorLabels 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
code | Number | 在智能系统配置自定义便签之后会生成一个唯一的标签ID |
desc | String | 在智能审核系统配置自定义标签备注 |
segments 数组数据结构
参数名称 | 类型 | 描述 |
---|---|---|
startTime | Number | 最近开始时间点,单位秒 |
endTime | Number | 最近开始时间点,单位秒 |
content | String | 音频数据所在断句语音识别原文内容,支持返回异常数据所在断句内容或全部原文内容 |
label | Number | 分类信息,100:色情,200:广告,260:广告法,300:暴恐,400:违禁,500:涉政,600:谩骂,900:其他,1100:涉价值观 |
level | Nubmber | 分类级别,0:通过,1:嫌疑,2:不通过 |
hintList | json数组 | 线索详细信息 |
labels 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
label | Number | 分类信息,100:色情,200:广告,260:广告法,300:暴恐,400:违禁,500:涉政,600:谩骂,1100:涉价值观 |
level | Number | 分类级别,0:通过,1:嫌疑,2:不通过 |
subLabels | json数组 | 细分类信息,可能包含多个,可能为空 |
subLabels 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
details | json对象 | 其他信息 |
subLabel | json数组 | 细分类,详细编码请参考下方对应细分类编码对应表 |
自定义细分类
易盾支持sublabel自定义细分类过检并返回,如有需求,可联系您的专属安全策略经理添加。
details 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
hitType | Number | 命中检测器类型:10:用户名单 11:IP名单 12:设备名单 30:敏感词 110:IP地区限制 130:声纹检测 |
hint | json数组 | 线索信息,用于定位文本中有问题的部分,辅助人工审核 |
hitInfos | json数组 | 线索详细信息 |
hitInfos 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
hitType | Number | 线索分类信息,返回10:表示命中用户自定义添加用户名单,返回11:表示命中用户自定义添加ip名单,返回30:表示命中用户自定义添加敏感词 |
hitClues | String | hitTyp命中30自定义添加敏感词,返回命中的自定义敏感词内容,如果没有命中hitType:30,则不返回该字段 |
hint 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
value | String | 命中的敏感词或者声纹检测的分值 |
segments | json数组 | 命中敏感词或者声纹检测的音频时间点 |
segments 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
startTime | Number | 最近开始时间点,单位毫秒 |
endTime | Number | 最近结束时间点,单位毫秒 |
语音识别检测结果
asr 数组数据结构
参数名称 | 类型 | 描述 |
---|---|---|
taskId | String | 唯一标识 |
details | json数组 | 语音识别检测结果 |
details 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
startTime | Number | 断句开始时间点,单位毫秒 |
endTime | Number | 断句结束时间点,单位毫秒 |
content | String | 语音识别结果 |
语种检测结果
language 数组数据结构
参数名称 | 类型 | 描述 |
---|---|---|
taskId | String | 唯一标识 |
details | json数组 | 语种检测结果 |
details 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
type | String | 语种类型,支持检测语种类型请参考语种代码表 |
segments | json数组 | 识别语种检测的音频时间点 |
segments 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
startTime | Number | 最近开始时间点,单位毫秒 |
endTime | Number | 最近结束时间点,单位毫秒 |
人声属性结果
voice 数组数据结构
参数名称 | 类型 | 描述 |
---|---|---|
taskId | String | 唯一标识 |
mainGander | String | 音频性别建议值,male/female |
响应示例
当获取到离线结果时,输出示例如下:
{
"code":200,
"msg":"ok",
"antispam":[
{
"action":2,
"asrStatus":3,
"taskId":"20234071a83c4498a6d606f63e45134f",
"censorSource":"2",
"censorTime":1612234421000,
"segments":[
{
"startTime":6,
"endTime":10,
"content":"本拉登你都不知道",
"label":300,
"level":2,
"hintList":[
"本拉登"
]
},
{
"startTime":18,
"endTime":21,
"content":"他是卖那个匕首的店长耶。",
"label":400,
"level":2,
"hintList":[
"卖那个匕首"
]
}
],
"labels":[
{
"label":400,
"level":2,
"subLabels":[
{
"subLabel":"400017",
"details":{
"hint":[
{
"value":"卖那个匕首",
"segments":[
{
"startTime":18,
"endTime":21
}
]
}
],
"hitType":30
}
}
]
},
{
"label":300,
"level":2,
"subLabels":[
{
"subLabel":"400017",
"details":{
"hint":[
{
"value":"本拉登",
"segments":[
{
"startTime":6,
"endTime":10
}
]
}
],
"hitType":30
}
}
]
}
],
"callback":"自定义内容"
}
],
],
"language":[
{
"taskId":"20234071a83c4498a6d606f63e45134f",
"details":[
{
"type":"English",
"segments":[
{
"startTime":0,
"endTime":10
}
]
}
]
}
],
"voice":[
{
"taskId":"20234071a83c4498a6d606f63e45134f",
"mainGender":"male"
}
],
"censorLabels":[
{
"code":自定义标签映射ID
}]
}
当无最新离线结果需要获取时,输出示例如下:
{
"code": 200,
"msg": "ok",
"antispam":[],
"language":[]
}
点播语音回调方式获取
回调方式以数据为维度由客户设置回调地址;人审完成之后,调用客户提供的http地址将结果推送到客户设置的接口地址。
回调接入说明
接入回调方式很简单,只需要在调用在线检测接口请求参数中指定了回调通知参数callbackUrl(即一个http(s)协议接口的URL)。需要您的回调接口支持http协议,支持POST方法,传输数据编码采用utf-8。
业务类型 | 回调参数名称 | 类型 | 最大长度 | 描述 |
---|---|---|---|---|
点播音频 | callbackUrl | String | 256 | 点播音频提交接口参数中添加callbackUrl字段 |
回调状态
您服务端接收到我们回调的结果后,返回的HTTP状态码为200时,表示推送成功,其他的HTTP状态码均视为您接收失败,我们将每隔10分钟推送一次,如果一直失败,持续一天后不再推送;回调接口超时时间设置为2s,为了保证顺利接收数据,客户需保证接收接口性能稳定并且保证幂等性。
请求公共参数
参数名称 | 类型 | 是否必传 | 描述 |
---|---|---|---|
secretId | String | Y | 产品秘钥 id ,由易盾反垃圾云服务分配,产品标识 |
businessId | String | Y | 业务id ,由易盾反垃圾云服务分配,业务标识 |
signature | String | Y | 请求签名,用来验证此次请求的合法性,具体算法见 接口鉴权 |
callbackData | String | Y | 主动推送推送数据,格式为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字符串,数据结构如下:
{
"antispam":[
{
"action":2,
"asrStatus":3,
"taskId":"20234071a83c4498a6d606f63e45134f",
"censorSource":"2",
"censorTime":1612234421000,
"segments":[
{
"startTime":6,
"endTime":10,
"content":"本拉登你都不知道",
"label":300,
"level":2,
"hintList":[
"本拉登"
]
},
{
"startTime":18,
"endTime":21,
"content":"他是卖那个匕首的店长耶。",
"label":400,
"level":2,
"hintList":[
"卖那个匕首"
]
}
],
"labels":[
{
"label":400,
"level":2,
"details":{
"hint":[
{
"value":"卖那个匕首",
"segments":[
{
"startTime":18,
"endTime":21
}
]
}
],
"hitType":30
},
"subLabels":[
"400017"
]
},
{
"label":300,
"level":2,
"details":{
"hint":[
{
"value":"本拉登",
"segments":[
{
"startTime":6,
"endTime":10
}
]
}
],
"hitType":30
},
"subLabels":[
"300016"
]
}
],
"callback":"自定义内容"
}
],
"language":[
{
"taskId":"20234071a83c4498a6d606f63e45134f",
"details":[
{
"type":"English",
"segments":[
{
"startTime":0,
"endTime":10
}
]
}
]
}
],
"voice":[
{
"taskId":"20234071a83c4498a6d606f63e45134f",
"mainGender":"male"
}
],
"censorLabels":[
{
"code":自定义标签ID
}
]
}