речевые сервисы бота не работают в опции «Тестировать в веб-чате» в Azure - PullRequest
0 голосов
/ 18 июня 2019

Я развернул приложение веб-бота на портале Azure.Этот бот использует речевые сервисы для получения пользовательского ввода, но после его развертывания в лазури речевые сервисы не работают и не принимают устную информацию.

Даже я нажимаю на значок звука в окне веб-чатав Azure он не

Этот бот был протестирован локально на эмуляторе бота и работал как требуется.но в Azure это не так.Понятия не имею, что не так.

любой комментарий?

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Пожалуйста, проверьте, что у вас есть все необходимые учетные данные, вставленные в конфигурацию. Тест в веб-чате должен работать без проблем.

Тем не менее, функция Test in Web Chat использует более старую реализацию v3 BotFramework-WebChat (т.е. BotChat). Несмотря на то, что он должен быть обновлен (пока нет ETA), базовый код может стать для вас проблемой.

Если вы хотите протестировать веб-чат, я бы порекомендовал настроить среду веб-чата v4 локально. Это на самом деле довольно легко сделать. Вот как, если интересно,

Сначала включите канал Direct Line в настройках бота Azure ...

* +1012 *enter image description here

... и скопируйте секрет и сохраните где-нибудь на данный момент.

enter image description here

Добавьте этот код в файл 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, которая запрашивает токен из конечной точки токена и создает экземпляр веб-чата. Для этого потребуется ключ подписки Cognitive Services Speech Service, чтобы включить речь, которую вы можете создать в Azure. Если вы изменили порт в вашей конечной точке токена, сопоставьте его в html-файле в await fetch.

<!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>

Наконец, добавьте локальный веб-сервер, на котором запущена ваша html-страница, в список доверенных URL-адресов на канале Direct Line в настройках бота Azure, и локально запускайте html-страницу рядом с вашим ботом. Теперь у вас есть локальная среда чата v4, с которой вы можете протестировать.

enter image description here

Надежда на помощь !!

0 голосов
/ 20 июня 2019

Вы можете включить голосовой интерфейс в элементе управления веб-чата.Пользователи могут взаимодействовать с голосовым интерфейсом с помощью микрофона в элементе управления веб-чатом. См. Следующую ссылку https://docs.microsoft.com/en-us/azure/bot-service/bot-service-channel-connect-webchat-speech?view=azure-bot-service-3.0.

...