我按照此处详述的步骤进行操作:https://github.com/Microsoft/BotFramework-WebChat以实现Microsoft Bot Framework(在C#SDK中)。我在一个独立的页面上测试过,它工作正常。我需要使用DirectLine版本,因为我必须将值从网页传递到机器人(用于用户初始化)。
但是,我必须实现它的页面是ASP.NET WebForms(使用ScriptManager和AJAXToolkit)。
使用机器人时出现问题。通过在聊天窗口中键入任何内容并按Enter键,整个页面将刷新,并且机器人将重新启动以启动。这使得机器人无法使用。
我猜测聊天控件的“发送”按钮以某种方式通过ScriptManager触发回发,导致整个页面刷新。我必须在按钮的click事件中包含e.preventDefault(),该按钮显示聊天窗口以处理这种情况。在Directline聊天控件中,我迷失了。
有人可以帮忙吗?
答案 0 :(得分:1)
使用机器人时出现问题。通过在聊天窗口中键入任何内容并按Enter键,整个页面将刷新,并且机器人将重新启动以启动。这使机器人无法使用。
当我在webform页面(.aspx)中嵌入我的机器人时遇到同样的问题,为了解决这个问题,我将聊天机器人容器<div id="mybot" />
放在 UpdatePanel 控件中并设置 ChildrenAsTriggers 属性为 false ,这对我有用,你可以尝试一下。
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<link href="https://cdn.botframework.com/botframework-webchat/latest/botchat.css" rel="stylesheet" />
<script src="https://cdn.botframework.com/botframework-webchat/latest/botchat.js"></script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
<ContentTemplate>
<div id="mybot" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
<script>
BotChat.App({
directLine: { secret: 'directline_secret_here' },
user: { id: '1234', firstname: 'firstname_here', lastname: 'lastname_here' },
bot: { id: 'fehantestbot' },
resize: 'detect'
}, document.getElementById("mybot"))
</script>
我测试的屏幕截图:
答案 1 :(得分:0)
使用此代码阻止从direclineJS网络聊天发送聊天时页面刷新:
$(document).keypress(function (e) {
if (e.keyCode === 13) {
e.preventDefault();
return false;
}
});