Ich habe meine NuGet-Pakete aktualisiert, um die Version 1.2.0.1 des Microsoft Bot Framework zu verwenden.LuisDialog funktioniert nicht mehr nach Update auf 1.2.0.1
Einige brechende Änderungen waren reported here, und ich habe es geschafft, die Build-Fehler zu beheben. Aber die Anwendung funktioniert nicht mehr ..
Ich habe zwei Probleme:
- Der Code löst eine InvalidIntentHandlerException, wenn ich eine Nachricht, die eine Äußerung an den Controller senden.
In meiner 'intent'-Methode (dekoriert mit dem LuisIntent-Attribut) war es möglich, den Wert der Entitäten zu lesen. Wie so:
[Serializable] [LuisModel("xxxxx", "xxxx")] public class BookFlightDialog : LuisDialog<BookFlightForm> { private readonly BuildFormDelegate<BookFlightForm> BuildForm; internal BookFlightDialog(BuildFormDelegate<BookFlightForm> buildForm) { BuildForm = buildForm; } [LuisIntent("")] [LuisIntent("None")] public async Task None(IDialogContext context, LuisResult result) { await context.PostAsync("I'm sorry. I didn't understand you."); context.Wait(MessageReceived); } [LuisIntent("BookAFlight")] public async Task BookAFlight(IDialogContext context, LuisResult result) { var form = new BookFlightForm(); // var entities = new List<EntityRecommendation>(result.Entities); var locations = result.Entities.Where(e => e.Type.Equals("builtin.geography") || e.Type.Equals("builtin.geography.city")).OrderBy(e => e.StartIndex); if (locations.Any()) { form.LocationFrom = locations.First().Name; if (locations.Count() == 2) { form.LocationTo = locations.Skip(1).First().Name; } } var date = result.Entities.FirstOrDefault(e => e.Type == "builtin.datetime.date"); if (date != null) form.DepartureDate = DateTime.Parse(date.Name); var formDialog = new FormDialog<BookFlightForm>(form, BuildForm, FormOptions.PromptInStart); context.Call(formDialog, OnComplete); } private async Task OnComplete(IDialogContext context, IAwaitable<BookFlightForm> result) { BookFlightForm booking; try { booking = await result; } catch (OperationCanceledException) { await context.PostAsync("Ok, see you later."); return; } if (booking != null) { var service = new SkyScannerService(); var possibilities = await service.Search(booking); await context.PostAsync(possibilities); } else { await context.PostAsync("Form returned empty response!"); } context.Wait(MessageReceived); } }
Wie behebe ich die Ausnahme und wie lese ich den Wert der Unternehmen?
Danke noch einmal!
Können Sie den Code teilen, wenn Ihr LuisDialog? Die InvalidIntentHandlerException wird nur ausgelöst, wenn der Builder keine Absicht in der Klasse finden kann. In Bezug auf das Lesen der Entitäten bin ich nicht sicher, was das Problem ist, das Sie dort haben. result.Entities ist noch verfügbar. –
@ejadib: Ich habe meinen Post mit dem LuisDialog aktualisiert. – Aldentev
Verwenden Sie den Bot Framework Emulator? Ich hatte auch ein Problem, dann habe ich den Emulator aktualisiert und alles hat funktioniert. – freethinker6