我正在使用网络聊天为我的机器人制作一个简单的网络界面。我的机器人使用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")); });
答案 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。如果可能,您可以创建后端服务并将代码逻辑放在服务器端生成令牌,这有助于隐藏客户端的秘密。