Botframework WebChat:无法在其他聊天/浏览器上启动新的和干净的对话

时间:2018-04-27 08:14:00

标签: botframework direct-line-botframework

我正在使用网络聊天为我的机器人制作一个简单的网络界面。我的机器人使用BotAuth进行身份验证以连接到Azure Active Directory。 当我登录时它工作正常,但是当我在另一台设备上开始新的对话时,它会在我的对话开始时进行新的干净对话。

我使用了这个https://github.com/Microsoft/BotFramework-WebChat,但我没有工作

 $.ajax({
            type: "POST",
            headers: {
                "Authorization": "Bearer " + "yupOGxl-odA.cwA.USk.zul_EXUwk54fWqKT_N8hmsWyXSWo5DHMYj0r7DQjaZI"
            },
            url: "https://directline.botframework.com/v3/directline/tokens/generate",
        }).done(function (response) {
            console.log(response)
            BotChat.App({
                directLine: {
                    token: response.token
                },
                user: { id: 'userid' },
                bot: { id: 'botid' },
                resize: 'detect'
            }, document.getElementById("bot"));
        });

1 个答案:

答案 0 :(得分:2)

  

当我在另一台设备上开始新的对话时,它会在我的对话开始时进行新的干净对话。

您似乎希望生成并传递直线令牌以启动BotChat。在本部分中:“Secrets and tokens”,您可以找到A Direct Line token is a key that can be used to access a single conversation

如果您通过Ajax请求生成新令牌并在每次新用户登录时使用它来启动BotChat,则应使用该令牌启动新会话,您可以使用浏览器网络工具检查 conversationId < / strong>响应starting a conversation

另一方面,如果您在其他设备/浏览器客户端(或标签页)上使用相同的直线令牌,它将访问同一个对话。

  

我的机器人中有2个用户,当我使用它时,我以其他人的身份登录

正如JasonSowers在评论中提到的,当您启动BotChat时,您指定了相同的用户ID,您最好获取当前登录用户的ID并动态地将其传递给BotChat user 属性

注意:在您的代码中,您根据JavaScript客户端上的直接线路密钥发出了生成令牌的ajax请求,这仍然会暴露直线线路秘密。其他人可以通过检查您的JavaScript代码然后将您的机器人放在他们的网站上轻松获得您的Direct Line Secret。如果可能,您可以创建后端服务并将代码逻辑放在服务器端生成令牌,这有助于隐藏客户端的秘密。