录音识别请求中,如果用户设置了 CallbackUrl 参数,则通过回调的方式来返回识别结果,用户需要自行搭建可公网访问的 HTTP 或者 HTTPS 服务,并在创建录音识别任务时,将回调 Url 填写到 CallbackUrl 中。回调时,会使用 HTTP 的 POST 方法,将所有内容会放入 Body 中,Content-Type 为 application/x-www-form-urlencoded
。
一、问题
腾讯asr识别回调出现以下错误
接口信息
错误信息
2024-11-06 14:35:14.504 DEBUG 77352 --- [nio-8080-exec-9] o.s.web.servlet.DispatcherServlet : Completed 200 OK
2024-11-06 14:35:14.517 ERROR 77352 --- [nio-8080-exec-9] c.y.b.r.t.h.HttpRequestTraceServerFilter : 读取请求body数据异常
org.apache.catalina.connector.ClientAbortException: java.io.EOFException: Unexpected EOF read on the socket
at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:322) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
at org.apache.catalina.connector.InputBuffer.checkByteBufferEof(InputBuffer.java:600) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
at org.apache.catalina.connector.InputBuffer.readByte(InputBuffer.java:330) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:84) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
解决
我发现我每次短语音,能顺利接到参数,但是长语音文本就会报这个错误信息:
- 1.我以为是文本太长导致,实际上不是
- 2.我看了一下,回调的时间对比,发现我是每10s,自动获取识别接口。导致长语音,10s获取不到,之后执行完,自动回调时,就会报这个错误,我就把时间,手动查询时间延长,回调callback完成之后,就正常了。
代码
Long taskId = createRecTaskRequest(req);
Long taskId = xxx;
// 30秒后查询
try {
Thread.sleep(30000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 查询
DescribeTaskStatusRequest(taskId);
二、腾讯ASR API
1. 回调说明
2. 回调 Body 说明
2.1 回调 Body 示例
code=0&requestId=4000048858&appid=12516&projectid=0&text=%5B0%3A1.640%2C0%3A4.600%5D++%E6%88%91%E5%9C%A8%E9%A9%AC%E4%B8%8A%E4%B8%8A%E5%A4%9C%E7%8F%AD%E3%80%82%0A%5B0%3A5.420%2C0%3A7.820%5D++%E6%98%8E%E5%A4%A9%E6%97%A9%E4%B8%8A%E8%AF%B4%E5%93%88%E3%80%82%0A&audioTime=8.420000&message=&resultDetail=
2.2 回调参数说明
字段 | 类型 | 描述 |
---|---|---|
code | int64 | 任务状态码,0为成功,其他:失败;详见 状态码说明 |
message | string | 失败原因文字描述,成功时此值为空 |
requestId | uint64 | 任务唯一标识,与录音识别请求中返回的 TaskId 一致。数据格式必须设置为 Uint64 |
appid | uint64 | 腾讯云应用 ID |
projectid | int64 | 腾讯云项目 ID |
audioUrl | string | 语音 url,如创建任务时为上传数据的方式,则不包含该字段 |
text | string | 识别出的结果文本 |
resultDetail | string | 包含 详细识别结果,如创建任务时 ResTextFormat 为0,则不包含该字段 |
audioTime | double | 语音总时长 |
3. 回调 Response 说明
用户侧收到回调请求后,需要以 JSON 格式返回响应。
3.1 回调 Response 示例
{ "code" : 0, "message" : "success" }
3.2 回调 Response 参数说明
参数名称 | 类型 | 描述 |
---|---|---|
code | int64 | 错误码,0为成功,其他值代表失败 |
message | string | 失败原因说明 |
数值 | 说明 |
---|---|
10000 | 转码失败,请确认音频格式是否符合标准 |
10001 | 识别失败 |
10002 | 语音时长太短 |
10003 | 语音时长太长 |
10004 | 无效的语音文件 |
10005 | 其他失败 |
10006 | 音轨个数不匹配 |
10007 | 音频下载失败 |