Генерация токенов для Botframework Webchat - PullRequest
0 голосов
/ 05 февраля 2019

Я переносил моего Direct Line Bot из Webchat v3 в v4.Новая версия требует использования токенов, а не секрета прямой линии на странице вызова.Вот код (index.html), используемый для запуска бота:

<!DOCTYPE html>
<html lang="en-US">
<head>
    <title>Web Chat: Full-featured bundle</title>

    <script src="https://cdn.botframework.com/botframework-webchat/master/webchat.js"></script>

    <style>
         html, body {
            height: 100%
        }

         body {
            margin: 0
        }

         #webchat,
         #webchat > * {
             height: 100%;
             width: 100%;

        }


    </style>
</head>
<body>
       <div id="webchat" role="main"></div>

    <script>
    (async function () {
        const res = await fetch('https://bellamspt.azurewebsites.net/Forms/Webchat/directline/token', { method: 'POST' });

      const { token } = await res.json();

      window.WebChat.renderWebChat({
        directLine: window.WebChat.createDirectLine({ token })
      }, document.getElementById('webchat'));

      document.querySelector('#webchat > *').focus();
    })().catch(err => console.error(err));
   </script>
</body>
</html>

Вопрос: Какой код мне нужно написать, чтобы сгенерировать токен в другом, чтобы он вызывался https://bellamspt.azurewebsites.net/Forms/Webchat/directline/token??Понимаю, что это должно быть что-то вроде

POST https://directline.botframework.com/v3/directline/tokens/generate
Authorization: Bearer SECRET

, но я не знаю, должен ли это быть файл php, js или другой тип файла для работы.

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 16 мая 2019

Я использовал php для решения этой проблемы.Вы можете попробовать.

<?php
$botSecret = '<your secret>';
$response = wp_remote_get( 'https://webchat.botframework.com/api/tokens', array( 'headers' => 'Authorization: BotConnector ' . $botSecret ) );
if( is_array($response) ) {
  $header = $response['headers'];
  $token = $response['body'];
}
?>
<script type="text/javascript">
        var webChatToken = <?php echo $token; ?>;
</script>

0 голосов
/ 30 июля 2019

У меня вчера была такая же проблема, я просто выкладываю ее здесь на случай, если она кому-нибудь поможет в будущем.Если вы измените свой код на этот, он должен работать:

    <!DOCTYPE html>
<html lang="en-US">
<head>
    <title>Web Chat: Full-featured bundle</title>

    <script src="https://cdn.botframework.com/botframework-webchat/master/webchat.js"></script>

    <style>
         html, body {
            height: 100%
        }

         body {
            margin: 0
        }

         #webchat,
         #webchat > * {
             height: 100%;
             width: 100%;

        }


    </style>
</head>
<body>
       <div id="webchat" role="main"></div>

    <script>
    (async function () {
        const res = await fetch('https://bellamspt.azurewebsites.net/Forms/Webchat/directline/token', 
{ method: 'POST', headers: { Authorization: 'write your direct line secret here' }});

      const { token } = await res.json();

      window.WebChat.renderWebChat({
        directLine: window.WebChat.createDirectLine({ token })
      }, document.getElementById('webchat'));

      document.querySelector('#webchat > *').focus();
    })().catch(err => console.error(err));
   </script>
</body>
</html>

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

0 голосов
/ 06 февраля 2019

Что вам нужно сделать, так это реализовать некую серверную логику, используя любую технологию, которая вам наиболее удобна, и использует секрет, который хранится только на вашем сервере, для генерации нового токена путем отправки HTTP-запроса кКанал DirectLine, как вы указали выше.Затем в логике запуска вашей веб-страницы вы делаете запрос на получение этого токена и с помощью токена инициализируете экземпляр прямой линии на веб-странице.Использование этого подхода гарантирует, что никто посторонний никогда не овладеет вашим секретом.

Таким образом, не существует одного типа файла, который "заставил бы его работать".Вам нужно будет выбрать Node, PHP, ASP.NET или любую другую серверную технологию и реализовать ее так же, как любой другой обработчик HTTP-запросов.

Эта статья поможет понять принципы аутентификации иAPI-интерфейсы и , вот сообщение в блоге, которое показывает, как вы можете сделать это с ASP.NET и Node .

...