语音听写(流式版)WebAPI
ws[s]: //iat-api.xfyun.cn/v2/iat
接口说明
高阶功能-动态修正现在免费开放!多个小语种已上线!
#接口Demo
目前仅提供部分开发语言的demo,其他语言请参照下方接口文档进行开发。
也欢迎热心的开发者到 讯飞开放平台社区 分享你们的demo。
#接口要求
内容 | 说明 |
---|---|
请求协议 | ws[s](为提高安全性,强烈推荐wss) |
请求地址 | 中英文(推荐使用):ws[s]: //iat-api.xfyun.cn/v2/iat 中英文:ws[s]: //ws-api.xfyun.cn/v2/iat 小语种:ws[s]: //iat-niche-api.xfyun.cn/v2/iat 注:服务器IP不固定,为保证您的接口稳定,请勿通过指定IP的方式调用接口,使用域名方式调用 |
请求行 | GET /v2/iat HTTP/1.1 |
接口鉴权 | 签名机制,详情请参照下方接口鉴权 |
字符编码 | UTF-8 |
响应格式 | 统一采用JSON格式 |
开发语言 | 任意,只要可以向讯飞云服务发起Websocket请求的均可 |
操作系统 | 任意 |
音频属性 | 采样率16k或8K、位长16bit、单声道 |
音频格式 | pcm speex(8k) speex-wb(16k) mp3(仅中文普通话和英文支持,其他方言及小语种敬请期待) 样例音频请参照音频样例 |
音频长度 | 最长60s |
语言种类 | 中文、英文、小语种以及中文方言,可在控制台-语音听写(流式版)-方言/语种处添加试用或购买 |
#接口调用流程
1.
2.
3.
4.
#白名单
在调用该业务接口时
#接口鉴权
#鉴权方法
wss://iat-api.xfyun.cn/v2/iat?authorization=YXBpX2tleT0ia2V5eHh4eHh4eHg4ZWUyNzkzNDg1MTlleHh4eHh4eHgiLCBhbGdvcml0aG09ImhtYWMtc2hhMjU2IiwgaGVhZGVycz0iaG9zdCBkYXRlIHJlcXVlc3QtbGluZSIsIHNpZ25hdHVyZT0iSHAzVHk0WmtTQm1MOGpLeU9McFFpdjlTcjVudm1lWUVIN1dzTC9aTzJKZz0i&date=Wed%2C%2010%20Jul%202019%2007%3A35%3A43%20GMT&host=iat-api.xfyun.cn
参数 | 类型 | 必须 | 说明 | 示例 |
---|---|---|---|---|
host | string | 是 | 请求主机 | iat-api.xfyun.cn |
date | string | 是 | 当前时间戳,RFC1123格式 | Wed, 10 Jul 2019 07:35:43 GMT |
authorization | string | 是 | 使用base64编码的签名相关信息(签名基于hmac-sha256计算) | 参考下方authorization参数生成规则 |
服务端会对Date进行时钟偏移检查,最大允许300秒的偏差,超出偏差的请求都将被拒绝。
在讯飞开放平台控制台,创建WebAPI平台应用并添加语音听写(流式版)服务后即可查看,均为32位字符串。
api_key="$api_key",algorithm="hmac-sha256",headers="host date request-line",signature="$signature"
signature 是使用加密算法对参与签名的参数签名后并使用base64编码的字符串,详见下方。
拼接的格式为(\n为换行符,’:’后面有一个空格):
host: $host\ndate: $date\n$request-line
请求url = wss://iat-api.xfyun.cn/v2/iat
date = Wed, 10 Jul 2019 07:35:43 GMT
host: iat-api.xfyun.cn
date: Wed, 10 Jul 2019 07:35:43 GMT
GET /v2/iat HTTP/1.1
signature_sha=hmac-sha256(signature_origin,$apiSecret)
signature=base64(signature_sha)
APISecret = secretxxxxxxxx2df7900c09xxxxxxxx
date = Wed, 10 Jul 2019 07:35:43 GMT
signature=Hp3Ty4ZkSBmL8jKyOLpQiv9Sr5nvmeYEH7WsL/ZO2Jg=
api_key="keyxxxxxxxx8ee279348519exxxxxxxx", algorithm="hmac-sha256", headers="host date request-line", signature="Hp3Ty4ZkSBmL8jKyOLpQiv9Sr5nvmeYEH7WsL/ZO2Jg="
authorization = base64(authorization_origin)
示例:
authorization=YXBpX2tleT0ia2V5eHh4eHh4eHg4ZWUyNzkzNDg1MTlleHh4eHh4eHgiLCBhbGdvcml0aG09ImhtYWMtc2hhMjU2IiwgaGVhZGVycz0iaG9zdCBkYXRlIHJlcXVlc3QtbGluZSIsIHNpZ25hdHVyZT0iSHAzVHk0WmtTQm1MOGpLeU9McFFpdjlTcjVudm1lWUVIN1dzTC9aTzJKZz0i
#鉴权url示例(golang)
#鉴权结果
HTTP Code | 说明 | 错误描述信息 | 解决方法 |
---|---|---|---|
401 | 缺少authorization参数 | {“message”:”Unauthorized”} | 检查是否有authorization参数,详情见authorization参数详细生成规则 |
401 | 签名参数解析失败 | {“message”:”HMAC signature cannot be verified”} | 检查签名的各个参数是否有缺失是否正确,特别确认下复制的api_key是否正确 |
401 | 签名校验失败 | {“message”:”HMAC signature does not match”} | 签名验证失败,可能原因有很多。 1. 检查api_key,api_secret 是否正确 2.检查计算签名的参数host,date,request-line是否按照协议要求拼接。 3. 检查signature签名的base64长度是否正常(正常44个字节)。 |
403 | 时钟偏移校验失败 | {“message”:”HMAC signature cannot be verified, a valid date or x-date header is required for HMAC Authentication”} | 检查服务器时间是否标准,相差5分钟以上会报此错误 |
403 | IP白名单校验失败 | {"message":"Your IP address is not allowed"} | 可在控制台关闭IP白名单,或者检查IP白名单设置的IP地址是否为本机外网IP地址 |
HTTP/1.1 401 Forbidden
Date: Thu, 06 Dec 2018 07:55:16 GMT
Content-Length: 116
Content-Type: text/plain; charset=utf-8
{
"message": "HMAC signature does not match"
}
#接口数据传输与接收
当服务端有识别结果时,会通过Websocket连接推送识别结果到客户端。
建议每次发送音频间隔40ms,每次发送音频字节数(即java示例demo中的frameSize)为一帧音频大小的整数倍。
1.
2.
3.
讯飞定制speex(压缩等级) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
speex 8k | 7 | 11 | 16 | 21 | 21 | 29 | 29 | 39 | 39 | 47 | 63 |
speex-wb 16k | 11 | 16 | 21 | 26 | 33 | 43 | 53 | 61 | 71 | 87 | 107 |
标准开源speex(压缩等级) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
speex 8k | 6 | 10 | 15 | 20 | 20 | 28 | 28 | 38 | 38 | 46 | 62 |
speex-wb 16k | 10 | 15 | 20 | 25 | 32 | 42 | 52 | 60 | 70 | 86 | 106 |
数据上传完毕,客户端需要上传一次数据结束标识表示会话已结束,详见下方data参数说明。
#请求参数
参数名 | 类型 | 必传 | 描述 |
---|---|---|---|
common | object | 是 | 公共参数,仅在握手成功后首帧请求时上传,详见下方 |
business | object | 是 | 业务 参数,仅在握手成功后首帧请求时上传,详见下方 |
data | object | 是 | 业务数据流参数,在握手成功后的所有请求中都需要上传,详见下方 |
#公共参数说明
参数名 | 类型 | 必传 | 描述 |
---|---|---|---|
app_id | string | 是 | 在平台申请的APPID信息 |
#业务参数
参数名 | 类型 | 必传 | 描述 | 示例 |
---|---|---|---|---|
language | string | 是 | 语种 zh_cn:中文(支持简单的英文识别) en_us:英文 其他小语种:可到控制台-语音听写(流式版)-方言/语种处添加试用或购买,添加后会显示该小语种参数值,若未授权无法使用会报错11200。 另外,小语种接口URL与中英文不同,详见接口要求。 | "zh_cn" |
domain | string | 是 | 应用领域 iat:日常用语 medical:医疗 gov-seat-assistant:政务坐席助手 seat-assistant:金融坐席助手 gov-ansys:政务语音分析 gov-nav:政务语音导航 fin-nav:金融语音导航 fin-ansys:金融语音分析 注:除日常用语领域外其他领域若未授权无法使用,可到控制台-语音听写(流式版)-高级功能处添加试用或购买;若未授权无法使用会报错11200。 坐席助手、语音导航、语音分析相关垂直领域仅适用于8k采样率的音频数据,另外三者的区别详见下方。 | "iat" |
accent | string | 是 | 方言,当前仅在language为中文时,支持方言选择。 mandarin:中文普通话、其他语种 其他方言:可到控制台-语音听写(流式版)-方言/语种处添加试用或购买,添加后会显示该方言参数值;方言若未授权无法使用会报错11200。 | "mandarin" |
vad_eos | int | 否 | 用于设置端点检测的静默时间,单位是毫秒。 即静默多长时间后引擎认为音频结束。 默认2000(小语种除外,小语种不设置该参数默认为未开启VAD)。 | 3000 |
dwa | string | 否 | (仅中文普通话支持)动态修正 wpgs:开启流式结果返回功能 注:该扩展功能若未授权无法使用,可到控制台-语音听写(流式版)-高级功能处免费开通;若未授权状态下设置该参数并不会报错,但不会生效。 | "wpgs" |
pd | string | 否 | (仅中文支持)领域个性化参数 game:游戏 health:健康 shopping:购物 trip:旅行 注:该扩展功能若未授权无法使用,可到控制台-语音听写(流式版)-高级功能处添加试用或购买;若未授权状态下设置该参数并不会报错,但不会生效。 | "game" |
ptt | int | 否 | (仅中文支持)是否开启标点符号添加 1:开启(默认值) 0:关闭 | 0 |
rlang | string | 否 | (仅中文支持)字体 zh-cn :简体中文(默认值) zh-hk :繁体香港 注:该繁体功能若未授权无法使用,可到控制台-语音听写(流式版)-高级功能处免费开通;若未授权状态下设置为繁体并不会报错,但不会生效。 | "zh-cn" |
vinfo | int | 否 | 返回子句结果对应的起始和结束的端点帧偏移值。端点帧偏移值表示从音频开头起已过去的帧长度。 0:关闭(默认值) 1:开启 开启后返回的结果中会增加data.result.vad字段,详见下方返回结果。 注:若开通并使用了动态修正功能,则该功能无法使用。 | 1 |
nunum | int | 否 | (中文普通话和日语支持)将返回结果的数字格式规则为阿拉伯数字格式,默认开启 0:关闭 1:开启 | 0 |
speex_size | int | 否 | speex音频帧长,仅在speex音频时使用 1 当speex编码为标准开源speex编码时必须指定 2 当speex编码为讯飞定制speex编码时不要设置 注:标准开源speex以及讯飞定制SPEEX编码工具请参考这里 speex编码 。 | 70 |
nbest | int | 否 | 取值范围[1,5], 通过设置此参数,获取在发音相似时的句子多侯选结果。设置多候选会影响性能,响应时间延迟200ms左右。 注:该扩展功能若未授权无法使用,可到控制台-语音听写(流式版)-高级功能处免费开通;若未授权状态下设置该参数并不会报错,但不会生效。 | 3 |
wbest | int | 否 | 取值范围[1,5],通过设置此参数,获取在发音相似时的词语多侯选结果。设置多候选会影响性能,响应时间延迟200ms左右。 注:该扩展功能若未授权无法使用,可到控制台-语音听写(流式版)-高级功能处免费开通;若未授权状态下设置该参数并不会报错,但不会生效。 | 5 |
注: 以上common和business参数只需要在握手成功后的第一帧请求时带上。
注:
坐席助手:电话坐席助手,一般用于人与人对话的场景。
语音导航:电话语音导航,一般用于机器与人对话的场景。
语音分析:基于大量存量的电话客服录音做质检,即事后音频转文字的场景(识别率会优于前两者)。
#业务数据流参数
参数名 | 类型 | 必传 | 描述 |
---|---|---|---|
status | int | 是 | 音频的状态 0 :第一帧音频 1 :中间的音频 2 :最后一帧音频,最后一帧必须要发送 |
format | string | 是 | 音频的采样率支持16k和8k 16k音频:audio/L16;rate=16000 8k音频:audio/L16;rate=8000 |
encoding | string | 是 | 音频数据格式 raw:原生音频(支持单声道的pcm) speex:speex压缩后的音频(8k) speex-wb:speex压缩后的音频(16k) 请注意压缩前也必须是采样率16k或8k单声道的pcm。 lame:mp3格式(仅中文普通话和英文支持,方言及小语种暂不支持) 样例音频请参照音频样例 |
audio | string | 是 | 音频内容,采用base64编码 |
{
"common":{
// 公共请求参数
"app_id":"123456"
},
"business":{
"language":"zh_cn",
"domain":"iat",
"accent":"mandarin"
},
"data":{
"status":0,
"format":"audio/L16;rate=16000",
"encoding":"raw",
"audio":"exSI6ICJlbiIsCgkgICAgInBvc2l0aW9uIjogImZhbHNlIgoJf..."
}
}
{
"data":{
"status":2
}
}
#返回参数
参数 | 类型 | 描述 |
---|---|---|
sid | string | 本次会话的id,只在握手成功后第一帧请求时返回 |
code | int | 返回码,0表示成功,其它表示异常,详情请参考错误码 |
message | string | 错误描述 |
data | object | 听写结果信息 |
data.status | int | 识别结果是否结束标识: 0:识别的第一块结果 1:识别中间结果 2:识别最后一块结果 |
data.result | object | 听 写识别结果 |
data.result.sn | int | 返回结果的序号 |
data.result.ls | bool | 是否是最后一片结果 |
data.result.bg | int | 保留字段,无需关心 |
data.result.ed | int | 保留字段,无需关心 |
data.result.ws | array | 听写结果 |
data.result.ws.bg | int | 起始的端点帧偏移值,单位:帧(1帧=10ms) 注:以下两种情况下bg=0,无参考意义: 1)返回结果为标点符号或者为空;2)本次返回结果过长。 |
data.result.ws.cw | array | 中文分词 |
data.result.ws.cw.w | string | 字词 |
data.result.ws.cw.其他字段 sc/wb/wc/we/wp | int/string | 均为保留字段,无需关心。如果解析sc字段,建议float与int数据类型都做兼容 |
#动态修正返回参数
注:动态修正结果解析可参考页面下方的java demo。
参数 | 类型 | 描述 |
---|---|---|
data.result.pgs | string | 开启wpgs会有此字段 取值为 "apd"时表示该片结果是追加到前面的最终结果;取值为"rpl" 时表示替换前面的部分结果,替换范围为rg字段 |
data.result.rg | array | 替换范围,开启wpgs会有此字段 假设值为[2,5],则代表要替换的是第2次到第5次返回的结果 |
#vinfo返回参数
参数 | 类型 | 描述 |
---|---|---|
data.result.vad | object | 端点帧偏移值信息 |
data.result.vad.ws | array | 端点帧偏移值结果 |
data.result.vad.bg | int | 起始的端点帧偏移值,单位:帧(1帧=10ms) |
data.result.vad.ed | int | 结束的端点帧偏移值,单位:帧(1帧=10ms) |
data.result.vad.eg | number | 无需关心 |
注:动态修正结果解析可参考页面下方的java demo。
{
"code": 0,
"message": "success",
"sid": "iatxxxxxxxxxxxxx",
"data": {
"result": {
"bg": 0,
"ed": 0,
"ls": false,
"pgs": "rpl",
"rg": [
1,
1
],
"sn": 2,
"ws": [
{
"bg": 0,
"cw": [
{
"sc": 0,
"w": "测试"
}
]
},
{
"bg": 0,
"cw": [
{
"sc": 0,
"w": "一下"
}
]
}
]
},
"status": 1
}
}
{
"code": 0,
"message": "success",
"sid": "iatxxxxxxxxxxxxxx",
"data": {
"result": {
"bg": 0,
"ed": 0,
"ls": false,
"sn": 1,
"vad": {
"ws": [
{
"bg": 40,
"ed": 366,
"eg": 63.58
}
]
},
"ws": [
{
"bg": 53,
"cw": [
{
"sc": 0,
"w": "4月"
}
]
},
{...},
{
"bg": 293,
"cw": [
{
"sc": 0,
"w": "选手"
}
]
}
]
},
"status": 1
}
}
{
"code": 0,
"message": "success",
"sid": "iatxxxxxxxxxxxxx",
"data": {
"result": {
"bg": 0,
"ed": 0,
"ls": false,
"sn": 1,
"ws": [
{
"bg": 35,
"cw": [
{
"sc": 0,
"w": "打电话给梁玉生"
},
{
"sc": 0,
"w": "打电话给梁玉升"
}
]
}
]
},
"status": 0
}
}
{
"code": 0,
"message": "success",
"sid": "iatxxxxxxxxxxxxxx",
"data": {
"result": {
"bg": 0,
"ed": 0,
"ls": false,
"sn": 1,
"ws": [
{...},
{
"bg": 159,
"cw": [
{
"sc": 0,
"w": "梁"
}
]
},
{
"bg": 191,
"cw": [
{
"sc": 0,
"w": "玉"
},
{
"sc": 0,
"w": "育"
}
]
},
{
"bg": 215,
"cw": [
{
"sc": 0,
"w": "生"
},
{
"sc": 0,
"w": "升"
}
]
}
]
},
"status": 0
}
}
#错误码
错误码 | 错误描述 | 说明 | 处理方式 |
---|---|---|---|
10005 | licc fail | appid授权失败 | 确认appid是否正确,是否开通了听写服务 |
10006 | Get audio rate fail | 获取某个参数失败 | 检查报错信息中的参数是否正确上传 |
10007 | get invalid rate | 参数值不合法 | 检查报错信息中的参数值是否在取值范围内 |
10010 | AIGES_ERROR_NO_LICENSE | 引擎授权不足 | 请到控制台提交工单联系技术人员 |
10014 | AIGES_ERROR_TIME_OUT | 会话超时 | |
10019 | service read buffer timeout, session timeout | session超时 | 检查是否数据发送完毕但未关闭连接 |
10043 | Syscall AudioCodingDecode error | 音频解码失败 | 检查aue参数,如果为speex,请确保音频是speex音频并分段压缩且与帧大小一致 |
10101 | engine inavtive | 引擎会话已结束 | 检查是否引擎已结束会话但客户端还在发送数据,比如音频数据虽然发送完毕但并未关闭websocket连接,还在发送空的音频等 |
10114 | session timeout | 会话超时 | 检查整个会话是否已经超过了60s |
10139 | invalid param | 参数错误 | 引擎编解码错误 |
10313 | appid cannot be empty | appid不能为空 | 检查common参数是否正确上传,或common中的app_id参数是否正确上传或是否为空 |
10317 | invalid version | 版本非法 | 联系技术人员 |
11200 | auth no license | 没有权限 | 检查是否使用了未授权的功能,或者总的调用次数已超越上限 |
11201 | auth no enough license | 日流控超限 | 可联系商务提高每日调用次数 |
10160 | parse request json error | 请求数据格式非法 | 检查请求数据是否是合法的json |
10161 | parse base64 string error | base64解码失败 | 检查发送的数据是否使用了base64编码 |
10163 | param validate error:/common 'app_id' param is required | 缺少必传参数,或者参数不合法 | 检查报错信息中的参数是否正确上传 |
10165 | invalid handle | 无效的句柄 | 检查下传入第一帧音频时,是否上传了status=0 |
10200 | read data timeout | 读取数据超时 | 检查是否累计10s未发送数据并且未关闭连接 |
#调用示例
#音频样例
#视频教程
#常见问题
#语音听写的APIKey在哪里查询到?
答:控制台--我的应用---找到对应应用的语音听写(流式)服务---即能查看到。
#webapi流式听写能获取到语音听写结果为空或错误内容或者不全, 原因是什么?
答:原因可能如下;
1、音频格式不正确,请使用Cool Edit Pro工具(网页搜索下载即可)查看音频格式,webapi听写流式版:支持的格式是pcm、speex、speex-wb,其中中文普通话和英文还支持mp3格式
音频采样率要是 16k 或者 8k、采样精度16 位、单声道音频。样例音频请参照音频样例
2、音频中间有静音或者杂音音频超过了后端点(不设置默认为2000ms)的设置,此时请使用Cool Edit Pro工具查看音频内容,并且设置后端点(vad_eos)为最大值10000ms
包含超过后端点最大值的静音或者杂音时,音频识别不完整是正常的
#语音听写WebAPI支持的音频格式有哪些?
答:支持8k和16k采样率、16bit、单声道的pcm、mp3、speex格式的音频。需注意mp3格式的音频仅支持中文普通话和英文。
#语音听写最长支持多少秒之内的音频?
答:听写支持识别60s之内的音频。
#语音听写Webapi支持多少路并发?如何提高并发?
答:默认支持50路并发,如需更多并发可提交工单进行咨询。
#听写报错10163,length of $.data.audio must be between 0,13000是什么原因?
答:听写frameSize传的音频大小base64编码后不能超出13000B,默认传1280B不建议传值过大。
#为什么每隔一段时间不发送数据就会断开连接?
答:听写vad_eos为支持的最长静音时间,超过这个时间会认为音频结束自动断开连接。
#最多支持多少热词,是否可以扩容?
答:控制台最多支持2000个应用级热词,暂不支持扩容。
#如何限制IP?
答:可通过在IP白名单设置自己服务的IP地址,限制其他IP地址访问。
请求参数
无
修改于 2023-12-18 07:32:25