【问题标题】:MS Bot Framework - web chat widget save chat historyMS Bot Framework - 网络聊天小部件保存聊天记录
【发布时间】:2017-09-12 11:27:01
【问题描述】:

我在网络聊天和 FB Messenger 平台中都使用 Microsoft Bot Framework。

我想知道是否有任何简单的方法可以保存并向用户显示他的聊天记录,即使页面被重新加载,或者用户离开页面并在一段时间后返回..
因为现在,使用 IFRAME 方法,每次重新加载页面时,都会与机器人打开新会话..

我曾想过在我的后端创建新的 api 来获取用户聊天记录,但这听起来并不明智..

感谢您的帮助!

【问题讨论】:

  • 目前不可能。我们有一个 POC,我们在其中实现了这一点,但我们必须修改网络聊天代码。我们希望在今年年底之前提供此功能,但没有具体的时间表。有一个很好的对话here 讨论这个。
  • 嗨,Jason,谢谢..我可以使用 POC 项目并为其做出贡献吗?
  • 我会尽快回复你
  • 我可以和你分享这个项目,但是请记住它只是一个 POC
  • 我将在清理解决方案后使用指向 GitHub 存储库的链接更新此问题

标签: botframework


【解决方案1】:

Bot Framework 还为我们提供了一项名为 Bot Framework State service 的强大服务,它使您的机器人能够存储和检索与特定对话上下文中的用户、对话或特定用户相关联的状态数据。

所以我们使用的最简单的解决方案是这样的:

  1. Save 用户和机器人在用户的 BotData 中发送的任何消息
  2. 当用户加入或询问历史时,immiditaly extract 来自 BotData并通过添加用户名的方式发送回用户和 bot 在每条消息的顶部(以便更容易区分 bot 的消息和用户的消息)

【讨论】:

  • 不建议将 Bot Framework State Service API 用于生产环境,并且可能在未来的版本中被弃用。建议您更新机器人代码以将内存存储用于测试目的,或将 Azure 扩展之一用于生产机器人。有关详细信息,请参阅 .NET 或 Node 实现的管理状态数据主题。
【解决方案2】:

我们使用directline JS 功能保留聊天记录。

每个对话都有其 ID。保留对话 ID。将持久化的对话 Id 传递给聊天组件初始化,聊天使用历史记录进行初始化。

机器人连接初始化。 getPersistedConversationId从cookies中读取conversationId

const botConnection = new BotChat.DirectLine({
        secret: "directline secret",
        webSocket: false,
        conversationId: getPersistedConversationId()
    });

使用连接初始化网络聊天组件

BotChat.App({
        botConnection: botConnection,
        user: { id: "userid", name: "username",},
    },
    window.document.getElementById('chat'));

订阅连接状态更改。打开连接时 - 保留对话 ID。 saveConversationId 将对话 id 保存到 cookie 中

botConnection.connectionStatus$
    .subscribe(function (connectionStatus){
        switch(connectionStatus){
            case 2:
                saveConversationId(botConnection.conversationId);
        }
    });

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多