Zarządzanie złożonością okna dialogowego

DOTYCZY: ZESTAW SDK w wersji 4

Za pomocą okien dialogowych składników można tworzyć niezależne okna dialogowe do obsługi określonych scenariuszy, przerywając duży zestaw okien dialogowych na bardziej zarządzane elementy. Każdy z tych elementów ma własny zestaw okien dialogowych i unika kolizji nazw z zestawami okien dialogowych poza nimi. Okna dialogowe składników są wielokrotnego użytku, które mogą być następujące:

  • Dodano element do innego ComponentDialog lub DialogSet bota.
  • Wyeksportowane jako część pakietu.
  • Używane w innych botach.

Uwaga

Zestawy SDK języka JavaScript, C# i Python platformy Bot Framework będą nadal obsługiwane, jednak zestaw SDK języka Java jest wycofywany z ostatecznym długoterminowym wsparciem kończącym się w listopadzie 2023 r.

Istniejące boty utworzone za pomocą zestawu JAVA SDK będą nadal działać.

W przypadku tworzenia nowego bota rozważ użycie agentów usługi Power Virtual Agents i przeczytaj o wyborze odpowiedniego rozwiązania czatbota.

Aby uzyskać więcej informacji, zobacz Przyszłość tworzenia botów.

Wymagania wstępne

Informacje o przykładzie

W przykładzie z wieloma krokami użyjemy okna dialogowego kaskadowego, kilku monitów i okna dialogowego składnika, aby utworzyć interakcję, która zadaje użytkownikowi serię pytań. Kod używa okna dialogowego, aby wykonać następujące kroki:

Kroki Typ monitu
Poproś użytkownika o sposób transportu Monit o wybór
Poproś użytkownika o podanie swojej nazwy Monit tekstowy
Zapytaj użytkownika, czy chce podać swój wiek Potwierdź monit
Jeśli odpowiedzieli tak, poproś o swój wiek Monit o podanie numeru z walidacją umożliwiający zaakceptowanie wieku większego niż 0 i mniej niż 150.
Zapytaj, czy zebrane informacje są "ok" Ponowne użycie monitu potwierdzania

Na koniec, jeśli odpowiedzieli tak, wyświetl zebrane informacje; w przeciwnym razie poinformuj użytkownika, że ich informacje nie będą przechowywane.

Okno dialogowe Implementowanie składnika

W przykładzie z wieloma krokami użyjemy okna dialogowego kaskadowego, kilku monitów i okna dialogowego składnika, aby utworzyć interakcję, która zadaje użytkownikowi serię pytań.

Okno dialogowe składnika hermetyzuje co najmniej jedno okno dialogowe. Okno dialogowe składnika ma wewnętrzny zestaw okien dialogowych, a okna dialogowe i monity dodane do tego wewnętrznego zestawu okien dialogowych mają własne identyfikatory widoczne tylko w oknie dialogowym składnika.

Aby użyć okien dialogowych, zainstaluj pakiet NuGet Microsoft.Bot.Builder.Dialogs .

Dialogs\UserProfileDialog.cs

W tym UserProfileDialog przypadku klasa pochodzi z ComponentDialog klasy .

public class UserProfileDialog : ComponentDialog

W konstruktorze AddDialog metoda dodaje okna dialogowe i monity do okna dialogowego składnika. Pierwszy element dodany za pomocą tej metody jest ustawiany jako początkowe okno dialogowe. Początkowe okno dialogowe można zmienić, jawnie ustawiając InitialDialogId właściwość . Po uruchomieniu okna dialogowego składnika zostanie uruchomione jego początkowe okno dialogowe.

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);
}

Poniższy kod reprezentuje pierwszy krok okna dialogowego kaskadowego.

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);
}

Aby uzyskać więcej informacji na temat implementowania okien dialogowych kaskadowych, zobacz implementowanie sekwencyjnego przepływu konwersacji.

W czasie wykonywania okno dialogowe składnika utrzymuje własny stos okien dialogowych. Po uruchomieniu okna dialogowego składnika:

  • Wystąpienie jest tworzone i dodawane do zewnętrznego stosu okien dialogowych
  • Tworzy wewnętrzny stos okna dialogowego, który dodaje do stanu
  • Uruchamia początkowe okno dialogowe i dodaje je do wewnętrznego stosu okien dialogowych.

Kontekst nadrzędny widzi składnik jako aktywne okno dialogowe. Jednak kontekst wewnątrz składnika wygląda tak, jakby początkowe okno dialogowe było aktywnym dialogem.

Wywoływanie okna dialogowego z bota

W zewnętrznym zestawie okien dialogowych, do którego dodano okno dialogowe składnika, okno dialogowe składnika ma identyfikator, za pomocą którego został utworzony. W zestawie zewnętrznym składnik wygląda jak pojedyncze okno dialogowe, podobnie jak monity.

Aby użyć okna dialogowego składnika, dodaj wystąpienie do zestawu okien dialogowych bota.

Bots\DialogBot.cs

W przykładzie jest to wykonywane przy użyciu RunAsync metody wywoływanej z metody bota OnMessageActivityAsync .

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);
}

Testowanie bota

  1. Jeśli jeszcze tego nie zrobiono, zainstaluj program Bot Framework Emulator.
  2. Uruchom przykład lokalnie na maszynie.
  3. Uruchom emulator, połącz się z botem i wyślij komunikaty, jak pokazano poniżej.

Przykładowa transkrypcja z okna dialogowego monitu o wiele kolei.

Dodatkowe informacje

Jak działa anulowanie w oknach dialogowych składników

Jeśli wywołasz anulowanie wszystkich okien dialogowych z kontekstu okna dialogowego składnika, okno dialogowe składnika spowoduje anulowanie wszystkich okien dialogowych na stosie wewnętrznym, a następnie zakończenie, powrót kontrolki do następnego okna dialogowego na stosie zewnętrznym.

Jeśli wywołasz anulowanie wszystkich okien dialogowych z kontekstu zewnętrznego, składnik zostanie anulowany wraz z resztą okien dialogowych w kontekście zewnętrznym.

Następne kroki

Dowiedz się, jak tworzyć złożone konwersacje, które rozgałęzić i pętli.