腾讯AI语音识别API踩坑记录
介绍
以前不习惯“踩坑”这个词,现在也不习惯。不过看大家都在用,我也用一下试试。
腾讯AI语音识别分为三个版本,分别是ECHO、流式、微信专用流式。前两个比较好理解,为什么还有一个微信专用流式呢?这是因为微信小程序中录音API录制的音频格式只能是压缩过的mp3/ogg格式,而一般语音识别API都只识别一些非压缩格式,比如WAV,PCM等等。所以腾讯另外添加了微信专用流式。
一般来讲,像这种第三方API调用都比较简单,把需要传递的参数加上APP_KEY和APP_ID一并给服务器传递过去,就可以得到相应的返回数据。而腾讯AI语音识别API需要额外的接口鉴权,鉴权正确了才会返回正确结果。
接口鉴权
接口鉴权
通俗讲就是把所有的参数按照一定顺序排列然后做一个MD5计算,把计算结果当成一个参数传递给服务器,服务器在接收到请求时也会计算一下MD5值,与客户端传递过来的MD5值进行匹配,如果值一致就进一步处理,如果不一致则报鉴权失败的错误{ret: 16388, msg: "sign invalid", data: {…}}
。
接口鉴权
的官方介绍里提供了PHP语言的DEMO,如果需要用JS版本的,可以看这里我封装的一个DEMO,该DEMO确认可行的。
对于接口鉴权
需要额外补充的是如果调用API时多传递了一个参数,且该参数参与了接口鉴权的MD5计算,那么服务器也会报一个sign invalid
的错误,原因是服务器在接口鉴权
时只会使用会用到的参数,你多传递的参数只有在客户端参与了MD5计算,而服务器上没有使用这个参数进行计算,从而导致计算出的MD5值不一样。多传参数时并不会报错,这是一个小坑。
这里把参数整理方便对比:
echo | 流式版 | 流式版(WeChat AI) |
---|---|---|
app_id | app_id | app_id |
format | format | format |
rate | rate | rate |
- | - | bits |
- | seq | seq |
- | len | len |
- | end | end |
- | speech_id | speech_id |
speech | speech_chunk | speech_chunk |
- | - | cont_res |
time_stamp | time_stamp | time_stamp |
nonce_str | nonce_str | nonce_str |
sign | sign | sign |
网友评论