Fertigkeitsübersicht

GILT FÜR: SDK v4

Sie können einen Bot mit einem Skill-Bot erweitern. Eine Qualifikation 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 Qualifikationen oder die Angebote von Drittanbietern nutzen.

  • Ein Skill ist ein Bot, der eine Reihe von Aufgaben für einen anderen Bot ausführen kann – ein Bot kann sowohl ein Skill als auch ein benutzerorientierter Bot sein.
  • Ein Skillconsumer ist ein Bot, der einen oder mehrere Skills aufrufen kann. Ein benutzerorientierter Skillconsumer wird auch als Stammbotbezeichnet.
  • Ein Skillmanifest ist eine JSON-Datei, in der die ausführbaren Aktionen, die Ein- und Ausgabeparameter und die Endpunkte des Skills beschrieben werden.
    • Entwickler, die keinen Zugriff auf den Quellcode der Qualifikation haben, können die Informationen im Manifest nutzen, um ihren „Skill-Consumer“ (also den „Verbraucher der Qualifikation“) zu entwerfen.
    • Das Schema des Qualifikationsmanifests ist eine JSON-Datei, in der das Schema des Qualifikationsmanifests beschrieben ist.
    • Erfahren Sie, wie Sie einen Skill implementieren und wie Sie ein Skillmanifest für Beispielskillmanifeste schreiben.

Anders ausgedrückt: Der Benutzer interagiert direkt mit dem Stamm-Bot, und der Stamm-Bot delegiert einen Teil seiner Konversationslogik an eine Qualifikation.

Das Qualifikationsfeature ist wie folgt konzipiert:

  • Skills und Consumer kommunizieren über HTTP mit dem Bot-Framework-Protokoll.
  • Ein Skill-Consumer kann mehrere Qualifikationen (Skills) nutzen.
  • Ein Skillconsumer kann einen Skill unabhängig von der Sprache nutzen, die zu dessen Implementierung verwendet wird. Beispielsweise kann ein C#-Bot einen mit JavaScript implementierten Skill nutzen.
  • Ein Skill kann auch ein Skillconsumer sein und andere Skills aufrufen.
  • Für Qualifikationen wird die Benutzerauthentifizierung unterstützt. Die Benutzerauthentifizierung gilt aber nur lokal für die Qualifikation und kann nicht auf einen anderen Bot übertragen werden.
  • Qualifikationen können sowohl mit dem Bot Framework-Adapter als auch mit benutzerdefinierten Adaptern verwendet werden.

Dieses Diagramm zeigt einige der möglichen Permutationen.

Illustration of permutations between skill consumers and skills.

Konzeptionelle Architektur

Bei einer Qualifikation und einem Skill-Consumer handelt es sich um separate Bots, die Sie unabhängig voneinander veröffentlichen.

  • Ein Skillconsumer benötigt zusätzliche Logik zur Verwaltung eines Skills, z. B. zum Angeben des Zeitpunkts zum Aufrufen oder Abbrechen des Skills usw. Zusätzlich zu den üblichen Bot- und Adapterobjekten enthält der Consumer auch einige Qualifikationsobjekte, die zum Austauschen von Aktivitäten mit der Qualifikation verwendet werden. Ein Skillconsumer implementiert mindestens zwei HTTP-Endpunkte:
    • Ein Messaging-Endpunkt empfängt Aktivitäten vom Benutzer oder Kanal. Dies ist der übliche Messaging-Endpunkt, den alle Bots implementieren.
    • Ein Skill-Host-Endpunkt für den Empfang von Aktivitäten von einem Skill. Dies dient als Rückruf-URL, die Dienst-URL, auf die der Skill antwortet. (Der Skillconsumer muss Code, der die HTTP-Methodenanforderung vom Skill empfängt, mit einem Skillhandler koppeln.)
  • Ein Skill benötigt zusätzliche Logik, um nach Abschluss der Konversation eine endOfConversation-Aktivität zu senden. Hiermit wird dem Skill-Consumer mitgeteilt, wann die Weiterleitung von Aktivitäten an die Qualifikation beendet werden soll.

In diesem Diagramm ist der Fluss der Aktivitäten vom Benutzer zum Stamm-Bot und dann zu einer Qualifikation (und zurück) dargestellt.

Illustration of how activities flow from the user to the skill and back again.

  1. Der Adapter des Stamm-Bots empfängt Aktivitäten vom Benutzer und leitet sie an den Aktivitätshandler des Stamm-Bots weiter. (Aktivitäten des Benutzers werden am Messaging-Endpunkt des Stamm-Bots empfangen.)
  2. Der Stamm-Bot nutzt einen HTTP-Client für Qualifikationen, um eine Aktivität an die Qualifikation zu senden. Der Client ruft die Informationen zur Consumer/Skill-Konversation aus einer Skilldefinition und einer Konversations-ID-Factory für Skills ab. Hierbei ist auch die Dienst-URL enthalten, die von der Qualifikation verwendet wird, um auf die Aktivität zu antworten.
  3. Der Adapter der Qualifikation empfängt Aktivitäten vom Skill-Consumer und leitet sie an den Aktivitätshandler der Qualifikation weiter. (Aktivitäten des Consumers werden am Messaging-Endpunkt des Skill-Bots empfangen.)
  4. Wenn die Qualifikation antwortet, empfängt der Skill-Handler des Bots die Aktivität. Er ruft die Informationen zur Stamm/Benutzer-Konversation aus der Konversations-ID-Factory für Qualifikationen ab. Anschließend leitet er die Aktivität an den Adapter des Stamm-Bots weiter. (Aktivitäten des Consumers werden am Skill-Host-Endpunkt des Stamm-Bots empfangen.)
  5. Der Adapter des Stamm-Bots generiert intern eine proaktive Nachricht, um die Konversation mit dem Benutzer fortzusetzen.
  6. Der Adapter des Stamm-Bots sendet alle Nachrichten von der Qualifikation an den Benutzer.

Diese Objekte dienen als Hilfe beim Verwalten von Qualifikationen und Weiterleiten des damit verbundenen Datenverkehrs:

  • Eine Bot Framework-Qualifikation beschreibt Routinginformationen für eine Qualifikation und kann aus der Konfigurationsdatei des Skill-Consumers ausgelesen werden.
  • Ein HTTP-Client für Qualifikationen sendet Aktivitäten an eine Qualifikation.
  • Ein Skill-Handler empfängt Aktivitäten von einer Qualifikation.
  • Die Konversations-ID-Factory für Qualifikationen führt die Übersetzung zwischen dem Benutzer/Stamm-Konversationsverweis und dem Stamm/Qualifikation-Konversationsverweis durch.
  • Der Bot Connector-Dienst ermöglicht sowohl die Authentifizierung für Kanäle als auch zwischen Bots. Mit einem Objekt für die Authentifizierungskonfiguration können Sie einem Skill oder Skillconsumer eine Anspruchsüberprüfung hinzufügen, um festzulegen, auf welche Anwendungen oder Benutzer Zugriff haben.

Von den Skill-Client- und Skill-Handler-Objekten wird jeweils die Konversations-ID-Factory verwendet, um die Übersetzung zwischen der Konversation, die vom Stamm-Bot zum Interagieren mit dem Benutzer genutzt wird, und der Konversation, die vom Stamm-Bot zum Interagieren mit der Qualifikation genutzt wird, durchzuführen.

Skillmanifeste

Ein Skillmanifest ist eine JSON-Datei, in der die ausführbaren Aktionen, die Eingabe- und Ausgabeparameter, die Endpunkte des Skills und die Versandmodelle für den Skill beschrieben sind.

Informationen zum Skillmanifestschema finden Sie unter Schreiben eines Skillmanifests.

Kommunikation zwischen Bots

Es ist wichtig, dass Sie mit bestimmten Aspekten dieses Entwurfs vertraut sind – unabhängig davon, was für einen Bot Sie genau entwerfen.

Fertigkeitsaktionen

Einige Skills können mehrere Aufgaben oder Aktionen ausführen. So kann ein Aufgabenskill beispielsweise Erstellungs-, Aktualisierungs-, Anzeige- und Löschaktivitäten ermöglichen, auf die in Form von diskreten Konversationen zugegriffen werden kann.

Konversationsverweise

Die Benutzer/Stamm-Konversation unterscheidet sich von der Stamm/Qualifikation-Konversation.

Die Konversations-ID-Factory dient als Hilfe bei Verwalten von Datenverkehr zwischen einem Skill-Consumer und einer Qualifikation. Die Factory führt die Übersetzung zwischen der Konversations-ID des Stamms für den Benutzer und der ID für die Qualifikation durch. Anders ausgedrückt: Es wird eine Konversations-ID generiert, die zwischen dem Stamm und der Qualifikation verwendet wird, und die ursprüngliche ID der Benutzer/Stamm-Konversation wird aus der ID der Stamm/Qualifikation-Konversation wiederhergestellt.

Serverübergreifende Koordination

Stamm- und Skillbots kommunizieren über 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.

  • Speichern Sie im Skill-Consumer immer den Zustand, bevor Sie eine Aktivität an eine Qualifikation weiterleiten. 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.
  • Wenn der Skill-Handler eine Aktivität von einer Qualifikation empfängt, übersetzt er diese in ein Format, das für den Skill-Consumer geeignet ist, und leitet sie an den Adapter des Consumers weiter.

Skill-Consumer und Qualifikationszustand

Der Skill-Consumer und die Qualifikation verwalten ihren eigenen Zustand jeweils separat. Der Consumer erstellt aber die Konversations-ID, die er für die Kommunikation mit der Qualifikation nutzt. Dies kann sich auf den Konversationszustand der Qualifikation auswirken.

Wichtig

Wie bereits erwähnt, kann es beim Delegieren einer Benutzeraktivität an eine Qualifikation durch den Skill-Consumer dazu kommen, dass eine andere Instanz des Consumers die Qualifikationsantwort empfängt. Der Consumer sollte den Konversationszustand immer sofort speichern, bevor er eine Aktivität an eine Qualifikation weiterleitet.

Authentifizierung zwischen Bots

Sie benötigen keine App-ID und kein Passwort, um einen Skill und einen Skillconsumer lokal im Bot Framework Emulator zu testen. Ein Azure-Abonnement ist weiterhin erforderlich, um Ihre Skills in Azure bereitzustellen.

Die Authentifizierung auf Dienstebene wird vom Bot Connector-Dienst verwaltet. Vom Framework werden Bearertoken und Botanwendungs-IDs verwendet, um die Identität der einzelnen Bots zu bestätigen. (Vom Bot Framework wird ein Objekt für die Authentifizierungskonfiguration genutzt, um den Authentifizierungsheader von eingehenden Anforderungen zu überprüfen.)

Wichtig

Dies setzt voraus, dass alle bereitgestellten Bots (der Skillconsumer und alle Skills, die er konsumiert) über gültige Anmeldedaten verfügen.

Anspruchsüberprüfung

Sie müssen der Authentifizierungskonfiguration ein Validierungssteuerelement für Ansprüche hinzufügen. Die Ansprüche werden nach dem Authentifizierungsheader ausgewertet. Lösen Sie einen Fehler oder eine Ausnahme in Ihrem Validierungscode aus, um die Anforderung abzulehnen.

Hinweis

Der Bot führt eine Anspruchsprüfung durch, wenn er über eine App-ID und ein Passwort verfügt; andernfalls wird die Anspruchsprüfung nicht durchgeführt.

Es kann viele Gründe geben, warum Sie eine Anforderung ggf. ablehnen möchten, die sonst authentifiziert wird:

  • Wenn der Skill-Consumer Datenverkehr nur von Qualifikationen akzeptieren soll, mit denen er eine Konversation initiiert hat.
  • Wenn ein Skill Teil eines kostenpflichtigen Diensts ist und Benutzer, die nicht in der Datenbank enthalten sind, keinen Zugriff haben sollen.
  • Wenn Sie den Zugriff auf die Qualifikation auf bestimmte Skill-Consumer beschränken möchten.

Wichtig

Wenn Sie keinen Anspruchsprüfer bereitstellen, wird Ihr Bot einen Fehler oder eine Ausnahme erzeugen, wenn er eine Aktivität von einem anderen Bot erhält, unabhängig davon, ob Ihr Bot ein Skill oder ein Skillconsumenr ist.

Debuggen von Skillunterhaltungen

Da der Datenverkehr zwischen Skills und Skill-Verbraucher authentifiziert wird, gibt es zusätzliche Schritte beim Debuggen solcher Bots.

  • Der Skill-Verbraucher und alle Skills, die er direkt oder indirekt verbraucht, müssen ausgeführt werden.
  • Wenn die Bots lokal ausgeführt werden und einer der Bots über eine App-ID und ein Passwort verfügt, müssen alle Bots gültige IDs und Passwörter besitzen.
  • Wenn alle Bots bereitgestellt werden, erfahren Sie, wie Sie einen Bot über einen beliebigen Kanal mit ngrok debuggen.
  • Wenn einige der Bots lokal ausgeführt werden und einige bereitgestellt werden, erfahren Sie, wie Sie einen Skill oder einen Skill-Verbraucher debuggen.

Andernfalls können Sie einen Skill-Verbraucher oder einen Skill ähnlich debuggen, wie Sie andere Bots debuggen. Weitere Informationen finden Sie unter Debuggen eines Bots und Debuggen mit dem Bot Framework Emulator.

Weitere Informationen

Aus Sicht des Benutzers ist der Stammbot der Bot, mit dem er interagiert. Aus Sicht der Qualifikation ist der Skill-Consumer der Kanal, über den die Kommunikation mit dem Benutzer erfolgt.