我可以使用botchat.js进行整个聊天对话吗?



我在我的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
});

最新更新