Schreiben eines Skillmanifests
GILT FÜR: SDK v4
Ein Skillmanifest ist eine JSON-Datei, die die Aktionen, die ein Skill ausführen kann, seine Eingabe- und Ausgabeparameter sowie die Endpunkte des Skills beschreibt. Das Manifest enthält maschinenlesbare Informationen, die ein Entwickler verwenden kann, um von einem anderen Bot auf den Skill zuzugreifen.
Dieser Artikel beschreibt die unterstützten Versionen des Skillmanifest-Schemas von Bot Framework.
Version | Hinweise |
---|---|
Version 2.2 | Einige URI-Eigenschaften wurden aktualisiert, um URI-Verweise zu akzeptieren. |
Version 2.1 | Bietet die Möglichkeit, proaktive Aktivitäten zu beschreiben, die der Skill senden kann und die Versandmodelle, die der Skill verwendet. |
Version 2.0 | Ursprüngliche Version. |
Das Bot Framework-Skillmanifestschema verwendet Entwurf 7 des JSON-Schemavokabulars.
Voraussetzungen
- Kenntnisse über Skills.
- Vertrautheit mit dem JSON-Schema und JSON-Format
Das Skillmanifest
Das Skillmanifest enthält verschiedene Informationskategorien:
- Metadaten, die den Skill auf allgemeiner Ebene beschreiben
- Eine Liste der Endpunkte, die der Skill bereitstellt
- Optionale Listen der Aktivitäten, die der Skill empfangen und proaktiv senden kann.
- Ein optionales Definitionsobjekt, das Schemas für Objekte enthält, auf die von anderen Teilen des Dokuments verwiesen wird
- Eine optionale Liste der vom Skill unterstützten Dispatchmodelle
In der folgenden Tabelle wird das vollständige Schema für Version 2.2 des Bot Framework-Skillmanifests beschrieben.
Kategorie/Feld | Typ/Format | Erforderlich | Beschreibung |
---|---|---|---|
Metadaten | |||
$id | String | Erforderlich | Der Bezeichner des Skillmanifests. |
$schema | Zeichenkette/URI | Erforderlich | Die HTTPS-URI einer JSON-Schemaressource, die das Format des Manifests beschreibt. Für Version 2.2 ist der URI https://schemas.botframework.com/schemas/skills/v2.2/skill-manifest.json . |
copyright | String | Optional | Der Urheberrechtshinweis zum Skill. |
Beschreibung | String | Optional | Eine von Menschen lesbare Beschreibung des Skills. |
iconUrl | Zeichenketten/URI-Referenz | Optional | Die URI des Symbols, das für den Skill angezeigt wird. |
Lizenz | String | Optional | Die Lizenzbedingungen des Skills. |
name | String | Erforderlich | Der Name des Skills. |
privacyUrl | Zeichenketten/URI-Referenz | Optional | Der URI der Beschreibung der Datenschutzeinstellungen des Skills. |
publisherName | String | Erforderlich | Der Name des Herausgebers des Skills. |
Tags | Zeichenfolgenarray | Optional | Eine Gruppe von Tags für den Skill. Falls vorhanden, muss jedes Tag eindeutig sein. |
version | String | Erforderlich | Die Version des Skills, die im Manifest beschrieben wird. |
Endpunkte | |||
-Endpunkte | Endpunktarray | Erforderlich | Die Liste der vom Skill unterstützten Endpunkte. Mindestens ein Endpunkt muss definiert werden. Jeder Endpunkt muss eindeutig sein. |
Aktivitäten | |||
activities | Objekt mit benannten Aktivitätsobjekten | Optional | Die Gruppe der anfänglichen Aktivitäten, die vom Skill akzeptiert werden. |
activitiesSent | Objekt mit benannten Aktivitätsobjekten | Optional | Beschreibt die proaktiven Aktivitäten, die der Skill senden kann. |
Definitionen | |||
definitions | Object | Optional | Ein Objekt, das Unterschemas für im Manifest verwendete Objekte enthält. |
Dispatchmodelle | |||
dispatchModels | dispatchModels-Objekt | Optional | Beschreibt die vom Skill unterstützten Sprachmodelle und Absichten auf oberster Ebene. Informationen zu Versandmodellen zu diesem Schema finden Sie unter: |
Endpunkte
Jedes Endpunktobjekt beschreibt einen Endpunkt, der vom Skill unterstützt wird.
Dieses Beispiel listet zwei Endpunkte für einen Skill auf.
"endpoints": [
{
"name": "americas",
"protocol": "BotFrameworkV3",
"description": "Production endpoint for SkillBot in the Americas",
"endpointUrl": "http://myskill.contoso.com/api/messages",
"msAppId": "00000000-0000-0000-0000-000000000000"
},
{
"name": "eu",
"protocol": "BotFrameworkV3",
"description": "Production endpoint for SkillBot in Europe",
"endpointUrl": "http://myskill.contoso.com/api/messages",
"msAppId": "11111111-0000-0000-0000-000000000000"
}
],
Endpunktobjekt
Beschreibt einen vom Skill unterstützten Endpunkt.
Feld | Typ/Format | Erforderlich | Beschreibung |
---|---|---|---|
Beschreibung | String | Optional | Eine Beschreibung des Endpunkts. |
endpointUrl | Zeichenkette/URI | Erforderlich | Der URI-Endpunkt des Skills. |
msAppId | String | Erforderlich | Die Microsoft AppId (GUID) des Skills zur Authentifizierung von Anforderungen. Muss mit dem regulären Ausdruck übereinstimmen: ^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$ . |
name | String | Erforderlich | Der eindeutige Name des Endpunkts. |
Protokoll | String | Optional | Das unterstützte Bot-Protokoll. Der Standardwert ist „BotFrameworkV3“, der die Bot-Connector-API Version 3 darstellt. Verwenden Sie den Standardwert, es sei denn, Ihr Skill verwendet speziell ein anderes Protokoll. |
Aktivitäten
Jedes Aktivitätsobjekt beschreibt eine Aktivität, die vom Skill akzeptiert wird. Der Skill leitet eine Aktion oder Aufgabe ein, die auf der anfänglich empfangenen Aktivität basiert. Der mit dem Aktivitätsobjekt verbundene Name gibt die Aktion oder Aufgabe an, die der Skill ausführt.
Einige Aktivitätstypen haben eine Werteigenschaft, mit der dem Skill zusätzliche Eingaben bereitgestellt werden können. Wenn der Skill endet (die Aktion abschließt), kann er in der Werteigenschaft der zugehörigen Aktivität am Ende der Konversation einen Rückgabewert bereitstellen.
Die zulässigen Aktivitätstypen sind: Nachricht, Ereignis, Aufruf und andere Aktivitäten. Ein Skill kann eine Aufrufaktivität empfangen, aber nicht senden.
Hier ist eine Beispielbeschreibung einer Aktivität.
"bookFlight": {
"description": "Books a flight",
"type": "event",
"name": "BookFlight",
"value": {
"$ref": "#/definitions/bookingInfo"
},
"resultValue": {
"$ref": "#/definitions/bookingInfo"
}
},
eventActivity-Objekt
Beschreibt eine vom Skill akzeptierte oder gesendete Ereignisaktivität. Die Bedeutung einer Ereignisaktivität wird durch das Feld Name definiert, das innerhalb des Bereichs des Skills gilt.
Feld | type | Erforderlich | Beschreibung |
---|---|---|---|
Beschreibung | String | Optional | Eine Beschreibung der Aktion, die das Ereignis initiieren soll. |
name | String | Erforderlich | Der Wert der Namenseigenschaft der Ereignisaktivität. |
resultValue | Object | Optional | Eine JSON-Schemadefinition des Objekttyps, den die Aktion zurückgeben kann. |
Typ | String | Erforderlich | Der Aktivitätstyp. Muss „event“ sein. |
value | Object | Optional | Eine JSON-Schemadefinition des Objekttyps, den diese Aktion als Eingabe erwartet. |
invokeActivity-Objekt
Beschreibt eine Aufrufaktivität, die vom Skill akzeptiert wird. Die Bedeutung einer Aufrufaktivität wird durch das Feld Name definiert, das innerhalb des Bereichs des Skills gilt.
Feld | type | Erforderlich | Beschreibung |
---|---|---|---|
Beschreibung | String | Optional | Eine Beschreibung der Aktion, die der Aufruf initiieren soll. |
name | String | Erforderlich | Der Wert der Namenseigenschaft der Aufrufaktivität. |
resultValue | Object | Optional | Eine JSON-Schemadefinition des Objekttyps, den die zugeordnete Aktion zurückgeben kann. |
Typ | String | Erforderlich | Der Aktivitätstyp. Muss „invoke“ sein. |
value | Object | Optional | Eine JSON-Schemadefinition des Objekttyps, den diese Aktion als Eingabe erwartet. |
messageActivity-Objekt
Beschreibt eine vom Skill akzeptierte oder gesendete Nachrichtenaktivität. Die Texteigenschaft der Nachrichtenaktivität enthält die Äußerung des Benutzers oder des Bots.
Feld | type | Erforderlich | Beschreibung |
---|---|---|---|
Beschreibung | String | Optional | Eine Beschreibung der Aktion. |
resultValue | Object | Optional | Eine JSON-Schemadefinition des Objekttyps, den die zugeordnete Aktion zurückgeben kann. |
Typ | String | Erforderlich | Der Aktivitätstyp. Muss „message“ sein. |
value | Object | Optional | Eine JSON-Schemadefinition des Objekttyps, den diese Aktion als Eingabe erwartet. |
otherActivities-Objekt
Beschreibt jeden anderen Aktivitätstyp, der von dem Skill akzeptiert oder gesendet wird.
Feld | type | Erforderlich | BESCHREIBUNG |
---|---|---|---|
type | String | Erforderlich | Der Aktivitätstyp. Muss einer der anderen Bot Framework-Aktivitätstypen sein: „contactRelationUpdate“, „conversationUpdate“, „deleteUserData“, „endOfConversation“, „handoff“, „installationUpdate“, „messageDelete“, „messageReaction“, „messageUpdate“, „suggestion“, „trace“ oder „typing“. |
Das otherActivities-Objekt kann andere Eigenschaften enthalten, aber das Skillmanifestschema definiert deren Bedeutung nicht.
Definitionen
Jede Definition beschreibt ein Unterschema, das von anderen Teilen des Dokuments genutzt werden kann.
Hier ist ein Beispiel eines Unterschemas für Flugbuchungsinformationen.
"bookingInfo": {
"type": "object",
"required": [
"origin"
],
"properties": {
"origin": {
"type": "string",
"description": "this is the origin city for the flight"
},
"destination": {
"type": "string",
"description": "this is the destination city for the flight"
},
"date": {
"type": "string",
"description": "The date for the flight in YYYY-MM-DD format"
}
}
},
Dispatchmodelle
Das Dispatchmodell enthält eine Liste von Sprachmodellen und eine Liste von Absichten auf oberster Ebene, die vom Skill unterstützt werden. Es ist ein erweitertes Feature, das es einem Entwickler eines Skillconsumers ermöglicht, ein Sprachmodell zu erstellen, das die Features des Consumers und der Skillbots kombiniert.
Jedes Sprachmodell verwendet das .lu
- oder .qna
-Dateiformat. Weitere Informationen zu diesen Formaten finden Sie unter .lu-Dateiformat und .qna-Dateiformat.
Der Name eines Gebietsschemas ist eine Kombination aus einem aus zwei Kleinbuchstaben bestehenden ISO 639-Kulturcode, der einer Sprache zugeordnet ist, und einem optionalen aus zwei Großbuchstaben bestehenden ISO 3166-Unterkulturcode, der einem Land oder einer Region zugeordnet ist, z. B. „en“ oder „en-US“.
Feld | type | Erforderlich | Beschreibung |
---|---|---|---|
Absichten | Zeichenfolgenarray | Optional | Eine Liste der Absichten auf oberster Ebene, die vom Skill unterstützt werden. Jede Absicht muss eindeutig sein. |
languages | Objekt, das benannte languageModel-Arrays enthält | Optional | Eine Liste der vom Skill unterstützten Sprachmodelle. Jeder Name ist das Gebietsschema, für das die Sprachmodelle bestimmt sind. Das Array enthält die Sprachmodelle für das jeweilige Gebietsschema. Ein Dispatchmodell muss mindestens ein Gebietsschema unterstützen. Jedes Gebietsschema innerhalb des Sprachenfelds muss eindeutig sein. |
Hier ist ein Beispiel eines Dispatchmodells, das zwei Sprachmodelle für drei Gebietsschemas enthält. Es beschreibt auch zwei Absichten auf oberster Ebene, die der Skill erkennen kann.
"dispatchModels": {
"languages": {
"en": [
{
"name": "SkillBot LU (English)",
"contentType": "application/lu",
"url": "http://sample.com/SkillBot-en.lu",
"description": "English language model for the skill"
},
{
"name": "SkillBot QnA LU (English)",
"contentType": "application/qna",
"url": "http://sample.com/SkillBot-QnA-en.qna",
"description": "English language model for the skill (QnAMaker)"
}
],
"es-ES": [
{
"name": "SkillBot LU (Spanish-Spain)",
"contentType": "application/lu",
"url": "http://sample.com/SkillBot-es-ES.lu",
"description": "Spanish (Spain) language model for the skill"
},
{
"name": "SkillBot QnA LU (Spanish-Spain)",
"contentType": "application/qna",
"url": "http://sample.com/SkillBot-QnA-es-ES.qna",
"description": "Spanish (Spain) language model for the skill (QnAMaker)"
}
],
"es-MX": [
{
"name": "SkillBot LU (Spanish-Mexico)",
"contentType": "application/lu",
"url": "http://sample.com/SkillBot-es-MX.lu",
"description": "Spanish (Mexico) language model for the skill"
},
{
"name": "SkillBot QnA LU (Spanish-Mexico)",
"contentType": "application/qna",
"url": "http://sample.com/SkillBot-QnA-es-MX.qna",
"description": "Spanish (Mexico) language model for the skill (QnAMaker)"
}
]
},
"intents": [
"bookFlight",
"getWeather"
]
},
languageModel-Objekt
Beschreibt ein Sprachmodell für eine bestimmte Kultur. Der Name ist ein Gebietsschemaname.
Feld | Typ/Format | Erforderlich | Beschreibung des Dataflows |
---|---|---|---|
contentType | String | Erforderlich | Der Typ des Sprachmodells. |
Beschreibung | String | Optional | Eine Beschreibung des Sprachmodells. |
name | String | Erforderlich | Der Name des Sprachmodells. |
url | Zeichenketten/URI-Referenz | Erforderlich | Der URL des Sprachmodells. |
Beispielmanifest
Hier ist ein vollständiges Beispiel eines Manifests der Version 2.2 für einen Skill, der mehrere Aktivitäten verfügbar macht.
{
"$schema": "https://schemas.botframework.com/schemas/skills/v2.2/skill-manifest.json",
"$id": "SkillBot",
"name": "Sample skill definition that can handle multiple types of activities",
"version": "1.0",
"description": "This is a sample skill definition for multiple activity types",
"publisherName": "Microsoft",
"privacyUrl": "https://myskill.contoso.com/privacy.html",
"copyright": "Copyright (c) Microsoft Corporation. All rights reserved.",
"license": "",
"iconUrl": "skillIcon.png",
"tags": [
"sample",
"travel",
"weather"
],
"endpoints": [
{
"name": "americas",
"protocol": "BotFrameworkV3",
"description": "Production endpoint for SkillBot in the Americas",
"endpointUrl": "http://myskill.contoso.com/api/messages",
"msAppId": "00000000-0000-0000-0000-000000000000"
},
{
"name": "eu",
"protocol": "BotFrameworkV3",
"description": "Production endpoint for SkillBot in Europe",
"endpointUrl": "http://myskill.contoso.com/api/messages",
"msAppId": "11111111-0000-0000-0000-000000000000"
}
],
"dispatchModels": {
"languages": {
"en": [
{
"name": "SkillBot LU (English)",
"contentType": "application/lu",
"url": "http://sample.com/SkillBot-en.lu",
"description": "English language model for the skill"
},
{
"name": "SkillBot QnA LU (English)",
"contentType": "application/qna",
"url": "http://sample.com/SkillBot-QnA-en.qna",
"description": "English language model for the skill (QnAMaker)"
}
],
"es-ES": [
{
"name": "SkillBot LU (Spanish-Spain)",
"contentType": "application/lu",
"url": "http://sample.com/SkillBot-es-ES.lu",
"description": "Spanish (Spain) language model for the skill"
},
{
"name": "SkillBot QnA LU (Spanish-Spain)",
"contentType": "application/qna",
"url": "http://sample.com/SkillBot-QnA-es-ES.qna",
"description": "Spanish (Spain) language model for the skill (QnAMaker)"
}
],
"es-MX": [
{
"name": "SkillBot LU (Spanish-Mexico)",
"contentType": "application/lu",
"url": "http://sample.com/SkillBot-es-MX.lu",
"description": "Spanish (Mexico) language model for the skill"
},
{
"name": "SkillBot QnA LU (Spanish-Mexico)",
"contentType": "application/qna",
"url": "http://sample.com/SkillBot-QnA-es-MX.qna",
"description": "Spanish (Mexico) language model for the skill (QnAMaker)"
}
]
},
"intents": [
"bookFlight",
"getWeather"
]
},
"activities": {
"bookFlight": {
"description": "Books a flight",
"type": "event",
"name": "BookFlight",
"value": {
"$ref": "#/definitions/bookingInfo"
},
"resultValue": {
"$ref": "#/definitions/bookingInfo"
}
},
"getWeather": {
"description": "Retrieves and returns the weather for the user's location",
"type": "invoke",
"name": "GetWeather",
"value": {
"$ref": "#/definitions/location"
},
"resultValue": {
"$ref": "#/definitions/weatherReport"
}
},
"message": {
"type": "message",
"description": "Receives the user's' utterance and attempts to resolve it using the skill's LU models"
},
"typing": {
"type": "typing"
},
"conversationUpdate": {
"type": "conversationUpdate"
}
},
"definitions": {
"localeValue": {
"type": "object",
"properties": {
"locale": {
"type": "string",
"description": "The current user's locale ISO code"
}
}
},
"bookingInfo": {
"type": "object",
"required": [
"origin"
],
"properties": {
"origin": {
"type": "string",
"description": "this is the origin city for the flight"
},
"destination": {
"type": "string",
"description": "this is the destination city for the flight"
},
"date": {
"type": "string",
"description": "The date for the flight in YYYY-MM-DD format"
}
}
},
"weatherReport": {
"type": "array",
"description": "Array of forecasts for the next week.",
"items": [
{
"type": "string"
}
]
},
"location": {
"type": "object",
"description": "Location metadata",
"properties": {
"latitude": {
"type": "number",
"title": "Latitude"
},
"longitude": {
"type": "number",
"title": "Longitude"
},
"postalCode": {
"type": "string",
"title": "Postal code"
}
}
}
},
"activitiesSent": {
"flightUpdated": {
"type": "event",
"name": "FlightUpdated",
"description": "Event which is sent by the skill when there is an update in flight info",
"value": {
"type": "object",
"description": "Flight update information",
"properties": {
"flightNumber": {
"type": "string"
},
"departureDate": {
"type": "string",
"description": "The departure date for the flight in YYYY-MM-DD format"
},
"departureTime": {
"type": "string",
"description": "The departure time for the flight in HH-MM format"
}
}
}
}
}
}
Nächste Schritte
- Wie man einen Skill implementiert.
- Wie man Dialoge in einem Skill verwendet.
- Wie man einen Skillconsumer implementiert.
- Wie man einen Dialog zum Konsumieren eines Skills verwendet.