繁体   English   中英

具有多个用户的Microsoft Bot Framework对话框

[英]Microsoft Bot Framework dialog with multiple users

我正在使用Microsoft Bot Framework for .NET创建一个简单的问题/答案机器人,作为用C#编写的ASP.NET MVC WebApi,主要用于具有多个用户的Slack通道。

我创建了一个对话框,我根据框架文档从我的消息控制器启动:

await Conversation.SendAsync(activity, () => new QuestionDialog());

lambda表达式向Bot Framework指示用于对话框的构造函数。 QuestionDialog实现了IDialog。 启动对话框后,对话框类被序列化并存储在Bot Connector云中,保存当前问题和预期答案,然后在当前对话中收到新消息时进行反序列化。

我希望任何用户能够回答Bot提出的随机问题,无论哪个用户发起了对话,但似乎为每个与僵尸机器人交互的用户创建了一个新的QuestionDialog,因此只有发起问题的用户才能回答它。

是否有任何方法可以创建仅与会话/频道相关联的对话框,而不是会话/频道和用户的组合? 尝试以这种方式使用对话框是否有意义?

我想我实现这个的方式是:

  1. 分别存储每个通道的状态(最新问题)。 例如,创建一个可序列化的类“QuestionState”,它至少具有以下属性:服务URL,会话帐户ID和问题本身。
  2. 对于每个传入活动(消息),请检查发件人的服务URL和会话帐户ID,并将其与您的状态列表进行比较。 如果找到匹配项,请评估有关最新问题的消息(答案)。 如果没有匹配项,则这是一个没有先前状态的通道,因此您需要创建一个并询问第一个问题。

Azure表存储是一种便于存储状态的服务。当然,您可以使用任何您喜欢的服务。 请记住,内存状态存储仅适用于测试。

此外,您根本不必使用此解决方案的对话框 - 您可以在MessagesController中执行所有操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM