问题描述
我们有一个正在Azure中运行的机器人(Web App Bot),我正尝试将其嵌入网站中。该机器人基于Bot Builder V4 SDK Tamplate CoreBot v4.9.2。最初,我使用iframe
嵌入了bod。该方法有效,但未提供我们所需的功能,因此现在将其更改为使用DirectLine。
我在网页上的代码如下:
<script crossorigin="anonymous"
src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
<div id="webchat" role="main"></div>
<script>
(async function () {
const res = await fetch('https://[my bot name here].azurewebsites.net/.bot/v3/directline/tokens/generate',{
method: 'POST',headers: new Headers({
'Authorization': "Bearer [my token here]"
})
});
const { token } = await res.json();
window.WebChat.renderWebChat(
{
directLine: await window.WebChat.createDirectLineAppServiceExtension({
domain: 'https://[my bot name here].azurewebsites.net/.bot/v3/directline',token
})
},document.getElementById('webchat')
);
document.querySelector('#webchat > *').focus();
})().catch(err => console.error(err));
</script>
经过一番挣扎,我设法从https://[my bot name here].azurewebsites.net/.bot/v3/directline
获取了令牌。
而且我可以在网页上看到聊天窗口,但是说connecting
一段时间后,它变成了Taking longer than usual to connect
,就像这样:
在Chrome控制台中,出现错误消息Failed to connect Error: Connection response code 500
。当我检查Chrome的“网络”标签时,可以看到生成的令牌的状态为200,并且websocket连接处于打开状态,如下所示:
----------编辑---------
我刚刚注意到,当使用网络浏览器转到https://[my bot name here].azurewebsites.net/.bot
时,生成的json是
{"v":"1.0.0.0.55fa54091a[some key?]","k":true,"ib":false,"ob":false,"initialized":true}
ib和ob应该为真,但为假,也许这是问题的一部分。
----------编辑2 --------- 好,现在我开始发疯了。 Ashish帮助了我,在某些时候ib和ob是正确的。昨天大部分时间都是如此。昨天在某个时候,他们转为假了片刻(不超过2个小时)。我检查了是否有人触发了发布管道,但没有最近的发布。之后,ib和ob再次神奇地变成了真,并再次连接到直线。
现在,今早ib和ob再次为假。同样,没有最新版本。我不知道是什么原因造成的。
有人知道这里发生了什么或如何解决?我如何找到导致ib和ob为假的原因?
感谢您的帮助!提前致谢。如果您需要更多信息,只需询问,我会发布。
解决方法
如果* .bot端点显示的ib和ob值为false,则意味着bot和Direct Line应用服务扩展名无法相互连接。
请确保您验证以下内容:
- 再次检查使用命名管道的代码是否已添加到 机器人。
- 确认该机器人能够启动并运行。有用 工具是在WebChat中测试,连接其他频道,远程 调试或记录。
- 重新启动整个bot的Azure应用服务 托管在其中,以确保干净启动所有进程。
请检查troubleshooting guide,它似乎今天已更新。 (仍旧的日期反映了一些方式,不确定原因)