VAN TOEPASSING OP: SDK v4
Onderbrekingen verwerken is een belangrijk onderdeel van een robuuste bot. Gebruikers volgen niet altijd uw gedefinieerde gespreksstroom, stap voor stap. Ze kunnen proberen een vraag in het midden van het proces te stellen of deze te annuleren in plaats van het te voltooien. In dit artikel worden enkele veelvoorkomende manieren beschreven om onderbrekingen van gebruikers in uw bot af te handelen.
Notitie
Als u agents wilt bouwen met uw keuze uit AI-services, indeling en kennis, kunt u overwegen om de Microsoft 365 Agents SDK te gebruiken. De Agents SDK biedt ondersteuning voor C#, JavaScript of Python. Meer informatie over de Agents SDK vindt u op aka.ms/agents. Als u op zoek bent naar een SaaS-agentplatform, kunt u Microsoft Copilot Studio overwegen. Als u een bestaande bot hebt gebouwd met de Bot Framework SDK, kunt u uw bot bijwerken naar de Agents SDK. U kunt de belangrijkste wijzigingen en updates bekijken bij Bot Framework SDK naar Agents SDK migratiegids. Ondersteuningstickets voor de Bot Framework SDK worden vanaf 31 december 2025 niet meer onderhouden.
Vereisten
Het kernbotvoorbeeld maakt gebruik van Language Understanding (LUIS) om gebruikersintenties te identificeren; Het identificeren van gebruikersintentie is echter niet de focus van dit artikel.
Voor informatie over het identificeren van gebruikersintenties, zie Natuurlijke taalverwerking en Natuurlijke taalverwerking toevoegen aan uw bot.
Notitie
Language Understanding (LUIS) wordt op 1 oktober 2025 buiten gebruik gesteld.
Vanaf 1 april 2023 kunt u geen nieuwe LUIS-resources maken.
Er is nu een nieuwere versie van taalkennis beschikbaar als onderdeel van Azure AI Language.
Conversational Language Understanding (CLU), een functie van Azure AI Language, is de bijgewerkte versie van LUIS.
Zie Natuurlijke taalkennis voor meer informatie over ondersteuning voor taalkennis in de Bot Framework SDK.
Over dit voorbeeld
Het voorbeeld dat in dit artikel wordt gebruikt, modelleert een vluchtboekingsbot die dialoogvensters gebruikt om vluchtinformatie van de gebruiker op te halen. Tijdens het gesprek met de bot kan de gebruiker op elk gewenst moment hulp verlenen of opdrachten annuleren om een onderbreking te veroorzaken. Er zijn twee soorten onderbrekingen afgehandeld:
-
Turnniveau: Vermijd verwerking op het tourniveau, maar laat de dialoog op de stack staan met de verstrekte informatie. Ga in de volgende beurt verder vanaf waar het gesprek was gebleven.
-
Dialoogvensterniveau: De verwerking volledig annuleren, zodat de bot opnieuw kan worden gestart.
De onderbrekingslogica definiëren en implementeren
Definieer en implementeer eerst de help en annuleer onderbrekingen.
Als u dialoogvensters wilt gebruiken, installeert u het NuGet-pakket Microsoft.Bot.Builder.Dialogs .
Dialoogvensters\CancelAndHelpDialog.cs
Implementeer de CancelAndHelpDialog
klasse om onderbrekingen van gebruikers af te handelen. De geannuleerde dialoogvensters BookingDialog
en DateResolverDialog
zijn afgeleid van deze klasse.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
In de CancelAndHelpDialog
klasse roept de OnContinueDialogAsync
methode de InterruptAsync
methode aan om te controleren of de gebruiker de normale stroom heeft onderbroken. Als de stroom wordt onderbroken, worden basisklassemethoden aangeroepen; anders wordt de retourwaarde van de InterruptAsync
geretourneerd.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Als de gebruiker 'help' typt, verzendt de InterruptAsync
methode een bericht en roept DialogTurnResult (DialogTurnStatus.Waiting)
deze vervolgens aan om aan te geven dat het dialoogvenster bovenaan wacht op een antwoord van de gebruiker. Op deze manier wordt de gespreksstroom alleen onderbroken voor een beurt en gaat de volgende beurt verder vanaf waar het gesprek is gebleven.
Als de gebruiker 'annuleren' typt, roept CancelAllDialogsAsync
de interne dialoogcontext aan, waardoor de dialoogstapel wordt gewist en de dialoog afsluit met een geannuleerde status en zonder resultaatwaarde. Op de MainDialog
(later weergegeven) ziet u dat het boekingsdialoogvenster is beëindigd en null is geretourneerd, vergelijkbaar met wanneer de gebruiker ervoor kiest om de reservering niet te bevestigen.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Als u dialoogvensters wilt gebruiken, installeert u het npm-pakket botbuilder-dialogs .
dialoogvensters/cancelAndHelpDialog.js
Implementeer de CancelAndHelpDialog
klasse om onderbrekingen van gebruikers af te handelen. De geannuleerde dialoogvensters BookingDialog
en DateResolverDialog
deze klasse uitbreiden.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
In de CancelAndHelpDialog
klasse roept de onContinueDialog
methode de interrupt
methode aan om te controleren of de gebruiker de normale stroom heeft onderbroken. Als de stroom wordt onderbroken, worden basisklassemethoden aangeroepen; anders wordt de retourwaarde van de interrupt
geretourneerd.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Als de gebruiker 'help' typt, verzendt de interrupt
methode een bericht en retourneert vervolgens een { status: DialogTurnStatus.waiting }
object om aan te geven dat het dialoogvenster bovenaan wacht op een antwoord van de gebruiker. Op deze manier wordt de gespreksstroom alleen onderbroken voor een beurt en gaat de volgende beurt verder vanaf waar het gesprek is gebleven.
Als de gebruiker 'annuleren' typt, roept cancelAllDialogs
de interne dialoogcontext aan, waardoor de dialoogstapel wordt gewist en de dialoog afsluit met een geannuleerde status en zonder resultaatwaarde. Op de MainDialog
(later weergegeven) ziet u dat het boekingsdialoogvenster is beëindigd en null is geretourneerd, vergelijkbaar met wanneer de gebruiker ervoor kiest om de reservering niet te bevestigen.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
CancelAndHelpDialog.java
Implementeer de CancelAndHelpDialog
klasse om onderbrekingen van gebruikers af te handelen. De geannuleerde dialoogvensters BookingDialog
en DateResolverDialog
zijn afgeleid van deze klasse.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
In de CancelAndHelpDialog
klasse roept de onContinueDialog
methode de interrupt
methode aan om te controleren of de gebruiker de normale stroom heeft onderbroken. Als de stroom wordt onderbroken, worden basisklassemethoden aangeroepen; anders wordt de retourwaarde van de interrupt
geretourneerd.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Als de gebruiker 'help' typt, verzendt de interrupt
methode een bericht en roept DialogTurnResult(DialogTurnStatus.WAITING)
deze vervolgens aan om aan te geven dat het dialoogvenster bovenaan wacht op een antwoord van de gebruiker. Op deze manier wordt de gespreksstroom alleen onderbroken voor een beurt en gaat de volgende beurt verder vanaf waar het gesprek is gebleven.
Als de gebruiker 'annuleren' typt, roept cancelAllDialogs
de interne dialoogcontext aan, waardoor de dialoogstapel wordt gewist en de dialoog afsluit met een geannuleerde status en zonder resultaatwaarde. Op de MainDialog
(later weergegeven) ziet u dat het boekingsdialoogvenster is beëindigd en null is geretourneerd, vergelijkbaar met wanneer de gebruiker ervoor kiest om de reservering niet te bevestigen.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Als u dialoogvensters wilt gebruiken, installeert u het botbuilder-dialogs
pakket en zorgt u ervoor dat het voorbeeldbestand requirements.txt
de juiste verwijzing bevat, zoals botbuilder-dialogs>=4.5.0
.
Zie het README-bestand van de voorbeeldenopslagplaats voor meer informatie over het installeren van de pakketten.
Notitie
Door pip install botbuilder-dialogs
uit te voeren, worden ook botbuilder-core
, botbuilder-connector
, en botbuilder-schema
geïnstalleerd.
dialoogvensters/cancel-and-help-dialog.py
Implementeer de CancelAndHelpDialog
klasse om onderbrekingen van gebruikers af te handelen. De geannuleerde dialoogvensters BookingDialog
en DateResolverDialog
zijn afgeleid van deze klasse.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
In de CancelAndHelpDialog
klasse roept de on_continue_dialog
methode de interrupt
methode aan om te controleren of de gebruiker de normale stroom heeft onderbroken. Als de stroom wordt onderbroken, worden basisklassemethoden aangeroepen; anders wordt de retourwaarde van de interrupt
geretourneerd.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Als de gebruiker 'help' of '?' typt, verzendt de interrupt
methode een bericht en roept DialogTurnResult(DialogTurnStatus.Waiting)
deze vervolgens aan om aan te geven dat het dialoogvenster boven aan de stack wacht op een antwoord van de gebruiker. Op deze manier wordt de gespreksstroom alleen onderbroken voor een beurt en gaat de volgende beurt verder vanaf waar het gesprek is gebleven.
Als de gebruiker 'annuleren' of 'afsluiten' typt, roept cancel_all_dialogs()
de binnenste dialoogcontext aan, waardoor de dialoogstack wordt gewist en het wordt afgesloten met een geannuleerde status en zonder resultaatwaarde. Op de MainDialog
, die later wordt weergegeven, lijkt het erop dat het boekingsdialoogvenster is beëindigd en null heeft geretourneerd, net zoals wanneer de gebruiker ervoor kiest om de reservering niet te bevestigen.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Controleren op onderbrekingen per beurt
Zodra de interruptafhandelingsklasse is geïmplementeerd, controleert u wat er gebeurt wanneer deze bot een nieuw bericht van de gebruiker ontvangt.
Dialogen\MainDialog.cs
Wanneer de nieuwe berichtactiviteit binnenkomt, wordt de MainDialog
bot uitgevoerd. De MainDialog
vraagt de gebruiker waarmee het kan helpen. Vervolgens wordt de BookingDialog
MainDialog.ActStepAsync
methode gestart, met een aanroep naar BeginDialogAsync
zoals hieronder wordt weergegeven.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Vervolgens wordt in de FinalStepAsync
methode van de MainDialog
klas het boekingsdialoogvenster beëindigd en wordt de reservering beschouwd als voltooid of geannuleerd.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
De code wordt BookingDialog
hier niet weergegeven, omdat deze niet rechtstreeks is gerelateerd aan de verwerking van onderbrekingen. Het wordt gebruikt om gebruikers te vragen om reserveringsgegevens. U vindt die code in Dialogs\BookingDialogs.cs.
dialoogvensters/mainDialog.js
Wanneer de nieuwe berichtactiviteit binnenkomt, wordt de MainDialog
bot uitgevoerd. De MainDialog
vraagt de gebruiker waarmee het kan helpen. Vervolgens wordt de bookingDialog
MainDialog.actStep
methode gestart, met een aanroep naar beginDialog
zoals hieronder wordt weergegeven.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Vervolgens wordt in de finalStep
methode van de MainDialog
klas het boekingsdialoogvenster beëindigd en wordt de reservering beschouwd als voltooid of geannuleerd.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
De code wordt BookingDialog
hier niet weergegeven, omdat deze niet rechtstreeks is gerelateerd aan de verwerking van onderbrekingen. Het wordt gebruikt om gebruikers te vragen om reserveringsgegevens. U vindt die code in dialoogvensters/bookingDialogs.js.
MainDialog.java
Wanneer de nieuwe berichtactiviteit binnenkomt, wordt de MainDialog
bot uitgevoerd. De MainDialog
vraagt de gebruiker waarmee het kan helpen. En dan start het BookingDialog
in de MainDialog.actStep
-methode, met een aanroep naar beginDialog
zoals hieronder wordt weergegeven.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Vervolgens wordt in de finalStep
methode van de MainDialog
klas het boekingsdialoogvenster beëindigd en wordt de reservering beschouwd als voltooid of geannuleerd.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
De code wordt BookingDialog
hier niet weergegeven, omdat deze niet rechtstreeks is gerelateerd aan de verwerking van onderbrekingen. Het wordt gebruikt om gebruikers te vragen om reserveringsgegevens. U vindt die code in BookingDialogs.java.
dialoogvensters/main_dialog.py
Wanneer de nieuwe berichtactiviteit binnenkomt, wordt de MainDialog
bot uitgevoerd. De MainDialog
vraagt de gebruiker waarmee het kan helpen. Vervolgens wordt de bookingDialog
act_step
methode gestart, met een aanroep naar begin_dialog
zoals hieronder wordt weergegeven.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Vervolgens wordt in de final_step
methode van de MainDialog
klas het boekingsdialoogvenster beëindigd en wordt de reservering beschouwd als voltooid of geannuleerd.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Onverwachte fouten afhandelen
De foutafhandelaar van de adapter behandelt eventuele uitzonderingen die niet in de bot zijn opgevangen.
AdapterWithErrorHandler.cs
In het voorbeeld ontvangt de handler van OnTurnError
de adapter eventuele uitzonderingen die worden gegenereerd door de beurtlogica van uw bot. Als er een uitzondering optreedt, verwijdert de handler de gespreksstatus voor het huidige gesprek om te voorkomen dat de bot vastloopt in een foutlus die wordt veroorzaakt door een slechte status.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
index.js
In het voorbeeld ontvangt de handler van onTurnError
de adapter eventuele uitzonderingen die worden gegenereerd door de beurtlogica van uw bot. Als er een uitzondering optreedt, verwijdert de handler de gespreksstatus voor het huidige gesprek om te voorkomen dat de bot vastloopt in een foutlus die wordt veroorzaakt door een slechte status.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Door een AdapterWithErrorHandler
exemplaar te registreren bij het Spring-framework in Application.java voor het BotFrameworkHttpAdapter
in dit voorbeeld, ontvangt de handler van de adapter onTurnError
eventuele uitzonderingen die worden gegenereerd door de beurtlogica van uw bot. Als er een uitzondering optreedt, verwijdert de handler de gespreksstatus voor het huidige gesprek om te voorkomen dat de bot vastloopt in een foutlus die wordt veroorzaakt door een slechte status. In de Java SDK wordt AdapterWithErrorHandler
als onderdeel van de SDK geïmplementeerd en is deze opgenomen in het com.microsoft.bot.integration-pakket. Zie de Java SDK-broncode voor meer informatie over de implementatie van deze adapter.
adapter_with_error_handler.py
In het voorbeeld ontvangt de handler van on_error
de adapter eventuele uitzonderingen die worden gegenereerd door de beurtlogica van uw bot. Als er een uitzondering optreedt, verwijdert de handler de gespreksstatus voor het huidige gesprek om te voorkomen dat de bot vastloopt in een foutlus die wordt veroorzaakt door een slechte status.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Services registreren
Startup.cs
Ten slotte, in Startup.cs
, wordt de bot als een tijdelijk object gemaakt, en bij elke beurt wordt er een nieuw exemplaar van de bot aangemaakt.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Ter referentie: hier volgen de klassedefinities die worden gebruikt in de aanroep om de bovenstaande bot te maken.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
index.js
Ten slotte wordt index.js
de bot gemaakt.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Ter referentie: hier volgen de klassedefinities die worden gebruikt in de aanroep om de bovenstaande bot te maken.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Application.java
Ten slotte wordt Application.java
de bot gemaakt.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Ter referentie: hier volgen de klassedefinities die worden gebruikt in de aanroep om de bovenstaande bot te maken.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
ten slotte, in app.py, app.py
wordt de bot gemaakt.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Ter referentie: hier volgen de klassedefinities die worden gebruikt in de aanroep om de bot te maken.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
Waarschuwing
Het lijkt erop dat het voorbeeld dat u zoekt, is verplaatst. Wees gerust dat we aan het oplossen hiervan werken.
De bot testen
- Als u dit nog niet hebt gedaan, installeert u de Bot Framework Emulator.
- Voer het voorbeeld lokaal uit op uw computer.
- Start de emulator, maak verbinding met uw bot en verzend berichten zoals hieronder wordt weergegeven.
Het voorbeeld 24.bot-authentication-msgraph in C#, JavaScript, Python of Java laat zien hoe u een afmeldingsaanvraag kunt verwerken. Er wordt een patroon gebruikt dat vergelijkbaar is met het patroon dat hier wordt weergegeven voor het afhandelen van onderbrekingen.
U moet een standaardantwoord verzenden in plaats van niets te doen en de gebruiker te laten weten wat er aan de hand is. Het standaardantwoord moet de gebruiker vertellen welke opdrachten de bot begrijpt, zodat de gebruiker weer op schema kan komen.
Op elk moment tijdens de beurt geeft de eigenschap 'heeft gereageerd' van de beurtcontext aan of de bot een bericht heeft verzonden naar de gebruiker. Voordat de beurt eindigt, moet uw bot een bericht naar de gebruiker verzenden, zelfs als dit een eenvoudige bevestiging van hun invoer is.