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 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 Microsoft Entra’ID d’objet de l’utilisateur qui a envoyé la demande.
channelData.tenant.id Microsoft Entra l’ID de locataire.
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 Microsoft Entra’ID d’objet de l’utilisateur qui a envoyé la demande.
channelData.tenant.id Microsoft Entra l’ID de locataire.
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 Microsoft Entra’ID d’objet de l’utilisateur qui a envoyé la demande.
channelData.tenant.id Microsoft Entra l’ID de locataire.
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 Microsoft Entra’ID d’objet de l’utilisateur qui a envoyé la demande.
channelData.tenant.id Microsoft Entra l’ID de locataire.
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 Microsoft Entra’ID d’objet de l’utilisateur qui a envoyé la demande.
channelData.tenant.id Microsoft Entra l’ID de locataire.
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 Microsoft Entra’ID d’objet de l’utilisateur qui a envoyé la demande.
channelData.tenant.id Microsoft Entra l’ID de locataire.
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 fetchTaskdemande :

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 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:

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 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 Il peut s’agir de continue présenter un formulaire ou message d’une simple fenêtre contextuelle.
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 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 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.

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/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 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 générer une extension de message basée sur 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

Étape suivante

Voir aussi