包含多个用户的Microsoft Bot Framework对话框

时间:2017-01-27 20:11:44

标签: c# .net botframework

我正在使用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 个答案:

答案 0 :(得分:0)

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

  1. 分别存储每个频道的状态(最新问题)。例如,创建一个可序列化的类" QuestionState"它至少具有以下属性:服务URL,会话帐户ID和问题本身。
  2. 对于每个传入活动(消息),请检查发件人的服务URL和会话帐户ID,并将其与您的状态列表进行比较。如果找到匹配项,请评估有关最新问题的消息(答案)。如果没有匹配项,则这是一个没有先前状态的频道,因此您需要创建一个并询问第一个问题。
  3. Azure Table storage是一种方便存储状态的服务。当然,您可以使用任何您喜欢的服务。请记住,内存状态存储仅适用于测试。

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