public AzureSearchFacetsDialog(string dialogId) : base(dialogId) { const string imageBaseURI = @"https://andysa.blob.core.windows.net/search/OSL%202019/"; // ID of the child dialog that should be started anytime the component is started. this.InitialDialogId = dialogId; this.AddDialog(new ChoicePrompt("navigatePrompt")); // Define the conversation flow using the waterfall model. this.AddDialog( new WaterfallDialog(dialogId, new WaterfallStep[] { async(stepContext, ct) => { List <string> _dayChoices = new List <string>() { "Any" }; var facets = SearchService.FindFacets("day", null); facets.Values.ToList().ForEach(i => i.ToList().ForEach(j => _dayChoices.Add(j.Value.ToString()))); //_dayChoices.AddRange(facets.Select(_ => _.Key)); return(await stepContext.PromptAsync( "navigatePrompt", new PromptOptions { Choices = ChoiceFactory.ToChoices(_dayChoices), Prompt = MessageFactory.Text("[Azure Search Facets Dialog] What day would you like to hear more information about the event?"), RetryPrompt = MessageFactory.Text("Please tell me which day you would like to hear more information?") }, ct ).ConfigureAwait(false)); }, async(stepContext, ct) => { var userAnswer = ((FoundChoice)stepContext.Result).Value; this.selectedDay = userAnswer; await stepContext.Context.SendActivityAsync("what Genres would you like to see on" + userAnswer + "?"); List <string> _dayChoices = new List <string>() { }; string searchStr = "day:" + userAnswer; if (userAnswer == "Any") { searchStr = null; this.selectedDay = null; } var facets = SearchService.FindFacets("genre", searchStr); facets.Values.ToList().ForEach(i => i.ToList().ForEach(j => _dayChoices.Add(j.Value.ToString()))); //_dayChoices.AddRange(facets.Select(_ => _.Key)); return(await stepContext.PromptAsync( "navigatePrompt", new PromptOptions { Choices = ChoiceFactory.ToChoices(_dayChoices), Prompt = MessageFactory.Text("[Azure Search Facets Dialog] Here are all the genres for " + userAnswer + "?"), RetryPrompt = MessageFactory.Text("Please tell me which genre you would like to hear information?") }, ct ).ConfigureAwait(false)); }, async(stepContext, ct) => { var userAnswer = ((FoundChoice)stepContext.Result).Value; await stepContext.Context.SendActivityAsync("Based on what you've told me, here are the results you're looking for!"); var perf = SearchService.FindPerformances(null, userAnswer, this.selectedDay); List <HeroCard> cards = new List <HeroCard>(); foreach (BO.Performance p in perf) { cards.Add(HeroCardService.GetHeroCard( p.BandName, p.Description, null, imageBaseURI, new List <string>() { p.Image }, null, null )); } var reply = CarouselCardService.GenerateCarouselCard( stepContext.Context, cards.Select(_ => _.ToAttachment()).ToList <Attachment>()); await stepContext.Context.SendActivityAsync(reply); return(await stepContext.NextAsync().ConfigureAwait(false)); } } ) ); }
public AzureSearchDialog(string dialogId, IStatePropertyAccessor <SelectedLanguageState> selectedLanguageStatePropertyAccessor) : base(dialogId) { _selectedLanguageStatePropertyAccessor = selectedLanguageStatePropertyAccessor ?? throw new ArgumentNullException(nameof(selectedLanguageStatePropertyAccessor)); const string imageBaseURI = @"https://andysa.blob.core.windows.net/search/OSL%202019/"; // ID of the child dialog that should be started anytime the component is started. this.InitialDialogId = dialogId; this.AddDialog(new TextPrompt("textPrompt")); // Define the conversation flow using the waterfall model. this.AddDialog( new WaterfallDialog(dialogId, new WaterfallStep[] { async(stepContext, ct) => { return(await stepContext.PromptAsync( "textPrompt", new PromptOptions { Prompt = MessageFactory.Text("[Azure Search Dialog] What band would you like to search for?"), }, ct ).ConfigureAwait(false)); }, async(stepContext, ct) => { var userAnswer = (string)stepContext.Result; await stepContext.Context.SendActivityAsync("Here is the show you're looking for!"); var perf = SearchService.FindPerformances(userAnswer, null, null); List <HeroCard> cards = new List <HeroCard>(); foreach (BO.Performance p in perf) { cards.Add(HeroCardService.GetHeroCard( p.BandName, p.Description, null, imageBaseURI, new List <string>() { p.Image }, null, null )); } var reply = CarouselCardService.GenerateCarouselCard( stepContext.Context, cards.Select(_ => _.ToAttachment()).ToList <Attachment>()); await stepContext.Context.SendActivityAsync(reply); return(await stepContext.NextAsync().ConfigureAwait(false)); } } ) ); }