Share via


Dialoogvensters voor onderdelen en waterval

VAN TOEPASSING OP: SDK v4

Dialoogvensters zijn beschikbaar in een aantal verschillende typen. In dit artikel worden dialoogvensters voor onderdelen, waterval en prompts beschreven. Zie het artikel over de dialoogvenstersbibliotheek voor informatie over dialoogvensters in het algemeen. Zie de inleiding tot adaptieve dialoogvensters voor meer informatie over adaptieve dialoogvensters.

Een watervaldialoogvenster (of waterval) definieert een reeks stappen, zodat uw bot een gebruiker kan begeleiden via een lineair proces. Deze dialoogvensters zijn ontworpen om te werken binnen de context van een onderdeeldialoogvenster.

Een onderdeeldialoogvenster is een type containerdialoogvenster waarmee dialoogvensters in de set andere dialoogvensters kunnen worden aangeroepen, zoals een dialoogvenster voor het aanroepen van een watervaldialoogvenster of een ander watervaldialoogvenster. Onderdeeldialoogvensters beheren een set onderliggende dialoogvensters, zoals watervaldialoogvensters, prompts, enzovoort. U kunt een onderdeeldialoogvenster ontwerpen om specifieke taken af te handelen en opnieuw te gebruiken, in dezelfde bot of in meerdere bots.

Promptdialoogvensters (prompts) zijn dialoogvensters die zijn ontworpen om de gebruiker te vragen naar specifieke typen informatie, zoals een getal, een datum of een naam, enzovoort. Prompts zijn ontworpen om te werken met watervaldialoogvensters in een onderdeeldialoogvenster.

Dialoogvensters voor onderdelen

Soms wilt u een herbruikbaar dialoogvenster schrijven dat u wilt gebruiken in verschillende scenario's, zoals een adresdialoogvenster waarin de gebruiker wordt gevraagd waarden op te geven voor straat, plaats en postcode.

Het onderdeeldialoogvenster biedt een strategie voor het maken van onafhankelijke dialoogvensters voor het afhandelen van specifieke scenario's, waardoor een grote dialoogvensterset in meer beheerbare onderdelen wordt verdeeld. Elk van deze onderdelen heeft een eigen dialoogvensterset en voorkomt eventuele naamconflicten met de dialoogvensterset die deze bevat. Zie het onderdeeldialoogvenster voor meer informatie.

Watervaldialoogvensters

Een watervaldialoogvenster is een specifieke implementatie van een dialoogvenster dat vaak wordt gebruikt om informatie van de gebruiker te verzamelen of de gebruiker door een reeks taken te leiden. Elke stap van het gesprek wordt geïmplementeerd als een asynchrone functie die een parameter voor watervalstapcontext (step) gebruikt. Bij elke stap vraagt de bot de gebruiker om invoer (of kan een onderliggend dialoogvenster beginnen, maar dat het vaak een prompt is), wacht op een antwoord en wordt het resultaat vervolgens doorgegeven aan de volgende stap. Het resultaat van de eerste functie wordt doorgegeven als een argument in de volgende functie, enzovoort.

In het volgende diagram ziet u een reeks watervalstappen en de stackbewerkingen die plaatsvinden. Details over het gebruik van de dialoogvensterstack vindt u hieronder in de sectie met dialoogvensters .

Weergave van hoe berichten worden toegewezen aan watervalstappen.

Binnen watervalstappen wordt de context van het watervaldialoogvenster opgeslagen in de context van de watervalstap. De stapcontext is vergelijkbaar met de dialoogvenstercontext en biedt toegang tot de huidige turncontext en status. Gebruik het contextobject van de watervalstap om te communiceren met een dialoogvenster dat afkomstig is van een watervalstap.

U kunt een retourwaarde afhandelen vanuit een dialoogvenster binnen een watervalstap in een dialoogvenster of vanuit de handhandler van uw bot, hoewel u in het algemeen alleen de status van het dialoogvenster hoeft te controleren op basis van de beurtlogica van uw bot. Binnen een watervalstap biedt het dialoogvenster de retourwaarde in de resultaateigenschap van de watervalstapcontext.

Contexteigenschappen van watervalstap

De context van de watervalstap bevat de volgende eigenschappen:

  • Opties: bevat invoergegevens voor het dialoogvenster.
  • Waarden: bevat informatie die u aan de context kunt toevoegen en wordt doorgestuurd naar de volgende stappen.
  • Resultaat: bevat het resultaat uit de vorige stap.

Daarnaast gaat de volgende methode (NextAsync in C#, volgende in JavaScript en Python) verder met de volgende stap van het watervaldialoogvenster binnen dezelfde draai, waardoor uw bot zo nodig een bepaalde stap kan overslaan.

Gevraagd

Vragen in de dialoogvensterbibliotheek bieden een eenvoudige manier om de gebruiker om informatie te vragen en hun antwoord te evalueren. Voor een nummerprompt geeft u bijvoorbeeld de vraag of informatie op die u vraagt en controleert de prompt automatisch of er een geldig nummerantwoord is ontvangen. Als dat het wel heted, kan het gesprek doorgaan; als dit niet het gevolg is, wordt de gebruiker voor een geldig antwoord teruggekrompt.

Achter de schermen zijn prompts een dialoogvenster in twee stappen. Eerst vraagt de prompt om invoer; ten tweede retourneert het de geldige waarde of begint vanaf de bovenkant met een reprompt.

Prompts hebben promptopties die worden opgegeven wanneer de prompt wordt aangeroepen. Hier kunt u de tekst opgeven waarmee moet worden gevraagd, de prompt voor opnieuw proberen als de validatie mislukt en de keuzen om de prompt te beantwoorden. Over het algemeen zijn de eigenschappen van de prompt en het opnieuw proberen activiteiten, maar er is een aantal variaties op de manier waarop dit wordt verwerkt in verschillende programmeertalen.

Daarnaast kunt u ervoor kiezen om een aangepaste validatie toe te voegen voor uw prompt wanneer u deze maakt. Stel dat we een partijgrootte willen krijgen met behulp van de nummerprompt, maar die partijgrootte moet meer dan 2 en minder dan 12 zijn. De prompt controleert eerst of het een geldig getal heeft ontvangen en voert vervolgens de aangepaste validatie uit als deze is opgegeven. Als de aangepaste validatie mislukt, wordt de gebruiker opnieuw afgekromd zoals hierboven.

Wanneer een prompt is voltooid, wordt expliciet de resulterende waarde geretourneerd waarnaar is gevraagd. Wanneer deze waarde wordt geretourneerd, kunnen we er zeker van zijn dat deze zowel de ingebouwde promptvalidatie als eventuele aanvullende aangepaste validatie heeft doorgegeven.

Bekijk voor voorbeelden over het gebruik van verschillende prompts hoe u de dialoogvensterbibliotheek gebruikt om gebruikersinvoer te verzamelen.

Prompttypen

Achter de schermen zijn prompts een dialoogvenster in twee stappen. Eerst vraagt de prompt om invoer; ten tweede retourneert het de geldige waarde of wordt opnieuw opgestart vanaf de bovenkant met een reprompt. De dialoogvensterbibliotheek biedt verschillende basisprompts, die elk worden gebruikt voor het verzamelen van een ander type antwoord. De basisprompts kunnen invoer in natuurlijke taal interpreteren, zoals 'tien' of 'een dozijn' voor een getal, of 'morgen' of 'vrijdag om 10:00 uur' voor een datum/tijd.

Prompt Description Retouren
Prompt voor bijlage Vraagt om een of meer bijlagen, zoals een document of afbeelding. Een verzameling bijlageobjecten .
Keuzeprompt Vraagt om een keuze uit een set opties. Een gevonden keuzeobject .
Prompt bevestigen Vraagt om een bevestiging. Een booleaanse waarde.
Datum-tijdprompt Vraagt om een datum/tijd. Een verzameling datum-/tijdomzettingsobjecten .
Nummerprompt Vraagt om een nummer. Een numerieke waarde.
Tekstprompt Vraagt om algemene tekstinvoer. Een tekenreeks.

Als u een gebruiker om invoer wilt vragen, definieert u een prompt met behulp van een van de ingebouwde klassen, zoals de tekstprompt, en voegt u deze toe aan uw dialoogvensterset. Prompts hebben vaste id's die uniek moeten zijn binnen een dialoogvensterset. U kunt voor elke prompt een aangepaste validator hebben en voor sommige prompts kunt u een standaardinstelling opgeven.

Landinstelling vragen

De landinstelling wordt gebruikt om taalspecifieke gedrag van de keuze te bepalen, te bevestigen, datum-tijd en nummerprompts. Voor eventuele invoer van de gebruiker, als het kanaal een landinstellingseigenschap heeft opgegeven in het bericht van de gebruiker, wordt dat gebruikt. Als de standaardinstelling van de prompt anders is ingesteld, geeft u deze op bij het aanroepen van de constructor van de prompt of door deze later in te stellen, dan wordt dat gebruikt. Als geen van deze landinstellingen wordt verstrekt, wordt Engels ('en-us') gebruikt als landinstelling.

De landinstelling is een ISO 639-code van twee, drie of vier tekens die een taal of taalfamilie vertegenwoordigt.

Promptopties

De tweede parameter van de promptmethode van de stapcontext maakt gebruik van een promptoptiesobject , dat de volgende eigenschappen heeft.

Eigenschap Beschrijving
Vragen De initiële activiteit voor het verzenden van de gebruiker, om te vragen om invoer.
Prompt voor opnieuw proberen De activiteit voor het verzenden van de gebruiker als de eerste invoer niet is gevalideerd.
Choices Een lijst met keuzes waaruit de gebruiker kan kiezen, voor gebruik met een keuzeprompt.
Validaties Aanvullende parameters die moeten worden gebruikt met een aangepaste validator.
Stijl Definieert hoe de keuzes voor een keuzeprompt of bevestigingsprompt aan een gebruiker worden gepresenteerd.

U moet altijd de eerste promptactiviteit opgeven die naar de gebruiker moet worden verzonden en een prompt voor opnieuw proberen voor exemplaren wanneer de invoer van de gebruiker niet wordt gevalideerd.

Als de invoer van de gebruiker niet geldig is, wordt de prompt voor opnieuw proberen naar de gebruiker verzonden; als er geen nieuwe poging is opgegeven, wordt de eerste prompt gebruikt. Als een activiteit echter vanuit de validator naar de gebruiker wordt teruggestuurd, wordt er geen prompt voor opnieuw proberen verzonden.

Promptvalidatie

U kunt een promptantwoord valideren voordat u de waarde retourneert naar de volgende stap van de waterval. Een validatiefunctie heeft een promptvalidatorcontextparameter en retourneert een Booleaanse waarde die aangeeft of de invoer de validatie doorgeeft. De context van de promptvalidator bevat de volgende eigenschappen:

Eigenschap Beschrijving
Context De huidige draaicontext voor de bot.
Erkend Een promptherkenningsresultaat met informatie over de gebruikersinvoer, zoals verwerkt door de recognizer.
Opties Bevat de promptopties die zijn opgegeven in de oproep om de prompt te starten.

Het resultaat van promptherkenning heeft de volgende eigenschappen:

Eigenschap Beschrijving
Geslaagd Geeft aan of de recognizer de invoer kon parseren.
Waarde De retourwaarde van de recognizer. Indien nodig kan de validatiecode deze waarde wijzigen.

Dialoogvensters gebruiken

Dialoogvensters kunnen worden beschouwd als een programmatische stack, die we de dialoogvensterstack noemen, met de draaihandler als de ene die deze omleiden en als terugval fungeert als de terugval als de stack leeg is. Het bovenste item op die stapel wordt beschouwd als het actieve dialoogvenster en de dialoogvenstercontext stuurt alle invoer naar het actieve dialoogvenster.

Wanneer een dialoogvenster begint, wordt het naar de stapel gepusht en is dit nu het actieve dialoogvenster. Het actieve dialoogvenster blijft totdat het eindigt, het wordt verwijderd door de dialoogvenstermethode Vervangen of een ander dialoogvenster wordt naar de stapel gepusht (door de draaihandler of het actieve dialoogvenster zelf) en wordt het actieve dialoogvenster. Wanneer dat nieuwe dialoogvenster eindigt, wordt het geopend van de stapel en wordt het volgende dialoogvenster weer het actieve dialoogvenster. Hierdoor kunt u een dialoogvenster herhalen of een gesprek vertakken, zoals hieronder wordt besproken.

U kunt een hoofddialoogvenster starten of voortzetten met behulp van de methode Voor het uitvoeren van dialoogvensters. Vanuit de botcode wordt het bestaande dialoogvenster voortgezet of wordt een nieuw exemplaar van het dialoogvenster gestart als de stack momenteel leeg is. Besturingselementen en gebruikersinvoer gaan naar het actieve dialoogvenster op de stack.

Voor de uitvoeringsmethode is een statuseigenschapstoegangsor vereist voor toegang tot de dialoogvensterstatus. De toegangsbeheerserver wordt gemaakt en gebruikt op dezelfde manier als andere statustoegangsors, maar wordt gemaakt als een eigen eigenschap op basis van de gespreksstatus. Details over het beheren van de status vindt u in het onderwerp Status beheren en het gebruik van de dialoogvensterstatus wordt weergegeven in de instructies voor de opeenvolgende gespreksstroom .

Vanuit een dialoogvenster hebt u toegang tot de context van het dialoogvenster en kunt u deze gebruiken om andere dialoogvensters te starten, het huidige dialoogvenster te beëindigen en andere bewerkingen uit te voeren.

Een dialoogvenster starten

Geef vanuit een watervaldialoogvenster de dialoogvenster-id door van het dialoogvenster dat u wilt starten in de context van het watervaldialoogvenster met behulp van het dialoogvenster begin, prompt of vervanging van de dialoogvenstermethode .

  • Met de prompt en begindialoogvenstermethoden wordt een nieuw exemplaar van het dialoogvenster waarnaar wordt verwezen, naar de bovenkant van de stack gepusht.
  • Met de dialoogvenstermethode vervangen wordt het huidige dialoogvenster van de stapel weergegeven en wordt het vervangende dialoogvenster naar de stapel gepusht. Het vervangen dialoogvenster wordt geannuleerd en alle informatie die in het exemplaar is opgenomen, wordt verwijderd.

Gebruik de parameter Opties om informatie door te geven aan het nieuwe exemplaar van het dialoogvenster. De opties die in het nieuwe dialoogvenster worden doorgegeven, kunnen worden geopend via de eigenschap Opties van de stapcontext in elke stap van het dialoogvenster. Zie voor meer informatie hoe u een geavanceerde gespreksstroom maakt met vertakkingen en lussen.

Een dialoogvenster voortzetten

Gebruik in een watervaldialoogvenster de eigenschap waarden van de stapcontext om de status tussen bochten te behouden. Elke waarde die in een vorige beurt aan deze verzameling is toegevoegd, is in volgende beurten beschikbaar. Zie voor meer informatie hoe u een geavanceerde gespreksstroom maakt met vertakkingen en lussen.

Een dialoogvenster beëindigen

Gebruik in een watervaldialoogvenster de einddialoogvenstermethode om een dialoogvenster te beëindigen door het dialoogvenster uit de stapel te zetten. De einddialoogvenstermethode kan een optioneel resultaat retourneren naar de bovenliggende context (zoals het dialoogvenster dat dit wordt genoemd of de turn-handler van de bot). Dit wordt meestal aangeroepen vanuit het dialoogvenster om het huidige exemplaar van zichzelf te beëindigen.

U kunt de einddialoogvenstermethode aanroepen vanaf elke locatie waar u een dialoogvenstercontext hebt, maar deze wordt weergegeven aan de bot die is aangeroepen vanuit het huidige actieve dialoogvenster.

Tip

Het is raadzaam om de methode voor het einddialoogvenster aan het einde van het dialoogvenster expliciet aan te roepen.

Alle dialoogvensters wissen

Als u alle dialoogvensters van de stapel wilt weergeven, kunt u de dialoogvensterstack wissen door de dialoogvenstercontext alle dialoogvenstermethodes te annuleren aan te roepen.

Dialoogvenster herhalen

U kunt een dialoogvenster vervangen door zichzelf, een lus maken met behulp van de dialoogvenstermethode Vervangen . Dit is een uitstekende manier om complexe interacties en één techniek voor het beheren van menu's te verwerken.

Notitie

Als u de interne status voor het huidige dialoogvenster wilt behouden, moet u informatie doorgeven aan het nieuwe exemplaar van het dialoogvenster in de aanroep van de dialoogvenstermethode vervangen en vervolgens het dialoogvenster op de juiste manier initialiseren.

Een gesprek vertakken

De dialoogvenstercontext houdt de dialoogvensterstack bij en houdt voor elk dialoogvenster op de stack bij welke stap de volgende stap is. De begindialoogvenstermethode maakt een onderliggend dialoogvenster en pusht dat dialoogvenster naar de bovenkant van de stapel en de einddialoogvenstermethode wordt het bovenste dialoogvenster van de stapel weergegeven. Het einddialoogvenster wordt meestal aangeroepen vanuit het dialoogvenster dat eindigt.

Een dialoogvenster kan een nieuw dialoogvenster starten binnen dezelfde dialoogvensterset door de begindialoogmethode van de dialoogvenstercontext aan te roepen en de id van het nieuwe dialoogvenster op te geven, waardoor het nieuwe dialoogvenster het momenteel actieve dialoogvenster wordt. Het oorspronkelijke dialoogvenster bevindt zich nog steeds op de stapel, maar aanroepen naar de vervolgdialoogmethode van de dialoogvenstercontext worden alleen verzonden naar het dialoogvenster dat zich boven op de stack bevindt, het actieve dialoogvenster. Wanneer een dialoogvenster wordt geopend, wordt de context van het dialoogvenster hervat met de volgende stap van de waterval op de stapel waar het was gebleven van het oorspronkelijke dialoogvenster.

Daarom kunt u een vertakking in uw gespreksstroom maken door een stap in één dialoogvenster op te slaan die voorwaardelijk een dialoogvenster kan kiezen om een set beschikbare dialoogvensters te starten.

Aanvullende informatie