Créer et envoyer des dialogues
Importante
Les exemples de code de cette section sont basés sur la version 4.6 et les versions ultérieures du Kit de développement logiciel (SDK) Bot Framework. Si vous recherchez de la documentation pour les versions antérieures, consultez la section Extensions de message - Kit de développement logiciel (SDK) v3 dans le dossier Ressources de la documentation.
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 incorporée. Pour créer un dialogue, vous devez effectuer 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’une boîte de dialogue est appelée à partir d’une conversation 1:1, d’une conversation de groupe, d’un canal (nouveau billet), d’un canal (réponse au thread) et d’une zone 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 incorporée.
La demande initiale d'invocation
Lors de la demande initiale d'invocation, votre service reçoit un Activity
objet 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 de l’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’une conversation 1:1
Les propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’une conversation 1:1 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 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 1:1 sont fournies 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 de l’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 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 fournies 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 de l’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 fournies 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 (nouveau billet)
Les propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’un canal (nouveau billet) 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 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’un canal (nouveau billet) sont fournies 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éponse au thread)
Les propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’un canal (réponse à un 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 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’un canal (réponse au thread) sont fournies 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 zone de commande
Les propriétés d’activité de charge utile lorsqu’une boîte de dialogue est appelée à partir d’une zone 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 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 zone de commande sont fournies 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 fetchTask
demande :
protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
//handle fetch task
}
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 appelée. Les tableaux reactions
etmentions
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
:
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
}
Répondre à la tache fetchTask
Répondre à la requête invoquée avec un task
objet 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 |
Il peut s’agir de continue présenter un formulaire ou message d’une simple fenêtre contextuelle. |
value |
Soit un taskInfo objet 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 sous la forme d’une vue web incorporée. |
fallbackUrl |
Si un client ne prend pas en charge la fonctionnalité de boîte de dialogue, cette URL est ouverte dans un onglet de navigateur. |
Répondre à la fetchTask avec une carte adaptative
Lorsque vous utilisez une carte adaptative, vous devez répondre avec un task
objet avec l’objet value
contenant une carte adaptative.
Exemple
La section de code suivante est un exemple de réponse avec fetchTask
une carte adaptative :
Cet échantillon utilise le paquet NuGet AdaptiveCards en plus du Bot Framework SDK.
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 dialog",
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;
}
Créer une boîte de dialogue avec une vue web incorporée
Lorsque vous utilisez une vue Web intégrée, vous devez répondre task
avec 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 validDomains
manifeste 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.
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 dialog",
Url = "https://contoso.com/msteams/taskmodules/newcustomer",
},
},
},
};
return response;
}
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 le 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/fetchTask
l'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 en temps réel d'une application avec une carte adaptative :
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;
}
Exemple de code
Exemple de nom | Description | .NET | Node.js | Python | Manifeste |
---|---|---|---|---|---|
Action d’extension de message Teams | Cet exemple montre comment définir des commandes d’action, créer un dialogue et répondre à l’action d’envoi du dialogue. | View | View | View | View |
Aperçu de l’action d’extension de message | Cet exemple montre comment utiliser l’aperçu de l’action dans Les extensions de messagerie à l’aide de Bot Framework v4. | View | View | N/A | View |
Recherche d'extension des messages Teams | Cet exemple montre comment créer une extension de message basée sur la recherche. Il recherche les packages d’incitation et affiche les résultats dans l’extension de messagerie basée sur la recherche. | View | View | View | View |