如何通过网聊解决令牌问题

时间:2019-05-14 16:37:31

标签: php botframework token

用于生成直接令牌的bot框架api导致网络聊天无法处理的令牌。

最近,我注意到我网站上的网络聊天无法建立直接连接。使用Directline机密会导致有效的网络聊天。使用bot框架api生成一个很长的令牌(816个字符),这是webchat无法处理的(导致无法连接的消息。这曾经可以正常工作,但是现在它坏了(据我所知没有改变)< / p>

我使用一些PHP调用api并获得令牌:

<?php
    $botSecret = 'DIRECLINE 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>

使用HTML \ Javascript显示网络聊天客户端

<html>
<body>
<div id="webchat" role="main"></div>   
    <script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
    <script>  
       const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
         if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
           dispatch({
             type: 'WEB_CHAT/SEND_EVENT',
             payload: {
               name: 'webchat/join',
               value: { language: window.navigator.language }
             }
           });
         }
         return next(action);
       });
        window.WebChat.renderWebChat({
        directLine: window.WebChat.createDirectLine({ token: webChatToken }),
        store,
        styleOptions: {
        },
        userID: 'N/A',
        username: 'Web Chat User',
        locale: 'nl-NL'
      }, document.getElementById('webchat'));
    </script>
  </body>
</html>

我希望可以使用较短的令牌,或者至少可以使用网聊的令牌

2 个答案:

答案 0 :(得分:1)

BotFramework开发团队刚刚部署了一个更新,该更新使您可以将DirectLine秘密与Web聊天终结点一起使用,因此您现在可以使用DirectLine或WebChat秘密将Web聊天连接到您的机器人。

const res = await fetch('https://webchat.botframework.com/api/tokens', {
    method: 'GET', 
    headers: { 
        Authorization: 'BotConnector <WEB_CHAT_SECRET | DIRECT_LINE_SECRET>'
    } 
});

const token = await res.json();

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

希望这会有所帮助!

答案 1 :(得分:0)

在webchatclient中使用直接秘密会导致长令牌,其长度大于800(长度会有所不同),并且403错误会转换为客户端中的“无法连接”消息。 X。尽管创建连接的方法称为“ createDirectLine”,但网络聊天客户端仍需要网络聊天秘密。