记录前端菜鸟的日常——腾讯云的语音识别与临时密钥
但是我怎么都没找出来,因为我打印了传递前后的数据,跟本地明明是一模一样的,当时改过大小写的问题,还找过腾讯云的客服,把voice_id发给他,但是客服只说报错4002的话就要看是否传参错误,然后我就更凌乱了,因为传递之前我都console.log了都没问题。是上周的一个新调整,之前用的是永久密钥,现在需要改成临时密钥,我查了文档还下载了js版的代码改成了vue版本,在我本地上可以成功运行起来。文件
是上周的一个新调整,之前用的是永久密钥,现在需要改成临时密钥,我查了文档还下载了js版的代码改成了vue版本,在我本地上可以成功运行起来
临时密钥比永久密钥需要多传一个token

文件构成大概是这个样子,当时我是把线上项目后端返回来的数据直接写死在了config.js文件里,
/* eslint-disable */
/* global WebAudioSpeechRecognizer, config */
export let config = {
// 用户参数
secretKey:'',
secretId: '',
appId:'',
token: '',
}
window.config = config;
// export default config
然后params来接config里的数据传递给new WebAudioSpeechRecognize中
this.webAudioSpeechRecognizer = new WebAudioSpeechRecognizer(params);
是可以识别语音的,说明后端返回的数据没问题
线上项目是将后端返回的数据直接传递到new WebAudioSpeechRecognize中,免去了config存储数据,错就错在这儿了
但是我怎么都没找出来,因为我打印了传递前后的数据,跟本地明明是一模一样的,当时改过大小写的问题,还找过腾讯云的客服,把voice_id发给他,但是客服只说报错4002的话就要看是否传参错误,然后我就更凌乱了,因为传递之前我都console.log了都没问题

后来还是后端哥帮我发现的,在asrauthentication.js文件里有这样一段代码
// 签名函数示例
export function signCallback(signStr) {
const secretKey = config.secretKey;
const hash = window.CryptoJSTest.HmacSHA1(signStr, secretKey);
const bytes = Uint8ArrayToString(toUint8Array(hash));
return window.btoa(bytes);
}
这里用到了config!!!
于是我老老实实把后端返回的数据放到config里面再给params,然后成功了
经验:我目前还很不擅长去排错,这次也是直接接手别人的项目帮忙解决bug,下意识还是拿到手想先把这一个文件看懂(但是看不懂
其实还是直接去找到掉接口的位置,然后传递之前输出参数,都传递了没有空值那就再去本地试一下子,看看后端的数据到底有没有问题,没有问题的话那就是前端这块
当时那个报错一直让我以为是传递数据不对
现在想想这个报错就是在提示我去看签名的那块逻辑
希望下次可以自己独立解决难bug!
更多推荐
所有评论(0)