Créer et envoyer des dialogues

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

Étape suivante

Voir aussi