Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Vous pouvez créer une boîte de dialogue modale (appelée module de tâche dans TeamsJS v1.x) à l’aide d’une carte adaptative ou d’une vue Web intégrée. Pour créer une boîte de dialogue, vous devez exécuter le processus appelé demande d’appel initiale. Ce document couvre la demande d’appel initiale, les propriétés d’activité de charge utile lorsqu’un dialogue est appelé à partir d’une conversation en tête à tête, d’une conversation de groupe, d’un canal (nouveau message), d’un canal (répondre au thread) et d’une boîte de commande.
Remarque
Si vous ne remplissez pas la boîte de dialogue avec les paramètres définis dans le manifeste de l’application, vous devez créer la boîte de dialogue pour les utilisateurs avec une carte adaptative ou une vue Web intégrée.
Remarque
Les agents offrent une expérience plus flexible, plus intelligente et prête pour l’avenir, qui permet un raisonnement plus riche, un développement plus simple et un meilleur alignement avec l’évolution de Teams et de la plateforme Microsoft 365. Nous vous recommandons d’explorer et de créer des agents.
Pour plus d’informations, voir Créer des agents déclaratifs et Créer des agents dans Teams.
Si vous disposez d’une extension de message basée sur un bot, vous pouvez également l’étendre en tant qu’agent .
La demande initiale d'invocation
Lors de la demande initiale d'invocation, votre service reçoit un Activityobjet de type composeExtensions/fetchTask, et vous devez répondre avectask un objet contenant soit une carte adaptative, soit une URL vers la vue Web intégrée. Outre les propriétés standard de l'activité du bot, les données utiles de l'invocation initiale contiennent les métadonnées de demande suivantes :
| Nom de la propriété | Objectif |
|---|---|
type |
Type de requête. Il doit être invoke. |
name |
Type de commande qui est émise à votre service. Il doit être composeExtension/fetchTask. |
from.id |
Identification de l'utilisateur qui a envoyé la demande. |
from.name |
Nom de l'utilisateur qui a envoyé la demande. |
from.aadObjectId |
ID d’objet Microsoft Entra de l’utilisateur qui a envoyé la demande. |
channelData.tenant.id |
ID de locataire Microsoft Entra. |
channelData.channel.id |
Identification du canal (si la demande a été faite dans un canal). |
channelData.team.id |
Identification de l'équipe (si la demande a été faite dans un canal). |
value.commandId |
Contient le numéro d'identification de la commande qui a été invoquée. |
value.commandContext |
Le contexte qui a déclenché l'événement. Il doit être compose. |
value.context.theme |
Le thème client de l'utilisateur, utile pour le formatage des vues Web intégrées. Il doit être default, contrast ou dark. |
Exemple
Le code de la demande initiale d'invocation est donné dans l'exemple suivant :
{
"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"
Propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’une conversation en tête à tête
Les propriétés de l’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’une conversation en tête à tête sont répertoriées comme suit :
| Nom de la propriété | Objectif |
|---|---|
type |
Type de requête. Il doit être invoke. |
name |
Type de commande qui est émise à votre service. Il doit être composeExtension/fetchTask. |
from.id |
Identification de l'utilisateur qui a envoyé la demande. |
from.name |
Nom de l'utilisateur qui a envoyé la demande. |
from.aadObjectId |
ID d’objet Microsoft Entra de l’utilisateur qui a envoyé la demande. |
channelData.tenant.id |
ID de locataire Microsoft Entra. |
channelData.source.name |
Nom de la source à partir duquel la boîte de dialogue est appelée. |
ChannelData.legacy. replyToId |
Obtient ou définit le numéro d'identification du message auquel ce message est une réponse. |
value.commandId |
Contient le numéro d'identification de la commande qui a été invoquée. |
value.commandContext |
Le contexte qui a déclenché l'événement. Il doit être compose. |
value.context.theme |
Le thème client de l'utilisateur, utile pour le formatage des vues Web intégrées. Il doit être default, contrast ou dark. |
Exemple
Les propriétés de l’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’une conversation en tête à tête sont données dans l’exemple suivant :
{
"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"
}
Propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’une conversation de groupe
Les propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’une conversation de groupe sont répertoriées comme suit :
| Nom de la propriété | Objectif |
|---|---|
type |
Type de requête. Il doit être invoke. |
name |
Type de commande qui est émise à votre service. Il doit être composeExtension/fetchTask. |
from.id |
Identification de l'utilisateur qui a envoyé la demande. |
from.name |
Nom de l'utilisateur qui a envoyé la demande. |
from.aadObjectId |
ID d’objet Microsoft Entra de l’utilisateur qui a envoyé la demande. |
channelData.tenant.id |
ID de locataire Microsoft Entra. |
channelData.source.name |
Nom de la source à partir duquel la boîte de dialogue est appelée. |
ChannelData.legacy. replyToId |
Obtient ou définit le numéro d'identification du message auquel ce message est une réponse. |
value.commandId |
Contient le numéro d'identification de la commande qui a été invoquée. |
value.commandContext |
Le contexte qui a déclenché l'événement. Il doit être compose. |
value.context.theme |
Le thème client de l'utilisateur, utile pour le formatage des vues Web intégrées. Il doit être default, contrast ou dark. |
Exemple
Les propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’une conversation de groupe sont données dans l’exemple suivant :
{
"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"
}
Propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’une conversation de réunion
Les propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’une conversation de réunion sont données dans l’exemple suivant :
{
"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",
}
Propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’un canal (nouvelle publication)
Les propriétés de l’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’un canal (nouvelle publication) sont répertoriées comme suit :
| Nom de la propriété | Objectif |
|---|---|
type |
Type de requête. Il doit être invoke. |
name |
Type de commande qui est émise à votre service. Il doit être composeExtension/fetchTask. |
from.id |
Identification de l'utilisateur qui a envoyé la demande. |
from.name |
Nom de l'utilisateur qui a envoyé la demande. |
from.aadObjectId |
ID d’objet Microsoft Entra de l’utilisateur qui a envoyé la demande. |
channelData.tenant.id |
ID de locataire Microsoft Entra. |
channelData.channel.id |
Identification du canal (si la demande a été faite dans un canal). |
channelData.team.id |
Identification de l'équipe (si la demande a été faite dans un canal). |
channelData.source.name |
Nom de la source à partir duquel la boîte de dialogue est appelée. |
ChannelData.legacy. replyToId |
Obtient ou définit le numéro d'identification du message auquel ce message est une réponse. |
value.commandId |
Contient le numéro d'identification de la commande qui a été invoquée. |
value.commandContext |
Le contexte qui a déclenché l'événement. Il doit être compose. |
value.context.theme |
Le thème client de l'utilisateur, utile pour le formatage des vues Web intégrées. Il doit être default, contrast, ou dark. |
Exemple
Les propriétés de l’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’un canal (nouveau billet) sont données dans l’exemple suivant :
{
"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"
}
Propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’un canal (répondre au thread)
Les propriétés de l’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’un canal (répondre au thread) sont répertoriées comme suit :
| Nom de la propriété | Objectif |
|---|---|
type |
Type de requête. Il doit être invoke. |
name |
Type de commande qui est émise à votre service. Il doit être composeExtension/fetchTask. |
from.id |
Identification de l'utilisateur qui a envoyé la demande. |
from.name |
Nom de l'utilisateur qui a envoyé la demande. |
from.aadObjectId |
ID d’objet Microsoft Entra de l’utilisateur qui a envoyé la demande. |
channelData.tenant.id |
ID de locataire Microsoft Entra. |
channelData.channel.id |
Identification du canal (si la demande a été faite dans un canal). |
channelData.team.id |
Identification de l'équipe (si la demande a été faite dans un canal). |
channelData.source.name |
Nom de la source à partir duquel la boîte de dialogue est appelée. |
ChannelData.legacy. replyToId |
Obtient ou définit le numéro d'identification du message auquel ce message est une réponse. |
value.commandId |
Contient le numéro d'identification de la commande qui a été invoquée. |
value.commandContext |
Le contexte qui a déclenché l'événement. Il doit être compose. |
value.context.theme |
Le thème client de l'utilisateur, utile pour le formatage des vues Web intégrées. Il doit être default, contrast ou dark. |
Exemple
Les propriétés de l’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’un canal (répondre au thread) sont données dans l’exemple suivant :
{
"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"
}
Propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’une boîte de commande
Les propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’une boîte de commande sont répertoriées comme suit :
| Nom de la propriété | Objectif |
|---|---|
type |
Type de requête. Il doit être invoke. |
name |
Type de commande qui est émise à votre service. Il doit être composeExtension/fetchTask. |
from.id |
Identification de l'utilisateur qui a envoyé la demande. |
from.name |
Nom de l'utilisateur qui a envoyé la demande. |
from.aadObjectId |
ID d’objet Microsoft Entra de l’utilisateur qui a envoyé la demande. |
channelData.tenant.id |
ID de locataire Microsoft Entra. |
channelData.source.name |
Nom de la source à partir duquel la boîte de dialogue est appelée. |
value.commandId |
Contient le numéro d'identification de la commande qui a été invoquée. |
value.commandContext |
Le contexte qui a déclenché l'événement. Il doit être compose. |
value.context.theme |
Le thème client de l'utilisateur, utile pour le formatage des vues Web intégrées. Il doit être default, contrast, ou dark. |
Exemple
Les propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’une boîte de commande sont données dans l’exemple suivant :
{
"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"
}
Exemple
La section de code suivante est un exemple de fetchTaskdemande :
using Microsoft.Teams.Apps.MessageExtensions;
// ...
teams.OnFetchTask(async (context, cancellationToken) =>
{
// Handle fetch task
MessageExtensionAction? action = context.Activity.Value;
string? commandId = action?.CommandId;
return MessageExtensionActionResponse.CreateBuilder().Build();
});
Demande initiale d'invocation à partir d'un message
Lorsque votre bot est appelé à partir d’un message, l’objet value dans la demande d’appel initiale doit contenir les détails du message à partir duquel votre extension de message est invoquée. Les tableaux reactionsetmentions sont facultatifs, et ils ne sont pas présents s'il n'y a pas de réactions ou de mentions dans le message original.
La section suivante est un exemple de l'objet value:
using Microsoft.Teams.Apps.MessageExtensions;
// ...
teams.OnFetchTask(async (context, cancellationToken) =>
{
MessageExtensionAction? action = context.Activity.Value;
var messageText = action?.MessagePayload?.Body?.Content;
var fromId = action?.MessagePayload?.From?.User?.Id;
return MessageExtensionActionResponse.CreateBuilder().Build();
});
Répondre à la tache fetchTask
Répondre à la requête invoquée avec un taskobjet qui contienttaskInfo soit un objet avec la carte adaptative ou l'URL web, soit un simple message de type chaîne.
| Nom de la propriété | Objectif |
|---|---|
type |
Peut être soit continue pour présenter un formulaire, soit message pour un simple pop-up. |
value |
Soit un taskInfoobjet pour un formulairestring, soit un pour un message. |
Le schéma de l'objet taskInfo est le suivant :
| Nom de la propriété | Objectif |
|---|---|
title |
Titre de la boîte de dialogue. |
height |
Il doit être soit un nombre entier (en pixels), ou small, medium, large. |
width |
Il doit être soit un nombre entier (en pixels), ou small, medium, large. |
card |
Carte adaptative définissant le formulaire (si vous en utilisez un). |
url |
URL à ouvrir à l’intérieur de la boîte de dialogue en tant qu’affichage Web incorporé. |
fallbackUrl |
Si un client ne prend pas en charge la fonctionnalité de boîte de dialogue, cette URL est ouverte dans un onglet du navigateur. |
Répondre à la fetchTask avec une carte adaptative
Lorsque vous utilisez une carte adaptative, vous devez répondre avec un objet avec l’objet taskvalue contenant une carte adaptative.
Exemple
La section de code suivante est un exemple de réponse avec fetchTask une carte adaptative :
Cet exemple utilise le package Microsoft.Teams.Cards , inclus dans le kit de développement logiciel (SDK) Teams.
using System.Text.Json;
using Microsoft.Teams.Apps.MessageExtensions;
using Microsoft.Teams.Apps.Schema;
using Microsoft.Teams.Apps.TaskModules;
using Microsoft.Teams.Cards;
// ...
teams.OnFetchTask(async (context, cancellationToken) =>
{
string placeholder = "Not invoked from message";
MessageExtensionAction? action = context.Activity.Value;
if (action?.MessagePayload != null)
{
var messageText = action.MessagePayload.Body?.Content;
var fromId = action.MessagePayload.From?.User?.Id;
placeholder = "Invoked from message";
}
var card = new AdaptiveCard
{
Version = "1.5",
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" }
}
};
TeamsAttachment attachment = TeamsAttachment.CreateBuilder()
.WithAdaptiveCard(JsonSerializer.SerializeToElement(card))
.Build();
return MessageExtensionActionResponse.CreateBuilder()
.WithTask(TaskModuleResponse.CreateBuilder()
.WithType(TaskModuleResponseTypes.Continue)
.WithTitle("Example dialog")
.WithHeight(TaskModuleSizes.Small)
.WithWidth(TaskModuleSizes.Small)
.WithCard(attachment))
.Build();
});
Créer un dialogue avec une vue Web incorporée
Lorsque vous utilisez une vue Web intégrée, vous devez répondre taskavec un objetvalue contenant l'URL du formulaire Web que vous souhaitez charger. Les domaines de toutes les URL que vous souhaitez charger doivent être inclus dans le tableau du validDomainsmanifeste de votre application. Pour plus d’informations sur la création de votre vue Web incorporée, consultez la documentation de la boîte de dialogue.
using Microsoft.Teams.Apps.MessageExtensions;
using Microsoft.Teams.Apps.TaskModules;
// ...
teams.OnFetchTask(async (context, cancellationToken) =>
{
await Task.CompletedTask;
return MessageExtensionActionResponse.CreateBuilder()
.WithTask(TaskModuleResponse.CreateBuilder()
.WithType(TaskModuleResponseTypes.Continue)
.WithTitle("Example dialog")
.WithHeight(TaskModuleSizes.Small)
.WithWidth(TaskModuleSizes.Small)
.WithUrl("https://contoso.com/msteams/taskmodules/newcustomer"))
.Build();
});
Demande d'installation de votre robot conversationnel
Si l’application contient un bot conversationnel, installez-le dans la conversation, puis chargez la boîte de dialogue. Le bot est utile pour obtenir un contexte supplémentaire pour la boîte de dialogue. Un exemple pour ce scénario est de récupérer la liste des personnes pour alimenter un contrôle de sélection de personnes ou la liste des canaux dans une équipe.
Lorsque l'extension de message reçoit composeExtensions/fetchTaskl'invocation, elle vérifie si le bot est installé dans le contexte actuel pour faciliter le flux. Par exemple, vérifiez le flux avec un appel à la liste d'attente. Si le robot n'est pas installé, il renvoie une carte adaptative avec une action qui demande à l'utilisateur d'installer le robot. L'utilisateur doit avoir l'autorisation d'installer les applications à cet endroit pour les vérifier. Si l'installation de l'application n'aboutit pas, l'utilisateur reçoit un message l'invitant à contacter l'administrateur.
Exemple
La section de code suivante est un exemple de la réponse :
{
"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"
}
Après l'installation du robot conversationnel, il reçoit un autre message invoqué avec name = composeExtensions/submitAction, et value.data.msteams.justInTimeInstall = true.
Exemple
La section de code suivante est un exemple de la réponse de la tâche à l'invocation :
{
"value": {
"commandId": "giveKudos",
"commandContext": "compose",
"context": {
"theme": "default"
},
"data": {
"msteams": {
"justInTimeInstall": true
}
}
},
"conversation": {
"id": "19:7705841b240044b297123ad7f9c99217@thread.skype"
},
"name": "composeExtension/submitAction",
"imdisplayname": "Bob Smith"
}
La réponse de la tâche à l'invocation doit être similaire à celle du robot installé.
Exemple
La section de code suivante est un exemple d’installation juste-à-temps d’une application avec une carte adaptative :
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
}
}
}
}
};
Exemple de code
| Exemple de nom | Description | .NET | Node.js | Python | Manifeste |
|---|---|---|---|---|---|
| Action d’extension de message Teams | Cet échantillon montre comment créer des extensions de messagerie Action-Based pour Microsoft Teams, permettant aux utilisateurs de générer du contenu de manière interactive. Il comprend des bots, des extensions de message et une intégration transparente avec les entrées utilisateur pour des fonctionnalités améliorées. | View | View | View | View |
| Aperçu de l’action d’extension de message | Cet exemple d’application illustre comment utiliser les aperçus d’action dans les extensions de messagerie Teams, ce qui permet aux utilisateurs de créer des cartes à partir d’entrées dans un module de tâche. Il présente les interactions de bot qui améliorent l’engagement des utilisateurs en attribuant des messages aux utilisateurs. | View | View | N/A | View |
| Recherche d'extension des messages Teams | Cet échantillon montre comment créer une extension de messagerie dans Microsoft Teams qui permet aux utilisateurs d’effectuer des recherches et de récupérer des résultats. | View | View | View | N/A |