Usar módulos de tarefas dos bots
Os módulos de tarefa podem ser invocados de bots do Microsoft Teams usando botões em Cartões Adaptáveis e cartões Bot Framework que são heróis, miniaturas e conector para Grupos do Microsoft 365. Os módulos de tarefa geralmente são uma melhor experiência do usuário do que várias etapas de conversa. Acompanhe o estado do bot e permita que o usuário interrompa ou cancele a sequência.
Há duas maneiras de invocar módulos de tarefa:
- Uma nova mensagem
task/fetch
de invocação: usar a ação deinvoke
cartão para cartões Bot Framework ou a ação deAction.Submit
cartão para Cartões Adaptáveis, comtask/fetch
, módulo de tarefa uma URL ou um Cartão Adaptável, é buscada dinamicamente do bot. - URLs de link profundo: usando a sintaxe de link profundo para módulos de tarefa, você pode usar a ação de
openUrl
cartão para cartões Bot Framework ou a ação deAction.OpenUrl
cartão para Cartões Adaptáveis, respectivamente. Com URLs de link profundo, a URL do módulo de tarefa ou o corpo do Cartão Adaptável já é conhecido por evitar uma viagem de ida e volta do servidor em relação atask/fetch
.
Importante
Cada url
e fallbackUrl
deve implementar o protocolo de criptografia HTTPS.
A próxima seção fornece detalhes sobre como invocar um módulo de tarefa usando task/fetch
.
Invocar um módulo de tarefa usando task/fetch
Quando o objeto value
da ação de cartão invoke
ou Action.Submit
é inicializado e quando um usuário seleciona o botão, uma invoke
mensagem é enviada ao bot. Na resposta HTTP à invoke
mensagem, há um objeto TaskInfo inserido em um objeto wrapper, que o Teams usa para exibir o módulo de tarefa.
As etapas a seguir fornecem o módulo de tarefa de invocação usando task/fetch
:
Esta imagem mostra um cartão herói do Bot Framework com umaaçãoComprar
invoke
cartão. O valor da propriedadetype
étask/fetch
e o restante do objetovalue
pode ser de sua escolha.O bot recebe a mensagem HTTP POST
invoke
.O bot cria um objeto de resposta e o retorna no corpo da resposta POST com um código de resposta HTTP 200. Para obter mais informações sobre o esquema de respostas, consulte a discussão sobre tarefa/envio. O código a seguir fornece um exemplo de corpo da resposta HTTP que contém um objeto TaskInfo inserido em um objeto wrapper:
{ "task": { "type": "continue", "value": { "title": "Task module title", "height": 500, "width": "medium", "url": "https://contoso.com/msteams/taskmodules/newcustomer", "fallbackUrl": "https://contoso.com/msteams/taskmodules/newcustomer" } } }
O
task/fetch
evento e sua resposta para bots são semelhantes àmicrosoftTeams.tasks.startTask()
função na biblioteca de clientes JavaScript do Microsoft Teams (TeamsJS).O Microsoft Teams exibe o módulo de tarefa.
A próxima seção fornece detalhes sobre como enviar o resultado de um módulo de tarefa.
Enviar o resultado de um módulo de tarefa
Quando o usuário é concluído com o módulo de tarefa, enviar o resultado de volta para o bot é semelhante à maneira como ele funciona com guias. Para obter mais informações, consulte exemplo de enviar o resultado de um módulo de tarefa. Há algumas diferenças da seguinte maneira:
- HTML ou JavaScript: depois de
TaskInfo.url
validar o que o usuário inseriu, você chamará amicrosoftTeams.tasks.submitTask()
função chamada posteriormente comosubmitTask()
para fins de legibilidade. Você pode chamarsubmitTask()
sem parâmetros se quiser que o Teams feche o módulo de tarefa, mas passe um objeto ou uma cadeia de caracteres para seusubmitHandler
. Passe-o como o primeiro parâmetro,result
. O Teams invocasubmitHandler
,err
énull
, eresult
é o objeto ou cadeia de caracteres que você passou parasubmitTask()
. Se você chamarsubmitTask()
com um parâmetroresult
, você deve passar umappId
ou uma matriz de cadeias de caracteresappId
. Isso permite que o Teams valide que o aplicativo que envia o resultado é o mesmo, que invocou o módulo de tarefa. Seu bot recebe uma mensagemtask/submit
incluindoresult
. Para obter mais informações, consulte conteúdo detask/fetch
etask/submit
. - Cartão Adaptável que é
TaskInfo.card
: o corpo do Cartão Adaptável preenchido pelo usuário é enviado ao bot por meio de umtask/submit
quando o usuário seleciona qualquer botãoAction.Submit
.
A próxima seção fornece detalhes sobre como responder às task/submit
mensagens.
Responde às task/submit
mensagens
Quando o usuário termina com um módulo de tarefa invocado de um bot, o bot sempre recebe uma mensagem task/submit invoke
. Você tem várias opções ao responder à mensagem task/submit
da seguinte maneira:
Resposta do corpo HTTP | Cenário |
---|---|
Nenhum ignora a task/submit mensagem |
A resposta mais simples não é nenhuma resposta. Seu bot não é necessário para responder quando o usuário terminar com o módulo de tarefa. |
{ |
O Teams exibe o valor de value em uma caixa de mensagem pop-up. |
{ |
Permite encadear sequências de Cartões Adaptáveis em uma experiência de assistente ou de várias etapas. |
Observação
O encadeamento Cartões Adaptáveis em uma sequência é um cenário avançado. O aplicativo de exemplo Node.js dá suporte a ele. Para obter mais informações, consulte Módulo de tarefa Node.js do Microsoft Teams.
A próxima seção fornece detalhes sobre o conteúdo das mensagens task/fetch
e task/submit
.
Carga de task/fetch
mensagens e task/submit
Esta seção define o esquema do que seu bot recebe quando recebe um objeto task/fetch
ou task/submit
Bot Framework Activity
. A tabela a seguir fornece as propriedades de conteúdo das mensagens task/fetch
e task/submit
:
Propriedade | Descrição |
---|---|
type |
É sempre invoke . |
name |
É task/fetch ou task/submit . |
value |
É a carga definida pelo desenvolvedor. A estrutura do objeto value é igual ao que é enviado do Teams. Nesse caso, no entanto, é diferente. Ele requer suporte para uma pesquisa dinâmica que é task/fetch de ambos os Bot Framework, que é value e as ações Action.Submit , que são data . Uma maneira de comunicar o Teams context ao bot é necessária além do que está incluído no value ou data .Combine 'value' e 'data' em um objeto pai: { |
A próxima seção fornece um exemplo de recebimento e resposta a task/fetch
e task/submit
invocam mensagens no Node.js.
As seguintes guias fornecem task/fetch
e task/submit
invocam mensagens em Node.js e C#:
handleTeamsTaskModuleFetch(context, taskModuleRequest) {
// Called when the user selects an options from the displayed HeroCard or
// AdaptiveCard. The result is the action to perform.
const cardTaskFetchValue = taskModuleRequest.data.data;
var taskInfo = {}; // TaskModuleTaskInfo
if (cardTaskFetchValue === TaskModuleIds.YouTube) {
// Display the YouTube.html page
taskInfo.url = taskInfo.fallbackUrl = this.baseUrl + '/' + TaskModuleIds.YouTube + '.html';
this.setTaskInfo(taskInfo, TaskModuleUIConstants.YouTube);
} else if (cardTaskFetchValue === TaskModuleIds.CustomForm) {
// Display the CustomForm.html page, and post the form data back via
// handleTeamsTaskModuleSubmit.
taskInfo.url = taskInfo.fallbackUrl = this.baseUrl + '/' + TaskModuleIds.CustomForm + '.html';
this.setTaskInfo(taskInfo, TaskModuleUIConstants.CustomForm);
} else if (cardTaskFetchValue === TaskModuleIds.AdaptiveCard) {
// Display an AdaptiveCard to prompt user for text, and post it back via
// handleTeamsTaskModuleSubmit.
taskInfo.card = this.createAdaptiveCardAttachment();
this.setTaskInfo(taskInfo, TaskModuleUIConstants.AdaptiveCard);
}
return TaskModuleResponseFactory.toTaskModuleResponse(taskInfo);
}
async handleTeamsTaskModuleSubmit(context, taskModuleRequest) {
// Called when data is being returned from the selected option (see `handleTeamsTaskModuleFetch').
// Echo the users input back. In a production bot, this is where you'd add behavior in
// response to the input.
await context.sendActivity(MessageFactory.text('handleTeamsTaskModuleSubmit: ' + JSON.stringify(taskModuleRequest.data)));
// Return TaskModuleResponse
return {
// TaskModuleMessageResponse
task: {
type: 'message',
value: 'Thanks!'
}
};
}
setTaskInfo(taskInfo, uiSettings) {
taskInfo.height = uiSettings.height;
taskInfo.width = uiSettings.width;
taskInfo.title = uiSettings.title;
}
Bot Framework ações do cartão vs. Ação do Cartão Adaptável.Enviar ações
O esquema para ações de cartão Bot Framework é diferente das ações Action.Submit
e a maneira de invocar módulos de tarefa também é diferente. O data
objeto no Action.Submit
contém um msteams
objeto para que ele não interfira em outras propriedades no cartão. A tabela a seguir mostra um exemplo de cada ação de cartão:
Bot Framework ação do cartão | Ação De Cartão Adaptável.Enviar ação |
---|---|
{ |
{ |
Exemplo de código
Nome do exemplo | Descrição | .NET | Node.js | Manifesto |
---|---|---|---|---|
Bots de exemplo do módulo de tarefa -V4 | Este exemplo mostra como criar módulos de tarefa usando a estrutura do bot v4 e a guia Teams. | View | View | View |
Guias passo a passo
Siga a guia passo a passo para criar e buscar o bot do módulo de tarefa no Teams.