You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure语音转文本SpeechConfig.fromAuthorizationToken()调用失败,Chrome报WebSocket错误

解决Azure语音转文本WebSocket错误及fromAuthorizationToken()用法问题

核心问题

你误用了fromAuthorizationToken()方法:这个方法的第一个参数需要短期授权令牌,而非直接填入订阅密钥。你使用LUIS、API管理器等非语音服务的密钥,或直接传入认知语音的订阅密钥,都会导致鉴权失败,进而引发WebSocket连接错误。

两种正确的初始化方式

方式一:直接用订阅密钥初始化(快速测试推荐)

使用SpeechSDK.SpeechConfig.fromSubscription()方法,直接传入认知语音服务的订阅密钥和对应区域,无需手动处理令牌:

const audioConfig = SpeechSDK.AudioConfig.fromStreamInput(stream);

// 替换为你的认知语音服务订阅密钥和区域
const config = SpeechSDK.SpeechConfig.fromSubscription(
  "YOUR_COGNITIVE_SPEECH_SUBSCRIPTION_KEY",
  "YOUR_REGION"
);
config.speechRecognitionLanguage = "en-US";

recognition = new SpeechSDK.SpeechRecognizer(config, audioConfig);
recognition.startContinuousRecognitionAsync();

注意:必须使用认知语音服务(Speech Service)专属的订阅密钥,LUIS等其他服务的密钥不适用。

方式二:使用短期授权令牌(生产环境推荐)

若需使用令牌,需先通过HTTP请求获取有效期10分钟的短期令牌,再传入fromAuthorizationToken():

// 获取短期授权令牌
async function getSpeechToken() {
  const response = await fetch(`https://${YOUR_REGION}.api.cognitive.microsoft.com/sts/v1.0/issueToken`, {
    method: 'POST',
    headers: {
      'Ocp-Apim-Subscription-Key': 'YOUR_COGNITIVE_SPEECH_SUBSCRIPTION_KEY'
    }
  });
  return await response.text();
}

// 初始化语音识别器
async function initRecognizer() {
  const token = await getSpeechToken();
  const audioConfig = SpeechSDK.AudioConfig.fromStreamInput(stream);
  
  const config = SpeechSDK.SpeechConfig.fromAuthorizationToken(token, "YOUR_REGION");
  config.speechRecognitionLanguage = "en-US";
  
  recognition = new SpeechSDK.SpeechRecognizer(config, audioConfig);
  recognition.startContinuousRecognitionAsync();
}

// 执行初始化
initRecognizer();

令牌到期后需重新获取。

额外排查点

  • 确保Chrome环境:页面需有麦克风访问权限(若使用麦克风流),且运行在HTTPS环境下(localhost本地测试不受限制)。
  • 区域匹配:订阅密钥对应的Azure区域必须与代码中的YOUR_REGION完全一致(如eastus、westus)。

内容的提问来源于stack exchange,提问作者Ulekrr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:41:32