机器人的语音服务在 Azure 的 "Test in Web chat" 选项中不起作用

speech services of a bot are not working in "Test in Web chat" option in Azure

我已经在 Azure 门户上部署了一个网络机器人应用程序。此机器人使用语音服务获取用户输入,但在 Azure 中部署后,语音服务无法正常工作,并且不接受语音信息。

即使我在 Azure 中的网络聊天 window 中单击音频图标,它也不会

此机器人已在机器人模拟器上进行了本地测试,并按要求工作。但在 Azure 中,它没有。不知道怎么了。

有什么意见吗?

您可以在网络聊天控件中启用语音界面。用户可以在网络聊天中使用麦克风与语音界面进行交互 control.Please 参考以下 link https://docs.microsoft.com/en-us/azure/bot-service/bot-service-channel-connect-webchat-speech?view=azure-bot-service-3.0.

请仔细检查您是否已将所有适当的凭据插入到配置中。在网络聊天中测试 应该 工作 out-of-the-box 没有问题。

话虽这么说,网络聊天功能中的测试使用较旧的 v3 BotFramework-WebChat(即 BotChat)实现。虽然它计划更新(此时没有 ETA),但基础代码可能对您来说是个问题。

如果您想测试网络聊天,我建议您在本地设置一个 v4 网络聊天环境。这实际上很容易做到。如果有兴趣,方法如下:

首先,在您的 Azure 机器人设置中启用 Direct Line 通道...

...然后复制秘密并暂时保存在某个地方。

将此代码添加到您的机器人的 index.js 文件中(可以完整地附加到末尾)。从 .env 文件存储和访问您复制的直接线路机密。这被保存为 directLineSecret 并作为 Bearer {token} 传递到授权中。另请注意,使用的端口是 3500,但您可以将其设置为您选择的任何值。此令牌端点将 运行 作为您的 运行 您的机器人。

/**
 * Creates token server
 */
const bodyParser = require('body-parser');
const request = require('request');
const corsMiddleware = require('restify-cors-middleware');

const cors = corsMiddleware({
  origins: ['*']
});

// Create server.
let tokenServer = restify.createServer();
tokenServer.pre(cors.preflight);
tokenServer.use(cors.actual);
tokenServer.use(bodyParser.json({
  extended: false
}));
tokenServer.dl_name = 'DirectLine';
tokenServer.listen(process.env.port || process.env.PORT || 3500, function() {
  console.log(`\n${ tokenServer.dl_name } listening to ${ tokenServer.url }.`);
});

// Listen for incoming requests.
tokenServer.post('/directline/token', (req, res) => {
  // userId must start with `dl_`
  const userId = (req.body && req.body.id) ? req.body.id : `dl_${ Date.now() + Math.random().toString(36) }`;
  const options = {
    method: 'POST',
    uri: 'https://directline.botframework.com/v3/directline/tokens/generate',
    headers: {
      'Authorization': `Bearer ${ process.env.directLineSecret}`
    },
    json: {
      User: {
        Id: userId
      }
    }
  };
  request.post(options, (error, response, body) => {
    if (!error && response.statusCode < 300) {
      res.send({
        token: body.token
      });
    } else {
      res.status(500);
      res.send('Call to retrieve token from DirectLine failed');
    }
  });
});

接下来,创建这个简单的 index.html 页面,从您的令牌端点请求令牌并实例化网络聊天。这将需要一个认知服务语音服务订阅密钥来启用你可以在 Azure 中创建的语音。如果您更改了令牌端点中的端口,请在 await fetch.

中的 html 文件中匹配它
<!DOCTYPE html>
<html>

  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>WebChat</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
      html,
      body {
        height: 100%
      }

      body {
        margin: 0
      }

      #webchat,
      #webchat>* {
        height: 100%;
        width: 100%;
      }
    </style>
  </head>

  <body>
    <div id="webchat" role="main"></div>
    <script type="text/javascript"
      src="https://unpkg.com/markdown-it/dist/markdown-it.min.js"></script>
    <script
      src="https://cdn.botframework.com/botframework-webchat/master/webchat.js"></script>
    <script>
    ( async function () {
      const res = await fetch( 'http://localhost:3500/directline/token', { method: 'POST' } );
      const { token } = await res.json();

      const webSpeechPonyfillFactory = await window.WebChat.createCognitiveServicesSpeechServicesPonyfillFactory( {
        region: '',  // 'westus', for example
        subscriptionKey: ""
      } );

      window.WebChat.renderWebChat( {
        directLine: window.WebChat.createDirectLine( { token } ),
        webSpeechPonyfillFactory
      }, document.getElementById( 'webchat' ) );
      document.querySelector( '#webchat > *' ).focus();
    } )().catch( err => console.error( err ) );
  </script>
  </body>
</html>

最后,将本地 Web 服务器 运行 将您的 html 页面添加到 Azure 机器人设置中 Direct Line 通道中的受信任 URL 列表,并且 运行 您的 html 在您的机器人旁边进行本地页面。您现在拥有一个本地 v4 网络聊天环境,您可以从中进行测试。

希望得到帮助!!