- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在 Node.JS 中使用 MS Bot 框架开发一个机器人。我正在查看有关保存/检索用户与机器人对话状态的各种方法的文档。
根据我的理解,对于每个机器人,每个用户都是不同的对话。例如我有 2 个机器人,BOT-A 和 BOT-B。具有 Skype ID abc.skype 的用户可以访问这些机器人。对于每个机器人,将使用不同的对话 ID 和用户 ID 来识别该用户。 IE。对于 BOT-A,用户的对话 ID 将为“ABC”;对于 BOT-B,用户的对话 ID 将为“XYZ”。 session对象中的userID字段将保存可以识别用户的数据,例如用户在 channel 中公开可见的名称。
根据文档 ( saving-state )
userData stores information globally for the user across all conversations.
conversationData stores information globally for a single conversation. This data is visible to everyone within the conversation so exercise with care when storing data to this property. It’s enabled by default and you can disable it using the bot's persistConversationData setting.
privateConversationData stores information globally for a single conversation but it is private data specific to the current user. This data spans all dialogs so it’s useful for storing temporary state that you want cleaned up when the conversation ends.
dialogData persists information for a single dialog instance. This is essential for storing temporary information in between the steps of a waterfall in a dialog.
保存状态的实际存储机制/位置是什么?我的意思是,如果我在 session.userData
中保存一些数据并在一周后为同一用户访问它,我为什么会得到相同的数据。数据实际保存在哪里?
如果我将 persistUserData
和 persistConversationData
设置为 false 会发生什么?这是否意味着用户数据和对话数据将不会被持久化。如果是,那么这本质上意味着我无法保存数据。不是吗?或者这意味着什么不同?
任何人都可以分享在同一个 session 中有多个用户的任何示例吗?或者演示这些不同数据保存方法的功能(优缺点)的示例。
我提到的资源:
https://learn.microsoft.com/en-us/bot-framework/nodejs/bot-builder-nodejs-state
最佳答案
我理解这些概念的混合,当您没有尝试多个 channel 并查看所有消息字段时,管理起来有点困难!
关于您最初陈述的一些要点:
This user will be identified using a different conversationID & userIDfor each bot
这并不完全正确:
UserId
:对于某些 channel ,不同机器人的 userId 可以相同,例如 SMS,其中 userId 是电话号码。对于其他人来说,它在像 Messenger 这样的机器人之间发生变化,其中 userId 是页面范围的 ID。ConversationId
:是的,您不能在 2 个单独的机器人中为 2 个用户使用相同的对话 ID。但在某些 channel 中,同一用户也会有多个对话 ID。在某些机器人可以进行群组对话的 channel 中,每个用户的对话 ID 都是相同的。The userID field in session object will hold data which can identifythe user, such as user's publicly visible name in the channel.
它是User
字段,包含Id
(用户 key )和Name
(公开可见的名称)。
然后回答你的问题:
userData stores information globally for the user across allconversations.
对于某个 channel ,特定 UserId 的所有对话之间的 userData 是一致的!它不是跨 channel 的,因为没有跨 channel 的 Id
<小时/>conversationData stores information globally for a singleconversation. This data is visible to everyone within the conversationso exercise with care when storing data to this property. It’s enabledby default and you can disable it using the bot'spersistConversationData setting.
正如我所说,在某些 channel 中,机器人可以处于群组对话中,因此每个用户的对话 ID 都是相同的,并且对话数据中的信息对于对话中的每个用户都是相同的
如果您想在此对话中保留有关特定用户的信息,请使用 privateConversationData
(如果必须在此对话中保留更多信息,则使用 userData
)。
我认为文档非常清楚在哪里做什么:
<小时/>These four properties correspond to the four data storage containersthat can be used to store data. Which properties you use to store datawill depend upon the appropriate scope for the data you are storing,the nature of the data that you are storing, and how long you want thedata to persist. For example, if you need to store user data that willbe available across multiple conversations, consider using theuserData property. If you need to temporarily store local variablevalues within the scope of a dialog, consider using the dialogDataproperty. If you need to temporarily store data that must beaccessible across multiple dialogs, consider using theconversationData property.
What is actual storage mechanism/location for saving state? By this Imean that if I save some data in session.userData and access it aftera week for the same user, how come I get the same data. Where is thedata saved actually?
如果您处于同一 channel 并获得相同的 userId,您将获得相同的数据。
提供了一个用于测试的存储(托管在机器人连接器中?),但它不是为生产而设计的,并且已被弃用。对于数据的位置,您必须使用 CosmosDB 或 TableStorage 实现自己的存储:https://learn.microsoft.com/en-us/bot-framework/nodejs/bot-builder-nodejs-state
<小时/>What happens if I set persistUserData & persistConversationData tofalse? Does that mean userData & conversationData will not bepersisted.
是的,对话结束时不会持续。
If yes, then it essentially means that I cannot save data.Isn't it? Or does this mean something different?
不,这意味着对话结束后您将无法再次获取此数据,仅此而已。
<小时/>Can anyone share any example where there are multiple users in sameconversations? Or an example which demonstrates capabilities(pros &cons) of these various data saving methods.
=> 例如,Slack channel ,将机器人部署在“ channel ”中(不是与机器人进行私有(private) DM 对话)!
您将看到 ConversationId 类似于 Bxxxxxxxx:Txxxxxxxx:Cxxxxxxxx,其中 Bxxxxxxxx 是您的机器人的 Slack ID,Txxxxxxxx 是您的 Slack 的团队 ID,Cxxxxxxxx 是您当前的 channel Slack 的 ID
当我查看事件字段时,我的一项测试中的示例:
关于node.js - MS Bot 框架中可用的状态保存方法存在困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47792313/
我已经使用 MS Word 和一大堆表单字段创建了一个应用程序表单,并且我有一个 Access db,可以从这个 Word 文档中导入我需要的所有数据,这要归功于: http://msdn.micro
我试图找到一种将 Outlook 插件发布到办公商店的方法。但我发现我们只能发布 Office 应用程序,而不能发布 Office 商店的加载项。因此我想知道 Office 应用程序和 Office
我在 MS Reporting Services 服务器上部署了一份报告,工作正常。我可以使用 Microsoft 的报表查看器组件从 ASPX 页面毫无问题地 Access 它、设置报表参数等。效果
让我们再试一次。我发布这个是为了回答 2 个问题 MS Project 2007 是否需要 SharePoint(我希望没有)? 做 你喜欢 MS Project 开发团队 - 它是有用的还是 疼痛?
我正在执行这些星期六上午的任务之一,试图理解为什么为什么要在计算机注册表中搜索某些信息会花费大量时间,甚至迫使我停止该过程。使用这些注册表清理程序之一,我发现该代码花了数十分钟遍历如下行: HKEY_
从多年前开始,我就没有使用Access。 它能很好地解决什么样的问题,甚至比真正的RDBMS支持的Web应用程序更好? 它仍在积极开发吗?还是MS已经死了? 最大的局限性是什么? 更新: 应该使用什么
我们计划重新设计一个相当庞大的 MS Access 应用程序。有没有办法在同一应用程序上同时工作,或者是否可以合并同一文件的两个单独实例(不是数据,而是表单和代码)。现在 Access 包含数据,但在
我写了一些SQL命令来更正表中的字段。由于它是如此之小(也许我有点自大),我什至没有运行过一次,只是将其放入了更新包中供其他用户使用。 Dim SQL As String Dim rs As DAO.
它是Office自带的,是一个“中规中矩”的数据库,到今天这里有800多个问题,但我从来没有关注过它。 我失去了一些有趣的东西? 我说的是 MS-Access 作为用于快速原型(prototype)制
我有一个MS-Access数据库,该数据库已通过使用“用于Access的Microsoft SQL Server迁移助手2008”(aka SSMA)转换为使用SQL表并创建了链接表(因此,MS-Ac
我有一个 Excel 文件,其中包含从 Access 数据库(主数据库)导出的任务。然后,此 Excel 文件用作 MS Project 的导入文件。随后,MS Project 用于实际跟踪和报告,并
我正在尝试获取有关如何将 MS Project 2010 连接到 MS Project Server 2010 的教程或分步说明。 我已经在我的服务器上安装了 Server 2008 R2(64 位)
有没有办法像选择查询一样在查询中引用表单的组合框/文本框? 我通常在选择查询的条件中使用类似这样的东西: like forms!frmMain.qTitleofSomething&* (acces
我想创建一个表,其中包含 DOUBLE 实数类型的列。我可以在表设计 View 中找到数据类型 Number,但是没有 Double 或 single,Float.. 如何实现..? 我还需要 SQL
我环顾四周,发现了一些关于如何从字段的“描述”框中获取描述的 VBA 代码,但没有找到如何在表单属性中使用它的方法。 我希望出现一个 ControlTip,其中包含从数据库中的描述中带来的该字段的描述
我有一个难题。我已经开发了一个 Access 应用程序,我正准备分发它。我刚刚拆分了数据库。 (我知道,有人说我应该从一开始就把它分开开发……我没有)我也刚刚加密了后端数据库。在前端,我已链接到后端并
我制作了一个 MS Access 2013 数据库来跟踪有关交易网站的所有通信。与此问题相关的表和列是具有列 ID(编号)和链接(超链接)的广告,以及具有列广告的注释,其中包含广告 ID。链接字段包含
我与我不拥有且无法更改的数据库建立了 ODBC 连接。我要做的是使相关记录合并为一条记录。关系是一对多。 我有一个学生管理系统,想要导出一个提供自动标注服务(由调用收费)的调用列表。如果有多个学生住在
我在 Access 的表单中设置了一个文本框。该表单链接到一个表格。但是它自己的文本框是未绑定(bind)的,它用于简单地收集用户输入。但是,我无法编辑它所查看的值。 文本框未锁定。文本框可以在 VB
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
我是一名优秀的程序员,十分优秀!