/// <summary> /// Initializes a new instance of the class. /// </summary> public OSEngBot(BotAccessor botAccessor) { _botAccessor = botAccessor ?? throw new ArgumentNullException(nameof(botAccessor)); _dialogSet = new DialogSet(_botAccessor.DialogStateAccessor); // Add the prompts we need to the dialog set. _dialogSet .Add(new TextPrompt(IcMNumberPrompt)) .Add(new TextPrompt(IcMTsgId)) .Add(new ChoicePrompt(IcMcontinuePrompt)); _dialogSet.Add(new WaterfallDialog(TopLevelDialog) .AddStep(IcMNumberPromptStepAsync) .AddStep(IcMTsgIdPromptStepAsync) .AddStep(AcknowledgementStepAsync)); //.AddStep(ContinueStepAsync)); }
/// <summary> /// This method gets called by the runtime. Use this method to add services to the container. /// </summary> /// <param name="services">The <see cref="IServiceCollection"/> specifies the contract for a collection of service descriptors.</param> /// <seealso cref="IStatePropertyAccessor{T}"/> /// <seealso cref="https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/dependency-injection"/> /// <seealso cref="https://docs.microsoft.com/en-us/azure/bot-service/bot-service-manage-channels?view=azure-bot-service-4.0"/> public void ConfigureServices(IServiceCollection services) { services.AddBot <OSEngBot>(options => { var secretKey = Configuration.GetSection("botFileSecret")?.Value; // Loads .bot configuration file and adds a singleton that your Bot can access through dependency injection. var botConfig = BotConfiguration.Load(@".\OSEngBot.bot", secretKey); services.AddSingleton(sp => botConfig); // Retrieve current endpoint. var service = botConfig.Services.Where(s => s.Type == "endpoint" && s.Name == "development").FirstOrDefault(); if (!(service is EndpointService endpointService)) { throw new InvalidOperationException($"The .bot file does not contain a development endpoint."); } options.CredentialProvider = new SimpleCredentialProvider(endpointService.AppId, endpointService.AppPassword); // Catches any errors that occur during a conversation turn and logs them. options.OnTurnError = async(context, exception) => { await context.SendActivityAsync("Sorry, it looks like something went wrong."); }; }); IStorage dataStore = new MemoryStorage(); var conversationState = new ConversationState(dataStore); var userState = new UserState(dataStore); services.AddSingleton <BotAccessor>(sp => { // Create the custom state accessor. // State accessors enable other components to read and write individual properties of state. var accessors = new BotAccessor(conversationState, userState) { DialogStateAccessor = conversationState.CreateProperty <DialogState>("DialogState"), UserProfileAccessor = userState.CreateProperty <IcMProfile>("UserProfile"), }; return(accessors); }); }