/// <summary> /// Retrieve Normalised entity value. /// </summary> /// <param name="context">Turn Context.</param> /// <returns>Entities mapped to data structure.</returns> private async Task <Dictionary <string, string> > GetNormalizedEntityValue(ITurnContext context) { var state = await Accessor.GetAsync(context); var recognizerResult = state.LuisResult; var normalizedValue = new Dictionary <string, string>(); // Try to get the Cuisine var normalizedEntityValue = LuisEntityHelper.TryGetNormalizedValueFromListEntity(recognizerResult?.Entities?[LuisEntities.Cuisine]); if (normalizedEntityValue != null) { normalizedValue.Add(LuisEntities.Cuisine, normalizedEntityValue); } else { // See if the user provided an ordinal (i.e. the first one, the second one, etc.) normalizedEntityValue = LuisEntityHelper.TryGetValueFromEntity(recognizerResult?.Entities?[LuisEntities.BuiltInOrdinal]); if (normalizedEntityValue != null) { normalizedValue.Add(LuisEntities.BuiltInOrdinal, normalizedEntityValue); } else { normalizedEntityValue = LuisEntityHelper.TryGetValueFromEntity(recognizerResult?.Entities?[LuisEntities.BuiltInNumber]); if (normalizedEntityValue != null) { normalizedValue.Add(LuisEntities.BuiltInNumber, normalizedEntityValue); } } } return(normalizedValue); }
private async Task <bool> ValidateAttendeeCount(PromptValidatorContext <string> prompt, CancellationToken cancellationToken) { // Validate var state = await Accessor.GetAsync(prompt.Context); var reservation = state.Booking; var normalizedEntityValue = new Dictionary <string, string>(); if (!string.IsNullOrEmpty(prompt.Context.Activity.AsMessageActivity().Text)) { normalizedEntityValue = await GetNormalizedEntityValue(prompt.Context); } if (normalizedEntityValue.ContainsKey(LuisEntities.BuiltInOrdinal)) { LuisEntityHelper.TryGetValueFromEntity(state.LuisResult?.Entities?[LuisEntities.BuiltInOrdinal]); reservation.AttendeeCount = int.Parse(normalizedEntityValue[LuisEntities.BuiltInOrdinal]).ToString(); } else if (normalizedEntityValue.ContainsKey(LuisEntities.BuiltInNumber)) { reservation.AttendeeCount = int.Parse(normalizedEntityValue[LuisEntities.BuiltInNumber]).ToString(); } else { return(false); } return(true); }
private async Task <bool> ValidateReservationDate(PromptValidatorContext <string> prompt, CancellationToken cancellationToken) { var state = await Accessor.GetAsync(prompt.Context); var reservation = state.Booking; var luisDataTimeEntity = state.LuisResult?.Entities[LuisEntities.BuiltInDateTime]; var dateTimeEntity = LuisEntityHelper.TryGetDateTimeFromEntity(luisDataTimeEntity, true); if (dateTimeEntity.HasValue) { reservation.Date = dateTimeEntity.Value; reservation.Time = dateTimeEntity.Value; await RenderSelectedDateTimeMessage(prompt.Context, reservation); } else { dateTimeEntity = LuisEntityHelper.TryGetDateFromEntity(luisDataTimeEntity, true); if (dateTimeEntity.HasValue) { reservation.Date = dateTimeEntity.Value; } } if (reservation.Date == null) { return(false); } return(true); }
/// <summary> /// Initializes the reservation instance with values found in the LUIS entities. /// </summary> private void UpdateReservationInfoFromEntities(ReservationBooking reservation, RecognizerResult recognizerResult) { if (recognizerResult == null) { return; } foreach (var entity in recognizerResult.Entities) { switch (entity.Key) { case LuisEntities.Cuisine: reservation.Category = LuisEntityHelper.TryGetNormalizedValueFromListEntity(entity.Value); break; case LuisEntities.City: reservation.Location = LuisEntityHelper.TryGetValueFromEntity(entity.Value); break; case LuisEntities.BuiltInDateTime: var dateTimeEntity = LuisEntityHelper.TryGetDateTimeFromEntity(entity.Value, true); if (dateTimeEntity != null) { reservation.Date = dateTimeEntity.Value; reservation.Time = dateTimeEntity.Value; } else { var dateEntity = LuisEntityHelper.TryGetDateFromEntity(entity.Value, true); if (dateEntity.HasValue) { reservation.Date = dateEntity.Value; } else { var timeEntity = LuisEntityHelper.TryGetTimeFromEntity(entity.Value, true); if (timeEntity.HasValue) { reservation.Time = timeEntity.Value; } } } break; } } }