/// <summary> /// Maps various endpoint handlers for the <see cref="ServiceCollectionExtensions.AddBot{TBot}(IServiceCollection, Action{BotFrameworkOptions})">registered bot</see> into the request execution pipeline. /// </summary> /// <param name="appicationBuilder">The <see cref="IApplicationBuilder"/>.</param> /// <param name="configurePaths">A callback to configure the paths that determine where the endpoints of the bot will be exposed.</param> /// <returns>A reference to this instance after the operation has completed.</returns> /// <seealso cref="ServiceCollectionExtensions.AddBot{TBot}(IServiceCollection, Action{BotFrameworkOptions})"/> /// <seealso cref="BotFrameworkPaths"/> public static IApplicationBuilder UseBotFramework(this IApplicationBuilder applicationBuilder, Action <BotFrameworkPaths> configurePaths) { if (applicationBuilder == null) { throw new ArgumentNullException(nameof(applicationBuilder)); } if (configurePaths == null) { throw new ArgumentNullException(nameof(configurePaths)); } var paths = new BotFrameworkPaths(); configurePaths(paths); var applicationServices = applicationBuilder.ApplicationServices; var options = applicationServices.GetRequiredService <IOptions <BotFrameworkOptions> >().Value; if (options.EnableProactiveMessages) { applicationBuilder.Map( paths.BasePath + paths.ProactiveMessagesPath, botProactiveAppBuilder => botProactiveAppBuilder.Run(new BotProactiveMessageHandler().HandleAsync)); } applicationBuilder.Map( paths.BasePath + paths.MessagesPath, botActivitiesAppBuilder => botActivitiesAppBuilder.Run(new BotMessageHandler().HandleAsync)); return(applicationBuilder); }
/// <summary> /// Initializes and adds a bot adapter to the HTTP request pipeline, using custom endpoint paths for the bot. /// </summary> /// <param name="applicationBuilder">The application builder for the ASP.NET application.</param> /// <param name="configurePaths">Allows you to modify the endpoints for the bot.</param> /// <returns>The updated application builder.</returns> /// <remarks>This method adds any middleware from the <see cref="BotFrameworkOptions"/> provided in the /// <see cref="ServiceCollectionExtensions.AddBot{TBot}(IServiceCollection, Action{BotFrameworkOptions})"/> /// method to the adapter.</remarks> public static IApplicationBuilder UseBotFramework(this IApplicationBuilder applicationBuilder, Action <BotFrameworkPaths> configurePaths) { if (applicationBuilder == null) { throw new ArgumentNullException(nameof(applicationBuilder)); } if (configurePaths == null) { throw new ArgumentNullException(nameof(configurePaths)); } var options = applicationBuilder.ApplicationServices.GetRequiredService <IOptions <BotFrameworkOptions> >().Value; var botFrameworkAdapter = new BotFrameworkAdapter(options.CredentialProvider, options.ConnectorClientRetryPolicy); foreach (var middleware in options.Middleware) { botFrameworkAdapter.Use(middleware); } var paths = new BotFrameworkPaths(); configurePaths(paths); if (options.EnableProactiveMessages) { applicationBuilder.Map( paths.BasePath + paths.ProactiveMessagesPath, botProactiveAppBuilder => botProactiveAppBuilder.Run(new BotProactiveMessageHandler(botFrameworkAdapter).HandleAsync)); } applicationBuilder.Map( paths.BasePath + paths.MessagesPath, botActivitiesAppBuilder => botActivitiesAppBuilder.Run(new BotMessageHandler(botFrameworkAdapter).HandleAsync)); return(applicationBuilder); }