示例#1
0
        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));
        }
示例#2
0
        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());
        }
示例#4
0
        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());
        }
示例#6
0
        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));
        }
示例#8
0
        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));
            }
        }
示例#10
0
        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)
            }));
        }
示例#11
0
        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());
        }