private async Task <DialogTurnResult> SetFavoritesAsync(WaterfallStepContext sc, CancellationToken cancellationToken) { var convState = await ConvAccessor.GetAsync(sc.Context, () => new NewsSkillState(), cancellationToken : cancellationToken); var userState = await UserAccessor.GetAsync(sc.Context, () => new NewsSkillUserState(), cancellationToken : cancellationToken); // if intent is SetFavorites or not set in state yet if ((convState.LuisResult != null && convState.LuisResult.TopIntent().intent == Luis.NewsLuis.Intent.SetFavoriteTopics) || userState.Category == null) { // show card with categories the user can choose var categories = new PromptOptions() { Choices = new List <Choice>(), }; categories.Choices.Add(new Choice("Business")); categories.Choices.Add(new Choice("Entertainment")); categories.Choices.Add(new Choice("Health")); categories.Choices.Add(new Choice("Politics")); categories.Choices.Add(new Choice("World")); categories.Choices.Add(new Choice("Sports")); return(await sc.PromptAsync(nameof(ChoicePrompt), new PromptOptions() { Prompt = TemplateManager.GenerateActivityForLocale(FavoriteTopicsResponses.FavoriteTopicPrompt), Choices = categories.Choices }, cancellationToken)); } return(await sc.NextAsync(userState.Category, cancellationToken)); }
private async Task <DialogTurnResult> FindEvents(WaterfallStepContext sc, CancellationToken cancellationToken) { var userState = await UserAccessor.GetAsync(sc.Context, () => new EventSkillUserState()); var location = userState.Location; List <Event> events = await _eventbriteService.GetEventsAsync(location); List <Card> cards = new List <Card>(); foreach (var item in events) { var eventCardData = new EventCardData() { Title = item.Name.Text, ImageUrl = item?.Logo?.Url ?? " ", StartDate = item.Start.Local.ToString("dddd, MMMM dd, h:mm tt"), Location = GetVenueLocation(item), Price = item.IsFree ? "Free" : "Starts at " + Convert.ToDouble(item.TicketAvailability.MinTicketPrice.MajorValue) .ToString("C", System.Globalization.CultureInfo.GetCultureInfo(item.Locale.Replace("_", "-"))), Url = item.Url }; cards.Add(new Card(GetCardName(sc.Context, "EventCard"), eventCardData)); } await sc.Context.SendActivityAsync(ResponseManager.GetCardResponse(FindEventsResponses.FoundEvents, cards, null)); return(await sc.EndDialogAsync()); }
private async Task <DialogTurnResult> ShowArticles(WaterfallStepContext sc, CancellationToken cancellationToken) { var userState = await UserAccessor.GetAsync(sc.Context, () => new NewsSkillUserState()); var articles = await _client.GetTrendingNews(userState.Market); await _responder.ReplyWith(sc.Context, TrendingArticlesResponses.ShowArticles, articles); return(await sc.EndDialogAsync()); }
private async Task <bool> ValidateLocationPrompt(PromptValidatorContext <string> promptContext, CancellationToken cancellationToken) { var userState = await UserAccessor.GetAsync(promptContext.Context, () => new EventSkillUserState()); if (promptContext.Recognized.Succeeded && !string.IsNullOrWhiteSpace(promptContext.Recognized.Value)) { userState.Location = promptContext.Recognized.Value; return(true); } return(false); }
private async Task <DialogTurnResult> ShowArticles(WaterfallStepContext sc, CancellationToken cancellationToken) { var userState = await UserAccessor.GetAsync(sc.Context, () => new NewsSkillUserState()); userState.Category = (FoundChoice)sc.Result; // show favorite articles var articles = await _client.GetNewsByCategory(userState.Category.Value, userState.Market); await _responder.ReplyWith(sc.Context, FavoriteTopicsResponses.ShowArticles, articles); return(await sc.EndDialogAsync()); }
protected async Task <DialogTurnResult> SetMarketAsync(WaterfallStepContext sc, CancellationToken cancellationToken) { var userState = await UserAccessor.GetAsync(sc.Context, () => new NewsSkillUserState(), cancellationToken : cancellationToken); if (string.IsNullOrWhiteSpace(userState.Market)) { string countryregion = (string)sc.Result; // use AzureMaps API to get country code from country or region input by user userState.Market = await _mapsService.GetCountryCodeAsync(countryregion); } return(await sc.NextAsync(cancellationToken : cancellationToken)); }
private async Task <DialogTurnResult> ShowArticlesAsync(WaterfallStepContext sc, CancellationToken cancellationToken) { var userState = await UserAccessor.GetAsync(sc.Context, () => new NewsSkillUserState(), cancellationToken : cancellationToken); var articles = await _client.GetTrendingNewsAsync(userState.Market); await sc.Context.SendActivityAsync(HeroCardResponses.ShowTrendingCards(sc.Context, TemplateManager, articles), cancellationToken); var state = await ConvAccessor.GetAsync(sc.Context, () => new NewsSkillState(), cancellationToken : cancellationToken); if (state.IsAction) { return(await sc.EndDialogAsync(GenerateNewsActionResult(articles, true), cancellationToken)); } return(await sc.EndDialogAsync(cancellationToken : cancellationToken)); }
private async Task <DialogTurnResult> ShowArticlesAsync(WaterfallStepContext sc, CancellationToken cancellationToken) { var userState = await UserAccessor.GetAsync(sc.Context, () => new NewsSkillUserState(), cancellationToken : cancellationToken); userState.Category = (FoundChoice)sc.Result; // show favorite articles var articles = await _client.GetNewsByCategoryAsync(userState.Category.Value, userState.Market); await sc.Context.SendActivityAsync(HeroCardResponses.ShowFindArticleCards(sc.Context, TemplateManager, articles, true)); var state = await ConvAccessor.GetAsync(sc.Context, () => new NewsSkillState(), cancellationToken : cancellationToken); if (state.IsAction) { return(await sc.EndDialogAsync(GenerateNewsActionResult(articles, true), cancellationToken)); } return(await sc.EndDialogAsync(cancellationToken : cancellationToken)); }
private async Task <DialogTurnResult> ShowArticlesAsync(WaterfallStepContext sc, CancellationToken cancellationToken) { var userState = await UserAccessor.GetAsync(sc.Context, () => new NewsSkillUserState(), cancellationToken : cancellationToken); var query = (string)sc.Result; using (var client = new NewsClient(Settings.BingNewsEndPoint, _newsKey)) { var articles = await client.GetNewsForTopicAsync(query, userState.Market); await sc.Context.SendActivityAsync(HeroCardResponses.ShowFindArticleCards(sc.Context, TemplateManager, articles), cancellationToken); var state = await ConvAccessor.GetAsync(sc.Context, () => new NewsSkillState(), cancellationToken : cancellationToken); if (state.IsAction) { return(await sc.EndDialogAsync(GenerateNewsActionResult(articles, true), cancellationToken)); } return(await sc.EndDialogAsync(cancellationToken : cancellationToken)); } }
protected async Task <DialogTurnResult> GetMarketAsync(WaterfallStepContext sc, CancellationToken cancellationToken) { var userState = await UserAccessor.GetAsync(sc.Context, () => new NewsSkillUserState(), cancellationToken : cancellationToken); var convState = await ConvAccessor.GetAsync(sc.Context, () => new NewsSkillState(), cancellationToken : cancellationToken); // Check if there's already a location if (!string.IsNullOrWhiteSpace(userState.Market)) { return(await sc.NextAsync(userState.Market, cancellationToken)); } else if (!string.IsNullOrWhiteSpace(convState.CurrentCoordinates)) { // make maps service query with location coordinates instead of user input return(await sc.NextAsync(convState.CurrentCoordinates, cancellationToken)); } // Prompt user for location return(await sc.PromptAsync(nameof(TextPrompt), new PromptOptions() { Prompt = TemplateManager.GenerateActivityForLocale(MainStrings.MarketPrompt), RetryPrompt = TemplateManager.GenerateActivityForLocale(MainStrings.MarketRetryPrompt) })); }
private async Task <DialogTurnResult> GetLocation(WaterfallStepContext sc, CancellationToken cancellationToken) { var convState = await StateAccessor.GetAsync(sc.Context, () => new EventSkillState()); var userState = await UserAccessor.GetAsync(sc.Context, () => new EventSkillUserState()); if (string.IsNullOrWhiteSpace(userState.Location)) { if (!string.IsNullOrWhiteSpace(convState.CurrentCoordinates)) { userState.Location = convState.CurrentCoordinates; } else { return(await sc.PromptAsync(DialogIds.LocationPrompt, new PromptOptions() { Prompt = ResponseManager.GetResponse(FindEventsResponses.LocationPrompt), RetryPrompt = ResponseManager.GetResponse(FindEventsResponses.RetryLocationPrompt) })); } } return(await sc.NextAsync()); }