Écrire un manifeste de compétence
S'APPLIQUE À : SDK v4
Un manifeste de compétence est un fichier JSON qui décrit les actions qu'une compétence peut effectuer, ses paramètres d'entrée et de sortie, ainsi que les points de terminaison de la compétence. Le manifeste contient des informations lisibles par une machine qu'un développeur peut utiliser pour accéder à la compétence à partir d'un autre bot.
Cet article décrit les versions prises en charge du schéma du manifeste de compétences Bot Framework.
Version | Notes |
---|---|
version 2.2 | Mise à jour de certaines propriétés d'URI pour accepter les références d'URI. |
version 2.1 | Permet de décrire les activités proactives que la compétence peut envoyer et les modèles de répartition qu'elle utilise. |
version 2.0 | Version d'origine. |
Les schémas des manifestes de compétences du Bot Framework utilisent le brouillon 7 du vocabulaire du schéma JSON.
Prérequis
- Connaissance des compétences.
- Connaissances de base du schéma JSON et du format JSON.
Manifeste de compétence
Le manifeste de compétence contient différentes catégories d’informations :
- Métadonnées décrivant de manière générale la compétence.
- Liste des points de terminaison fournis par la compétence.
- Listes facultatives des activités que la compétence peut recevoir et envoyer de manière proactive.
- Objet de définitions facultatif contenant des schémas pour les objets référencés par d’autres parties du document.
- Liste facultative des modèles Dispatch pris en charge par la compétence.
Le tableau suivant décrit le schéma complet de la version 2.2 du manifeste de compétence Bot Framework.
Catégorie/champ | Type/format | Requis | Description |
---|---|---|---|
Métadonnées | |||
$id | Chaîne | Requis | Identificateur du manifeste de compétence. |
$schema | String/URI | Requis | L’URI HTTPs d’une ressource de schéma JSON qui décrit le format du manifeste. Pour la version 2.2, l'URI est https://schemas.botframework.com/schemas/skills/v2.2/skill-manifest.json . |
copyright | Chaîne | Facultatif | Mention de copyright pour la compétence. |
description | Chaîne | Facultatif | Description de la compétence à l’intention des utilisateurs. |
iconUrl | String/URI-reference | Facultatif | URI de l’icône à afficher pour la compétence. |
license | Chaîne | Facultatif | Contrat de licence de la compétence. |
name | Chaîne | Requis | Nom de la compétence. |
privacyUrl | String/URI-reference | Facultatif | URI de la description de confidentialité pour la compétence. |
publisherName | Chaîne | Requis | Nom de l’éditeur de la compétence. |
tags | Tableau de chaîne | Facultatif | Ensemble d’étiquettes pour la compétence. Si des étiquettes sont présentes, chaque étiquette doit être unique. |
version | Chaîne | Requis | Version de la compétence décrite par le manifeste. |
Points de terminaison | |||
points de terminaison | Tableau des points de terminaison | Requis | Liste des points de terminaison pris en charge par la compétence. Au moins un point de terminaison doit être défini. Chaque point de terminaison doit être unique. |
Activités | |||
activities | Objet contenant des objets d'activité nommés | Facultatif | L’ensemble des activités initiales acceptées par la compétence. |
activitiesSent | Objet contenant des objets d'activité nommés | Facultatif | Décrit les activités proactives que la compétence peut envoyer. |
Définitions | |||
définitions | Object | Facultatif | Objet contenant des sous-schémas pour les objets utilisés dans le manifeste. |
Modèles Dispatch | |||
dispatchModels | Objet dispatchModels | Facultatif | Décrit les modèles de langage et les intentions de niveau supérieur pris en charge par la compétence. Voir les modèles de répartition pour le schéma de cet objet. |
Points de terminaison
Chaque objet de point de terminaison décrit un point de terminaison pris en charge par la compétence.
Cet exemple liste deux points de terminaison pour une compétence.
"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"
}
],
Objet endpoint
Décrit un point de terminaison pris en charge par la compétence.
Champ | Type/format | Requis | Description |
---|---|---|---|
description | Chaîne | Facultatif | Une description de l'état du point de terminaison. |
endpointUrl | String/URI | Requis | Point de terminaison de l’URI de la compétence. |
msAppId | Chaîne | Requis | Valeur Microsoft AppId (GUID) de la compétence permettant d’authentifier les demandes. Doit correspondre à l'expression régulière :^[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 | Chaîne | Requis | Nom unique du point de terminaison. |
protocol | Chaîne | Facultatif | Le protocole Bot pris en charge. La valeur par défaut est « BotFrameworkV3 », qui représente la version 3 de l'API Bot Connector. Utilisez la valeur par défaut, sauf si votre compétence utilise spécifiquement un autre protocole. |
Activités
Chaque objet d’activité décrit une activité acceptée par la compétence. La compétence commence une action ou une tâche en fonction de l'activité initiale qu'elle reçoit. Le nom associé à l’objet d’activité indique l’action ou la tâche que la compétence effectuera.
Certains types d'activités ont une propriété de valeur permettant de fournir une entrée supplémentaire à la compétence. Lorsque la compétence se termine (achève l'action), elle peut fournir une valeur de retour dans la propriété de valeur de l'activité de fin de conversation associée.
Les types d'activités autorisés sont les suivants : message, événement, appel et autres activités. Une compétence peut recevoir une activité invoke, mais ne peut pas en envoyer.
Vous trouverez ci-dessous un exemple de description d'activité.
"bookFlight": {
"description": "Books a flight",
"type": "event",
"name": "BookFlight",
"value": {
"$ref": "#/definitions/bookingInfo"
},
"resultValue": {
"$ref": "#/definitions/bookingInfo"
}
},
Objet eventActivity
Décrit une activité event acceptée ou envoyée par la compétence. La signification d'une activité événement est définie par son champ de nom, qui est significatif dans le cadre de la compétence.
Champ | Type | Requise | Description |
---|---|---|---|
description | Chaîne | Facultatif | Description de l'action que l'événement doit lancer. |
name | Chaîne | Requis | Valeur de la propriété de nom de l’activité event. |
resultValue | Object | Facultatif | Définition de schéma JSON du type d'objet que l'action peut retourner. |
type | Chaîne | Requis | Le type d’activité. Doit être « event ». |
value | Object | Facultatif | Définition de schéma JSON du type d’objet que cette action attend comme entrée. |
Objet invokeActivity
Décrit une activité invoke acceptée par la compétence. La signification d'une activité appel est définie par son champ de nom, qui est significatif dans le cadre de la compétence.
Champ | Type | Requise | Description |
---|---|---|---|
description | Chaîne | Facultatif | Une description de l'action que l'appel doit lancer. |
name | Chaîne | Requis | Valeur de la propriété de nom de l’activité invoke. |
resultValue | Object | Facultatif | Définition de schéma JSON du type d’objet que l’action associée peut retourner. |
type | Chaîne | Requis | Le type d’activité. Doit être « invoke ». |
value | Object | Facultatif | Définition de schéma JSON du type d’objet que cette action attend comme entrée. |
Objet messageActivity
Décrit une activité message acceptée ou envoyée par la compétence. La propriété de texte de l'activité message contient l'énoncé de l'utilisateur ou du bot.
Champ | Type | Requise | Description |
---|---|---|---|
description | Chaîne | Facultatif | Description de l'action |
resultValue | Object | Facultatif | Définition de schéma JSON du type d’objet que l’action associée peut retourner. |
type | Chaîne | Requis | Le type d’activité. Doit être « message ». |
value | Object | Facultatif | Définition de schéma JSON du type d’objet que cette action attend comme entrée. |
Objet otherActivities
Décrit tout autre type d'activité accepté ou envoyé par la compétence.
Champ | Type | Requise | Description |
---|---|---|---|
type | Chaîne | Requis | Le type d’activité. Doit être un des autres types d'activités Bot Framework : « contactRelationUpdate », « conversationUpdate », « deleteUserData », « endOfConversation », « handoff », « installationUpdate », « messageDelete », « messageReaction », « messageUpdate », « suggestion », « trace » ou « typing ». |
L'objet otherActivities peut inclure d'autres propriétés, mais le schéma du manifeste de compétence ne définit pas sa signification.
Définitions
Chaque définition décrit un sous-schéma qui peut être consommé par d’autres parties du document.
Vous trouverez ci-dessous un exemple de sous-schéma pour les informations relatives aux réservations de vols.
"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"
}
}
},
Modèles Dispatch
Le modèle Dispatch contient une liste de modèles de langage et une liste d’intentions de niveau supérieur prises en charge par la compétence. Il s'agit d'une fonctionnalité avancée qui permet au développeur d'un consommateur de compétences de composer un modèle de langage combinant les fonctionnalités des bots du consommateur et de la compétence.
Chaque modèle de langage utilise le format de fichier .lu
ou .qna
. Pour plus d'informations sur ces formats, consultez les formats de fichier .lu et les formats de fichier .qna.
Un nom de paramètres régionaux est une combinaison d’un code de culture ISO 639 à deux lettres minuscules associé à une langue et d’un code de sous-culture ISO 3166 facultatif à deux lettres majuscules, associé à un pays ou une région, par exemple « en » ou « en-US ».
Champ | Type | Requise | Description |
---|---|---|---|
intentions | Tableau de chaîne | Facultatif | Une liste des intentions de niveau supérieur prises en charge par la compétence. Chaque intention doit être unique. |
languages | Objet contenant des tableaux intitulés languageModel | Facultatif | Une liste des modèles de langage pris en charge par la compétence. Chaque nom représente la région à laquelle les modèles de langage sont destinés. En outre, le tableau contient les modèles de langage pour ces paramètres régionaux. Un modèle Dispatch doit prendre en charge au moins un paramètre régional. Chaque paramètre régional dans le champ des langages doit être unique. |
Il s'agit d'un exemple de modèle Dispatch contenant deux modèles de langage répartis sur trois paramètres régionaux. Il décrit également deux intentions de niveau supérieur que la compétence peut reconnaître.
"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"
]
},
Objet languageModel
Décrit un modèle de langage pour une culture donnée. Le nom est un nom de paramètre régional.
Champ | Type/format | Requis | Description |
---|---|---|---|
contentType | Chaîne | Requis | Type de modèle de langage. |
description | Chaîne | Facultatif | Une description du modèle de langage. |
name | Chaîne | Requis | Nom du modèle de langage. |
url | String/URI-reference | Requis | L’URL du modèle de langage. |
Exemple de manifeste
Vous trouverez ci-dessous un exemple complet de manifeste v2.2 pour une compétence qui expose plusieurs activités.
{
"$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"
}
}
}
}
}
}