明确说明bot框架V4上Dialog的实现

时间:2019-02-01 07:28:57

标签: botframework

有人可以解释如何从bot框架正确编码对话框吗? 我试图使用空的bot模板从头开始编写代码,以了解每段代码以及它们为什么以及如何组合在一起。但是即使阅读了很多次,我仍然无法正确实现它或如何在Microsoft Bot Framework中为对话框编码。我已经多次阅读Microsoft的文档以及Microsoft的许多版本或文档,但是仍然无法理解如何将每一段代码链接在一起。甚至我发现的博客或网站都没有解释为什么需要这样的代码,而只是要求您添加此代码。我了解概念,但不了解机制。该代码似乎涵盖了startup.cs,yourMainBotLogic.cs,dialogClassName.cs,BotAccessors.cs,这些使我感到困惑的是程序运行的步骤和方式。

请详细说明为什么需要这些代码/组件/它们的用途,以及为什么必须在此类文件(例如Startup.cs)中存在这些代码/组件。例如;

var accessors = new BotAccessors(conversationState) { ConversationDialogState = conversationState.CreateProperty<DialogState>("DialogState"), }; return accessors;

为DialogState创建一个访问器,然后返回它。这只是示例,我对代码的描述可能不正确。

1 个答案:

答案 0 :(得分:0)

您关于所有事物如何融合的问题有点宽泛,但我将尝试进行一些解释:

startup.cs :机器人配置应在此处加载,并创建单例。包括IStatePropertyAccessors。许多示例包含带有机器人特定的设置代码的BotConfig文件,并在启动时调用它。许多示例还包含一个bot文件。 Bot文件可以使加载某些Bot服务更容易。但是,它们不是必需的。仍然可以从“应用程序设置”或web.config中检索ID和密码,并且您的代码可以创建服务。

通常在启动时初始化的一些事情是:

    sdk使用
  • ICredentialProvider创建BotAdapter并提供JWT Token Auth。对于单个appid /密码漫游器,SDK提供了SimpleCredentialProvider。如果您的机器人使用的是集成库,则可以在IBot初始化期间创建一个,或者只为botConfig提供appid / pass:

webapi:

    public static void Register(HttpConfiguration config)
    {
         config.MapBotFramework(botConfig =>
        {
          var appId = ConfigurationManager.AppSettings[MicrosoftAppCredentials.MicrosoftAppIdKey];
          var pass = ConfigurationManager.AppSettings[MicrosoftAppCredentials.MicrosoftAppPasswordKey];

          botConfig.UseMicrosoftApplicationIdentity(appId, pass);
        }
    }

netcore:


    public void ConfigureServices(IServiceCollection services)
    {
       services.AddBot(options =>
     {
        options.CredentialProvider = new SimpleCredentialProvider(appId, appPassword);
     });           
    }



  • BotState是为IStorage实现提供密钥的对象。 SDK提供了三个示例:


  • IStatePropertyAccessors这些是实现层,用于对上述作用域BotState进行类型化访问。执行获取/设置后,将查询并保留实际状态存储(通过sdk提供的内部缓存)。

  • BotAccessors.cs只是用于保存状态类和IStatePropertyAccessors的容器。这不是必需的,但是是为了方便。

yourMainBotLogic.cs :这是适配器的OnTurn实现所在的位置,应加载对话框堆栈并处理用户的消息。对话框堆栈由包含DialogData类型的IStatePropertyAccessor的对话框集管理。通过调用create context在此属性访问器上执行get时,将查询状态存储以填充DialogContext的对话框堆栈。

dialogClassName.cs 是一个对话框实现。此处描述了特定的对话框类型:Dialog types有关如何使用它们的示例,请参见github和文档中的示例。

与其他asp.net应用程序一样,在应用程序首次加载时运行启动(请参见aspnet-web-api-posterlifecycle-of-an-aspnet-mvc-5-application,请注意,Microsoft.Bot.Builder.Integration.AspNet.Core使用IApplicationBuilder扩展来添加消息处理程序到请求管道ApplicationBuilderExtensionsMicrosoft.Bot.Builder.Integration.AspNet.WebApi的访问使用HttpMessageHandler实现)。但是,您可以选择不使用集成库,而创建自己的控制器。就像这个样本:MVC-Bot

V4其他参考