Übersicht über SkillsSkills overview

gilt für: SDK v4APPLIES TO: SDK v4

Ab Version 4.7 des Bot Framework SDK können Sie einen Bot erweitern, indem Sie einen anderen Bot (einen Skill) verwenden.Starting with version 4.7 of the Bot Framework SDK, you can extend a bot using another bot (a skill). Ein Skill kann von verschiedenen anderen Bots genutzt werden, um die Wiederverwendbarkeit zu vereinfachen. Sie können einen Bot für Benutzer erstellen und erweitern, indem Sie Ihre eigenen Skills oder die Angebote von Drittanbietern nutzen.A skill can be consumed by various other bots, facilitating reuse, and in this way, you can create a user-facing bot and extend it by consuming your own or 3rd party skills.

  • Ein Skill ist ein Bot, der eine Reihe von Aufgaben für einen anderen Bot durchführen kann.A skill is a bot that can perform a set of tasks for another bot. Ein Bot kann sowohl ein Skill- als auch ein benutzerorientierter Bot sein.A bot can be both a skill and a user-facing bot.
  • Ein Skillconsumer ist ein Bot, der einen oder mehrere Skills aufrufen kann.A skill consumer is a bot that can call one or more skills. Ein benutzerorientierter Skillconsumer wird auch als Stammbot bezeichnet.A user-facing skill consumer is also called a root bot.
  • Ein Skillmanifest ist eine JSON-Datei, in der die ausführbaren Aktionen, die Ein- und Ausgabeparameter und die Endpunkte des Skills beschrieben werden.A skill manifest is a JSON file that describes the actions the skill can perform, its input and output parameters, and the skill's endpoints.

Anders ausgedrückt: Der Benutzer interagiert direkt mit dem Stammbot, und der Stammbot delegiert einen Teil seiner Konversationslogik an einen Skill.In other words, the user interacts directly with the root bot, and the root bot delegates some of its conversational logic to a skill.

Das Skillfeature ist wie folgt konzipiert:The skills feature is designed so that:

  • Skills und Consumer kommunizieren über HTTP mit dem Bot Framework-Protokoll.Skills and consumers communicate over HTTP using the bot framework protocol.
  • Ein Skillconsumer kann mehrere Skills nutzen.A skill consumer can consume multiple skills.
  • Ein Skillconsumer kann einen Skill unabhängig von der Sprache nutzen, die zu dessen Implementierung verwendet wird.A skill consumer can consume a skill regardless of the language used to implement the skill. Beispielsweise kann ein C#-Bot einen mit Python implementierten Skill nutzen.For example, a C# bot can consume a skill implemented using Python.
  • Ein Skill kann auch ein Skillconsumer sein und andere Skills aufrufen.A skill can also be a skill consumer and call other skills.
  • Skills unterstützen die Benutzerauthentifizierung, die aber nur lokal für den Skill gilt und nicht auf einen anderen Bot übertragen werden kann.Skills support user authentication; however, user authentication is local to the skill and cannot be transferred to another bot.
  • Skills können sowohl mit dem Bot Framework- als auch mit benutzerdefinierten Adaptern verwendet werden.Skills can work with both the Bot Framework adapter and custom adapters.

Dieses Diagramm zeigt einige der möglichen Permutationen.This diagram shows some of the possible permutations.

Blockdiagramm

Konzeptionelle ArchitekturConceptual architecture

Ein Skill und ein Skillconsumer sind getrennte Bots, die unabhängig voneinander veröffentlicht werden.A skill and skill consumer are separate bots, and you publish them independently.

  • Ein Fähigkeits Consumer benötigt zusätzliche Logik für die Verwaltung einer Qualifikation, wie z. b. den Zeitpunkt, an dem die Fertigkeiten aufgerufen oder abgebrochen werden sollen, usw.A skill consumer requires added logic for managing a skill, such as when to call or cancel the skill, and so on. Zusätzlich zu den üblichen Bot- und Adapterobjekten enthält der Consumer auch einige Skillobjekte, die zum Austauschen von Aktivitäten mit dem Skill verwendet werden.In addition to the usual bot and adapter objects, the consumer includes a few skill-related objects, used to exchange activities with the skill. Ein Fähigkeits Consumer implementiert mindestens zwei HTTP-Endpunkte:A skill consumer implements at least two HTTP endpoints:
    • Ein Messaging Endpunkt empfängt Aktivitäten vom Benutzer oder Kanal.A messaging endpoint receives activities from the user or channel. Dies ist der übliche Messaging Endpunkt, der von allen Bots implementiert wird.This is the usual messaging endpoint that all bots implement.
    • Ein Fähigkeits Host Endpunkt zum Empfangen von Aktivitäten aus einer Qualifikation.A skill host endpoint for receiving activities from a skill. Dies fungiert als Rückruf-URL, die Dienst-URL, auf die die Qualifikation antwortet.This acts as a callback URL, the service URL to which the skill replies. (Der Skills-Consumer muss Code koppeln, der die HTTP-Methoden Anforderung von der Qualifikation mit einem Fähigkeits Handler empfängt.)(The skill consumer needs to pair code that receives the HTTP method request from the skill with a skill handler.)
  • Eine Qualifikation erfordert hinzugefügte Logik, um eine Aktivität zu senden endOfConversation , wenn Sie abgeschlossen ist, damit der Consumer weiß, wann die Weiterleitung von Aktivitäten an die Fähigkeiten beendet werden soll.A skill requires added logic to send an endOfConversation activity when it completes, so that the skill consumer knows when to stop forwarding activities to the skill.

In diesem Diagramm ist der Fluss der Aktivitäten vom Benutzer zum Stammbot und dann zu einem Skill (und zurück) dargestellt.This diagram outlines the flow of activities from the user to the root bot to a skill and back again.

Architekturdiagramm

  1. Der Adapter des Stamm-Bots empfängt Aktivitäten vom Benutzer und leitet sie an den Aktivitätshandler des Stamm-Bots weiter.The root bot's adapter receives activities from the user and forwards them to the root bot's activity handler. (Aktivitäten des Benutzers werden am Messaging Endpunkt des stammbot empfangen.)(Activities from the user are received at the root bot's messaging endpoint.)
  2. Der Stammbot nutzt einen HTTP-Client für Skills, um eine Aktivität an den Skill zu senden.The root bot uses a skill HTTP client to send an activity to the skill. Der Client ruft die Informationen zum consumerfähigkeits-Gespräch aus einer Qualifikations Definition und einer Fähigkeits-Konversations-ID Factory ab.The client gets the consumer-skill conversation information from a skill definition and a skill conversation ID factory. Hierbei ist auch die Dienst-URL enthalten, die vom Skill verwendet wird, um auf die Aktivität zu antworten.This includes the service URL that the skill will use to reply to the activity.
  3. Der Adapter des Skills empfängt Aktivitäten vom Skillconsumer und leitet sie an den Aktivitätshandler des Skills weiter.The skill's adapter receives activities from the skill consumer and forwards them to the skill's activity handler. (Aktivitäten vom Consumer werden am Messaging Endpunkt des Skills-Dienstes empfangen.)(Activities from the consumer are received at the skill bot's messaging endpoint.)
  4. Wenn der Skill antwortet, empfängt der Skillhandler des Bots die Aktivität.When the skill responds, the root bot's skill handler receives the activity. Er ruft die Informationen zur Stamm/Benutzer-Konversation aus der Konversations-ID-Factory für Skills ab.It gets the root-user conversation information from the skill conversation ID factory. Anschließend leitet er die Aktivität an den Adapter des Stamm-Bots weiter.It then forwards the activity to the root bot's adapter. (Aktivitäten aus der Qualifikation werden am Skills Host-Endpunkt des stammbot empfangen.)(Activities from the skill are received at the root bot's skill host endpoint.)
  5. Der Adapter des Stamm-Bots generiert intern eine proaktive Nachricht, um die Konversation mit dem Benutzer fortzusetzen.The root bot's adapter internally generates a proactive message to resume the conversation with the user.
  6. Der Adapter des Stamm-Bots sendet alle Nachrichten vom Skill an den Benutzer.The root bot's adapter sends any messages from the skill to the user.

Diese Objekte dienen als Hilfe beim Verwalten von Skills und Weiterleiten des damit verbundenen Datenverkehrs:These objects help manage skills and route skill traffic:

  • Ein Bot Framework-Skill beschreibt Routinginformationen für einen Skill und kann aus der Konfigurationsdatei des Skillconsumers ausgelesen werden.A Bot Framework skill describes routing information for a skill and can be read from the skill consumer's configuration file.
  • Ein HTTP-Client für Skills sendet Aktivitäten an einen Skill.A skill HTTP client sends activities to a skill.
  • Ein Skillhandler empfängt Aktivitäten von einem Skill.A skill handler receives activities from a skill.
  • Die Konversations-ID-Factory für Skills führt die Übersetzung zwischen dem Benutzer/Stamm-Konversationsverweis und dem Stamm/Skill-Konversationsverweis durch.The skill conversation ID factory translates between the user-root conversation reference and the root-skill conversation reference.
  • Der Bot Connector-Dienst ermöglicht sowohl die Authentifizierung für Kanäle als auch zwischen Bots.The Bot Connector service provides both channel and bot-to-bot authentication. Mithilfe eines Konfigurations Objekts für die Authentifizierung können Sie einem Fähigkeits-oder Fähigkeits Consumer die Anspruchs Überprüfung hinzufügen, um einzuschränken, welche Anwendungen oder Benutzer Zugriff haben.Using an authentication configuration object, you can add claims validation to a skill or skill consumer to limit which applications or users have access.

Von den Skillclient- und Skillhandlerobjekten wird jeweils die Konversations-ID-Factory verwendet, um die Übersetzung zwischen der Konversation, die vom Stammbot zum Interagieren mit dem Benutzer genutzt wird, und der Konversation durchzuführen, die vom Stammbot zum Interagieren mit dem Skill genutzt wird.The skill client and skill handler objects both use the conversation ID factory to translate between the conversation the root bot uses to interact with the user and the conversation the root bot uses to interact with the skill.

Kommunikation zwischen BotsBot-to-bot communication

Es ist wichtig, dass Sie mit bestimmten Aspekten dieses Entwurfs vertraut sind – unabhängig davon, was für einen Bot Sie genau entwerfen.It's important to understand certain aspects of this design, independent of which bot you're designing.

KonversationsverweiseConversation references

Die Benutzer/Stamm-Konversation unterscheidet sich von der Stamm/Skill-Konversation.The user-root conversation is different than the root-skill conversation.

Die Konversations-ID-Factory dient als Hilfe bei Verwalten von Datenverkehr zwischen einem Skillconsumer und einem Skill.The conversation ID factory helps to manage traffic between a skill consumer and a skill. Die Factory führt die Übersetzung zwischen der Konversations-ID des Stamms für den Benutzer und der ID für den Skill durch.The factory translates between the ID of the conversation the root has with the user and the one it has with the skill. Anders ausgedrückt: Es wird eine Konversations-ID generiert, die zwischen dem Stamm und dem Skill verwendet wird, und die ursprüngliche ID der Benutzer/Stamm-Konversation wird aus der ID der Stamm/Skill-Konversation wiederhergestellt.In other words, it generates a conversation ID for use between the root and the skill, and recovers the original user-root conversation ID from the root-skill conversation ID.

Serverübergreifende KoordinationCross-server coordination

Stamm- und Skillbots kommunizieren über HTTP.The root and skill bots communicate over HTTP. Die Instanz des Stammbots, die eine Aktivität von einem Skill empfängt, ist also möglicherweise nicht dieselbe Instanz, die die auslösende Aktivität gesendet hat. Mit anderen Worten können verschiedene Server diese beiden Anforderungen verarbeiten.So, the instance of the root bot that receives an activity from a skill may not be the same instance that sent the initiating activity; in other words, different servers may handle these two requests.

  • Speichern Sie im Skillconsumer immer den Zustand, bevor Sie eine Aktivität an einen Skill weiterleiten.Always save state in the skill consumer before forwarding an activity to a skill. So wird sichergestellt, dass die Instanz, die Datenverkehr von einem Skill empfängt, den Vorgang an dem Punkt fortsetzen kann, bis zu dem die vorherige Instanz vor dem Aufrufen des Skills gekommen ist.This ensures that the instance that receives traffic from a skill can pick up where the previous instance left off before it called the skill.
  • Wenn der Skillhandler eine Aktivität von einem Skill empfängt, übersetzt er diese in ein Format, das für den Skillconsumer geeignet ist, und leitet sie an den Adapter des Consumers weiter.When the skill handler receives an activity from a skill, it translates it into a form appropriate for the skill consumer, and forwards it to the consumer's adapter.

Skillconsumer und -zustandSkill consumer and skill state

Der Skillconsumer und der Skill verwalten ihren eigenen Zustand jeweils separat.The skill consumer and skill manage their own state separately. Der Consumer erstellt aber die Konversations-ID, die er für die Kommunikation mit dem Skill nutzt.However, the consumer creates the conversation ID that it uses to communicate with the skill. Dies kann sich auf den Konversationszustand des Skills auswirken.This can have an effect on conversation state in the skill.

Wichtig

Wie bereits erwähnt, kann es beim Delegieren einer Benutzeraktivität an einen Skill durch den Skillconsumer dazu kommen, dass eine andere Instanz des Consumers die Antwort des Skills empfängt.As noted previously, when the skill consumer delegates a user activity to a skill, a different instance of the consumer may receive the skill response. Der Consumer sollte den Konversationszustand immer sofort speichern, bevor er eine Aktivität an einen Skill weiterleitet.The consumer should always save conversation state immediately before forwarding an activity to a skill.

Authentifizierung zwischen BotsBot-to-bot authentication

Ab Version 4,11 benötigen Sie keine APP-ID und kein Kennwort, um einen Fähigkeits-und Fähigkeits Consumer lokal im Emulator zu testen.Starting with version 4.11, you do not need an app ID and password to test a skill and skill consumer locally in the Emulator. Ein Azure-Abonnement ist weiterhin erforderlich, um Ihre Fähigkeiten in Azure bereitzustellen.An Azure subscription is still required to deploy your skill to Azure.

Die Authentifizierung auf Dienstebene wird vom Bot Connector-Dienst verwaltet.Service-level authentication is managed by the Bot Connector service. Vom Framework werden Bearertoken und Botanwendungs-IDs verwendet, um die Identität der einzelnen Bots zu bestätigen.The framework uses bearer tokens and bot application IDs to verify the identity of each bot. (Im bot Framework wird ein Authentifizierungs Konfigurations Objekt verwendet, um den Authentifizierungs Header bei eingehenden Anforderungen zu validieren.)(The Bot Framework uses an authentication configuration object to validate the authentication header on incoming requests.)

Wichtig

Dies erfordert, dass alle bereitgestellten Bots (der Skills-Consumer und alle Fähigkeiten, die er nutzt) gültige Anwendungs Anmelde Informationen haben.This requires all deployed bots (the skill consumer and any skills it consumes) to have valid application credentials.

AnspruchsüberprüfungClaims validation

Sie müssen der Authentifizierungs Konfiguration ein Anspruchs Validierungs Steuerelement hinzufügen.You must add a claims validator to the authentication configuration. Die Ansprüche werden nach dem Authentifizierungsheader ausgewertet.The claims are evaluated after the authentication header. Lösen Sie einen Fehler oder eine Ausnahme in Ihrem Validierungscode aus, um die Anforderung abzulehnen.Throw an error or exception in your validation code to reject the request.

Hinweis

Der bot führt die Forderungs Validierung aus, wenn er eine APP-ID und ein Kennwort hat. Andernfalls wird die Überprüfung von Ansprüchen nicht durchgeführt.The bot performs claims validation if it has an app ID and password; otherwise, claims validation is not performed.

Es kann viele Gründe geben, warum Sie eine Anforderung ggf. ablehnen möchten, die sonst authentifiziert wird:There are various reasons you might reject an otherwise authenticated request:

  • Wenn der Skillconsumer Datenverkehr nur von Skills akzeptieren soll, mit denen er eine Konversation eingeleitet hat.When the skill consumer should accept traffic only from skills that it may have initiated a conversation with.
  • Wenn ein Skill Teil eines kostenpflichtigen Diensts ist und Benutzer, die nicht in der Datenbank enthalten sind, keinen Zugriff haben sollen.When a skill is part of a paid-for service, and users not in the database should not have access.
  • Wenn Sie den Zugriff auf den Skill auf bestimmte Skillconsumer beschränken möchten.When you want to restrict access to the skill to specific skill consumers.

Wichtig

Wenn Sie kein anspruchsvalidierungs Steuerelement bereitstellen, generiert der bot beim Empfang einer Aktivität von einem anderen bot einen Fehler oder eine AusnahmeIf you don't provide a claims validator, your bot will generate an error or exception upon receiving an activity from another bot, whether your bot is a skill or a skill consumer.

Zusätzliche InformationenAdditional information

Aus Sicht des Benutzers ist der Stammbot der Bot, mit dem er interagiert.From the user's perspective, they are interacting with the root bot. Aus Sicht des Skills ist der Skillconsumer der Kanal, über den die Kommunikation mit dem Benutzer erfolgt.From the skill's perspective, the skill consumer is the channel over which it communicates with the user.