コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        /// <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;
                }
            }
        }