1

我在我的 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 窗体应用程序中进行整个对话。

我能得到它吗?如何 ?

4

2 回答 2

1

您正在使用通过通道进行通信的DirectLineJs库。Direct LineBot Framework的Direct Line通道只存储短时间的消息(为了稳定)。您需要在自己的代码中存储和重新加载消息。

DirectLineJs提供了一种监听所有传入和传出消息的机制:

directLine.activity$
.subscribe(
    activity => console.log("received activity ", activity) //<-- could store messages here
);

但是,这是客户端代码(在浏览器中运行的 javascript,或者在您的情况下是 win 表单 Web 浏览器控件)。由于您尝试在客户端启动时为用户重新加载所有以前的消息,因此您需要更改库以解决此问题。代码(见上面的链接)是开源的,所以您当然可以下载它,进行更改,并将 .js 托管在您自己的服务器上。 botchat.js需要在启动时查找用户以前的消息,加载它们并显示它们。

由于您的 bot 客户端位于 Win Forms 应用程序内部,因此另一种选择是仅使用Direct Line 客户端并制作您自己的 UI 来显示消息。


注意:当前DirectLineJs库每次加载时都会开始一个新的对话。如果您尝试恢复对话,则需要在构建客户端时提供 ConversationId(但就像我之前提到的,通道本身仅在短时间内存储这些消息。因此您无法可靠地退出对话并重新连接几天后来期望检索对话历史记录,这就是您必须自己存储消息的原因):

dl = new DirectLine({
    secret: /* SECRET */,
    conversationId: /* the conversationid you stored from previous conversation */
});
于 2017-05-07T23:45:44.630 回答
0

如果有人试图将这项工作与Bot Framework WebChat组件一起使用,那么您将需要禁用 WebSocket 才能使其正常工作,如下所示。

// Initialize DirectLine connection
botConnection = new BotChat.DirectLine
({
     secret: "XXXX",
     conversationId: "XXXX",
     webSocket: false
});

于 2017-10-03T11:55:48.477 回答