Botframework网络聊天的令牌生成

时间:2019-02-05 19:24:42

标签: token botframework

我一直在将Direct 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 :(得分:1)

昨天我遇到了同样的问题,我只是在这里发布,以防将来对任何人有帮助。如果将代码更改为此,它应该可以工作:

    <!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如何生成令牌,documentation可能并不明显

答案 1 :(得分:0)

您需要做的是使用您最熟悉的任何技术来实现某种服务器端逻辑,该技术使用仅在您的服务器上保留的秘密,通过向服务器发出HTTP请求来生成新令牌。您在上面指出的DirectLine频道。然后,在网页的启动逻辑中,您请求获取该令牌,并使用该令牌初始化网页中的直线实例。使用这种方法可确保没有任何外部人掌握您的秘密。

因此,没有一种文件可以“使其正常工作”。您将需要选择Node,PHP,ASP.NET或任何其他服务器技术,并以与其他HTTP请求处理程序相同的方式来实现它。

This article will help in understanding the authentication concepts and APIshere's a blog post that shows how you might do it with ASP.NET and Node

答案 2 :(得分:0)

我用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>