Créer et envoyer le module de tâches

Important

Les exemples de code de cette section sont basés sur la version 4.6 et les versions ultérieures du SDK Bot Framework. Si vous recherchez de la documentation pour les versions antérieures, consultez la section Extensions de messagerie - V3 SDK dans le dossier Ressources de la documentation.

Vous pouvez créer le module de tâche à l’aide d’une carte adaptative ou d’un affichage web incorporé. Pour créer un module de tâche, vous devez effectuer le processus appelé demande d’appel initiale. Ce document traite de la demande d’appel initiale, des propriétés de l’activité de charge utile lorsqu’un module de tâche est appelé à 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.

Notes

Si vous ne remplissez pas le module de tâche avec des paramètres définis dans le manifeste de l’application, vous devez créer le module de tâche pour les utilisateurs avec une carte adaptative ou un affichage web incorporé.

Demande d’appel initiale

Dans le processus de la demande d’appel initiale, votre service reçoit un objet de type et vous devez répondre avec un objet contenant une carte adaptative ou une URL vers l’affichage Activity composeExtension/fetchTask web task incorporé. En plus des propriétés d’activité standard du bot, la charge utile d’appel initiale contient les métadonnées de requête suivantes :

Nom de la propriété Objectif
type Type de demande. Il doit invoke l’être.
name Type de commande qui est émis pour votre service. Il doit composeExtension/fetchTask l’être.
from.id ID de l’utilisateur qui a envoyé la demande.
from.name Nom de l’utilisateur qui a envoyé la demande.
from.aadObjectId Azure Active Directory’ID d’objet de l’utilisateur qui a envoyé la demande.
channelData.tenant.id ID du client Azure Active Directory.
channelData.channel.id ID de canal (si la demande a été faite dans un canal).
channelData.team.id ID d’équipe (si la demande a été faite dans un canal).
value.commandId Contient l’ID de la commande qui a été invoquée.
value.commandContext Contexte qui a déclenché l’événement. Il doit compose l’être.
value.context.theme Thème client de l’utilisateur, utile pour la mise en forme de l’affichage web incorporé. Il doit default s’y contrast trouver, ou dark .

Exemple

Le code de la demande d’appel initiale 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’un module de tâche est appelé à partir d’une conversation 1:1

Les propriétés de l’activité de charge utile lorsqu’un module de tâche est appelé à partir d’une conversation 1:1 sont répertoriées comme suit :

Nom de la propriété Objectif
type Type de demande. Il doit invoke l’être.
name Type de commande qui est émis pour votre service. Il doit composeExtension/fetchTask l’être.
from.id ID de l’utilisateur qui a envoyé la demande.
from.name Nom de l’utilisateur qui a envoyé la demande.
from.aadObjectId Azure Active Directory’ID d’objet de l’utilisateur qui a envoyé la demande.
channelData.tenant.id ID du client Azure Active Directory.
channelData.source.name Nom source de l’endroit où le module de tâche est appelé.
ChannelData.legacy. replyToId Obtient ou définit l’ID du message auquel ce message est une réponse.
value.commandId Contient l’ID de la commande qui a été invoquée.
value.commandContext Contexte qui a déclenché l’événement. Il doit compose l’être.
value.context.theme Thème client de l’utilisateur, utile pour la mise en forme de l’affichage web incorporé. Il doit default s’y contrast trouver, ou dark .

Exemple

Les propriétés de l’activité de charge utile lorsqu’un module de tâche est appelé à partir d’une conversation 1:1 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 de l’activité de charge utile lorsqu’un module de tâche est appelé à partir d’une conversation de groupe

Les propriétés de l’activité de charge utile lorsqu’un module de tâche est appelé à partir d’une conversation de groupe sont répertoriées comme suit :

Nom de la propriété Objectif
type Type de demande. Il doit invoke l’être.
name Type de commande qui est émis pour votre service. Il doit composeExtension/fetchTask l’être.
from.id ID de l’utilisateur qui a envoyé la demande.
from.name Nom de l’utilisateur qui a envoyé la demande.
from.aadObjectId Azure Active Directory’ID d’objet de l’utilisateur qui a envoyé la demande.
channelData.tenant.id ID du client Azure Active Directory.
channelData.source.name Nom source de l’endroit où le module de tâche est appelé.
ChannelData.legacy. replyToId Obtient ou définit l’ID du message auquel ce message est une réponse.
value.commandId Contient l’ID de la commande qui a été invoquée.
value.commandContext Contexte qui a déclenché l’événement. Il doit compose l’être.
value.context.theme Thème client de l’utilisateur, utile pour la mise en forme de l’affichage web incorporé. Il doit default s’y contrast trouver, ou dark .

Exemple

Les propriétés de l’activité de charge utile lorsqu’un module de tâche est appelé à 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 de l’activité de charge utile lorsqu’un module de tâche est appelé à partir d’une conversation de réunion

Les propriétés de l’activité de charge utile lorsqu’un module de tâche est appelé à 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 de l’activité de charge utile lorsqu’un module de tâche est appelé à partir d’un canal (nouveau billet)

Les propriétés de l’activité de charge utile lorsqu’un module de tâche est appelé à partir d’un canal (nouveau billet) sont répertoriées comme suit :

Nom de la propriété Objectif
type Type de demande. Il doit invoke l’être.
name Type de commande qui est émis pour votre service. Il doit composeExtension/fetchTask l’être.
from.id ID de l’utilisateur qui a envoyé la demande.
from.name Nom de l’utilisateur qui a envoyé la demande.
from.aadObjectId Azure Active Directory’ID d’objet de l’utilisateur qui a envoyé la demande.
channelData.tenant.id ID du client Azure Active Directory.
channelData.channel.id ID de canal (si la demande a été faite dans un canal).
channelData.team.id ID d’équipe (si la demande a été faite dans un canal).
channelData.source.name Nom source de l’endroit où le module de tâche est appelé.
ChannelData.legacy. replyToId Obtient ou définit l’ID du message auquel ce message est une réponse.
value.commandId Contient l’ID de la commande qui a été invoquée.
value.commandContext Contexte qui a déclenché l’événement. Il doit compose l’être.
value.context.theme Thème client de l’utilisateur, utile pour la mise en forme de l’affichage web incorporé. Elle doit être default , contrast ou dark .

Exemple

Les propriétés de l’activité de charge utile lorsqu’un module de tâche est appelé à 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 de l’activité de charge utile lorsqu’un module de tâche est appelé à partir d’un canal (réponse au thread)

Les propriétés de l’activité de charge utile lorsqu’un module de tâche est appelé à partir d’un canal (réponse au thread) sont répertoriées comme suit :

Nom de la propriété Objectif
type Type de demande. Il doit invoke l’être.
name Type de commande qui est émis pour votre service. Il doit composeExtension/fetchTask l’être.
from.id ID de l’utilisateur qui a envoyé la demande.
from.name Nom de l’utilisateur qui a envoyé la demande.
from.aadObjectId Azure Active Directory’ID d’objet de l’utilisateur qui a envoyé la demande.
channelData.tenant.id ID du client Azure Active Directory.
channelData.channel.id ID de canal (si la demande a été faite dans un canal).
channelData.team.id ID d’équipe (si la demande a été faite dans un canal).
channelData.source.name Nom source de l’endroit où le module de tâche est appelé.
ChannelData.legacy. replyToId Obtient ou définit l’ID du message auquel ce message est une réponse.
value.commandId Contient l’ID de la commande qui a été invoquée.
value.commandContext Contexte qui a déclenché l’événement. Il doit compose l’être.
value.context.theme Thème client de l’utilisateur, utile pour la mise en forme de l’affichage web incorporé. Il doit default s’y contrast trouver, ou dark .

Exemple

Les propriétés de l’activité de charge utile lorsqu’un module de tâche est appelé à partir d’un canal (réponse 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 de l’activité de charge utile lorsqu’un module de tâche est appelé à partir d’une zone de commande

Les propriétés de l’activité de charge utile lorsqu’un module de tâche est appelé à partir d’une zone de commande sont répertoriées comme suit :

Nom de la propriété Objectif
type Type de demande. Il doit invoke l’être.
name Type de commande qui est émis pour votre service. Il doit composeExtension/fetchTask l’être.
from.id ID de l’utilisateur qui a envoyé la demande.
from.name Nom de l’utilisateur qui a envoyé la demande.
from.aadObjectId Azure Active Directory’ID d’objet de l’utilisateur qui a envoyé la demande.
channelData.tenant.id ID du client Azure Active Directory.
channelData.source.name Nom source de l’endroit où le module de tâche est appelé.
value.commandId Contient l’ID de la commande qui a été invoquée.
value.commandContext Contexte qui a déclenché l’événement. Il doit compose l’être.
value.context.theme Thème client de l’utilisateur, utile pour la mise en forme de l’affichage web incorporé. Elle doit être default , contrast ou dark .

Exemple

Les propriétés de l’activité de charge utile lorsqu’un module de tâche est appelé à partir d’une zone 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 fetchTask requête :

protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
  //handle fetch task
}

Demande d’appel initiale à partir d’un message

Lorsque votre bot est appelé à partir d’un message, l’objet de la demande d’appel initiale doit contenir les détails du message à partir de quel message votre extension de messagerie value est invoquée. Les tableaux et les tableaux sont facultatifs et ne sont pas présents s’il n’y a aucune réaction ou reactions mention dans le message mentions d’origine. La section suivante est un exemple de value l’objet :

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 à fetchTask

Répondez à la demande d’appel avec un objet qui contient un objet avec la carte adaptative ou l’URL web, ou task un message de chaîne taskInfo simple.

Nom de la propriété Objectif
type Il peut continue s’agit de présenter un formulaire ou message d’utiliser une fenêtre popup simple.
value Objet taskInfo d’un formulaire ou string d’un message.

Le schéma de l’objet taskInfo est :

Nom de la propriété Objectif
title Titre du module de tâche.
height Il doit s’agit d’un nombre integer (en pixels) small ou , ou , medium large .
width Il doit s’agit d’un nombre integer (en pixels) small ou , ou , medium large .
card Carte adaptative définissant le formulaire (si vous en utilisez un).
url URL à ouvrir dans le module de tâche en tant qu’affichage web incorporé.
fallbackUrl Si un client ne prend pas en charge la fonctionnalité de module de tâche, cette URL est ouverte dans un onglet de navigateur.

Répondre à fetchTask avec une carte adaptative

Lorsque vous utilisez une carte adaptative, vous devez répondre avec un objet contenant task value une carte adaptative.

Exemple

La section de code suivante est un exemple de fetchTask réponse avec une carte adaptative :

Cet exemple utilise le package AdaptiveCards NuGet en plus du SDK 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;
}

Créer un module de tâche avec un affichage web incorporé

Lorsque vous utilisez un affichage web incorporé, vous devez répondre avec un objet avec l’objet contenant l’URL du formulaire web que task value vous souhaitez charger. Les domaines d’une URL que vous souhaitez charger doivent être inclus dans le tableau dans le manifeste validDomains de votre application. Pour plus d’informations sur la création de votre affichage web incorporé, voir la documentation du module de tâche.

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;
}

Demande d’installation de votre bot de conversation

Si l’application contient un bot de conversation, installez-le dans la conversation, puis chargez le module de tâche. Le bot est utile pour obtenir un contexte supplémentaire pour le module de tâche. Un exemple de ce scénario consiste à extraire la liste de membres pour remplir un contrôle de s picker de personnes ou la liste des canaux d’une équipe.

Lorsque l’extension de messagerie reçoit l’appel, vérifiez si le bot est installé dans le contexte actuel composeExtension/fetchTask pour faciliter le flux. Par exemple, vérifiez le flux avec un appel d’obtenir une liste. Si le bot n’est pas installé, renvoyer une carte adaptative avec une action qui demande à l’utilisateur d’installer le bot. L’utilisateur doit avoir l’autorisation d’installer les applications à cet emplacement pour vérification. Si l’installation de l’application échoue, l’utilisateur reçoit un message pour contacter l’administrateur.

Exemple

La section de code suivante est un exemple de 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 bot conversationnel, il reçoit un autre message d’appel name = composeExtension/submitAction avec , et value.data.msteams.justInTimeInstall = true .

Exemple

La section de code suivante est un exemple de réponse de tâche à l’appel :

{
  "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 à la tâche à l’appel doit être similaire à celle du bot installé.

Exemple

La section de code suivante est un exemple d’installation juste-à-temps de l’application avec 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
Teams d’extension de messagerie Décrit comment définir des commandes d’action, créer un module de tâche et répondre à une action d’soumission de module de tâche. View View
Teams d’extension de messagerie Décrit comment définir des commandes de recherche et répondre aux recherches. View View

Étape suivante

Voir aussi

Définir les commandes d’action