Megosztás a következőn keresztül:


A párbeszédpanel összetettségének kezelése

A KÖVETKEZŐKRE VONATKOZIK: SDK v4

Az összetevők párbeszédpaneleivel önálló párbeszédablakokat hozhat létre adott forgatókönyvek kezelésére, így a nagy párbeszédpanelek kezelhetőbb részekre bonthatók. Mindegyik darab saját párbeszédpanelkészlettel rendelkezik, és elkerüli, hogy a név összeütközjön a rajta kívüli párbeszédpanel-csoportokkal. Az összetevők párbeszédpanelei a következő módon használhatók újra:

  • Hozzáadva egy másikhoz ComponentDialog vagy DialogSet a robothoz.
  • Csomag részeként exportálva.
  • Más robotokon belül használatos.

Feljegyzés

A Bot Framework JavaScript, C# és Python SDK-k továbbra is támogatottak lesznek, a Java SDK-t azonban 2023 novemberében végső hosszú távú támogatással kivonják.

A Java SDK-val létrehozott meglévő robotok továbbra is működni fognak.

Új robotépítéshez fontolja meg a Power Virtual Agents használatát, és olvassa el a megfelelő csevegőrobot-megoldás kiválasztását.

További információ: A robotépítés jövője.

Előfeltételek

  • A robot alapjainak, a párbeszédtárnak és a beszélgetések kezelésének ismerete.
  • A többfordulós parancssori minta másolata c#, JavaScript, Java vagy Python nyelven.

Tudnivalók a mintáról

A többfordulós parancssori mintában egy vízesés párbeszédpanelt, néhány kérdést és egy összetevő párbeszédpanelt használunk egy olyan interakció létrehozásához, amely kérdések sorozatát kérdezi fel a felhasználótól. A kód egy párbeszédpanel használatával lépeget az alábbi lépéseken:

Lépések Parancssor típusa
Kérje meg a felhasználót a szállítás módjára Választási lehetőségekre vonatkozó kérdés
Kérje meg a felhasználót, hogy adja meg a nevét Szöveges üzenet
Kérdezze meg a felhasználót, hogy meg szeretné-e adni az életkorát Megerősítési kérés
Ha igennel válaszoltak, kérjék meg a korukat 0-nál nagyobb és 150-nél kisebb korú, érvényesítéssel rendelkező számkérés.
Kérdezze meg, hogy az összegyűjtött adatok "rendben" vannak-e Ismételt megerősítési kérés

Végül, ha igennel válaszoltak, jelenítse meg az összegyűjtött információkat; ellenkező esetben közölje a felhasználóval, hogy az adatai nem lesznek megőrzve.

Az összetevő implementálása párbeszédpanel

A többfordulós parancssori mintában egy vízesés párbeszédpanelt, néhány kérdést és egy összetevő párbeszédpanelt használunk egy olyan interakció létrehozásához, amely kérdések sorozatát kérdezi fel a felhasználótól.

Az összetevők párbeszédpaneljei egy vagy több párbeszédpanelt foglalnak össze. Az összetevő párbeszédpaneljének belső párbeszédpanel-készlete van, és a belső párbeszédpanel-készlethez hozzáadott párbeszédpanelek és kérések saját azonosítókkal rendelkeznek, amelyek csak az összetevő párbeszédpaneljén belül láthatók.

A párbeszédpanelek használatához telepítse a Microsoft.Bot.Builder.Dialogs NuGet csomagot.

Párbeszédpanelek\UserProfileDialog.cs

Itt az UserProfileDialog osztály az ComponentDialog osztályból származik.

public class UserProfileDialog : ComponentDialog

A konstruktoron belül a AddDialog metódus párbeszédpaneleket és utasításokat ad hozzá az összetevő párbeszédpaneléhez. Az ezzel a módszerrel hozzáadott első elem a kezdeti párbeszédpanel. A kezdeti párbeszédpanelt módosíthatja a InitialDialogId tulajdonság explicit beállításával. Amikor elindít egy összetevő párbeszédpanelt, az elindítja a kezdeti párbeszédpanelt.

public UserProfileDialog(UserState userState)
    : base(nameof(UserProfileDialog))
{
    _userProfileAccessor = userState.CreateProperty<UserProfile>("UserProfile");

    // This array defines how the Waterfall will execute.
    var waterfallSteps = new WaterfallStep[]
    {
        TransportStepAsync,
        NameStepAsync,
        NameConfirmStepAsync,
        AgeStepAsync,
        PictureStepAsync,
        SummaryStepAsync,
        ConfirmStepAsync,
    };

    // Add named dialogs to the DialogSet. These names are saved in the dialog state.
    AddDialog(new WaterfallDialog(nameof(WaterfallDialog), waterfallSteps));
    AddDialog(new TextPrompt(nameof(TextPrompt)));
    AddDialog(new NumberPrompt<int>(nameof(NumberPrompt<int>), AgePromptValidatorAsync));
    AddDialog(new ChoicePrompt(nameof(ChoicePrompt)));
    AddDialog(new ConfirmPrompt(nameof(ConfirmPrompt)));
    AddDialog(new AttachmentPrompt(nameof(AttachmentPrompt), PicturePromptValidatorAsync));

    // The initial child Dialog to run.
    InitialDialogId = nameof(WaterfallDialog);
}

Az alábbi kód a vízesés párbeszédpanel első lépését jelöli.

private static async Task<DialogTurnResult> NameStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
    stepContext.Values["transport"] = ((FoundChoice)stepContext.Result).Value;

    return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = MessageFactory.Text("Please enter your name.") }, cancellationToken);
}

A vízesés párbeszédpanelek implementálásával kapcsolatos további információkért tekintse meg a szekvenciális beszélgetési folyamat implementálását.

Futtatáskor az összetevő párbeszédpanelje saját párbeszédpanel-vermet tart fenn. Az összetevő párbeszédpaneljének indításakor:

  • Létrejön egy példány, és hozzáadódik a külső párbeszédpanel-veremhez
  • Létrehoz egy belső párbeszédpanel-vermet, amelyet hozzáad az állapotához
  • Elindítja a kezdeti párbeszédpanelt, és hozzáadja azt a belső párbeszédpanel-veremhez.

A szülőkörnyezet aktív párbeszédpanelként látja az összetevőt. Az összetevő környezetében azonban úgy tűnik, hogy a kezdeti párbeszédpanel az aktív párbeszédpanel.

A párbeszédpanel meghívása a robotból

A külső párbeszédpanel-készletben, amelyhez hozzáadta az összetevő párbeszédpanelt, az összetevő párbeszédpanelje rendelkezik azzal az azonosítóval, amellyel létrehozta. A külső csoportban az összetevő egyetlen párbeszédpanelnek tűnik, hasonlóan a parancssorokhoz.

Összetevő párbeszédpanel használatához adjon hozzá egy példányt a robot párbeszédpanelkészletéhez.

Robotok\DialogBot.cs

A mintában ez a RunAsync robot OnMessageActivityAsync metódusából meghívott metódussal történik.

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    Logger.LogInformation("Running dialog with Message Activity.");

    // Run the Dialog with the new message Activity.
    await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);
}

A robot tesztelése

  1. Ha még nem tette meg, telepítse a Bot Framework Emulatort.
  2. Futtassa a mintát helyileg a számítógépen.
  3. Indítsa el az Emulátort, csatlakozzon a robothoz, és küldjön üzeneteket az alábbiak szerint.

Mintaátirat a többfordulós parancssori párbeszédpanelről.

További információk

A lemondás működése az összetevők párbeszédpaneljeinél

Ha az összetevő párbeszédpaneljének környezetéből az összes párbeszédpanel lemondását hívja meg, az összetevő párbeszédpanelje megszakítja a belső verem összes párbeszédpaneljét, majd véget ér, és visszakerül a külső verem következő párbeszédpaneljére.

Ha a külső környezet összes párbeszédpaneljének megszakítását hívja meg, az összetevőt a külső környezet többi párbeszédpanelével együtt a rendszer megszakítja.

Következő lépések

Megtudhatja, hogyan hozhat létre olyan összetett beszélgetéseket, amelyek elágaznak és hurkolnak.