Unterschiede zwischen Version 3 und Version 4 des .NET SDKDifferences between the v3 and v4 .NET SDK

gilt für: SDK v4APPLIES TO: SDK v4

Version 4 des Bot Framework SDK unterstützt den gleichen zugrunde liegenden Bot Framework-Dienst wie Version 3.Version 4 of the Bot Framework SDK supports the same underlying Bot Framework Service as version 3. Für Version 4 wurde allerdings die Vorgängerversion des SDK überarbeitet, um Entwicklern mehr Flexibilität und Kontrolle für ihre Bots zu bieten.However, v4 is a refactoring of the previous version of the SDK to allow developers more flexibility and control over their bots. Dazu wurden unter anderem folgende wichtige Änderungen an dem SDK vorgenommen:Major changes in the SDK include:

  • Einführung eines Bot-Adapters.Introduction of a bot adapter. Der Adapter ist Teil des Aktivitätsverarbeitungsstapels.The adapter is part of the activity processing stack.
    • Der Adapter wickelt die Bot Framework-Authentifizierung ab.The adapter handles Bot Framework authentication.
    • Der Adapter verwaltet ein- und ausgehenden Datenverkehr zwischen einem Kanal und dem Turn-Handler Ihres Bots und kapselt dabei die an den Bot Framework Connector gerichteten Aufrufe.The adapter manages incoming and outgoing traffic between a channel and your bot's turn handler, encapsulating the calls to the Bot Framework Connector.
    • Der Adapter initialisiert den Kontext für jeden Turn.The adapter initializes context for each turn.
    • Weitere Informationen finden Sie unter Funktionsweise von Bots.For more details, see how bots work.
  • Umgestaltete Zustandsverwaltung.Refactored state management.
    • Zustandsdaten stehen in einem Bot nicht mehr automatisch zur Verfügung.State data is no longer automatically available within a bot.
    • Der Zustand wird nun über Zustandsverwaltungsobjekte und Eigenschaftenaccessoren verwaltet.State is now managed via state management objects and property accessors.
    • Weitere Informationen finden Sie unter Verwalten des Zustands.For more details, see managing state.
  • Neue Dialogbibliothek.A new Dialogs library.
    • Dialoge der Version 3 müssen für die neue Dialogbibliothek umgeschrieben werden.v3 dialogs will need to be rewritten for the new dialog library.
    • Es gibt keine bewertbaren Elemente (Scoreables) mehr.Scoreables no longer exist. Sie können überprüfen, ob „globale“ Befehle vorhanden sind, bevor Sie die Steuerung an Ihre Dialoge übergeben.You can check for "global" commands, before passing control to your dialogs. Je nach Ihrem Entwurf des v4-Bots kann dies im Nachrichtenhandler oder in einem übergeordneten Dialog angeordnet sein.Depending on how you design your v4 bot, this could be in the message handler or a parent dialog. Ein Beispiel finden Sie unter Behandeln von Benutzerunterbrechungen.For an example, see how to handle user interruptions.
    • Weitere Informationen finden Sie unter Dialogbibliothek.For more details, see dialogs library.
  • Unterstützung von ASP.NET-Core.Support for ASP.NET Core.
    • Die Vorlagen zum Erstellen neuer C#-Bots sind für das ASP.NET Core-Framework konzipiert.The templates for creating new C# bots target the ASP.NET Core framework.
    • Sie können zwar auch weiterhin ASP.NET für Ihre Bots verwenden, in Version 4 liegt der Schwerpunkt jedoch auf der Unterstützung des ASP.NET Core-Frameworks.You can still use ASP.NET for your bots, but our focus for v4 is on supporting the ASP.NET Core framework.
    • Weitere Informationen zu diesem Framework finden Sie in der Einführung in ASP.NET Core.See the introduction to ASP.NET Core for more information about this framework.

AktivitätsverarbeitungActivity processing

Wenn Sie den Adapter für Ihren Bot erstellen, müssen Sie auch einen Nachrichtenhandler-Delegaten bereitstellen, der eingehende Aktivitäten von Kanälen und Benutzern empfängt.When you create the adapter for your bot, you also provide a message handler delegate that will receive incoming activities from channels and users. Der Adapter erstellt für jede empfangene Aktivität ein Turn-Kontextobjekt.The adapter creates a turn context object for each received activity. Er übergibt das Turn-Kontextobjekt an den Turn-Handler des Bots und verwirft das Objekt nach Abschluss des Turns wieder.It passes the turn context object to the bot's turn handler, and then disposes the object when the turn completes.

Der Turn-Handler kann verschiedenste Arten von Aktivitäten empfangen.The turn handler can receive many types of activities. Im Allgemeinen empfiehlt es sich, nur Aktivitäten vom Typ Nachricht an Dialoge in Ihrem Bot weiterzuleiten.In general, you will want to forward only message activities to any dialogs your bot contains. Wenn Sie Ihren Bot von ActivityHandler ableiten, leitet der Turn-Handler des Bots alle Nachrichtenaktivitäten an OnMessageActivityAsync weiter.If you derive your bot from ActivityHandler, the bot's turn handler will forward all message activities to OnMessageActivityAsync. Setzen Sie diese Methode außer Kraft, um die Logik für die Nachrichtenverarbeitung hinzuzufügen.Override this method to add message handling logic. Ausführliche Informationen zu Aktivitätstypen finden Sie im Aktivitätsschema.For detailed information about activity types, see the activity schema.

Behandeln von TurnsHandling turns

Verwenden Sie bei der Behandlung einer Nachricht den Turn-Kontext, um Informationen zur eingehenden Aktivität abzurufen und Aktivitäten an den Benutzer zu senden:When handling a message, use the turn context to get information about the incoming activity and to send activities to the user:

AufgabeTask ProzessProcess
So rufen Sie die eingehende Aktivität abTo get the incoming activity Rufen Sie die Eigenschaft Activity des Turn-Kontexts ab.Get the turn context's Activity property.
So erstellen und senden Sie eine Aktivität an den BenutzerTo create and send an activity to the user Rufen Sie die Methode SendActivityAsync des Turn-Kontexts auf.Call the turn context's SendActivityAsync method.
Weitere Informationen finden Sie unter Senden und Empfangen einer Textnachricht sowie unter Hinzufügen von Medien zu Nachrichten.For more information, see send and receive a text message and add media to messages.

Die Klasse MessageFactory stellt einige Hilfsmethoden zum Erstellen und Formatieren von Aktivitäten bereit.The MessageFactory class provides some helper methods for creating and formating activities.

Keine bewertbaren Dialoge mehrScorables is gone

Behandeln Sie diese in der Nachrichtenschleife des Bots.Handle these in the bot's message loop. Eine entsprechende Anleitung für Dialoge der Version 4 finden Sie unter Behandeln von Benutzerunterbrechungen.For a description of how to do this with v4 dialogs, see how to handle user interruptions.

Zusammensetzbare bewertbare Dispatchstrukturen und zusammensetzbare Kettendialoge (etwa Standardausnahme) wurden ebenfalls entfernt.Composable scorable dispatch trees and composable chain dialogs, such as default exception, are also gone. Diese Funktion lässt sich unter anderem mittels Implementierung innerhalb des Turn-Handlers Ihres Bots reproduzieren.One way to reproduce this functionality, is to implement it within your bot's turn handler.

ZustandsverwaltungState management

In v3 konnten Sie Konversationsdaten im Bot State-Dienst speichern. Dieser Dienst ist Teil einer größeren Suite mit Diensten, die von Bot Framework bereitgestellt werden.In v3, you could store conversation data in the Bot State Service, part of the larger suite of services provided by the Bot Framework. Der Dienst wurde aber bereits zum 31. März 2018 eingestellt.However, the service has been retired since March 31st, 2018. Ab v4 entsprechen die Entwurfsaspekte zur Verwaltung des Zustands der Vorgehensweise für reguläre Web-Apps, und es sind verschiedene Optionen verfügbar.Beginning with v4, the design considerations on managing state is just like any Web App and there are a number of options available. Die Zwischenspeicherung im Arbeitsspeicher und in demselben Prozess ist normalerweise am einfachsten. Für Produktions-Apps sollten Sie den Zustand aber auf beständigere Weise speichern, z. B. in einer SQL- oder NoSQL-Datenbank oder als Blobs.Caching it in memory and in the same process is usually the easiest; however, for production apps you should store state more permanently, such as in an SQL or NoSQL database or as blobs.

In Version 4 werden zur Verwaltung des Zustands weder die Eigenschaften UserData, ConversationData und PrivateConversationData noch Datenbehälter verwendet.v4 doesn't use UserData, ConversationData, and PrivateConversationData properties and data bags to manage state. Der Zustand wird nun über Zustandsverwaltungsobjekte und Eigenschaftenaccessoren verwaltet, wie unter Verwalten des Zustands beschrieben.State is now managed via state management objects and property accessors as described in managing state.

In Version 4 werden die Klassen UserState, ConversationState und PrivateConversationState definiert, um Zustandsdaten für den Bot zu verwalten.v4 defines UserState, ConversationState, and PrivateConversationState classes that manage state data for the bot. Für jede Eigenschaft, die Sie dauerhaft speichern möchten, muss ein Zustandseigenschaftenaccessor erstellt werden, anstatt sie nur zu lesen und in einen vordefinierten Datenbehälter zu schreiben.You need to create a state property accessor for each property you want to persist, instead of just reading and writing to a predefined data bag.

Einrichten des ZustandsSetting up state

Der Zustand sollte nach Möglichkeit in Form von Singletons konfiguriert werden (in Startup.cs für .NET Core oder in Global.asax.cs für .NET Framework).State should be configured as singletons where possible, in Startup.cs for .NET Core or in Global.asax.cs for .NET Framework.

  1. Initialisieren Sie eines oder mehrere der Objekte vom Typ IStorage.Initialize one or more of the IStorage objects. Dies stellt den Sicherungsspeicher für die Daten Ihres Bots dar.This represents the backing store for your bot's data. In Version 4 des SDK stehen einige Speicherebenen zu Verfügung.The v4 SDK provides a few storage layers. Sie können auch eigene implementieren, um eine Verbindung mit einer anderen Art von Speicher herzustellen.You can also implement your own, to connect to a different type of store.
  2. Erstellen und registrieren Sie anschließend nach Bedarf Objekte für die Zustandsverwaltung.Then, create and register state management objects as necessary. Ihnen stehen die gleichen Bereiche zur Verfügung wie in Version 3, und Sie können bei Bedarf weitere erstellen.You have the same scopes available as in v3, and you can create others if you need to.
  3. Erstellen und registrieren Sie dann Zustandseigenschaftenaccessoren für die Eigenschaften, die Ihr Bot benötigt.Then, create and register state property accessors for the properties your bot needs. Innerhalb eines Zustandsverwaltungsobjekts muss jeder Eigenschaftenaccessor einen eindeutigen Namen besitzen.Within a state management object, each property accessor needs a unique name.

Verwenden des ZustandsUsing state

Sie können die Abhängigkeitsinjektion verwenden, um bei der Bot-Erstellung darauf zuzugreifen.You can use dependency injection to access these whenever your bot is created. (In ASP.NET wird für jeden Turn eine neue Instanz Ihres Bot- oder Nachrichtencontrollers erstellt.) Verwenden Sie die Zustandseigenschaftenaccessoren, um Ihre Eigenschaften abzurufen und zu aktualisieren, und die Zustandsverwaltungsobjekte, um Änderungen in den Speicher zu schreiben.(In ASP.NET, a new instance of your bot or message controller is created for every turn.) Use the state property accessors to get and update your properties, and use the state management objects to write any changes to storage. Als Nächstes erfahren Sie, wie Sie einige gängige Aufgaben ausführen. Berücksichtigen Sie dabei jedoch immer mögliche Parallelitätsprobleme.With the understanding that you should take concurrency issues into account, here is how to accomplish some common tasks.

AufgabeTask ProzessProcess
So erstellen Sie einen ZustandseigenschaftenaccessorTo create a state property accessor Rufen Sie BotState.CreateProperty<T> auf.Call BotState.CreateProperty<T>.
BotState ist die abstrakte Basisklasse für Konversation, private Konversation und Benutzerzustand.BotState is the abstract base class for conversation, private conversation, and user state.
So rufen Sie den aktuellen Wert einer Eigenschaft abTo get the current value of a property Rufen Sie IStatePropertyAccessor<T>.GetAsync auf.Call IStatePropertyAccessor<T>.GetAsync.
Sollte zuvor noch kein Wert festgelegt worden sein, wird mithilfe des Factory-Standardparameters ein Wert generiert.If no value has been previously set, then it will use the default factory parameter to generate a value.
So aktualisieren Sie den aktuellen zwischengespeicherten Wert einer EigenschaftTo update the current, cached value of a property Rufen Sie IStatePropertyAccessor<T>.SetAsync auf.Call IStatePropertyAccessor<T>.SetAsync.
Dadurch wird nicht die zugrunde liegende Speicherebene, sondern lediglich der Cache aktualisiert.This only updates the cache, and not the backing storage layer.
So speichern Sie Zustandsänderungen dauerhaft im SpeicherTo persist state changes to storage Rufen Sie vor dem Verlassen des Turn-Handlers BotState.SaveChangesAsync für die Zustandsverwaltungsobjekte auf, in denen sich der Zustand geändert hat.Call BotState.SaveChangesAsync for any of the state management objects in which state has changed before exiting the turn handler.

Verwalten von NebenläufigkeitManaging concurrency

Ihr Bot muss unter Umständen Zustände parallel verwalten.Your bot may need to manage state concurrency. Weitere Informationen finden Sie im Abschnitt Speichern des Zustands von Verwalten des Zustands sowie im Abschnitt Verwalten von Parallelität mit eTags von Direktes Schreiben in den Speicher.For more information, see the saving state section of Managing state, and the manage concurrency using eTags section of Write directly to storage.

DialogbibliothekDialogs library

Im Anschluss finden Sie einige der wesentlichen Änderungen für Dialoge:Here are some of the major changes to dialogs:

  • Die Dialogbibliothek ist jetzt ein separates NuGet-Paket: Microsoft.Bot.Builder.Dialogs.The dialogs library is now a separate NuGet package: Microsoft.Bot.Builder.Dialogs.
  • Dialogklassen müssen nicht mehr serialisierbar sein.Dialog classes no longer need to be serializable. Der Dialogzustand wird über einen Zustandseigenschaftenaccessor vom Typ DialogState verwaltet.Dialog state is managed through a DialogState state property accessor.
    • Im Gegensatz zum eigentlichen Dialogobjekt bleibt die Dialogzustandseigenschaft nun zwischen Turns erhalten.The dialog state property is now persisted between turns, as opposed to the dialog object itself.
  • Die Schnittstelle IDialogContext wird durch die Klasse DialogContext ersetzt.The IDialogContext interface is replaced by the DialogContext class. Innerhalb eines Turns erstellen Sie einen Dialogkontext für einen Dialogsatz.Within a turn, you create a dialog context for a dialog set.
    • Dieser Dialogkontext kapselt den Dialogstapel (den alten Stapelrahmen).This dialog context encapsulates the dialog stack (the old stack frame). Die entsprechenden Informationen werden in der Dialogzustandseigenschaft gespeichert.This information is persisted within the dialog state property.
  • Die Schnittstelle IDialog wird durch die abstrakte Klasse Dialog ersetzt.The IDialog interface is replaced by the abstract Dialog class.

Definieren von DialogenDefining dialogs

v3 hat zwar über eine flexible Möglichkeit zum Implementieren von Dialogen über die IDialog-Schnittstelle verfügt, aber Sie mussten für die Features, z. B. die Überprüfung, Ihren eigenen Code implementieren.While v3 provided a flexible way to implement dialogs using the IDialog interface, it meant that you had to implement your own code for features such as validation. In v4 gibt es jetzt Eingabeaufforderungsklassen, mit denen die Benutzereingaben für Sie automatisch überprüft werden, eine Beschränkung auf einen bestimmten Typ (z. B. eine ganze Zahl) durchgeführt wird und der Benutzer erneut zur Eingabe aufgefordert wird, bis er eine gültige Eingabe bereitstellt.In v4, there are now prompt classes that will automatically validate the user input for you, constrain it to a specific type (such as an integer), and prompt the user again until they provide valid input. Dies bedeutet, dass Sie als Entwickler im Allgemeinen weniger Code schreiben müssen.In general, this means less code to write as a developer.

Beim Definieren von Dialogen stehen Ihnen nun mehrere Optionen zur Verfügung:You have a few options for how to define dialogs now:

DialogtypDialog type BESCHREIBUNGDescription
Ein Komponentendialog (abgeleitet von der Klasse ComponentDialog).A component dialog, derived from the ComponentDialog class Mit dieser Option können Sie Dialogcode ohne Namenskonflikte mit den äußeren Kontexten kapseln.Allows you to encapsulate dialog code without naming conflicts with the outer contexts. Weitere Informationen finden Sie unter Wiederverwenden von Dialogen.See reuse dialogs.
Ein Wasserfalldialog (eine Instanz der Klasse WaterfallDialog).A waterfall dialog, an instance of the WaterfallDialog class Diese Option lässt sich gut mit Eingabeaufforderungsdialogen kombinieren, die dazu dienen, verschiedene Arten von Benutzereingaben anzufordern und zu überprüfen.Designed to work well with prompt dialogs, which prompt for and validate various types of user input. Per Wasserfall wird zwar der Großteil des Prozesses für Sie automatisiert, aber für diese Vorgehensweise ist ein bestimmtes Dialogcodeformat erforderlich (siehe sequenzieller Konversationsablauf).A waterfall automates most of the process for you, but imposes a certain form to your dialog code; see sequential conversation flow.
Ein benutzerdefinierter Dialog (abgeleitet von der abstrakten Dialog-Klasse).A custom dialog, derived from the abstract Dialog class Diese Option bietet ein Höchstmaß an Flexibilität beim Dialogverhalten, erfordert jedoch umfangreichere Kenntnisse über die Implementierung des Dialogstapels.This gives you the most flexibility in how your dialogs behave, but also requires you to know more about how the dialog stack is implemented.

In v3 haben Sie FormFlow verwendet, um für eine Aufgabe eine Reihe von Schritten auszuführen.In v3, you used FormFlow to perform a set number of steps for a task. In v4 wurde FormFlow durch den Wasserfalldialog ersetzt.In v4, the waterfall dialog replaces FormFlow. Wenn Sie einen Wasserfalldialog erstellen, definieren Sie die Schritte des Dialogs im Konstruktor.When you create a waterfall dialog, you define the steps of the dialog in the constructor. Die Reihenfolge der ausgeführten Schritte entspricht genau Ihrer Deklaration, und sie werden einer nach dem anderen ausgeführt.The order of steps executed follows exactly how you have declared it and automatically moves forward one after another.

Sie können auch komplexe Ablaufsteuerungen erstellen, indem Sie mehrere Dialoge verwenden. Informationen hierzu finden Sie unter Erweiterter Konversationsfluss.You can also create complex control flows by using multiple dialogs; see advanced conversation flow.

Für den Zugriff auf einen Dialog müssen Sie eine Instanz des Dialogs in einem Dialogsatz platzieren und anschließend einen Dialogkontext für diesen Satz generieren.To access a dialog, you need to put an instance of it in a dialog set and then generate a dialog context for that set. Beim Erstellen eines Dialogsatzes müssen Sie einen Eigenschaftenaccessor für den Dialogzustand bereitstellen.You need to provide a dialog state property accessor when you create a dialog set. Dadurch kann das Framework den Dialogzustand zwischen Turns beibehalten.This allows the framework to persist dialog state from one turn to the next. Die Zustandsverwaltung in Version 4 wird unter Verwalten des Zustands beschrieben.Managing state describes how state is managed in v4.

Verwenden von DialogenUsing dialogs

Hier finden Sie eine Liste mit allgemeinen Vorgängen in Version 3 sowie Informationen zu deren Implementierung in einem Wasserfalldialog.Here's a list of common operations in v3, and how to accomplish them within a waterfall dialog. Hinweis: Bei den Schritten eines Wasserfalldialogs wird jeweils die Rückgabe eines Werts vom Typ DialogTurnResult erwartet.Note that each step of a waterfall dialog is expected to return a DialogTurnResult value. Wird dieser Wert nicht zurückgegeben, endet der Wasserfall möglicherweise vorzeitig.If it doesn't, the waterfall may end early.

VorgangOperation V3v3 v4v4
Start des Dialogs behandelnHandle the start of your dialog Implementieren Sie IDialog.StartAsync.Implement IDialog.StartAsync Legen Sie diesen Vorgang als ersten Schritt eines Wasserfalldialogs fest.Make this the first step of a waterfall dialog.
Senden einer AktivitätSend an activity Rufen Sie IDialogContext.PostAsync auf.Call IDialogContext.PostAsync. Rufen Sie ITurnContext.SendActivityAsync auf.Call ITurnContext.SendActivityAsync.
Verwenden Sie die Eigenschaft Context des Schrittkontexts, um den Turn-Kontext abzurufen.Use the step context's Context property to get the turn context.
Warten auf Antwort des BenutzersWait for a user's response Verwenden eines Parameters vom Typ IAwaitable<IMessageActivity> und Aufrufen von IDialogContext.WaitUse an IAwaitable<IMessageActivity> parameter and call IDialogContext.Wait Geben Sie zurück, dass auf ITurnContext.PromptAsync gewartet wird, um einen Eingabeaufforderungsdialog zu starten.Return await ITurnContext.PromptAsync to begin a prompt dialog. Rufen Sie anschließend im nächsten Schritt des Wasserfalls das Ergebnis ab.Then retrieve the result in the next step of the waterfall.
Fortsetzung des Dialogs behandelnHandle continuation of your dialog Rufen Sie IDialogContext.Wait auf.Call IDialogContext.Wait. Fügen Sie einem Wasserfalldialog zusätzliche Schritte hinzu, oder implementieren Sie Dialog.ContinueDialogAsync.Add additional steps to a waterfall dialog, or implement Dialog.ContinueDialogAsync
Signalisieren des Endes der Verarbeitung bis zur nächsten Nachricht des BenutzersSignal the end of processing until the user's next message Rufen Sie IDialogContext.Wait auf.Call IDialogContext.Wait. Geben Sie Dialog.EndOfTurn zurück.Return Dialog.EndOfTurn.
Starten eines untergeordneten DialogsBegin a child dialog Rufen Sie IDialogContext.Call auf.Call IDialogContext.Call. Geben Sie zurück, dass auf die Methode BeginDialogAsync des Schritts gewartet wird.Return await the step context's BeginDialogAsync method.
Wenn der untergeordnete Dialog einen Wert zurückgibt, steht dieser im nächsten Schritt des Wasserfalls über die Eigenschaft Result des Schrittkontexts zur Verfügung.If the child dialog returns a value, that value is available in the next step of the waterfall via the step context's Result property.
Ersetzen des aktuellen Dialogs durch einen neuen DialogReplace the current dialog with a new dialog Rufen Sie IDialogContext.Forward auf.Call IDialogContext.Forward. Geben Sie zurück, dass auf ITurnContext.ReplaceDialogAsync gewartet wird.Return await ITurnContext.ReplaceDialogAsync.
Abschluss des aktuellen Dialogs signalisierenSignal that the current dialog has completed Rufen Sie IDialogContext.Done auf.Call IDialogContext.Done. Geben Sie zurück, dass auf die Methode EndDialogAsync des Schrittkontexts gewartet wird.return await the step context's EndDialogAsync method.
Verlassen eines Dialogs nach einem FehlerFail out of a dialog. Rufen Sie IDialogContext.Fail auf.Call IDialogContext.Fail. Lösen Sie eine Ausnahme aus, die auf einer anderen Ebene des Bots abgefangen wird, beenden Sie den Schritt mit dem Status Cancelled, oder rufen Sie CancelAllDialogsAsync des Schritt- oder Dialogkontexts auf.Throw an exception to be caught at another level of the bot, end the step with a status of Cancelled, or call the step or dialog context's CancelAllDialogsAsync.
Hinweis: In Version 4 werden Ausnahmen innerhalb eines Dialogs nicht entlang des Dialogstapels, sondern entlang des C#-Stapel verbreitet.Note that in v4, exceptions within a dialog are propagated along the C# stack, instead of the dialog stack.

Weitere Hinweise zum Code der Version 4:Other notes about the v4 code:

  • Die verschiedenen von Prompt abgeleiteten Klassen in Version 4 implementieren Benutzereingabeaufforderungen als separate, zweistufige Dialoge.The various Prompt derived classes in v4 implement user prompts as separate, two-step dialogs. Informieren Sie sich über das Implementieren eines sequenziellen Konversationsablaufs.See how to implement sequential conversation flow.
  • Verwenden Sie DialogSet.CreateContextAsync, um einen Dialogkontext für den aktuellen Turn zu erstellen.Use DialogSet.CreateContextAsync to create a dialog context for the current turn.
  • Verwenden Sie innerhalb eines Dialogs die Eigenschaft DialogContext.Context, um den aktuellen Turn-Kontext abzurufen.From within a dialog, use the DialogContext.Context property to get the current turn context.
  • Wasserfallschritte verfügen über einen von DialogContext abgeleiteten Parameter WaterfallStepContext.Waterfall steps have a WaterfallStepContext parameter, which derives from DialogContext.
  • Alle konkreten Dialog- und Eingabeaufforderungsklassen werden von der abstrakten Dialog-Klasse abgeleitet.All concrete dialog and prompt classes derive from the abstract Dialog class.
  • Sie weisen eine ID zu, wenn Sie einen Komponentendialog erstellen.You assign an ID when you create a component dialog. Jedem Dialog in einem Dialogsatz muss eine ID zugewiesen sein, die innerhalb dieses Satzes eindeutig ist.Each dialog in a dialog set needs to be assigned an ID unique within that set.

Übergeben des Zustands zwischen und innerhalb von DialogenPassing state between and within dialogs

Im Abschnitt "Dialogzustand" des Dialogsbibliotheksartikels und in den Kontexteigenschaften für Wasserfallschritte und unter Verwendung von Dialogen des Artikels Informationen zu Komponenten- und Wasserfalldialogen wird beschrieben, wie der Dialogzustand in Version 4 verwaltet wird. The dialog state section of the dialogs library article and the waterfall step context properties and using dialogs sections of the about component and waterfall dialogs article describe how to manage dialog state in v4.

„IAwaitable“ nicht mehr vorhandenIAwaitable is gone

Die Aktivität des Benutzers in einem Turn muss aus dem Turn-Kontext abgerufen werden.To get the user's activity in a turn, get it from the turn context.

So können Sie den Benutzer zu einer Eingabe auffordern und das Ergebnis einer Eingabeaufforderung empfangen:To prompt the user and receive the result of a prompt:

  • Fügen Sie Ihrem Dialogsatz eine geeignete Eingabeaufforderungsinstanz hinzu.Add an appropriate prompt instance to your dialog set.
  • Rufen Sie die Eingabeaufforderung über einen Schritt in einem Wasserfalldialog auf.Call the prompt from a step in a waterfall dialog.
  • Rufen Sie im nächsten Schritt das Ergebnis aus der Eigenschaft Result des Schrittkontexts ab.Retrieve the result from the step context's Result property in the following step.

FormFlowFormflow

In Version 3 war FormFlow im C# SDK enthalten, im JavaScript SDK dagegen nicht.In v3, Formflow was part of the C# SDK, but not part of the JavaScript SDK. In Version 4 des SDK ist FormFlow nicht enthalten. Es gibt jedoch eine Communityversion für C#.It is not part of the v4 SDK, but a community version exists for C#.

Name des NuGet-PaketsNuGet package name GitHub-Repository der CommunityCommunity GitHub repo
Bot.Builder.Community.Dialogs.FormflowBot.Builder.Community.Dialogs.Formflow BotBuilderCommunity/botbuilder-community-dotnet/libraries/Bot.Builder.Community.Dialogs.FormFlowBotBuilderCommunity/botbuilder-community-dotnet/libraries/Bot.Builder.Community.Dialogs.FormFlow

Zusätzliche RessourcenAdditional resources