Een vaardigheidsmanifest schrijven
VAN TOEPASSING OP: SDK v4
Een vaardigheidsmanifest is een JSON-bestand dat de acties beschrijft die een vaardigheid kan uitvoeren, de invoer- en uitvoerparameters en de eindpunten van de vaardigheid. Het manifest bevat machineleesbare informatie die een ontwikkelaar kan gebruiken om toegang te krijgen tot de vaardigheid van een andere bot.
In dit artikel worden ondersteunde versies van het manifestschema voor bot framework-vaardigheden beschreven.
Versie | Aantekeningen |
---|---|
versie 2.2 | Sommige URI-eigenschappen zijn bijgewerkt om URI-verwijzingen te accepteren. |
versie 2.1 | Hiermee kunt u proactieve activiteiten beschrijven die de vaardigheid kan verzenden en de verzendmodellen die door de vaardigheid worden gebruikt. |
versie 2.0 | Initiële versie. |
De bot framework-manifestschema's maken gebruik van concept 7 van het JSON-schema-vocabulaire.
Vereisten
- Kennis van vaardigheden.
- Enige bekendheid met het JSON-schema en de JSON-indeling.
Het vaardigheidsmanifest
Het vaardigheidsmanifest bevat verschillende informatiecategorieën:
- Metagegevens die de vaardigheid op algemeen niveau beschrijven.
- Een lijst met de eindpunten die de vaardigheid biedt.
- Optionele lijsten van de activiteiten die de vaardigheid kan ontvangen en proactief verzenden.
- Een optioneel definitieobject dat schema's bevat voor objecten waarnaar wordt verwezen door andere delen van het document.
- Een optionele lijst met de verzendmodellen die door de vaardigheid worden ondersteund.
In de volgende tabel wordt het volledige schema voor v2.2 van het Bot Framework-vaardigheidsmanifest beschreven.
Categorie/veld | Type/opmaak | Vereist | Beschrijving |
---|---|---|---|
Metagegevens | |||
$id | String | Vereist | De id voor het vaardigheidsmanifest. |
$schema | Tekenreeks/URI | Vereist | De HTTPS-URI van een JSON-schemaresource die de indeling van het manifest beschrijft. Voor versie 2.2 is https://schemas.botframework.com/schemas/skills/v2.2/skill-manifest.json de URI . |
Copyright | String | Optioneel | De copyrightmelding voor de vaardigheid. |
beschrijving | String | Optioneel | Een door mensen leesbare beschrijving van de vaardigheid. |
iconUrl | Tekenreeks-/URI-verwijzing | Optioneel | De URI van het pictogram die moet worden weergegeven voor de vaardigheid. |
licentie | String | Optioneel | De gebruiksrechtovereenkomst voor de vaardigheid. |
name | String | Vereist | De naam van de vaardigheid. |
privacyUrl | Tekenreeks-/URI-verwijzing | Optioneel | De URI van de privacybeschrijving voor de vaardigheid. |
publisherName | String | Vereist | De naam van de uitgever van de vaardigheid. |
tags | Tekenreeksmatrix | Optioneel | Een set tags voor de vaardigheid. Indien aanwezig, moet elke tag uniek zijn. |
versie | Tekenreeks | Vereist | De versie van de vaardigheid die in het manifest wordt beschreven. |
Eindpunten | |||
eindpunten | eindpuntmatrix | Vereist | De lijst met eindpunten die door de vaardigheid worden ondersteund. Er moet ten minste één eindpunt worden gedefinieerd. Elk eindpunt moet uniek zijn. |
Activiteiten | |||
activities | Object met benoemde activiteitsobjecten | Optioneel | De set initiële activiteiten die door de vaardigheid worden geaccepteerd. |
activitiesSent | Object met benoemde activiteitsobjecten | Optioneel | Beschrijft de proactieve activiteiten die de vaardigheid kan verzenden. |
Definities | |||
Definities | Object | Optioneel | Een object met subschema's voor objecten die in het manifest worden gebruikt. |
Verzendmodellen | |||
dispatchModels | dispatchModels-object | Optioneel | Beschrijft de taalmodellen en intenties op het hoogste niveau die door de vaardigheid worden ondersteund. Zie Verzendmodellen voor het schema voor dit object. |
Eindpunten
Elk eindpuntobject beschrijft een eindpunt dat wordt ondersteund door de vaardigheid.
In dit voorbeeld worden twee eindpunten voor een vaardigheid weergegeven.
"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"
}
],
eindpuntobject
Beschrijft een eindpunt dat wordt ondersteund door de vaardigheid.
Veld | Type/opmaak | Vereist | Beschrijving |
---|---|---|---|
beschrijving | String | Optioneel | Een beschrijving van het eindpunt. |
endpointUrl | Tekenreeks/URI | Vereist | Het URI-eindpunt voor de vaardigheid. |
msAppId | String | Vereist | De Microsoft AppId (GUID) voor de vaardigheid, die wordt gebruikt voor het verifiëren van aanvragen. Moet overeenkomen met de reguliere expressie: ^[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 | Vereist | De unieke naam voor het eindpunt. |
protocol | String | Optioneel | Het ondersteunde Bot-protocol. De standaardwaarde is 'BotFrameworkV3', die de Bot Verbinding maken or-API versie 3 vertegenwoordigt. Gebruik de standaardwaarde, tenzij uw vaardigheid specifiek een ander protocol gebruikt. |
Activiteiten
Elk activiteitsobject beschrijft een activiteit die door de vaardigheid wordt geaccepteerd. De vaardigheid begint een actie of taak op basis van de eerste activiteit die wordt ontvangen. De naam die aan het activiteitsobject is gekoppeld, geeft de actie of taak aan die door de vaardigheid wordt uitgevoerd.
Sommige activiteitstypen hebben een waarde-eigenschap die kan worden gebruikt om extra invoer voor de vaardigheid te bieden. Wanneer de vaardigheid eindigt (de actie voltooit), kan deze een retourwaarde opgeven in de waarde-eigenschap van de gekoppelde waarde van de gespreksactiviteit.
De toegestane activiteitstypen zijn: bericht, gebeurtenis, aanroepen en andere activiteiten. Een vaardigheid kan een aanroepactiviteit ontvangen, maar kan er geen verzenden.
Hier volgt een beschrijving van een voorbeeldactiviteit.
"bookFlight": {
"description": "Books a flight",
"type": "event",
"name": "BookFlight",
"value": {
"$ref": "#/definitions/bookingInfo"
},
"resultValue": {
"$ref": "#/definitions/bookingInfo"
}
},
eventActivity-object
Beschrijft een gebeurtenisactiviteit die door de vaardigheid is geaccepteerd of verzonden. De betekenis van een gebeurtenisactiviteit wordt gedefinieerd door het naamveld, wat zinvol is binnen het bereik van de vaardigheid.
Veld | Type | Vereist | Beschrijving |
---|---|---|---|
beschrijving | String | Optioneel | Een beschrijving van de actie die de gebeurtenis moet initiëren. |
name | String | Vereist | De waarde van de naameigenschap van de gebeurtenisactiviteit. |
resultValue | Object | Optioneel | Een JSON-schemadefinitie van het type object dat door de actie kan worden geretourneerd. |
type | String | Vereist | Het activiteitstype. Moet 'gebeurtenis' zijn. |
waarde | Object | Optioneel | Een JSON-schemadefinitie van het type object dat door deze actie als invoer wordt verwacht. |
invokeActivity-object
Beschrijft een aanroepactiviteit die door de vaardigheid wordt geaccepteerd. De betekenis van een aanroepactiviteit wordt gedefinieerd door het naamveld, wat zinvol is binnen het bereik van de vaardigheid.
Veld | Type | Vereist | Beschrijving |
---|---|---|---|
beschrijving | String | Optioneel | Een beschrijving van de actie die de aanroep moet starten. |
name | String | Vereist | De waarde van de naameigenschap van de aanroepactiviteit. |
resultValue | Object | Optioneel | Een JSON-schemadefinitie van het type object dat door de bijbehorende actie kan worden geretourneerd. |
type | String | Vereist | Het activiteitstype. Moet 'aanroepen' zijn. |
waarde | Object | Optioneel | Een JSON-schemadefinitie van het type object dat door deze actie als invoer wordt verwacht. |
messageActivity-object
Beschrijft een berichtactiviteit die door de vaardigheid is geaccepteerd of verzonden. De teksteigenschap van de berichtactiviteit bevat de uiting van de gebruiker of bot.
Veld | Type | Vereist | Beschrijving |
---|---|---|---|
beschrijving | String | Optioneel | Een beschrijving van de actie. |
resultValue | Object | Optioneel | Een JSON-schemadefinitie van het type object dat door de bijbehorende actie kan worden geretourneerd. |
type | String | Vereist | Het activiteitstype. Moet 'bericht' zijn. |
waarde | Object | Optioneel | Een JSON-schemadefinitie van het type object dat door deze actie als invoer wordt verwacht. |
otherActivities-object
Beschrijft elk ander activiteitstype dat door de vaardigheid is geaccepteerd of verzonden.
Veld | Type | Vereist | Beschrijving |
---|---|---|---|
type | String | Vereist | Het activiteitstype. Moet een van de andere Bot Framework-activiteitstypen zijn: "contactRelationUpdate", "conversationUpdate", "deleteUserData", "endOfConversation", "handoff", "installationUpdate", "messageDelete", "messageReaction", "messageUpdate", "suggestion", "trace" of "type". |
Het object otherActivities kan andere eigenschappen bevatten, maar het vaardigheidsmanifestschema definieert de betekenis ervan niet.
Definities
Elke definitie beschrijft een subschema dat kan worden gebruikt door andere delen van het document.
Hier volgt een voorbeeldsubschema voor vluchtboekingsgegevens.
"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"
}
}
},
Verzendmodellen
Het verzendmodel bevat een lijst met taalmodellen en een lijst met intenties op het hoogste niveau die door de vaardigheid worden ondersteund. Het is een geavanceerde functie waarmee een ontwikkelaar van een vaardigheidsgebruiker een taalmodel kan opstellen dat de functies van de bots voor consumenten en vaardigheden combineert.
Elk taalmodel maakt gebruik van de .lu
of .qna
bestandsindeling. Zie .lu-bestandsindeling en .qna-bestandsindeling voor meer informatie over deze indelingen.
Een landinstellingsnaam is een combinatie van een ISO 639-cultuurcode met twee letters die is gekoppeld aan een taal en een optionele ISO 3166-subcultuurcode met twee letters die is gekoppeld aan een land of regio, bijvoorbeeld 'en' of 'en-US'.
Veld | Type | Vereist | Beschrijving |
---|---|---|---|
intents | Tekenreeksmatrix | Optioneel | Een lijst met de intenties op het hoogste niveau die worden ondersteund door de vaardigheid. Elke intentie moet uniek zijn. |
talen | Object met benoemde languageModel-matrices | Optioneel | Een lijst met de taalmodellen die door de vaardigheid worden ondersteund. Elke naam is de landinstelling waarvoor de taalmodellen zijn bedoeld en de matrix bevat de taalmodellen voor die landinstelling. Een verzendmodel moet ten minste één landinstelling ondersteunen. Elke landinstelling in het talenveld moet uniek zijn. |
Hier volgt een voorbeeld van een verzendmodel met twee talenmodellen op drie landinstellingen. Er worden ook twee intenties op het hoogste niveau beschreven die door de vaardigheid kunnen worden herkend.
"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-object
Beschrijft een taalmodel voor een bepaalde cultuur. De naam is een landinstellingsnaam.
Veld | Type/opmaak | Vereist | Beschrijving |
---|---|---|---|
Contenttype | String | Vereist | Type van het taalmodel. |
beschrijving | String | Optioneel | Een beschrijving van het taalmodel. |
name | String | Vereist | Naam van het taalmodel. |
URL | Tekenreeks-/URI-verwijzing | Vereist | De URL voor het taalmodel. |
Voorbeeldmanifest
Hier volgt een volledig voorbeeld van v2.2-manifest voor een vaardigheid die meerdere activiteiten beschikbaar maakt.
{
"$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"
}
}
}
}
}
}
Volgende stappen
- Een vaardigheid implementeren.
- Dialoogvensters in een vaardigheid gebruiken.
- Een vaardigheidsconsumer implementeren.
- Een dialoogvenster gebruiken om een vaardigheid te gebruiken.