Escrever um manifesto de habilidades
APLICA-SE A: SDK v4
Um manifesto de habilidade é um arquivo JSON que descreve as ações que uma habilidade pode tomar, seus parâmetros de entrada e saída e os pontos de extremidade da habilidade. O manifesto contém informações legíveis por máquina que um desenvolvedor pode usar para acessar a habilidade de outro bot.
Este artigo descreve as versões suportadas do esquema de manifesto de habilidades do Bot Framework.
Versão | Notas |
---|---|
Versão 2.2 | Atualizadas algumas propriedades de URI para aceitar referências de URI. |
Versão 2.1 | Adiciona a capacidade de descrever atividades proativas que a habilidade pode enviar e os modelos de despacho que a habilidade usa. |
Versão 2.0 | Versão inicial. |
Os esquemas de manifesto de habilidade do Bot Framework usam o rascunho 7 do vocabulário do esquema JSON.
Pré-requisitos
- Conhecimento de competências.
- Alguma familiaridade com o esquema JSON e o formato JSON.
O manifesto de habilidades
O manifesto de habilidades contém diferentes categorias de informações:
- Metadados que descrevem a habilidade em um nível geral.
- Uma lista dos pontos finais que a habilidade fornece.
- Listas opcionais das atividades que a habilidade pode receber e enviar proativamente.
- Um objeto de definições opcional que contém esquemas para objetos referenciados por outras partes do documento.
- Uma lista opcional dos modelos de despacho suportados pela habilidade.
A tabela a seguir descreve o esquema completo para v2.2 do manifesto de habilidade do Bot Framework.
Categoria/Campo | Tipo/Formato | Obrigatório | Descrição |
---|---|---|---|
Metadados | |||
$id | String | Necessária | O identificador do manifesto de habilidade. |
$schema | String/URI | Obrigatório | O URI HTTPS de um recurso de esquema JSON que descreve o formato do manifesto. Para a versão 2.2, o URI é https://schemas.botframework.com/schemas/skills/v2.2/skill-manifest.json . |
direitos de autor | String | Opcional | O aviso de direitos autorais para a habilidade. |
descrição | String | Opcional | Uma descrição legível por humanos da habilidade. |
iconUrl | String/referência de URI | Opcional | O URI do ícone a ser exibido para a habilidade. |
license | String | Opcional | O contrato de licença para a habilidade. |
nome | Cadeia (de carateres) | Necessária | O nome da habilidade. |
privacidadeUrl | String/referência de URI | Opcional | O URI da descrição de privacidade para a habilidade. |
publisherName | String | Necessária | O nome do editor de habilidades. |
etiquetas | Matriz de cadeias de carateres | Opcional | Um conjunto de tags para a habilidade. Se estiver presente, cada tag deve ser exclusiva. |
versão | Cadeia (de carateres) | Necessária | A versão da habilidade que o manifesto descreve. |
Parâmetros de avaliação | |||
pontos finais | matriz de pontos finais | Obrigatório | A lista de pontos de extremidade suportados pela habilidade. Pelo menos um ponto final deve ser definido. Cada ponto de extremidade deve ser exclusivo. |
Atividades | |||
atividades | Objeto que contém objetos de atividade nomeados | Opcional | O conjunto de atividades iniciais aceitas pela habilidade. |
atividadesEnviado | Objeto que contém objetos de atividade nomeados | Opcional | Descreve as atividades proativas que a habilidade pode enviar. |
Definições | |||
Definições | Objeto | Opcional | Um objeto que contém subesquemas para objetos usados no manifesto. |
Modelos de expedição | |||
dispatchModels [en] | objeto dispatchModels | Opcional | Descreve os modelos de linguagem e as intenções de nível superior suportadas pela habilidade. Consulte Modelos de despacho para o esquema deste objeto. |
Pontos finais
Cada objeto de ponto de extremidade descreve um ponto de extremidade suportado pela habilidade.
Este exemplo lista dois pontos de extremidade para uma habilidade.
"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"
}
],
objeto de ponto de extremidade
Descreve um ponto de extremidade suportado pela habilidade.
Campo | Tipo/Formato | Obrigatório | Descrição |
---|---|---|---|
descrição | String | Opcional | Uma descrição do parâmetro de avaliação. |
endpointUrl | String/URI | Obrigatório | O ponto de extremidade URI para a habilidade. |
msAppId | String | Necessária | O Microsoft AppId (GUID) para a habilidade, usado para autenticar solicitações. Deve corresponder à expressão regular: ^[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}$ . |
nome | Cadeia (de carateres) | Necessária | O nome exclusivo para o ponto de extremidade. |
protocolo | String | Opcional | O protocolo Bot suportado. O padrão é "BotFrameworkV3", que representa a API do Bot Connector versão 3. Use o valor padrão, a menos que sua habilidade use especificamente um protocolo diferente. |
Atividades
Cada objeto de atividade descreve uma atividade aceita pela habilidade. A habilidade inicia uma ação ou tarefa com base na atividade inicial que recebe. O nome associado ao objeto de atividade indica a ação ou tarefa que a habilidade executará.
Alguns tipos de atividade têm uma propriedade value que pode ser usada para fornecer entrada extra para a habilidade. Quando a habilidade termina (conclui a ação), ela pode fornecer um valor de retorno na propriedade value da atividade de fim de conversa associada.
Os tipos de atividade permitidos são: mensagem, evento, invocar e outras atividades. Uma habilidade pode receber uma atividade de invocação, mas não pode enviar uma.
Aqui está uma descrição de atividade de exemplo.
"bookFlight": {
"description": "Books a flight",
"type": "event",
"name": "BookFlight",
"value": {
"$ref": "#/definitions/bookingInfo"
},
"resultValue": {
"$ref": "#/definitions/bookingInfo"
}
},
objeto eventActivity
Descreve uma atividade de evento aceita ou enviada pela habilidade. O significado de uma atividade de evento é definido pelo seu campo de nome, que é significativo dentro do escopo da habilidade.
Campo | Tipo | Necessário | Descrição |
---|---|---|---|
descrição | String | Opcional | Uma descrição da ação que o evento deve iniciar. |
nome | Cadeia (de carateres) | Necessária | O valor da propriedade name da atividade de evento. |
resultadoValor | Objeto | Opcional | Uma definição de esquema JSON do tipo de objeto que a ação pode retornar. |
tipo | String | Necessária | O tipo de atividade. Deve ser "evento". |
valor | Objeto | Opcional | Uma definição de esquema JSON do tipo de objeto que esta ação espera como entrada. |
objeto invokeActivity
Descreve uma atividade de invocação aceita pela habilidade. O significado de uma atividade de invocação é definido pelo seu campo de nome, que é significativo dentro do escopo da habilidade.
Campo | Tipo | Necessário | Descrição |
---|---|---|---|
descrição | String | Opcional | Uma descrição da ação que a invocação deve iniciar. |
nome | Cadeia (de carateres) | Necessária | O valor da propriedade name da atividade de invocação. |
resultadoValor | Objeto | Opcional | Uma definição de esquema JSON do tipo de objeto que a ação associada pode retornar. |
tipo | String | Necessária | O tipo de atividade. Deve ser "invocar". |
valor | Objeto | Opcional | Uma definição de esquema JSON do tipo de objeto que esta ação espera como entrada. |
objeto messageActivity
Descreve uma atividade de mensagem aceita ou enviada pela habilidade. A propriedade text da atividade de mensagem contém a expressão do usuário ou bot.
Campo | Tipo | Necessário | Descrição |
---|---|---|---|
descrição | String | Opcional | Uma descrição da ação. |
resultadoValor | Objeto | Opcional | Uma definição de esquema JSON do tipo de objeto que a ação associada pode retornar. |
tipo | String | Necessária | O tipo de atividade. Deve ser "mensagem". |
valor | Objeto | Opcional | Uma definição de esquema JSON do tipo de objeto que esta ação espera como entrada. |
outroObjeto Atividades
Descreve qualquer outro tipo de atividade aceita ou enviada pela habilidade.
Campo | Tipo | Necessário | Descrição |
---|---|---|---|
tipo | String | Necessária | O tipo de atividade. Deve ser um dos outros tipos de atividade do Bot Framework: "contactRelationUpdate", "conversationUpdate", "deleteUserData", "endOfConversation", "handoff", "installationUpdate", "messageDelete", "messageReaction", "messageUpdate", "suggestion", "trace" ou "typing". |
O objeto otherActivities pode incluir outras propriedades, mas o esquema de manifesto de habilidade não define seu significado.
Definições
Cada definição descreve um subesquema que pode ser consumido por outras partes do documento.
Aqui está um subesquema de exemplo para informações de reserva de voo.
"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"
}
}
},
Modelos de expedição
O modelo de despacho contém uma lista de modelos de linguagem e uma lista de intenções de nível superior suportadas pela habilidade. É um recurso avançado para permitir que um desenvolvedor de um consumidor de habilidades componha um modelo de linguagem que combina os recursos do consumidor e bots de habilidades.
Cada modelo de idioma usa o .lu
formato de arquivo ou .qna
. Para obter mais informações sobre esses formatos, consulte Formato de arquivo .lu e Formato de arquivo .qna.
Um nome de localidade é uma combinação de um código de cultura minúsculo de duas letras ISO 639 associado a um idioma e um código de subcultura maiúscula de duas letras ISO 3166 opcional associado a um país ou região, por exemplo "en" ou "en-US".
Campo | Tipo | Necessário | Descrição |
---|---|---|---|
intenções | Matriz de cadeias de carateres | Opcional | Uma lista das intenções de nível superior suportadas pela habilidade. Cada intenção deve ser única. |
Idiomas | Objeto que contém matrizes languageModel nomeadas | Opcional | Uma lista dos modelos de linguagem suportados pela habilidade. Cada nome é a localidade para a qual os modelos de idioma se destinam, e a matriz contém os modelos de idioma para essa localidade. Um modelo de despacho deve suportar pelo menos uma localidade. Cada localidade dentro do campo idiomas deve ser exclusiva. |
Aqui está um modelo de despacho de exemplo que contém dois modelos de idiomas em três localidades. Ele também descreve duas intenções de alto nível que a habilidade pode reconhecer.
"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"
]
},
objeto languageModel
Descreve um modelo de linguagem para uma determinada cultura. O nome é um nome de localidade.
Campo | Tipo/Formato | Obrigatório | Descrição |
---|---|---|---|
contentType | String | Necessária | Tipo do modelo de linguagem. |
descrição | String | Opcional | Uma descrição do modelo de linguagem. |
nome | Cadeia (de carateres) | Necessária | Nome do modelo de linguagem. |
URL | String/referência de URI | Obrigatório | A URL do modelo de idioma. |
Exemplo de manifesto
Aqui está um exemplo completo de manifesto v2.2 para uma habilidade que expõe várias atividades.
{
"$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"
}
}
}
}
}
}