コード例 #1
0
        public static ReservationForm ReadFromWit(WitResult witResult)
        {
            var form = new ReservationForm();

            if (witResult.TryFindEntity("restaurantname", out var restaurantNameEntity))
            {
                form.RestaurantName = restaurantNameEntity.Value;
            }

            if (witResult.TryFindEntities("number", out var countEntities))
            {
                var countEntity = countEntities.Skip(1).FirstOrDefault();
                if (countEntity != null)
                {
                    form.PeopleCount = int.Parse(countEntity.Value);
                }
            }

            if (witResult.TryFindEntity(WitBuiltinEntities.DateTime, out var dateTimeEntity) && DateTimeParser.TryParse(dateTimeEntity, out var range))
            {
                form.ReservationDate = new DateTimeA(range.StartDate.DateTime);
            }

            return(form);
        }
コード例 #2
0
        public static bool TryFindEntity(this WitResult result, string entityName, out WitEntity witEntity)
        {
            var entity = result?.Entities?.FirstOrDefault(e => e.Key == entityName);

            witEntity = entity?.Value?.FirstOrDefault();
            return(witEntity != null);
        }
コード例 #3
0
        public static bool TryFindEntities(this WitResult result, string entityName, out IEnumerable <WitEntity> witEntities)
        {
            var entity = result?.Entities?.FirstOrDefault(e => e.Key == entityName);

            witEntities = entity?.Value;
            return(witEntities != null);
        }
コード例 #4
0
        public static OrderForm ReadFromWit(WitResult witResult)
        {
            var form = new OrderForm();

            if (witResult.TryFindEntity("food", out var foodEntity))
            {
                form.Item = foodEntity.Value;
            }

            if (witResult.TryFindEntity("number", out var itemCount))
            {
                form.Count = int.Parse(itemCount.Value);
            }
            else
            {
                form.Count = 1;
            }

            if (witResult.TryFindEntity(WitBuiltinEntities.DateTime, out var dateTimeEntity) && DateTimeParser.TryParse(dateTimeEntity, out var range))
            {
                form.DeliveryDate = range.StartDate.DateTime;
            }

            return(form);
        }
コード例 #5
0
        public async Task None(IDialogContext context, WitResult result)
        {
            var telemetryService = Conversation.Container.Resolve <ITelemetryService>();
            var confidence       = result.TryFindEntity("intent", out var intentEntity) ? intentEntity.Confidence : -1.0;

            telemetryService.UnrecognizedIntent(context.Activity.ChannelId, context.Activity.From.Id, context.Activity.AsMessageActivity().Text, confidence);

            await context.PostAsync("Je n'ai pas compris ce que vous avez dit.");
        }
コード例 #6
0
        public async Task GetForecast(IDialogContext context, WitResult result)
        {
            //adding location to context
            this.WitContext["location"] = result.Entities["location"][0].Value;

            //yahoo weather API
            var temp = await GetWeather(this.WitContext["location"]);

            //adding temp to context
            this.WitContext["forecast"] = temp;
        }
コード例 #7
0
        private void ReservationAskedTelemetry(IDialogContext context, WitResult result, ReservationForm form)
        {
            var telemetryService = Conversation.Container.Resolve <ITelemetryService>();

            var confidence = result.TryFindEntity("intent", out var intentEntity) ? intentEntity.Confidence : -1;

            telemetryService.ReservationAsked(context.Activity.ChannelId,
                                              context.Activity.From.Id,
                                              context.Activity.AsMessageActivity().Text,
                                              confidence,
                                              form.PeopleCount.Value);
        }
コード例 #8
0
        private void OrderAskedTelemetry(IDialogContext context, WitResult result, OrderForm form)
        {
            var telemetryService = Conversation.Container.Resolve <ITelemetryService>();

            var confidence = result.TryFindEntity("intent", out var intentEntity) ? intentEntity.Confidence : -1.0;

            telemetryService.OrderAsked(context.Activity.ChannelId,
                                        context.Activity.From.Id,
                                        context.Activity.AsMessageActivity().Text,
                                        confidence,
                                        form.Item,
                                        form.DeliveryDate.Value);
        }
コード例 #9
0
        public async Task Reserver(IDialogContext context, WitResult result)
        {
            var form = ReservationForm.ReadFromWit(result);

            if (string.IsNullOrWhiteSpace(form.RestaurantName) || !form.PeopleCount.HasValue || !form.ReservationDate.HasValue)
            {
                await context.PostAsync("Des informations sont manquantes");

                return;
            }

            await context.PostAsync($"Je vous ai réservé une table pour {form.PeopleCount.Value} chez {form.RestaurantName} à {form.ReservationDate.Value.ToString("HH\\hmm")} le {form.ReservationDate.Value.ToString("dd/MM/yyyy")}");
        }
コード例 #10
0
        public async Task Reserver(IDialogContext context, WitResult result)
        {
            var form = ReservationForm.ReadFromWit(result);

            if (string.IsNullOrWhiteSpace(form.RestaurantName) || form.PeopleCount == 0 || form.ReservationDate == null)
            {
                var reservationForm = new FormDialog <ReservationForm>(form, ReservationForm.BuildForm, FormOptions.PromptInStart);
                context.Call(reservationForm, ResumeAfterReservationFormCompleted);

                return;
            }

            await ResumeReservation(context, form);
        }
コード例 #11
0
        public async Task Commander(IDialogContext context, WitResult result)
        {
            var form = OrderForm.ReadFromWit(result);

            if (string.IsNullOrWhiteSpace(form.Item) || form.Count < 1 || form.DeliveryDate == null)
            {
                var setLeavesForm = new FormDialog <OrderForm>(form, OrderForm.BuildForm, FormOptions.PromptInStart);
                context.Call(setLeavesForm, ResumeAfterOrderFormCompleted);

                return;
            }

            await ResumeOrder(context, form);
        }
コード例 #12
0
        public async Task Commander(IDialogContext context, WitResult result)
        {
            var form = OrderForm.ReadFromWit(result);

            if (string.IsNullOrWhiteSpace(form.Item) || form.Count < 1 || !form.DeliveryDate.HasValue)
            {
                await context.PostAsync("Des informations sont manquantes");

                return;
            }

            await context.PostAsync($"Vous avez commandé {form.Count}x {form.Item}");

            await context.PostAsync($"Vous serez livré à partir de {form.DeliveryDate.Value.ToString("HH\\hmm")} le {form.DeliveryDate.Value.ToString("dd/MM/yyyy")}");
        }
コード例 #13
0
        public static ReservationForm ReadFromWit(WitResult witResult)
        {
            var form = new ReservationForm();

            if (witResult.TryFindEntity("restaurantname", out var restaurantNameEntity))
            {
                form.RestaurantName = restaurantNameEntity.Value;
            }

            if (witResult.TryFindEntity("people_count", out var countEntity))
            {
                form.PeopleCount = int.Parse(countEntity.Value);
            }

            if (witResult.TryFindEntity(WitBuiltinEntities.DateTime, out var dateTimeEntity) && DateTimeParser.TryParse(dateTimeEntity, out var range))
            {
                form.ReservationDate = range.StartDate.DateTime;
            }

            return(form);
        }
コード例 #14
0
 public async Task ActionOne(IDialogContext context, WitResult witResult)
 {
     await context.PostAsync(witResult.Action);
 }
コード例 #15
0
 public async Task None(IDialogContext context, WitResult result)
 {
     await context.PostAsync("Je n'ai pas compris ce que vous avez dit.");
 }
コード例 #16
0
ファイル: WitDialog.cs プロジェクト: xvare/BotBuilder-Wit.ai
        protected virtual async Task DispatchToIntentHandler(IDialogContext context, IAwaitable <IMessageActivity> item, WitResult result)
        {
            if (_handlerByIntent == null)
            {
                _handlerByIntent = new Dictionary <string, IntentActivityHandler>(GetHandlersByIntent());
            }

            var intent = result.Entities.FirstOrDefault(e => e.Key == "intent").Value?
                         .OrderByDescending(i => i.Confidence)
                         .Select(i => i.Value)
                         .FirstOrDefault();

            if (string.IsNullOrEmpty(result.Text) || string.IsNullOrEmpty(intent) || !_handlerByIntent.TryGetValue(intent, out IntentActivityHandler handler))
            {
                handler = _handlerByIntent[string.Empty];
            }

            if (handler != null)
            {
                await handler(context, item, result);
            }
            else
            {
                throw new IntentHandlerNotFoundException("No default intent handler found.");
            }
        }
コード例 #17
0
ファイル: WitDialog.cs プロジェクト: sjkp/BotBuilder-Wit.ai
        protected virtual async Task DispatchToActionHandler(IDialogContext context, IAwaitable <IMessageActivity> item, WitResult result)
        {
            if (this.handlerByAction == null)
            {
                this.handlerByAction = new Dictionary <string, ActionActivityHandler>(GetHandlersByAction());
            }

            ActionActivityHandler handler = null;

            if (string.IsNullOrEmpty(result.Action) || !this.handlerByAction.TryGetValue(result.Action, out handler))
            {
                handler = this.handlerByAction[string.Empty];
            }

            if (handler != null)
            {
                await handler(context, item, result);
            }
            else
            {
                throw new ActionHandlerNotFoundException("No default action handler found.");
            }
        }
コード例 #18
0
ファイル: WitDialog.cs プロジェクト: sjkp/BotBuilder-Wit.ai
 /// <summary>
 /// This method gets executed if a Wit.ai error occurs
 /// </summary>
 /// <param name="context"></param>
 /// <param name="item"></param>
 /// <param name="result"></param>
 /// <returns>Returns a bool whether Wit.ai should be queried again or not</returns>
 protected virtual void WitErrorHandler(IDialogContext context, IAwaitable <IMessageActivity> item, WitResult result)
 {
     throw new WitErrorException("Wit returned an error action");
 }
コード例 #19
0
 public async Task ActionTwo(IDialogContext context, WitResult witResult)
 {
     await context.PostAsync("ActionTwo");
 }
コード例 #20
0
 public void HasAttributeButDoesNotMatchReturnType(IDialogContext context, WitResult luisResult)
 {
     throw new NotImplementedException();
 }