/// <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); }
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); }