Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode criar uma caixa de diálogo modal (chamada de módulo de tarefa no TeamsJS v1.x) usando um Cartão Adaptável ou uma exibição da Web incorporada. Para criar uma caixa de diálogo, você deve executar o processo chamado solicitação de invocação inicial. Este documento aborda a solicitação de invocação inicial, as propriedades de atividade de carga quando uma caixa de diálogo é invocada de chat 1:1, chat em grupo, canal (nova postagem), canal (responder ao thread) e caixa de comando.
Observação
Se você não estiver preenchendo a caixa de diálogo com parâmetros definidos no manifesto do aplicativo, deverá criar a caixa de diálogo para os usuários com um Cartão Adaptável ou um modo de exibição da Web incorporado.
Observação
Os agentes fornecem uma experiência mais flexível, inteligente e pronta para o futuro que permite um raciocínio mais avançado, um desenvolvimento mais simples e um melhor alinhamento com o Teams em evolução e a plataforma Microsoft 365. Recomendamos que você explore e crie agentes.
Para obter mais informações, confira Criar agentes declarativos e Criar agentes no Teams.
Se você tiver uma extensão de mensagem baseada em bot existente, também poderá estendê-la como um agente .
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 Microsoft Entra do usuário que enviou a solicitação. |
channelData.tenant.id |
ID do locatário do Microsoft Entra. |
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 carga quando uma caixa de diálogo é invocada no chat 1:1
As propriedades da atividade de carga quando uma caixa de diálogo é invocada do chat 1:1 são listadas a seguir:
| 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 Microsoft Entra do usuário que enviou a solicitação. |
channelData.tenant.id |
ID do locatário do Microsoft Entra. |
channelData.source.name |
O nome da fonte de onde a caixa de diálogo é invocada. |
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 carga quando uma caixa de diálogo é invocada do chat 1:1 são fornecidas 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 carga quando uma caixa de diálogo é invocada de um chat em grupo
As propriedades da atividade de carga quando uma caixa de diálogo é invocada de um chat em grupo são listadas a seguir:
| 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 Microsoft Entra do usuário que enviou a solicitação. |
channelData.tenant.id |
ID do locatário do Microsoft Entra. |
channelData.source.name |
O nome da fonte de onde a caixa de diálogo é invocada. |
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 carga quando uma caixa de diálogo é invocada de um bate-papo em grupo são fornecidas no exemplo a seguir:
{
"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 de atividade de carga quando uma caixa de diálogo é invocada de um bate-papo de reunião
As propriedades da atividade de carga quando uma caixa de diálogo é invocada de um bate-papo de reunião são fornecidas no exemplo a seguir:
{
"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 carga quando uma caixa de diálogo é invocada de um canal (nova postagem)
As propriedades da atividade de carga quando uma caixa de diálogo é invocada de um canal (nova postagem) são listadas a seguir:
| 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 Microsoft Entra do usuário que enviou a solicitação. |
channelData.tenant.id |
ID do locatário do Microsoft Entra. |
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 da fonte de onde a caixa de diálogo é invocada. |
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 carga quando uma caixa de diálogo é invocada de um canal (nova postagem) são fornecidas no exemplo a seguir:
{
"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 de atividade de carga quando uma caixa de diálogo é invocada de um canal (responder ao thread)
As propriedades da atividade de carga quando uma caixa de diálogo é invocada de um canal (responder ao thread) 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 Microsoft Entra do usuário que enviou a solicitação. |
channelData.tenant.id |
ID do locatário do Microsoft Entra. |
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 da fonte de onde a caixa de diálogo é invocada. |
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 carga quando uma caixa de diálogo é invocada de um canal (responder ao thread) são fornecidas no exemplo a seguir:
{
"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 carga quando uma caixa de diálogo é invocada de uma caixa de comando
As propriedades da atividade de carga quando uma caixa de diálogo é invocada de uma caixa de comando são listadas a seguir:
| 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 Microsoft Entra do usuário que enviou a solicitação. |
channelData.tenant.id |
ID do locatário do Microsoft Entra. |
channelData.source.name |
O nome da fonte de onde a caixa de diálogo é invocada. |
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 carga quando uma caixa de diálogo é invocada de uma caixa de comando são fornecidas no exemplo a seguir:
{
"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:
using Microsoft.Teams.Api.MessageExtensions;
// ...
teams.OnFetchTask(async (ctx) =>
{
// Handle fetch task
var commandId = ctx.Activity.Value?.CommandId;
return new ActionResponse();
});
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:
teams.OnFetchTask(async (ctx) =>
{
var messageText =
ctx.Activity.Value?.MessagePayload?.Body?.Content;
var fromId =
ctx.Activity.Value?.MessagePayload?.From?.User?.Id;
// Finish handling the fetchTask
return new ActionResponse();
});
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 para apresentar um formulário ou message para um simples pop-up. |
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 da caixa de diálogo. |
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 da caixa de diálogo como um modo de exibição da Web incorporado. |
fallbackUrl |
Se um cliente não der suporte ao recurso de diálogo, essa URL será aberta em uma aba do navegador. |
Responder à fetchTask com um Cartão Adaptável
Ao usar um Cartão Adaptável, você deve responder com um task objeto com o value objeto que contém um Cartão Adaptável.
Exemplo
A seção de código a seguir é um exemplo de fetchTask resposta com um Cartão Adaptável:
Este exemplo usa o pacote Microsoft.Teams.Cards , que está incluído no SDK do Teams.
using Microsoft.Teams.Api;
using Microsoft.Teams.Api.MessageExtensions;
using Microsoft.Teams.Api.TaskModules;
using Microsoft.Teams.Cards;
using Microsoft.Teams.Common;
// ...
teams.OnFetchTask(async (ctx) =>
{
string placeholder = "Not invoked from message";
if (ctx.Activity.Value?.MessagePayload != null)
{
var messageText = ctx.Activity.Value.MessagePayload.Body?.Content;
var fromId = ctx.Activity.Value.MessagePayload.From?.User?.Id;
placeholder = "Invoked from message";
}
var card = new AdaptiveCard
{
Body = new List<CardElement>
{
new TextInput { Id = "FormField1", Placeholder = placeholder },
new TextInput { Id = "FormField2", Placeholder = "FormField2" },
new TextInput { Id = "FormField3", Placeholder = "FormField3" }
},
Actions = new List<Cards.Action>
{
new SubmitAction { Title = "Submit" }
}
};
return new ActionResponse
{
Task = new ContinueTask(
new TaskInfo
{
Title = "Example dialog",
Height = new Union<int, Size>(Size.Small),
Width = new Union<int, Size>(Size.Small),
Card = new Attachment(card)
})
};
});
Criar um diálogo com um modo de exibição da Web inserido
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, consulte a documentação da caixa de diálogo.
using Microsoft.Teams.Api.MessageExtensions;
using Microsoft.Teams.Api.TaskModules;
using Microsoft.Teams.Common;
// ...
teams.OnFetchTask(async (ctx) =>
{
return new ActionResponse
{
Task = new ContinueTask(
new TaskInfo
{
Title = "Example dialog",
Height = new Union<int, Size>(Size.Small),
Width = new Union<int, Size>(Size.Small),
Url = "https://contoso.com/msteams/taskmodules/newcustomer"
})
};
});
Solicitação para instalar o bot de conversação
Se o aplicativo contiver um bot de conversa, instale-o na conversa e carregue a caixa de diálogo. O bot é útil para obter contexto adicional para a caixa de diálogo. 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:
using Microsoft.Teams.Cards;
// ...
var installCard = new AdaptiveCard
{
Body = new List<CardElement>
{
new TextBlock("Looks like you haven't used Disco in this team/chat")
},
Actions = new List<Cards.Action>
{
new SubmitAction
{
Title = "Continue",
Data = new Dictionary<string, object>
{
["msteams"] = new Dictionary<string, object>
{
["justInTimeInstall"] = true
}
}
}
}
};
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 demonstra como criar extensões de mensagens Action-Based para o Microsoft Teams, permitindo que os usuários gerem conteúdo de forma interativa. Ele apresenta bots, extensões de mensagem e integração perfeita com entradas do usuário para funcionalidade aprimorada. | View | View | View | View |
| Visualização da ação de extensão de mensagem | Este aplicativo de exemplo ilustra como utilizar visualizações de ação nas Extensões de Mensagens do Teams, permitindo que os usuários criem cartões a partir da entrada em um Módulo de Tarefa. Ele mostra interações de bot que aprimoram o envolvimento do usuário atribuindo mensagens aos usuários. | View | View | NA | View |
| Pesquisa de extensão de mensagem do Teams | Este exemplo demonstra como criar uma Extensão de Mensagens no Microsoft Teams que permite aos usuários realizar pesquisas e recuperar resultados. | View | View | View | NA |