我在我的Windows表单应用程序中使用botchat.js来获取此代码
的聊天窗口 <!DOCTYPE html>
<html>
<head>
<!-- CSS -->
<link href="https://unpkg.com/botframework-webchat/botchat.css" rel="stylesheet" />
</head>
<body>
<div id="bot" />
<!-- JAVASCRIPT -->
<script src="https://unpkg.com/botframework-webchat/botchat.js"></script>
<script>
BotChat.App({
directLine: {secret: direct_line_secret},
user: {id: 'userid'},
bot: {id: 'botid'},
resize: 'detect'
}, document.getElementById("bot"));
</script>
</body>
</html>
这很好。现在,我希望在我的Windows表单应用程序中进行整个对话。
我可以得到吗?以及如何?
您正在使用通过Direct Line
通道通信的DirectLineJS库。BOT框架的Direct Line
通道仅存储短时间(为了稳定(存储消息。您需要在自己的代码中存储并重新加载消息。
DirectLineJs
提供了一种聆听所有传入和传出消息的机制:
directLine.activity$
.subscribe(
activity => console.log("received activity ", activity) //<-- could store messages here
);
但是,这是客户端端代码(在浏览器中运行的JavaScript或在您的情况下赢得Web浏览器控件(。由于您正在尝试在客户端启动时重新加载用户的所有先前消息,因此您需要更改库来考虑此问题。代码(请参见上面的链接(是开源的,因此您当然下载它,进行更改并在您自己的服务器上托管.js。botchat.js
启动时需要查找用户以前的消息,加载它们并显示它们。
由于您的机器人客户端在Win表单应用程序中,另一个选项是仅使用直线客户端并制作自己的UI来显示消息。
注意:当前的DirectLineJs
库每次加载时都会启动新对话。如果您要恢复对话,则需要在构造客户时提供对话ID(但就像我之前提到的那样,频道本身仅在短时间内存储这些消息。因此,您无法可靠地退出对话,并重新连接日后来期望检索对话历史记录,这就是为什么您必须自己存储消息(:
dl = new DirectLine({
secret: /* SECRET */,
conversationId: /* the conversationid you stored from previous conversation */
});
如果有人试图与Bot Framework Webchat组件一起获得此工作,那么您将需要禁用Websocket,以使其正常工作,如下所示。
// Initialize DirectLine connection
botConnection = new BotChat.DirectLine
({
secret: "XXXX",
conversationId: "XXXX",
webSocket: false
});