Criar e enviar módulos de tarefa
Importante
Os exemplos de código nesta seção são baseados em versões v4.6 e posteriores do SDK do Bot Framework. Se você estiver procurando documentação para versões anteriores, consulte a seção Extensões de Mensagem – v3 SDK na pasta Recursos da documentação.
Você pode criar o módulo de tarefa usando um Cartão Adaptável ou um modo de exibição da Web incorporado. Para criar um módulo de tarefa, você deve executar o processo chamado de solicitação de invocação inicial. Este documento aborda a solicitação de invocação inicial, as propriedades da atividade de conteúdo quando um módulo de tarefa é invocado de um chat individual, chat em grupo, canal (nova postagem), canal (responder à conversa) e caixa de comandos.
Observação
Se você não estiver preenchendo o módulo de tarefa com parâmetros definidos no manifesto do aplicativo, deverá criar o módulo de tarefa para usuários com um Cartão Adaptável ou um modo de exibição da Web incorporado.
A solicitação de invocação inicial
No processo da solicitação de invocação inicial, seu serviço recebe um objeto Activity
do tipo composeExtensions/fetchTask
e você deve responder com um objeto task
contendo um Cartão Adaptável ou uma URL para o modo de exibição da Web incorporado. Junto com as propriedades de atividade de bot padrão, o conteúdo de invocação inicial contém os seguintes metadados de solicitação:
Nome da propriedade | Objetivo |
---|---|
type |
Tipo de solicitação. Deve ser invoke . |
name |
Tipo de comando que é emitido para o serviço. Deve ser composeExtension/fetchTask . |
from.id |
ID do usuário que enviou a solicitação. |
from.name |
Nome do usuário que enviou a solicitação. |
from.aadObjectId |
ID de objeto do Azure Active Directory do usuário que enviou a solicitação. |
channelData.tenant.id |
Locatário do Azure Active Directory. |
channelData.channel.id |
ID do canal (se a solicitação foi feita em um canal). |
channelData.team.id |
ID da equipe (se a solicitação foi feita em um canal). |
value.commandId |
Contém a ID do comando que foi invocado. |
value.commandContext |
O contexto que disparou o evento. Deve ser compose . |
value.context.theme |
O tema do cliente do usuário, útil para a formatação do modo exibição da Web incorporado. Deve ser default , contrast ou dark |
Exemplo
O código para a solicitação de invocação inicial é fornecido no exemplo a seguir:
{
"type": "invoke",
"id": "f:bc319b1d-571a-194d-9ffb-11d7ab37c9ff",
"from": {
"id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
"name": "Olo Brockhouse",
"aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
}
"channelData": {
"tenant": {
"id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"source": {
"name": "compose"
}
},
"value": {
"commandId": "Test",
"commandContext": "compose",
"requestId": "fe50f49e5c74440bb2ebf07f49e9553c",
"context": {
"theme": "default"
}
},
"name": "composeExtension/fetchTask"
Propriedades da atividade de conteúdo quando um módulo de tarefa é invocado do chat individual
As propriedades da atividade de conteúdo quando um módulo de tarefa é invocado do chat individual são listadas da seguinte maneira:
Nome da propriedade | Objetivo |
---|---|
type |
Tipo de solicitação. Deve ser invoke . |
name |
Tipo de comando que é emitido para o serviço. Deve ser composeExtension/fetchTask . |
from.id |
ID do usuário que enviou a solicitação. |
from.name |
Nome do usuário que enviou a solicitação. |
from.aadObjectId |
ID de objeto do Azure Active Directory do usuário que enviou a solicitação. |
channelData.tenant.id |
Locatário do Azure Active Directory. |
channelData.source.name |
O nome de origem de onde o módulo de tarefa é invocado. |
ChannelData.legacy. replyToId |
Obtém ou define a ID da mensagem à qual esta mensagem é uma resposta. |
value.commandId |
Contém a ID do comando que foi invocado. |
value.commandContext |
O contexto que disparou o evento. Deve ser compose . |
value.context.theme |
O tema do cliente do usuário, útil para a formatação do modo exibição da Web incorporado. Deve ser default , contrast ou dark |
Exemplo
As propriedades da atividade de conteúdo quando um módulo de tarefa é invocado do chat individual são fornecidas no seguinte exemplo:
{
"type": "invoke",
"id": "f:bc319b1d-571a-194d-9ffb-11d7ab37c9ff",
"from": {
"id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
"name": "Olo Brockhouse",
"aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
}
"channelData": {
"tenant": {
"id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"source": {
"name": "compose"
}
},
"value": {
"commandId": "Test",
"commandContext": "compose",
"requestId": "fe50f49e5c74440bb2ebf07f49e9553c",
"context": {
"theme": "default"
}
},
"name": "composeExtension/fetchTask"
}
Propriedades da atividade de conteúdo quando um módulo de tarefa é invocado de um chat em grupo
As propriedades da atividade de conteúdo quando um módulo de tarefa é invocado do chat em grupo são listadas da seguinte maneira:
Nome da propriedade | Objetivo |
---|---|
type |
Tipo de solicitação. Deve ser invoke . |
name |
Tipo de comando que é emitido para o serviço. Deve ser composeExtension/fetchTask . |
from.id |
ID do usuário que enviou a solicitação. |
from.name |
Nome do usuário que enviou a solicitação. |
from.aadObjectId |
ID de objeto do Azure Active Directory do usuário que enviou a solicitação. |
channelData.tenant.id |
Locatário do Azure Active Directory. |
channelData.source.name |
O nome de origem de onde o módulo de tarefa é invocado. |
ChannelData.legacy. replyToId |
Obtém ou define a ID da mensagem à qual esta mensagem é uma resposta. |
value.commandId |
Contém a ID do comando que foi invocado. |
value.commandContext |
O contexto que disparou o evento. Deve ser compose . |
value.context.theme |
O tema do cliente do usuário, útil para a formatação do modo exibição da Web incorporado. Deve ser default , contrast ou dark |
Exemplo
As propriedades da atividade de conteúdo quando um módulo de tarefa é invocado de um chat em grupo são fornecidas no seguinte exemplo:
{
"type": "invoke",
"id": "f:bf72031f-a17e-f99c-48dc-5c0714950d87",
"from": {
"id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
"name": "Olo Brockhouse",
"aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
},
"conversation": {
"isGroup": true,
"conversationType": "groupChat",
"id": "19:d77be72390a1416e9644261e9064fa00@thread.skype",
"tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"channelData": {
"tenant": {
"id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"source": {
"name": "compose"
}
},
"value": {
"commandId": "Test",
"commandContext": "compose",
"requestId": "213167a1e3b6428b93e186ea5407c759",
"context": {
"theme": "default"
}
},
"name": "composeExtension/fetchTask"
}
Propriedades da atividade de conteúdo quando um módulo de tarefa é invocado de um chat de reunião
As propriedades da atividade de conteúdo quando um módulo de tarefa é invocado do chat de reunião são fornecidas no seguinte exemplo:
{
"type": "invoke",
"id": "f:4d271f11-4eed-622f-e820-6d82bf91692f",
"channelId": "msteams",
"from": {
"id": "29:1yLsdbTM1UjxqqD8cjduNUCI1jm8xZaH3lx9u5JQ04t2bknuTCkP45TXdfROTOWk1LzN1AqTgFZUEqHIVGn_qUA",
"name": "MOD Administrator",
"aadObjectId": "ef16aa89-5b26-4a2c-aebb-761b551577c0"
},
"conversation": {
"tenantId": "c9f9aafd-64ac-4f38-8e05-12feba3fb090",
"id": "19:meeting_NTk4ZDY4ZmYtOWEzZS00OTRkLThhY2EtZmUzZmUzMDQyM2M0@thread.v2",
"name": "Test meeting"
},
"channelData": {
"tenant": {
"id": "c9f9aafd-64ac-4f38-8e05-12feba3fb090"
},
"source": {
"name": "compose"
},
"meeting": {
"id": "MCMxOTptZWV0aW5nX05UazRaRFk0Wm1ZdE9XRXpaUzAwT1RSa0xUaGhZMkV0Wm1VelptVXpNRFF5TTJNMEB0aHJlYWQudjIjMA=="
}
},
"value": {
"commandId": "Test",
"commandContext": "compose",
"requestId": "c46a6b53573f42b5bc801716e5ccc960",
"context": {
"theme": "default"
}
},
"name": "composeExtension/fetchTask",
}
Propriedades da atividade de conteúdo quando um módulo de tarefa é invocado de um canal (nova postagem)
As propriedades da atividade de conteúdo quando um módulo de tarefa é invocado de um canal (nova postagem) são listadas da seguinte maneira:
Nome da propriedade | Objetivo |
---|---|
type |
Tipo de solicitação. Deve ser invoke . |
name |
Tipo de comando que é emitido para o serviço. Deve ser composeExtension/fetchTask . |
from.id |
ID do usuário que enviou a solicitação. |
from.name |
Nome do usuário que enviou a solicitação. |
from.aadObjectId |
ID de objeto do Azure Active Directory do usuário que enviou a solicitação. |
channelData.tenant.id |
Locatário do Azure Active Directory. |
channelData.channel.id |
ID do canal (se a solicitação foi feita em um canal). |
channelData.team.id |
ID da equipe (se a solicitação foi feita em um canal). |
channelData.source.name |
O nome de origem de onde o módulo de tarefa é invocado. |
ChannelData.legacy. replyToId |
Obtém ou define a ID da mensagem à qual esta mensagem é uma resposta. |
value.commandId |
Contém a ID do comando que foi invocado. |
value.commandContext |
O contexto que disparou o evento. Deve ser compose . |
value.context.theme |
O tema do cliente do usuário, útil para a formatação do modo exibição da Web incorporado. Deve ser default , contrast ou dark |
Exemplo
As propriedades da atividade de conteúdo quando um módulo de tarefa é invocado de um canal (nova postagem) são fornecidas no seguinte exemplo:
{
"type": "invoke",
"id": "f:a5fbb109-c989-c449-ee83-71ac99919d4b",
"from": {
"id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
"name": "Olo Brockhouse",
"aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
},
"conversation": {
"isGroup": true,
"conversationType": "channel",
"id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype",
"name": "parsable",
"tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"channelData": {
"channel": {
"id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype"
},
"team": {
"id": "19:acca514e83cb497e960e0b014d405336@thread.skype"
},
"tenant": {
"id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"source": {
"name": "compose"
}
},
"value": {
"commandId": "Test",
"commandContext": "compose",
"requestId": "5336640edc7748b28ce2df43f5b45963",
"context": {
"theme": "default"
}
},
"name": "composeExtension/fetchTask"
}
Propriedades da atividade de conteúdo quando um módulo de tarefa é invocado de um canal (responder à conversa)
As propriedades da atividade de conteúdo quando um módulo de tarefa é invocado de um canal (responder à conversa) são listadas da seguinte maneira:
Nome da propriedade | Objetivo |
---|---|
type |
Tipo de solicitação. Deve ser invoke . |
name |
Tipo de comando que é emitido para o serviço. Deve ser composeExtension/fetchTask . |
from.id |
ID do usuário que enviou a solicitação. |
from.name |
Nome do usuário que enviou a solicitação. |
from.aadObjectId |
ID de objeto do Azure Active Directory do usuário que enviou a solicitação. |
channelData.tenant.id |
Locatário do Azure Active Directory. |
channelData.channel.id |
ID do canal (se a solicitação foi feita em um canal). |
channelData.team.id |
ID da equipe (se a solicitação foi feita em um canal). |
channelData.source.name |
O nome de origem de onde o módulo de tarefa é invocado. |
ChannelData.legacy. replyToId |
Obtém ou define a ID da mensagem à qual esta mensagem é uma resposta. |
value.commandId |
Contém a ID do comando que foi invocado. |
value.commandContext |
O contexto que disparou o evento. Deve ser compose . |
value.context.theme |
O tema do cliente do usuário, útil para a formatação do modo exibição da Web incorporado. Deve ser default , contrast ou dark |
Exemplo
As propriedades da atividade de conteúdo quando um módulo de tarefa é invocado de um canal (responder à conversa) são fornecidas no seguinte exemplo:
{
"type": "invoke",
"id": "f:19ccc884-c792-35ef-2f40-d0ff43dcca71",
"from": {
"id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
"name": "Olo Brockhouse",
"aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
},
"conversation": {
"isGroup": true,
"conversationType": "channel",
"id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype;messageid=1611060744833",
"name": "parsable",
"tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"channelData": {
"channel": {
"id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype"
},
"team": {
"id": "19:acca514e83cb497e960e0b014d405336@thread.skype"
},
"tenant": {
"id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"source": {
"name": "compose"
}
},
"value": {
"commandId": "TEst",
"commandContext": "message",
"requestId": "7f7d22efe5414818becebcec649a7912",
"messagePayload": {
"linkToMessage": "https://teams.microsoft.com/l/message/19:6decf54d86d945e4b3924b63a9161a78@thread.skype/1611060744833",
"id": "1611060744833",
"replyToId": null,
"createdDateTime": "2021-01-19T12:52:24.833Z",
"lastModifiedDateTime": null,
"deleted": false,
"summary": null,
"importance": "normal",
"locale": "en-us",
"body": {
"contentType": "html",
"content": "<div><div><at id=\"0\">Testing outgoing Webhook-Nikitha</at> - Hi</div>\n</div>"
},
"from": {
"device": null,
"conversation": null,
"user": {
"userIdentityType": "aadUser",
"id": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc",
"displayName": "Olo Brockhouse"
},
"application": null
},
"reactions": [],
"mentions": [
{
"id": 0,
"mentionText": "Testing outgoing Webhook-Nikitha",
"mentioned": {
"device": null,
"conversation": null,
"user": null,
"application": {
"applicationIdentityType": "webhook",
"id": "b8c1c68c-e290-4bdd-81c3-266f310751dc",
"displayName": "Testing outgoing Webhook-Nikitha"
}
}
}
],
"attachments": []
},
"context": {
"theme": "default"
}
},
"name": "composeExtension/fetchTask"
}
Propriedades da atividade de conteúdo quando um módulo de tarefa é invocado de uma caixa de comandos
As propriedades da atividade de conteúdo quando um módulo de tarefa é invocado da caixa de comandos são listadas da seguinte maneira:
Nome da propriedade | Objetivo |
---|---|
type |
Tipo de solicitação. Deve ser invoke . |
name |
Tipo de comando que é emitido para o serviço. Deve ser composeExtension/fetchTask . |
from.id |
ID do usuário que enviou a solicitação. |
from.name |
Nome do usuário que enviou a solicitação. |
from.aadObjectId |
ID de objeto do Azure Active Directory do usuário que enviou a solicitação. |
channelData.tenant.id |
Locatário do Azure Active Directory. |
channelData.source.name |
O nome de origem de onde o módulo de tarefa é invocado. |
value.commandId |
Contém a ID do comando que foi invocado. |
value.commandContext |
O contexto que disparou o evento. Deve ser compose . |
value.context.theme |
O tema do cliente do usuário, útil para a formatação do modo exibição da Web incorporado. Deve ser default , contrast ou dark |
Exemplo
As propriedades da atividade de conteúdo quando um módulo de tarefa é invocado de uma caixa de comandos são fornecidas no seguinte exemplo:
{
"type": "invoke",
"id": "f:172560f1-95f9-3189-edb2-b7612cd1a3cd",
"id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
"name": "Olo Brockhouse",
"aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
},
"conversation": {
"isGroup": true,
"conversationType": "channel",
"id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype",
"name": "parsable",
"tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"channelData": {
"channel": {
"id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype"
},
"team": {
"id": "19:acca514e83cb497e960e0b014d405336@thread.skype"
},
"tenant": {
"id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"source": {
"name": "compose"
}
},
"value": {
"commandId": "TEst",
"commandContext": "compose",
"requestId": "d2ce690cdc2b4920a538e75882610a30",
"context": {
"theme": "default"
}
},
"name": "composeExtension/fetchTask"
}
Exemplo
A seção de código a seguir é um exemplo de solicitação fetchTask
:
protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
//handle fetch task
}
Solicitação de invocação inicial de uma mensagem
Quando o bot é invocado de uma mensagem, o value
objeto na solicitação de invocação inicial deve conter os detalhes da mensagem da qual sua extensão de mensagem é invocada. As matrizes reactions
e mentions
são opcionais e não estão presentes se não houver reações ou menções na mensagem original.
A seção a seguir é um exemplo do objeto value
:
protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
var messageText = action.MessagePayload.Body.Content;
var fromId = action.MessagePayload.From.User.Id;
//finish handling the fetchTask
}
Responder à fetchTask
Responda à solicitação de invocação com um objeto task
que contém um objeto taskInfo
com o Cartão Adaptável ou a URL da Web, ou uma mensagem de cadeia de caracteres simples.
Nome da propriedade | Objetivo |
---|---|
type |
Pode ser continue apresentar um formulário ou message para um pop-up simples. |
value |
Um objeto taskInfo para um formulário ou um string para uma mensagem. |
O esquema para o objeto taskInfo é:
Nome da propriedade | Objetivo |
---|---|
title |
O título do módulo de tarefa. |
height |
Ele deve ser um número inteiro (em pixels) ou small , medium , large . |
width |
Ele deve ser um número inteiro (em pixels) ou small , medium , large . |
card |
O cartão adaptável que define o formulário (se estiver usando um). |
url |
A URL a ser aberta dentro do módulo de tarefa como um modo de exibição da Web incorporado. |
fallbackUrl |
Se um cliente não tiver suporte para o recurso de módulo da tarefa, essa URL será aberta em uma guia do navegador. |
Responder à fetchTask com um Cartão Adaptável
Ao usar um cartão adaptável, você deve responder com um objeto task
com o objeto value
que contém um Cartão Adaptável.
Exemplo
A seção de código a seguir é um exemplo para a resposta fetchTask
com um cartão adaptável:
Este exemplo usa o pacote AdaptiveCards NuGet além do SDK do Bot Framework.
protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
string placeholder = "Not invoked from message";
if (action.MessagePayload != null)
{
var messageText = action.MessagePayload.Body.Content;
var fromId = action.MessagePayload.From.User.Id;
placeholder = "Invoked from message";
}
var response = new MessagingExtensionActionResponse()
{
Task = new TaskModuleContinueResponse()
{
Value = new TaskModuleTaskInfo()
{
Height = "small",
Width = "small",
Title = "Example task module",
Card = new Attachment()
{
ContentType = AdaptiveCard.ContentType,
Content = new AdaptiveCard("1.0")
{
Body = new List<AdaptiveElement>()
{
new AdaptiveTextInput() { Id = "FormField1", Placeholder = placeholder},
new AdaptiveTextInput() { Id = "FormField2", Placeholder = "FormField2"},
new AdaptiveTextInput() { Id = "FormField3", Placeholder = "FormField3"},
},
Actions = new List<AdaptiveAction>()
{
new AdaptiveSubmitAction()
{
Type = AdaptiveSubmitAction.TypeName,
Title = "Submit",
},
},
},
},
},
},
};
return response;
}
Criar um módulo de tarefa com um modo de exibição da Web incorporado
Ao usar um modo de exibição da Web incorporado, você deve responder com um objeto task
com o objeto value
que contém a URL para o formulário da Web que você deseja carregar. Os domínios de qualquer URL que você deseja carregar devem ser incluídos na matriz validDomains
no manifesto do aplicativo. Para obter mais informações sobre como criar seu modo de exibição da Web incorporado, confira a documentação do módulo de tarefas.
protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
string placeholder = "Not invoked from message";
if (action.MessagePayload != null)
{
var messageText = action.MessagePayload.Body.Content;
var fromId = action.MessagePayload.From.User.Id;
placeholder = "Invoked from message";
}
var response = new MessagingExtensionActionResponse()
{
Task = new TaskModuleContinueResponse()
{
Value = new TaskModuleTaskInfo()
{
Height = "small",
Width = "small",
Title = "Example task module",
Url = "https://contoso.com/msteams/taskmodules/newcustomer",
},
},
},
};
return response;
}
Solicitação para instalar o bot de conversação
Se o aplicativo contiver um bot de conversação, instale o bot na conversa e carregue o módulo de tarefa. O bot é útil para obter contexto adicional para o módulo de tarefa. Um exemplo para esse cenário é buscar a lista de participantes para preencher um controle do seletor de pessoas ou a lista de canais em uma equipe.
Quando a extensão de mensagem receber a invocação composeExtensions/fetchTask
, verifique se o bot está instalado no contexto atual para facilitar o fluxo. Por exemplo, verifique o fluxo com uma chamada get roster. Se o bot não estiver instalado, retorne um Cartão Adaptável com uma ação que solicita que o usuário instale o bot. O usuário deve ter permissão para instalar os aplicativos nesse local para verificação. Se a instalação do aplicativo não for bem-sucedida, o usuário receberá uma mensagem para entrar em contato com o administrador.
Exemplo
A seção de código a seguir é um exemplo de resposta:
{
"type": "AdaptiveCard",
"body": [
{
"type": "TextBlock",
"text": "Looks like you haven't used Disco in this team/chat"
}
],
"actions": [
{
"type": "Action.Submit",
"title": "Continue",
"data": {
"msteams": {
"justInTimeInstall": true
}
}
}
],
"version": "1.0"
}
Após a instalação do bot de conversação, ele recebe outra mensagem de invocação com name = composeExtensions/submitAction
e value.data.msteams.justInTimeInstall = true
.
Exemplo
A seção de código a seguir é um exemplo da resposta da tarefa à invocação:
{
"value": {
"commandId": "giveKudos",
"commandContext": "compose",
"context": {
"theme": "default"
},
"data": {
"msteams": {
"justInTimeInstall": true
}
}
},
"conversation": {
"id": "19:7705841b240044b297123ad7f9c99217@thread.skype"
},
"name": "composeExtension/submitAction",
"imdisplayname": "Bob Smith"
}
A resposta da tarefa à invocação deve ser semelhante à do bot instalado.
Exemplo
A seção de código a seguir é um exemplo de instalação just-in-time do aplicativo com Cartão Adaptável:
private static Attachment GetAdaptiveCardAttachmentFromFile(string fileName)
{
//Read the card json and create attachment.
string[] paths = { ".", "Resources", fileName };
var adaptiveCardJson = File.ReadAllText(Path.Combine(paths));
var adaptiveCardAttachment = new Attachment()
{
ContentType = "application/vnd.microsoft.card.adaptive",
Content = JsonConvert.DeserializeObject(adaptiveCardJson),
};
return adaptiveCardAttachment;
}
Exemplo de código
Nome do exemplo | Descrição | .NET | Node.js | Python | Manifesto |
---|---|---|---|---|---|
Ação de extensão de mensagem do Teams | Este exemplo mostra como definir comandos de ação, criar módulo de tarefa e responder à ação de envio do módulo de tarefa. | View | View | View | View |
Visualização da ação de extensão de mensagem | Este exemplo mostra como usar a visualização de ação em Extensões de Mensagens usando o Bot Framework v4. | View | View | NA | View |
Pesquisa de extensão de mensagem do Teams | Este exemplo mostra como criar uma extensão de mensagem baseada em pesquisa. Ele pesquisa pacotes de cutucadas e exibe os resultados na extensão de mensagens baseada em pesquisa. | View | View | View | View |