public MainDialog(BotAccessor accessor, ILuisRouterService luisRouterService, IQnAMakerService qnaMakerService) : base(nameof(MainDialog)) { this.accessor = accessor ?? throw new ArgumentNullException(nameof(accessor)); this.luisRouterService = luisRouterService ?? throw new ArgumentNullException(nameof(luisRouterService)); this.qnaMakerService = qnaMakerService ?? throw new ArgumentNullException(nameof(qnaMakerService)); AddDialog(new WaterfallDialog(nameof(MainDialog), new WaterfallStep[] { LaunchLuisQnADialog, EndMainDialog })); AddDialog(new LuisQnADialog(accessor, luisRouterService, qnaMakerService)); }
public BotAppBot(BotAccessor accessor, ILuisRouterService luisRouterService, IQnAMakerService qnaMakerService, IActiveDirectoryService activeDirectoryService, ConversationState conversationState, UserState userState, ILogger <BotAppBot> logger) { this.accessor = accessor; this.conversationState = conversationState; this.userState = userState; this.logger = logger; this.luisRouterService = luisRouterService; this.qnaMakerService = qnaMakerService; this.activeDirectoryService = activeDirectoryService; this.dialogs = new DialogSet(accessor.ConversationDialogState); this.dialogs.Add(new MainDialog(accessor, luisRouterService, qnaMakerService)); this.dialogs.Add(new LuisQnADialog(accessor, luisRouterService, qnaMakerService)); }
public LuisQnADialog(BotAccessor accessor, ILuisRouterService luisRouterService, IQnAMakerService qnaMakerService) : base(nameof(LuisQnADialog)) { this.accessor = accessor ?? throw new ArgumentNullException(nameof(accessor)); this.luisRouterService = luisRouterService ?? throw new ArgumentNullException(nameof(luisRouterService)); this.qnaMakerService = qnaMakerService ?? throw new ArgumentNullException(nameof(qnaMakerService)); AddDialog(new WaterfallDialog(nameof(LuisQnADialog), new WaterfallStep[] { AskQuestionDialog, ProcessQuestionDialog, ProcessIfExampleIsRequiredDialog, EndDialog })); AddDialog(new TextPrompt("QuestionValidator", QuestionValidator)); AddDialog(new ChoicePrompt("AskForExampleValidator", AskForExampleValidator) { Style = ListStyle.List }); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Reading settings Settings.MicrosoftAppId = Configuration.GetSection("ApplicationSettings:MicrosoftAppId")?.Value; Settings.MicrosoftAppPassword = Configuration.GetSection("ApplicationSettings:MicrosoftAppPassword")?.Value; Settings.BotConversationStorageConnectionString = Configuration.GetSection("ApplicationSettings:BotConversationStorageConnectionString")?.Value; Settings.BotConversationStorageKey = Configuration.GetSection("ApplicationSettings:BotConversationStorageKey")?.Value; Settings.BotConversationStorageDatabaseId = Configuration.GetSection("ApplicationSettings:BotConversationStorageDatabaseId")?.Value; Settings.BotConversationStorageUserCollection = Configuration.GetSection("ApplicationSettings:BotConversationStorageUserCollection")?.Value; Settings.BotConversationStorageConversationCollection = Configuration.GetSection("ApplicationSettings:BotConversationStorageConversationCollection")?.Value; Settings.KeyVaultEncryptionKey = Configuration.GetSection("ApplicationSettings:KeyVaultEncryptionKey")?.Value; Settings.KeyVaultApplicationCode = Configuration.GetSection("ApplicationSettings:KeyVaultApplicationCode")?.Value; // Adding CosmosDB user storage CosmosDbStorage userstorage = new CosmosDbStorage(new CosmosDbStorageOptions { AuthKey = Settings.BotConversationStorageKey, CollectionId = Settings.BotConversationStorageUserCollection, CosmosDBEndpoint = new Uri(Settings.BotConversationStorageConnectionString), DatabaseId = Settings.BotConversationStorageDatabaseId, }); var userState = new UserState(userstorage); services.AddSingleton(userState); // Adding CosmosDB conversation storage CosmosDbStorage conversationstorage = new CosmosDbStorage(new CosmosDbStorageOptions { AuthKey = Settings.BotConversationStorageKey, CollectionId = Settings.BotConversationStorageConversationCollection, CosmosDBEndpoint = new Uri(Settings.BotConversationStorageConnectionString), DatabaseId = Settings.BotConversationStorageDatabaseId, }); var conversationState = new ConversationState(conversationstorage); services.AddSingleton(conversationState); // Adding Consul hosted service using (ConsulService consulService = new ConsulService(EnvironmentName, ContentRootPath)) { consulService.Initialize(services, Configuration); } // Adding MVC compatibility services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); // Adding the credential provider to be used with the Bot Framework Adapter services.AddSingleton <ICredentialProvider, ConfigurationCredentialProvider>(); // Adding the channel provider to be used with the Bot Framework Adapter services.AddSingleton <IChannelProvider, ConfigurationChannelProvider>(); // Adding the Bot Framework Adapter with error handling enabled services.AddSingleton <IBotFrameworkHttpAdapter, AdapterWithErrorHandler>(); // Adding middlewares services.AddSingleton(new AutoSaveStateMiddleware(userState, conversationState)); services.AddSingleton(new ShowTypingMiddleware()); // Adding telemetry ConfigureTelemetry(services); // Adding HttpClient and HttpClientHandler var handler = new HttpClientHandler(); handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true; var httpClient = new HttpClient(handler); // Adding LUIS Router service services.AddSingleton <ILuisRouterService>(sp => { return(new LuisRouterService(httpClient, EnvironmentName, ContentRootPath, userState, sp.GetRequiredService <IBotTelemetryClient>())); }); // Adding QnAMaker Router service services.AddSingleton <IQnAMakerService>(sp => { return(new QnAMakerService(httpClient, EnvironmentName, ContentRootPath, sp.GetRequiredService <IBotTelemetryClient>())); }); // Adding WebChat service services.AddSingleton <IWebChatService>(sp => { return(new WebChatService(httpClient, EnvironmentName, ContentRootPath)); }); // Adding KeyVault service services.AddSingleton <IKeyVaultService>(sp => { return(new KeyVaultService(EnvironmentName, ContentRootPath)); }); KeyVaultService keyVaultService = new KeyVaultService(EnvironmentName, ContentRootPath); EncryptionKey = keyVaultService.GetVaultKeyAsync(Settings.KeyVaultEncryptionKey).Result; ApplicationCode = keyVaultService.GetVaultKeyAsync(Settings.KeyVaultApplicationCode).Result; // Adding Active Directory service services.AddSingleton <IActiveDirectoryService>(sp => { return(new ActiveDirectoryService(EnvironmentName, ContentRootPath)); }); // Adding accessor services.AddSingleton(sp => { // We need to grab the conversationState we added on the options in the previous step var options = sp.GetRequiredService <IOptions <BotFrameworkOptions> >().Value; if (options == null) { throw new InvalidOperationException("BotFrameworkOptions must be configured prior to setting up the State Accessors"); } // Create the custom state accessor. // State accessor enable other components to read and write individual properties of state. var accessor = new BotAccessor(loggerFactory, conversationState, userState) { ConversationDialogState = conversationState.CreateProperty <DialogState>("DialogState"), AskForExamplePreference = conversationState.CreateProperty <bool>("AskForExamplePreference"), IsAuthenticatedPreference = userState.CreateProperty <bool>("IsAuthenticatedPreference") }; return(accessor); }); // Adding the bot as a transient. In this case the ASP Controller is expecting an IBot services.AddTransient <IBot, BotAppBot>(); }