Esempio n. 1
0
        /// <summary>
        /// Validate the Food Type when we have prmpted the user.
        /// </summary>
        /// <param name="prompt">Prompt Validator Context.</param>
        /// <param name="cancellationToken">Cancellation Token.</param>
        /// <returns>Dialog Turn Result.</returns>
        private async Task <bool> ValidateFoodType(PromptValidatorContext <string> prompt, CancellationToken cancellationToken)
        {
            var state = await Accessor.GetAsync(prompt.Context);

            var reservation = state.Booking;
            var foodTypes   = state.Cuisine;

            var cuisine = AdaptiveCardListHelper.ParseSelection(prompt.Context, state, foodTypes, r => r.TypeName, r => r?.TypeName);

            if (string.IsNullOrEmpty(cuisine))
            {
                var normalizedEntityValue = await GetNormalizedEntityValue(prompt.Context);

                if (!normalizedEntityValue.ContainsKey(LuisEntities.Cuisine) || foodTypes.All(ft => ft.TypeName.ToLower() != normalizedEntityValue[LuisEntities.Cuisine]))
                {
                    return(false);
                }

                cuisine = normalizedEntityValue[LuisEntities.Cuisine];
            }

            prompt.Recognized.Succeeded = true;
            var reply = prompt.Context.Activity.CreateReply(RestaurantBookingSharedResponses.BookRestaurantFoodSelectionEcho, ResponseBuilder, new StringDictionary {
                { "FoodType", cuisine }
            });
            await prompt.Context.SendActivityAsync(reply, cancellationToken);

            reservation.Category = cuisine;
            return(true);
        }
Esempio n. 2
0
        private async Task <bool> ValidateRestaurantSelection(PromptValidatorContext <string> prompt, CancellationToken cancellationToken)
        {
            var state = await Accessor.GetAsync(prompt.Context);

            var reservation = state.Booking;
            var restaurants = state.Restaurants;

            var restaurant = AdaptiveCardListHelper.ParseSelection(prompt.Context, state, restaurants, r => r.Name, r => r);

            if (restaurant == null)
            {
                return(false);
            }

            reservation.BookingPlace = restaurant;

            var reply = prompt.Context.Activity.CreateReply(RestaurantBookingSharedResponses.BookRestaurantBookingPlaceSelectionEcho, ResponseBuilder, new StringDictionary {
                { "BookingPlaceName", restaurant.Name }
            });
            await prompt.Context.SendActivityAsync(reply, cancellationToken);

            return(true);
        }