外观
大模型实时语音识别 API 简介
概念解释
使用 WebSocket 连接,实时输入音频数据,返回流式语音识别结果。接口支持中间识别结果、完整句子结果、词级时间戳、说话人识别、auto 多语种 ASR 模式、ASR 热词和连续静音自动结束。
说明
Hi,您好,欢迎使用有道智云接口服务。
本文档主要针对需要集成 WebSocket API 的技术开发工程师,详细描述接口认证、入参、返回值、音频格式和常见错误码等信息。
接入测试前需要获取应用 ID 和应用密钥,并确认当前应用已开通流式语音识别服务权限。
协议须知
调用方在集成本接口时,请遵循以下规则。
| 规则 | 描述 |
|---|---|
| 传输方式 | WSS |
| 请求方式 | WebSocket |
| 字符编码 | URL 参数使用 UTF-8,音频使用二进制数据流 |
| 请求格式 | wav(不压缩、PCM 编码) |
| 响应格式 | JSON |
接口定义
流式 ASR 接口地址
wss://openapi.youdao.com/stream-audio/stream-asr
请求参数
请求参数通过 WebSocket 连接 URL 的 query string 传递。
| 参数名称 | 类型 | 含义 | 是否必填 | 示例或描述 |
|---|---|---|---|---|
| appKey | string | 应用 ID | 是 | |
| salt | string | 随机值 | 是 | 建议使用 UUID |
| curtime | string | 当前时间戳,单位秒 | 是 | 1757560399 |
| sign | string | 签名 | 是 | 参见下方的签名生成方法 |
| langType | string | 音频语种 | 是 | 如 zh-CHS、en、ja、auto |
参数额外说明
langType=auto表示由服务端配置选择支持多语种识别的 ASR 模型。
音频格式要求
| 属性 | 要求 |
|---|---|
| 格式 | wav(不压缩、PCM 编码) |
| 采样率 | 16k |
| 位深 | 16 bit |
| 声道 | 单声道 |
客户端需要把音频按二进制 WebSocket frame 分片发送。建议按音频真实时长控制发送频率,例如 16k、16bit、单声道音频每次发送 3200 字节时,对应约 100ms 音频。
结束消息
音频发送完成后,客户端必须发送一个二进制 WebSocket frame,内容为以下 UTF-8 字节序列:
json
{"end": "true"}服务端收到结束消息后,会等待算法侧最终结果并返回 isEnd=true 的结束响应。
签名生成方法如下(v4):
text
sign = sha256(appKey + salt + curtime + 应用密钥)其中 curtime 为秒级时间戳,salt 为调用方生成的随机字符串。
请求 URL 示例
text
wss://openapi.youdao.com/stream-audio/stream-asr?appKey=应用ID&salt=随机值&curtime=1757560399&sign=签名&langType=zh-CHS&speakerRequired=false×tampRequired=true&vadEos=0auto 多语种 ASR 示例:
text
wss://openapi.youdao.com/stream-audio/stream-asr?appKey=应用ID&salt=随机值&curtime=1757560399&sign=签名&langType=auto&speakerRequired=false×tampRequired=true响应结果
| 字段 | 类型 | 含义 |
|---|---|---|
| requestId | string | 请求 ID,用于问题排查 |
| errorCode | string | 错误码,0 表示成功 |
| action | string | 响应行为:started、recognition、error |
| msg | string | 错误描述或状态描述 |
| closeCode | string | 关闭原因编码,仅错误关闭时可能返回 |
| isEnd | boolean | 识别是否结束 |
| result | 对象数组 | 识别结果数组,目前通常只包含一个元素 |
| result[0].st | object | 识别句子对象 |
| result[0].st.sentence | string | 识别句子内容 |
| result[0].st.bg | number | 句子开始时间,毫秒 |
| result[0].st.ed | number | 句子结束时间,毫秒 |
| result[0].st.type | number | 句子类型,0 代表完整句子,1 代表非完整句子 |
| result[0].st.partial | boolean | 是否为非完整句子;false 表示完整句子 |
| result[0].st.ws | 对象数组 | 词级时间戳列表 |
| result[0].st.ws[].w | string | 词文本 |
| result[0].st.ws[].wb | number | 词开始时间,毫秒 |
| result[0].st.ws[].we | number | 词结束时间,毫秒 |
| result[0].st.speaker | string | 说话人编号,仅 speakerRequired=true 时可能返回 |
| result[0].segId | number | 识别结果顺序编号,从 1 开始 |
| result[0].seg_id | number | 兼容旧接口的顺序编号字段,与 segId 含义一致 |
开始响应样例
json
{
"requestId": "f8f8d2b776a24e91a145d4dd26f5b7a5",
"errorCode": "0",
"action": "started",
"msg": "成功"
}识别响应样例
中间识别响应样例(仅在显式传 partialAsrRequired=true 且增量 ASR 未断句时可能返回):
json
{
"requestId": "1785312554422-17100767562388193-577",
"errorCode": "0",
"action": "recognition",
"isEnd": false,
"result": [
{
"st": {
"sentence": "主席",
"bg": 1280,
"type": 1,
"ws": [
{
"w": "主",
"wb": 1280,
"we": 1440
},
{
"w": "席",
"wb": 1440,
"we": 1600
}
],
"partial": true,
"ed": 1600
},
"segId": 0,
"seg_id": 0
}
]
}完整句识别响应样例:
json
{
"requestId": "1785312554422-17100767562388193-577",
"errorCode": "0",
"action": "recognition",
"isEnd": false,
"result": [
{
"st": {
"sentence": "主席先生。",
"bg": 1280,
"type": 0,
"ws": [
{
"w": "主",
"wb": 1280,
"we": 1440
},
{
"w": "席",
"wb": 1440,
"we": 1600
},
{
"w": "先",
"wb": 1600,
"we": 1920
},
{
"w": "生",
"wb": 1920,
"we": 2000
}
],
"partial": false,
"ed": 2000
},
"segId": 0,
"seg_id": 0
}
]
}结束响应样例
json
{
"requestId": "f8f8d2b776a24e91a145d4dd26f5b7a5",
"errorCode": "0",
"action": "recognition",
"msg": "成功",
"isEnd": true
}错误响应样例
json
{
"requestId": "f8f8d2b776a24e91a145d4dd26f5b7a5",
"errorCode": "101",
"action": "error",
"msg": "langType: 不能为空"
}支持的语种
| 英文名称 | 语言代码 | 中文名称 |
|---|---|---|
| Auto | auto | 自动检测 |
| Chinese (Simplified) | zh-CHS | 中文(简体) |
| English | en | 英语 |
| Russian | ru | 俄语 |
| Japanese | ja | 日语 |
| Spanish | es | 西班牙语 |
| Vietnamese | vi | 越南语 |
| Arabic | ar | 阿拉伯语 |
| Indonesian | id | 印度尼西亚语 |
| Thai | th | 泰语 |
服务配置
| 支持格式 | 免费用户最大支持并发 | 单次最大请求时长(s) | 每小时最大音频时长(s) | 每小时最大连接次数 | 支持语言 |
|---|---|---|---|---|---|
| wav | 10 | 3600 | 60000 | 3000 | 中/英等,参考详细语言列表 |
注意:如需上调调用量请联系技术人员咨询。
错误代码列表
| 错误码 | 含义 |
|---|---|
| 101 | 缺少必填的参数,首先确保必填参数齐全,然后,确认参数书写是否正确 |
| 102 | 不支持的语言类型 |
| 103 | 翻译文本过长 |
| 104 | 不支持的API类型 |
| 105 | 不支持的签名类型 |
| 106 | 不支持的响应类型 |
| 107 | 不支持的传输加密类型 |
| 108 | 应用ID无效,注册账号,登录后台创建应用和实例并完成绑定,可获得应用ID和应用密钥等信息 |
| 109 | batchLog格式不正确 |
| 110 | 无相关服务的有效实例,应用没有绑定服务实例,可以新建服务实例,绑定服务实例。注:某些服务的结果发音需要tts实例,需要在控制台创建语音合成实例绑定应用后方能使用。 |
| 111 | 开发者账号无效 |
| 112 | 请求服务无效 |
| 113 | q不能为空 |
| 114 | 不支持的图片传输方式 |
| 201 | 解密失败,可能为DES,BASE64,URLDecode的错误 |
| 202 | 签名检验失败,请确认应用ID和应用密钥的正确性。 |
| 203 | 访问IP地址不在可访问IP列表 |
| 205 | 请求的接口与应用的平台类型不一致,确保接入方式(Android SDK、IOS SDK、API)与创建的应用平台类型一致。如有疑问请参考入门指南 |
| 206 | 因为时间戳无效导致签名校验失败 |
| 207 | 重放请求 |
| 301 | 辞典查询失败 |
| 302 | 翻译查询失败 |
| 303 | 服务端的其它异常 |
| 304 | 会话闲置太久超时 |
| 401 | 账户已经欠费停 |
| 402 | offlinesdk不可用 |
| 411 | 访问频率受限,请稍后访问 |
| 412 | 长请求过于频繁,请稍后访问 |
| 901000 | 认证服务异常,请联系客服 |
| 901010 | 并发量过高,请稍后重试 |
| 901020 | 计费服务异常,请联系客服 |
| 901030 | ZK 服务异常,请联系客服 |
| 901200 | 语音识别算法错误 |
| 901201 | 语音识别算法连接失败 |
| 901202 | 语音识别算法连接提前关闭 |
| 901203 | 语音识别算法连接异常断开 |
| 901204 | 语音识别算法响应超时 |
| 901205 | 语音识别算法空闲超时 |
| 901206 | 不支持的 ASR 语种 |
| 901210 | 客户端连接空闲超时 |
| 901211 | 客户端连接静音超时 |
| 901220 | 音频缓存队列溢出 |
| 901230 | 说话人识别错误 |
| 901231 | 语种识别错误,新 langType=auto 主流程通常不触发 |
| 901232 | 分句错误 |
| 909998 | 服务终止 |
| 909999 | 未知异常 |
常见语言Demo
Java 示例
暂无
Python 示例
暂无
C# 示例
暂无
Php 示例
暂无
go 示例
暂无
