Om dialogrutor för komponenter och vattenfall

GÄLLER FÖR: SDK v4

Dialogrutor finns i några olika typer. I den här artikeln beskrivs dialogrutor för komponenter, vattenfall och frågor. Information om dialogrutor i allmänhet finns i artikeln dialogbibliotek . Information om anpassningsbara dialogrutor finns i introduktionen till anpassningsbara dialogrutor.

En vattenfallsdialogruta (eller vattenfall) definierar en sekvens med steg, så att din robot kan vägleda en användare genom en linjär process. Dessa dialogrutor är utformade för att fungera i kontexten för en komponentdialogruta.

En komponentdialogruta är en typ av containerdialogruta som tillåter dialogrutor i uppsättningen att anropa andra dialogrutor i uppsättningen, till exempel en vattenfallsdialogruta som anropar dialogrutor eller en annan vattenfallsdialogruta. Komponentdialogrutor hanterar en uppsättning underordnade dialogrutor, till exempel vattenfallsdialogrutor, prompter och så vidare. Du kan utforma en komponentdialogruta för att hantera specifika uppgifter och återanvända den, i samma robot eller i flera robotar.

Dialogrutor för frågor (prompter ) är dialogrutor som är utformade för att be användaren om specifika typer av information, till exempel ett tal, ett datum eller ett namn och så vidare. Prompter är utformade för att fungera med vattenfallsdialogrutor i en komponentdialogruta.

Komponentdialogrutor

Ibland vill du skriva en återanvändbar dialogruta som du vill använda i olika scenarier, till exempel en adressdialogruta som ber användaren att ange värden för gata, stad och postnummer.

Komponentdialogrutan innehåller en strategi för att skapa oberoende dialogrutor för att hantera specifika scenarier och dela upp en stor dialogruta i mer hanterbara delar. Var och en av dessa delar har en egen dialogruta och undviker eventuella namnkonflikter med den dialoguppsättning som innehåller den. Mer information finns i komponentdialogrutan instruktioner.

Vattenfallsdialogrutor

En vattenfallsdialogruta är en specifik implementering av en dialogruta som ofta används för att samla in information från användaren eller vägleda användaren genom en serie uppgifter. Varje steg i konversationen implementeras som en asynkron funktion som tar en parameter för vattenfallsstegkontext (step). I varje steg ber roboten användaren om indata (eller kan starta en underordnad dialogruta, men att det ofta är en uppmaning), väntar på ett svar och skickar sedan resultatet till nästa steg. Resultatet av den första funktionen skickas som ett argument till nästa funktion och så vidare.

Följande diagram visar en sekvens med vattenfallssteg och de stackåtgärder som utförs. Information om användningen av dialogstacken finns nedan i avsnittet använda dialogrutor .

Representation av hur meddelanden mappar till vattenfallssteg.

I vattenfallsstegen lagras kontexten för vattenfallsdialogrutan i dess vattenfallsstegkontext. Stegkontexten liknar dialogkontexten och ger åtkomst till den aktuella turkontexten och tillståndet. Använd kontextobjektet för vattenfallssteget för att interagera med en dialogruta inifrån ett vattenfallssteg.

Du kan hantera ett returvärde från en dialogruta antingen i ett vattenfallssteg i en dialogruta eller från robotens aktiverade turhanterare, även om du vanligtvis bara behöver kontrollera statusen för dialogrutans turresultat från robotens turlogik. I ett vattenfallssteg visar dialogrutan returvärdet i vattenfallsstegets resultategenskap.

Kontextegenskaper för vattenfallssteg

Vattenfallsstegkontexten innehåller följande egenskaper:

  • Alternativ: innehåller indatainformation för dialogrutan.
  • Värden: innehåller information som du kan lägga till i kontexten och överförs vidare till efterföljande steg.
  • Resultat: innehåller resultatet från föregående steg.

Dessutom fortsätter nästa metod (NextAsync i C#, nästa i JavaScript och Python) till nästa steg i vattenfallsdialogrutan i samma tur, så att roboten kan hoppa över ett visst steg om det behövs.

Uppmanas

I dialogrutebiblioteket kan du enkelt be användaren om information och utvärdera deras svar. Till exempel för en nummerprompt anger du den fråga eller information som du ber om, och prompten kontrollerar automatiskt om den har fått ett giltigt nummersvar. Om det gjorde det kan konversationen fortsätta. Om den inte gjorde det kommer användaren att få ett giltigt svar.

I bakgrunden är prompter en dialogruta i två steg. Först ber prompten om indata. för det andra returneras det giltiga värdet, eller börjar uppifrån med en reprompt.

Prompter har promptalternativ som anges när prompten anropas, vilket är där du kan ange den text som du vill fråga med, återförsöksprompten om verifieringen misslyckas och val för att besvara prompten. I allmänhet är prompt- och återförsöksegenskaperna aktiviteter, även om det finns en viss variation i hur detta hanteras på olika programmeringsspråk.

Du kan också välja att lägga till viss anpassad validering för uppmaningen när du skapar den. Anta till exempel att vi ville få en partstorlek med hjälp av nummerprompten, men att partistorleken måste vara mer än 2 och mindre än 12. Uppmaningen kontrollerar först om det har tagit emot ett giltigt nummer och kör sedan den anpassade verifieringen om det anges. Om den anpassade verifieringen misslyckas kommer användaren att avstundas enligt ovan.

När en fråga har slutförts returneras det resulterande värdet som efterfrågades. När det värdet returneras kan vi vara säkra på att det har klarat både den inbyggda promptverifieringen och eventuell ytterligare anpassad validering som kan ha angetts.

Exempel på hur du använder olika prompter finns i hur du använder dialogrutebiblioteket för att samla in användarindata.

Prompttyper

I bakgrunden är prompter en dialogruta i två steg. Först ber prompten om indata. för det andra returneras det giltiga värdet eller startas om från början med en reprompt. Dialogrutebiblioteket erbjuder olika grundläggande frågor som var och en används för att samla in olika typer av svar. De grundläggande prompterna kan tolka indata från naturligt språk, till exempel "tio" eller "ett dussin" för ett tal, eller "i morgon" eller "fredag kl. 10:00" för en datum-tid.

Prompt Description Returer
Fråga efter bifogad fil Frågar efter en eller flera bifogade filer, till exempel ett dokument eller en bild. En samling bifogade objekt .
Alternativprompt Frågar efter ett val från en uppsättning alternativ. Ett hittat valobjekt .
Bekräfta uppmaning Ber om en bekräftelse. Ett booleskt värde.
Fråga om datum/tid Frågar efter datum och tid. En samling objekt för datum-tidsmatchning .
Nummerprompt Frågar efter ett nummer. Ett numeriskt värde.
Textprompt Frågar efter allmänna textinmatningar. En sträng.

Om du vill uppmana en användare att ange indata definierar du en uppmaning med någon av de inbyggda klasserna, till exempel textprompten, och lägger till den i din dialoguppsättning. Prompter har fasta ID:t som måste vara unika i en dialogruta. Du kan ha en anpassad verifierare för varje uppmaning, och för vissa frågor kan du ange ett standardspråk.

Fråga språkvariant

Språkvarianten används för att fastställa valfritt språkspecifikt beteende,bekräfta, datum-tid och nummeruppaningar . Om kanalen har angett en språkegenskap i användarens meddelande används för angivna indata från användaren. Annars, om promptens standardspråk anges, genom att ange det när du anropar promptens konstruktor eller genom att ange det senare, används det. Om inget av dessa språk anges används engelska ("en-us") som nationella inställningar.

Språkvarianten är en ISO 639-kod med två, tre eller fyra tecken som representerar ett språk eller en språkfamilj.

Alternativ för fråga

Den andra parametern i stegkontextens promptmetod tar ett promptalternativobjekt som har följande egenskaper.

Egenskap Beskrivning
Fråga Den första aktiviteten för att skicka användaren för att be om deras indata.
Fråga igen Aktiviteten för att skicka användaren om deras första indata inte verifierade.
Choices En lista över alternativ som användaren kan välja mellan, för användning med en alternativprompt.
Valideringar Ytterligare parametrar att använda med en anpassad validator.
Stil Definierar hur alternativen för en fråga om val eller bekräfta att en fråga visas för en användare.

Du bör alltid ange den första promptaktiviteten som ska skickas till användaren och en återförsöksprompt för instanser när användarens indata inte verifieras.

Om användarens indata inte är giltiga skickas återförsöksprompten till användaren. Om inget nytt försök har angetts används den första prompten. Men om en aktivitet skickas tillbaka till användaren inifrån validatorn skickas ingen återförsöksprompt.

Fråga validering

Du kan verifiera ett promptsvar innan du returnerar värdet till nästa steg i vattenfallet. En valideringsfunktion har en kontextparameter för promptverifiering och returnerar ett booleskt värde som anger om indata godkänns i valideringen. Frågeverifierarkontexten innehåller följande egenskaper:

Egenskap Beskrivning
Kontext Den aktuella turkontexten för roboten.
Erkända Ett promptigenkänningsresultat som innehåller information om användarindata, som bearbetas av identifieraren.
Alternativ Innehåller de promptalternativ som angavs i anropet för att starta prompten.

Promptigenkänningsresultatet har följande egenskaper:

Egenskap Beskrivning
Lyckades Anger om identifieraren kunde parsa indata.
Värde Returvärdet från identifieraren. Om det behövs kan verifieringskoden ändra det här värdet.

Använda dialogrutor

Dialogrutor kan ses som en programmatisk stack, som vi kallar dialogstacken, med turhanteraren som den som dirigerar den och fungerar som reserv om stacken är tom. Det översta objektet i den stacken anses vara den aktiva dialogrutan, och dialogkontexten dirigerar alla indata till den aktiva dialogrutan.

När en dialogruta börjar pushas den till stacken och är nu den aktiva dialogrutan. Den förblir den aktiva dialogrutan tills den antingen slutar, den tas bort med hjälp av dialogrutan Ersätt eller så pushas en annan dialogruta till stacken (antingen av hanteraren eller den aktiva dialogrutan) och blir den aktiva dialogrutan. När den nya dialogrutan avslutas visas den från stacken och nästa dialogruta ned blir den aktiva dialogrutan igen. På så sätt kan du upprepa en dialogruta eller förgrena en konversation, som beskrivs nedan.

Du kan starta eller fortsätta en rotdialogruta med hjälp av metoden för att köra dialogruta. Från robotkoden fortsätter anropet av dialogrutetilläggsmetoden antingen den befintliga dialogrutan eller startar en ny instans av dialogrutan om stacken för närvarande är tom. Kontroll och användarindata går till den aktiva dialogrutan i stacken.

Körningsmetoden kräver en tillståndsegenskapsåtkomst för att få åtkomst till dialogtillståndet. Accessorn skapas och används på samma sätt som andra tillståndsåtkomster, men skapas som sin egen egenskap baserat på konversationstillståndet. Information om att hantera tillstånd finns i avsnittet hantera tillstånd, och användning av dialogtillstånd visas i instruktioner för sekventiellt konversationsflöde .

Från en dialogruta har du åtkomst till dialogkontexten och kan använda den för att starta andra dialogrutor, avsluta den aktuella dialogrutan och utföra andra åtgärder.

Starta en dialogruta

I en vattenfallsdialogruta skickar du dialog-ID:t för den dialogruta som du vill starta i vattenfallsdialogrutans kontext med hjälp av antingen dialogrutan begin, prompt eller replace.

  • Dialogmetoderna prompt och begin skickar en ny instans av den refererade dialogrutan överst i stacken.
  • Dialogrutan Ersätt kommer att öppna den aktuella dialogrutan från stacken och push-överföra ersättningsdialogrutan till stacken. Den ersatta dialogrutan avbryts och all information som instansen innehåller tas bort.

Använd alternativparametern för att skicka information till den nya instansen av dialogrutan. De alternativ som skickas till den nya dialogrutan kan nås via stegkontextens alternativegenskap i alla steg i dialogrutan. Mer information finns i Skapa avancerat konversationsflöde med grenar och loopar.

Så här fortsätter du en dialogruta

I en vattenfallsdialogruta använder du stegkontextens värdeegenskap för att bevara tillståndet mellan svängarna. Alla värden som läggs till i den här samlingen i en tidigare tur är tillgängliga i efterföljande svängar. Mer information finns i Skapa avancerat konversationsflöde med grenar och loopar.

Avsluta en dialogruta

I en vattenfallsdialogruta använder du slutdialogrutan för att avsluta en dialogruta genom att ta bort den från stacken. Slutdialogrutan kan returnera ett valfritt resultat till den överordnade kontexten (till exempel dialogrutan som anropade den eller robotens turhanterare). Detta anropas oftast inifrån dialogrutan för att avsluta den aktuella instansen av sig själv.

Du kan anropa slutdialogrutans metod var du än har en dialogkontext, men det visas för roboten att den anropades från den aktuella aktiva dialogrutan.

Tips

Det är bästa praxis att uttryckligen anropa slutdialogrutan i slutet av dialogrutan.

Rensa alla dialogrutor

Om du vill öppna alla dialogrutor från stacken kan du rensa dialogstacken genom att anropa dialogkontextens avbryt alla dialogrutor .

Upprepa en dialogruta

Du kan ersätta en dialogruta med sig själv och skapa en loop med hjälp av dialogrutan Replace (Ersätt). Det här är ett bra sätt att hantera komplexa interaktioner och en teknik för att hantera menyer.

Anteckning

Om du behöver bevara det interna tillståndet för den aktuella dialogrutan måste du skicka information till den nya instansen av dialogrutan i anropet till dialogrutan ersätt och sedan initiera dialogrutan på rätt sätt.

Förgrena en konversation

Dialogkontexten underhåller dialogstacken och för varje dialogruta i stacken spårar du vilket steg som är nästa. Dess startdialogmetod skapar ett underordnat och push-överför dialogrutan till toppen av stacken, och dess slutdialogruta visar den övre dialogrutan från stacken. Slutdialogrutan anropas vanligtvis inifrån dialogrutan som slutar.

En dialogruta kan starta en ny dialogruta i samma dialogruta genom att anropa dialogrutemetoden begin och ange ID:t för den nya dialogrutan, vilket gör den nya dialogrutan till den aktiva dialogrutan. Den ursprungliga dialogrutan finns fortfarande på stacken, men anrop till dialogrutekontextens fortsätt-dialogmetod skickas bara till den dialogruta som finns ovanpå stacken, den aktiva dialogrutan. När en dialogruta tas bort från stacken återupptas dialogkontexten med nästa steg i vattenfallet på stacken där den slutade i den ursprungliga dialogrutan.

Därför kan du skapa en gren i konversationsflödet genom att inkludera ett steg i en dialogruta som villkorligt kan välja en dialogruta för att börja med en uppsättning tillgängliga dialogrutor.

Ytterligare information