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); }
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); }
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); }
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); }
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."); }
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; }
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); }
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); }
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")}"); }
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); }
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); }
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")}"); }
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); }
public async Task ActionOne(IDialogContext context, WitResult witResult) { await context.PostAsync(witResult.Action); }
public async Task None(IDialogContext context, WitResult result) { await context.PostAsync("Je n'ai pas compris ce que vous avez dit."); }
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."); } }
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."); } }
/// <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"); }
public async Task ActionTwo(IDialogContext context, WitResult witResult) { await context.PostAsync("ActionTwo"); }
public void HasAttributeButDoesNotMatchReturnType(IDialogContext context, WitResult luisResult) { throw new NotImplementedException(); }