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

如何在基于Node.js的Microsoft Azure WebChat Bot中启用语音功能

Hey there! I’ve tackled integrating voice capabilities with Node.js-based Azure Bots before, so let me break down the actionable steps and workarounds since the official docs can feel a bit disjointed.


Web端WebChat内置语音交互(类似网页版语音对话)

If you want users to talk directly to your WebChat via voice (like a mini voice assistant in your browser), you’ll need to pair Azure Speech Services with your Node.js backend and WebChat frontend. Here’s how to pull it off:

1. Set up Azure Speech Services

First, create a Speech resource in the Azure Portal. Grab its subscription key and region—you’ll need these for both STT (Speech-to-Text) and TTS (Text-to-Speech).

2. Frontend WebChat Integration (Simpler Approach)

The easiest way is to use WebChat’s built-in speech ponyfill factory, which handles most heavy lifting directly in the browser. No major backend changes needed here:

// Frontend code (vanilla JS example)
const speechServicesPonyfillFactory = window.WebChat.createCognitiveServicesSpeechServicesPonyfillFactory({
  region: 'your-speech-resource-region',
  subscriptionKey: 'your-speech-resource-key'
});

// Render WebChat with voice support
window.WebChat.renderWebChat({
  directLine: window.WebChat.createDirectLine({ token: 'your-direct-line-token' }),
  speechServicesPonyfillFactory
}, document.getElementById('webchat'));

This adds a microphone button to WebChat: users speak directly, their voice gets converted to text and sent to your Bot, and the Bot’s text responses get turned back into speech automatically.

3. Backend-Handled Speech (For Custom Logic)

If you need to process voice data server-side (e.g., custom filtering or logging), use the Azure Speech SDK for Node.js:

  1. Install the SDK:
    npm install microsoft-cognitiveservices-speech-sdk
    
  2. Speech-to-Text conversion example:
    const sdk = require('microsoft-cognitiveservices-speech-sdk');
    
    async function speechToText(audioStream) {
      const speechConfig = sdk.SpeechConfig.fromSubscription('your-key', 'your-region');
      speechConfig.speechRecognitionLanguage = 'zh-CN'; // Adjust language as needed
      const audioConfig = sdk.AudioConfig.fromStreamInput(audioStream);
      const recognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
    
      return new Promise((resolve, reject) => {
        recognizer.recognizeOnceAsync(result => {
          if (result.reason === sdk.ResultReason.RecognizedSpeech) {
            resolve(result.text);
          } else {
            reject(new Error(`Recognition failed: ${result.errorDetails}`));
          }
          recognizer.close();
        });
      });
    }
    
  3. Text-to-Speech conversion example (return audio to frontend):
    async function textToSpeech(text) {
      const speechConfig = sdk.SpeechConfig.fromSubscription('your-key', 'your-region');
      speechConfig.speechSynthesisVoiceName = 'zh-CN-XiaoxiaoNeural'; // Pick a voice that fits your use case
      const synthesizer = new sdk.SpeechSynthesizer(speechConfig, null);
    
      return new Promise((resolve, reject) => {
        synthesizer.speakTextAsync(text, result => {
          if (result.reason === sdk.ResultReason.SynthesizingAudioCompleted) {
            resolve(result.audioData); // Binary audio data to send to frontend for playback
          } else {
            reject(new Error(`Synthesis failed: ${result.errorDetails}`));
          }
          synthesizer.close();
        });
      });
    }
    

对接Alexa/Google Assistant平台的语音交互

If you want your Bot to work with smart speakers like Alexa or Google Assistant, you don’t need to rebuild voice logic from scratch—use Bot Framework’s built-in channel integration:

1. Alexa Integration

  • Go to your Azure Bot Portal, navigate to Channels, and add the Alexa channel.
  • Follow the prompts to link your Bot to an Alexa Skill (you’ll need an Amazon Developer account).
  • Bot Framework automatically converts Alexa’s request format to Bot Framework Activities. Your Node.js Bot only needs to handle text input—Alexa takes care of speech-to-text and text-to-speech.
  • For Alexa-specific logic (like slot values), access it via channelData:
    async onTurn(context) {
      if (context.activity.channelId === 'alexa') {
        const userSlot = context.activity.channelData.request.intent.slots.YourSlot.value;
        await context.sendActivity(`You mentioned: ${userSlot}`);
      }
      // Rest of your conversation logic
    }
    

2. Google Assistant Integration

  • Similarly, add the Google Assistant channel in the Azure Bot Portal.
  • Link it to an Action on Google (requires a Google Cloud account).
  • Bot Framework handles format conversion automatically. For Google-specific intent data, use channelData:
    async onTurn(context) {
      if (context.activity.channelId === 'google') {
        const intentName = context.activity.channelData.intent.name;
        await context.sendActivity(`Detected intent: ${intentName}`);
      }
      // Rest of your conversation logic
    }
    

Quick Tips

  • Always handle errors gracefully (e.g., failed speech recognition should prompt the user to repeat themselves).
  • Test with different languages and voices to match your user base.
  • For Alexa/Google Assistant, make sure to configure platform-specific intents and trigger words in their respective developer portals.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:35:19