null 上传音频质检

By | 2021年4月23日

接口说明

上传语音文件进行分析,文件通常来自用户的呼叫中心;需要注意的几点:

  • 需要提供语音文件URL,要求如下:
    • 保证公网可访问,同时URL必须是域名,不支持ip;
    • 质检完成后,在控制台复核文件时,播放录音使用的仍然是此时提供的url,所以需要保证url长期可用,关于如何保障录音安全,请查看 安全配置
  • 系统在处理完成后会立即将文件删除,不会保存文件副本
  • 接口会返回taskId,用户有2种方式获取结果:
    • 回调:通过在参数中指定callbackUrl,在任务完成后由系统主动发起回调;接到回调后再通过getResult接口获取详细结果
    • 轮询:通过此接口返回的taskId轮询getResult接口异步获取结果,判断返回中的status是否完成;由于任务通常需要几分钟的时间完成,需要每次轮询最好等待30秒
  • 系统支持单轨文件自动分轨,但为保证分轨准确率,呼叫中心的文件应该尽量保存成双轨
  • 需要正确指定语音文件采样率,错误的采样率会导致转写结果错误;通常呼叫中心产生的录音是8K,Mac系统可以用afinfo <fileName>来查看;Windows系统可以安装开源软件FFmpeg来查看
  • 对于单轨文件,需要指定分轨规则以便区分客服还是客户,可以通过以下2种方式:
    • 设置autoSplit为1,同时指定recognizeRoleDataSetId;recognizeRoleDataSetId是某个数据集的ID,因为在创建数据集时已经指定了分轨规则,所以将复用此数据集的规则
    • 设置autoSplit为1,同时指定serviceChannelKeywords;serviceChannelKeywords是一组客服可能说的关键词列表;请确保选择那些区别性比较高的关键词
  • 对于双轨文件,需要指定哪个轨是客服,哪个轨是客户,可以通过以下2种方式:
    • 设置autoSplit为0,同时指定serviceChannel和clientChannel,分别表示客服角色位于哪个轨(比如0),客户角色位于哪个轨(比如1);通常音轨都是从0开始编号,2个轨就是0,1;具体0是客服还是客户,需要用户自行确认
    • 设置autoSplit为1,同时指定serviceChannelKeywords,表示通过关键词来确定哪个轨是客服
  • 通过参数指定过哪些规则,可以通过以下2种方式:
    • 设置ruleIds,指定规则的ID,缺点是如果需要过更多规则,那么需要修改此参数
    • 设置ruleBusinessNames,指定规则所在的业务线,优点是如果需要过更多规则,不需要修改此参数,只需要在创建规则时,把规则添加到某个业务线

入参UploadAudioDataRequest说明

属性 值类型 是否必须 说明
jsonStr String 完整Json字符串信息,具体内容参见以下详细信息

请求参数与Json字符串信息

属性 值类型 是否必须 说明
callList List
待检的语音集合,QltyChkCallLine详细属性见下面描述
autoSplit Integer 多数情况下适用于单轨录音,取值:0、1,是否自动分轨,1为自动分轨,0为不分轨;默认:1;若指定为1,则表示上传的音频为单轨; 自动分轨会额外占用处理时间
recognizeRoleDataSetId Long 适用于单轨录音,指定分轨规则:首先通过控制台创建数据集,配置好分轨规则,记录下数据集ID,则本次上传的文件会复用指定数据集的分轨规则
serviceChannelKeywords List
多数情况下适用于单轨录音,指定客服轨的关键词,请确保选择那些区别性比较高的关键词
serviceChannel Integer 适用于双轨录音,取值:0、1,指定客服的声音轨道,默认0,即第0轨为客服;单轨文件忽略此参数
clientChannel Integer 适用于双轨录音,取值:0、1,指定客户的声音轨道,默认1,即第1轨为客户;单轨文件忽略此参数
ruleIds List
规则id列表,用于指定录音文件过哪些规则,若不指定,则会过所有规则;注意:单个文件允许最大规则数为100,如果超过100,则会截取前100个规则;如果未指定,则会过所有规则,如果所有规则数超过100,则会取最近创建的100个
ruleBusinessNames List
业务线名称列表,另一种方式来指定过哪些规则;与ruleIds不同的是,将会过业务线下的所有规则;适用于规则经常变化的场景:新建规则时,将规则加入业务线,则请求参数不需要改动,质检时就可以过新建的规则
sampleRate Integer 8、16,采样率,8k或16k;默认8
callbackUrl String 回调地址,不指定则不回调,请保证公网可用,不支持ip;录音分析完成后会发起回调;回调时,会在callbackUrl后添加taskId=abc&timestamp=123&signature=def等信息,其中signature用于调用方判断请求是否来自阿里云;回调详细内容请参见下面章节
vocabId String 自定义热词Id,不指定则不使用热词;id值可以从”基础设置” -> “热词” -> “热词组ID” 中查看
modelId String 模型Id,不指定则使用通用模型;id值可以从”基础设置” -> “语言模型”中查看
baseModelId String 基础模型id,取值:mandarin(中文普通话8k,默认),mandarin16(中文普通话16k),cantonese(粤语,需要开通白名单);默认:mandarin

待检语音集合QltyChkCallLine对象:

属性 值类型 是否必须 说明
voiceFileUrl String 音频文件Url,注意:1. 地址必须是域名,不支持IP;2. 保证地址在公网上访问。
fileName String 音频文件名称,如audio.wav;虽不是必填项,但为方便统计,请尽量提供此参数;若不提供,则会从voiceFileUrl中获取,比如 http://www.aliyun.com/audio.wav, 则文件名解析为:audio.wav
autoSplit Integer 参见上层对象参数说明;如为空,会采用上层对象对应值
recognizeRoleDataSetId Long 参见上层对象参数说明;如为空,会采用上层对象对应值
serviceChannel Integer 参见上层对象参数说明;如为空,会采用上层对象对应值
clientChannel Integer 参见上层对象参数说明;如为空,会采用上层对象对应值
sampleRate Integer 参见上层对象参数说明;如为空,会采用上层对象对应值
callStartTime Long 录音发生的时间,格林威治时间1970年01月01日00时00分00秒到现在的毫秒数,若不指定,则会取当前时间
vocabId String 参见上层对象参数说明;如为空,会采用上层对象对应值
customerServiceId Long 客服Id
customerServiceName String 客服姓名
skillGroupId Long 技能组Id
skillGroupName String 技能组名称
callType Integer 呼叫类型 1 呼出 3 呼入
callee String 被叫号码,呼出时指的是客户号码,呼入时指的是客服号码
caller String 主叫号码,呼出时指的是客服号码,呼入时指的是客户号码
callId String 通话id,可以是呼叫中心系统中的通话id,或者其他可以标识通话的id
workplace String 职场名称,用于分类统计
business String 业务线名称,用于分类统计

回调参数说明

假设调用方传入的回调地址是: http://aliyun.com/callback,那么回调时的完整url为http://aliyun.com/callback?taskId=xxx&timestamp=xxx&signature=xxx&event=xxx, 其中:

  • taskId 为任务id
  • timestamp 为调用时的时间戳,单位:毫秒
  • aliUid 为调用方阿里云主账号uid
  • signature 为签名,调用方可用来判断请求是否来自阿里云;计算说明:将taskId=xxx&timestamp=xxx&aliUid=xxx 进行md5 + base64加密,注意顺序;调用方接到回调后,taskId和timestamp可以从回调url中获取,aliUid自行在阿里云官网获取,通过计算来比对自己计算出的signature,与url中的signature是否一致
  • event 为事件名称,调用方可用来判断是什么事件触发的回调,取值为 TaskComplete:任务完成时的回调;

返回参数说明

返回参数JSON字符串:

属性 值类型 是否必须 说明
code String 结果代码,200表示成功,若为别的值则表示失败,调用方可根据此字段判断失败原因
message String 出错时表示出错详情,成功时为successful
requestId String 请求id,提工单时可提供此字段值用于排查问题
success Boolean 请求是否成功,调用方可根据此字段来判断请求是否成功:true表示成功;false/null表示失败
data String 任务ID,在获取任务结果时使用

错误码

错误代码 描述 Http状态码 语义
InvalidParam 参数错误 400 举例:Param voiceFileUrl is invalid: please make sure it is legal url, ip address is not supported

调用示例

  
  1. public void uploadAudioData() throws ClientException {
  2. UploadAudioDataRequest request = new UploadAudioDataRequest();
  3. Map chkCallObject = generateLineV2(NOW);
  4. request.setJsonStr(JSON.toJSONString(chkCallObject));
  5. UploadAudioDataResponse response = client.getAcsResponse(request);
  6. Assert.assertEquals(true, response.getSuccess());
  7. String taskId = response.getData();
  8. }
  9. public Map<String, Object> generateLineV2(Date startTime) {
  10. Map<String, Object> param = new HashMap<>(2);
  11. Map<String, Object> call = new HashMap<>(16);
  12. List<Map<String, Object>> callList = new ArrayList<>(2);
  13. callList.add(call);
  14. param.put("callList", callList);
  15. // 自定义模型(如果有)
  16. param.put("modelId", 501);
  17. // 复用dataSetId这个数据集的角色区分规则
  18. param.put("recognizeRoleDataSetId", dataSetId);
  19. // 录音文件地址,必须是域名,且公网可访问
  20. call.put("voiceFileUrl", "https://" + NORMAL_AUDO_1);
  21. // 单轨文件,设置为自动分轨
  22. call.put("autoSplit", 1);
  23. // 以下为录音额外信息
  24. call.put("customerServiceName", "张三");
  25. call.put("customerServiceId", 123L);
  26. call.put("skillGroupName", "技能组-投诉");
  27. call.put("skillGroupId", 123L);
  28. // 呼叫类型 1 呼出 3 呼入
  29. call.put("callType", 3);
  30. call.put("callee", "138xxxx1948");
  31. call.put("caller", "177xxxx2849");
  32. call.put("callStartTime", startTime.getTime());
  33. return param;
  34. }

返回示例

  
  1. {
  2. "code": "200",
  3. "data": "76DB5D8C-5BD9-42A7-B527-5AF3A5F83F12" ,
  4. "message": "successful",
  5. "requestId": "76DB5D8C-5BD9-42A7-B527-5AF3A5F83F12",
  6. "success": true
  7. }

请关注公众号获取更多资料

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注