Delen via


Dialoogvensters over onderdelen en waterval

TOEPASBAAR OP: SDK v4

Dialoogvensters zijn beschikbaar in een aantal verschillende typen. In dit artikel worden dialoogvensters voor component, waterval en prompt beschreven. Voor algemene informatie over dialoogvensters, zie het artikel over de dialoogvenstersbibliotheek. Zie de inleiding tot adaptieve dialoogvensters voor informatie over adaptieve dialoogvensters.

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

Een componentdialoogvenster is een type containerdialoogvenster dat dialoogvensters in de set toestaat om andere dialoogvensters in de set aan te roepen, zoals een watervaldialoogvenster dat prompt-dialoogvensters of een ander watervaldialoogvenster aanroept. Component-dialoogvensters beheren een reeks subdialoogvensters, 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 gegevens, zoals een getal, een datum of een naam, enzovoort. Prompts zijn ontworpen om te werken met watervalgesprekken in een componentengesprek.

Dialoogvensters voor onderdelen

Soms wilt u een herbruikbaar dialoogvenster schrijven dat u in verschillende scenario's wilt gebruiken, 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 beter beheerbare onderdelen wordt gesplitst. Elk van deze onderdelen heeft een eigen dialoogvensterset en voorkomt naamconflicten met de dialoogvensterset die deze bevat. Voor meer informatie, zie de onderdeeldialoogvenster-handleiding.

Watervaldialogen

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 watervalstapcontext (step) als parameter 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 geeft het resultaat vervolgens door aan de volgende stap. Het resultaat van de eerste functie wordt doorgegeven als argument in de volgende functie, enzovoort.

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

Weergave van hoe berichten corresponderen met 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 beurtcontext en -status. Gebruik het contextobject van de watervalstap om te communiceren met een dialoogvenster in een watervalstap.

U kunt een retourwaarde afhandelen vanuit een dialoogvenster binnen een watervalstap in een dialoogvenster of vanuit de beurthandler van uw bot. Over het algemeen controleert u alleen het dialoogresultaat van de beurt 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 doorgevoerd in 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 beurt, zodat uw bot zo nodig een bepaalde stap kan overslaan.

Opdrachten

Prompts in de dialoogvensterbibliotheek bieden een eenvoudige manier om de gebruiker om informatie te vragen en hun antwoord te evalueren. Als u bijvoorbeeld een nummer prompt opgeeft, specificeert u de vraag of informatie waar u om vraagt, en controleert de prompt automatisch of er een geldig nummer antwoord is ontvangen. Als dat wel het geval is, kan het gesprek worden voortgezet; als dat niet zo is, wordt de gebruiker opnieuw gevraagd om een geldig antwoord.

Achter de schermen zijn prompts een dialoogvenster in twee stappen. Eerst vraagt de prompt om invoer; ten tweede retourneert deze 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 u wilt vragen, de prompt voor opnieuw proberen als de validatie mislukt en opties om de prompt te beantwoorden. Over het algemeen zijn de eigenschappen 'prompt' en 'herhalingsprompt' activiteiten, hoewel er enige variatie is in hoe dit wordt gehanteerd 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 teruggepromitteerd zoals hierboven.

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

Bekijk voor voorbeelden van 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; daarna geeft deze de geldige waarde terug, of start opnieuw vanaf het begin met een nieuwe prompt. 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 uur' voor een datum/tijd.

Snel Beschrijving 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-tijdresolutieobjecten.
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 de 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 standaardlandinstelling opgeven.

Locatie-instelling prompt

De landinstelling wordt gebruikt om taalspecifiek 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 standaardlocatie van de prompt is ingesteld, door deze op te geven bij het aanroepen van de constructor van de prompt of door deze later in te stellen, dan wordt die gebruikt. Als geen van deze landinstellingen wordt opgegeven, 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 met de volgende eigenschappen.

Vastgoed Beschrijving
Prompt De eerste actie om de gebruiker te benaderen en om hun invoer te vragen.
Prompt voor opnieuw proberen De activiteit om de gebruiker te informeren als hun eerste invoer niet gevalideerd wordt.
Keuzen Een lijst met keuzes waaruit de gebruiker kan kiezen, voor gebruik met een keuzeprompt.
validaties Aanvullende parameters voor gebruik met een aangepaste validator.
stijl Hiermee definieert u hoe de keuzen voor een keuzeprompt of bevestigingsprompt worden weergegeven aan een gebruiker.

U moet altijd de eerste promptactiviteit opgeven die naar de gebruiker moet worden verzonden en een herhalingsprompt voor situaties wanneer de input 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 verzonden, 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 contextparameter promptvalidator en retourneert een Booleaanse waarde die aangeeft of de invoer is gevalideerd. De context van de promptvalidator bevat de volgende eigenschappen:

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

Het resultaat van de promptherkenning heeft de volgende eigenschappen:

Vastgoed Beschrijving
Geslaagd Geeft aan of de recognizer de invoer kan 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 dialoogstack noemen, met de beurtenhandler die het aanstuurt en fungeert als terugvaloptie wanneer 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 blijft het actieve dialoogvenster totdat het eindigt, het wordt verwijderd door de replace dialog methode, of een ander dialoogvenster wordt naar de stack gepusht (door de beurtbeheerder of het actieve dialoogvenster zelf) en zo het actieve dialoogvenster wordt. Wanneer dat nieuwe dialoogvenster eindigt, wordt het weer uit de stapel gepopt 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 hoofddialoog starten of voortzetten met behulp van de methode run van de dialoogextensie. Vanuit de botcode zorgt het aanroepen van de methode voor het uitvoeren van de dialooguitbreiding ervoor dat het bestaande dialoogvenster verdergaat of een nieuw exemplaar van het dialoogvenster start als de stack momenteel leeg is. Besturingselementen en gebruikersinvoer gaan naar het actieve dialoogvenster op de stack.

Voor de runmethode is een toestandseigenschapstoegang vereist om toegang te krijgen tot de dialoogstatus. De accessor wordt gemaakt en gebruikt op dezelfde manier als andere statustoegangsors, maar wordt gemaakt als een eigen eigenschap op basis van de gespreksstatus. Details over de beheerstatus vindt u in het onderwerp Over de beheerstatus en het gebruik van de dialoogvensterstatus wordt weergegeven in de procedure voor de opeenvolgende gespreksstroom .

Vanuit een dialoogvenster hebt u toegang tot de dialoogvenstercontext 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 de dialoogvenstermethode Begin, Prompt of Vervangen .

  • Met de prompt- en begindialogmethodes wordt een nieuw exemplaar van het dialoogvenster waarnaar wordt verwezen bovenaan de stack gepusht.
  • Met de vervangende dialoogmethode wordt de huidige dialoog van de stapel verwijderd en de vervangende dialoog naar de stapel toegevoegd. Het vervangen dialoogvenster wordt geannuleerd en alle informatie die het exemplaar bevat, 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 dialoog voortzetten

Gebruik in een waterval dialoog de waarden van de stapcontext om de status tussen beurten te behouden. Elke toegevoegde waarde aan deze verzameling in een vorige beurt 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 watervaldialoog de eindig dialoog methode om een dialoog te beëindigen door het van de stapel te verwijderen. De einddialoogmethode kan een optioneel resultaat retourneren naar de overkoepelende context (zoals het dialoogvenster dat het heeft aangeroepen of de beurtverwerker van de bot). Dit wordt meestal aangeroepen vanuit het dialoogvenster om het huidige exemplaar van zichzelf te beëindigen.

U kunt de afsluitende dialoogmethode vanuit elke locatie aanroepen waar u een dialoogcontext hebt, maar voor de bot lijkt het alsof deze is aangeroepen vanuit de momenteel actieve dialoog.

Aanbeveling

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

Alle dialoogvensters verwijderen

Als u alle dialogen uit de stapel wilt verwijderen, kunt u de dialoogstack wissen door de dialoogcontext annuleer alle dialogen methode aan te roepen.

Een dialoogvenster opnieuw openen

U kunt een dialoogvenster door zichzelf vervangen en zo een lus creëren door de replace dialog methode te gebruiken. Dit is een geweldige manier om complexe interacties en één techniek voor het beheren van menu's te verwerken.

Opmerking

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 dialoogcontext onderhoudt de dialoogstack en houdt bij welke stap voor elk dialoog in de stack de volgende is. Met de begindialoogvenstermethode wordt een kinddialoogvenster gemaakt en dat dialoogvenster naar de bovenkant van de stapel gepusht. Met de end dialoogvenstermethode wordt het bovenste dialoogvenster van de stapel verwijderd. 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 continue dialoogvenstermethode van de dialoogvenstercontext worden alleen verzonden naar het dialoogvenster dat zich boven op de stack bevindt, het actieve dialoogvenster. Wanneer een dialoogvenster uit de stapel wordt verwijderd, wordt de context van het dialoogvenster hervat met de volgende stap in de waterval op de stapel waar het oorspronkelijke dialoogvenster was gebleven.

Daarom kunt u een onderdeel in uw gespreksstroom creëren door een stap toe te voegen in één dialoog, waarmee u voorwaardelijk een dialoog kunt kiezen om te starten uit een set beschikbare dialogen.

Aanvullende informatie