Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Appeler des boîtes de dialogue (appelées modules de tâche dans TeamsJS v1.x) à partir de bots Microsoft Teams à l’aide TaskFetchAction de boutons sur les cartes adaptatives. Les boîtes de dialogue fournissent une interaction ciblée en ouvrant une fenêtre contextuelle pour l’utilisateur, ce qui les rend idéales pour les formulaires complexes ou les flux de travail à plusieurs étapes.
Il existe deux façons d’appeler des boîtes de dialogue :
- Un nouveau message
task/fetchd’appel : Utilisation de l’action de la carte pour lesAction.Executecartes adaptatives avectask/fetch, une boîte de dialogue HTML ou basée sur une carte adaptative est récupérée dynamiquement à partir de votre bot. - URL de lien profond : à l’aide de la syntaxe de lien profond pour les boîtes de dialogue, vous pouvez utiliser l’action de
Action.OpenUrlla carte pour les cartes adaptatives. Avec les URL de liens profonds, l’URL de boîte de dialogue ou le corps de la carte adaptative est déjà connu pour éviter un aller-retour serveur relatif àtask/fetch.
Importante
Chaque url et fallbackUrl doit implémenter le protocole de chiffrement HTTPS.
Remarque
Dans le client Teams v1, les boîtes de dialogue étaient appelées modules de tâche. Ils peuvent parfois être utilisés comme synonymes.
Créer un lanceur de dialogue
Pour appeler une boîte de dialogue à partir d’un bot, envoyez une carte adaptative avec TaskFetchAction des boutons. Chaque bouton inclut des données que votre bot utilise pour déterminer le contenu de boîte de dialogue à renvoyer.
Avertissement
Les services cloud de Microsoft, y compris les versions web de Teams, Outlook et des domaines Microsoft 365, migrent vers le *.cloud.microsoft domaine. Effectuez les étapes suivantes dès que possible pour vous assurer que votre application continue à s’afficher sur les hôtes clients web Microsoft 365 pris en charge :
Mettez à jour la bibliothèque TeamsJS vers la version v.2.19.0 ou ultérieure. Vous devez appeler
microsoftTeams.app.initialize()pour éviter de voir un avertissement dans le nouveau domaine. Pour plus d’informations sur la dernière version de TeamsJS, consultez la bibliothèque cliente JavaScript de Microsoft Teams.Si vous avez défini des en-têtes de stratégie de sécurité du contenu (CSP) pour votre application, mettez à jour la directive frame-ancestors pour inclure le
*.cloud.microsoftdomaine. Pour garantir une compatibilité descendante pendant la migration, conservez les valeurs existantesframe-ancestorsdans vos en-têtes CSP. Cette approche garantit que votre application continue de fonctionner sur les applications hôtes Microsoft 365 existantes et futures et réduit la nécessité de modifications ultérieures.
Mettez à jour le domaine suivant dans la frame-ancestors directive des en-têtes CSP de votre application :
https://*.cloud.microsoft
Les étapes suivantes fournissent des instructions sur la façon d’appeler une boîte de dialogue (appelée module de tâche dans TeamsJS v1.x) en utilisant task/fetch:
Cette image montre une carte adaptative avec une action Acheter
Action.Executeune carte. La valeur de la propriététypeesttask/fetchet le reste de l’objetdatapeut être de votre choix.Le bot reçoit une
card.actionactivité. Dans le SDK Teams, vous gérez cela à l’aide duOnAdaptiveCardActiongestionnaire. Pour plus d’informations, voir Exécution d’actions.Le bot crée un
ActionResponseobjet et le renvoie. Pour plus d’informations sur le schéma des réponses, consultez la discussion sur la tâche/l’envoi. Le code suivant fournit un exemple de corps de réponse qui contient un objet TaskInfo incorporé dans un objet wrapper :{ "task": { "type": "continue", "value": { "title": "Task module title", "height": 500, "width": "medium", "url": "https://contoso.com/msteams/taskmodules/newcustomer", "fallbackUrl": "https://contoso.com/msteams/taskmodules/newcustomer" } } }L’événement
task/fetchet sa réponse pour les bots sont similaires à lamicrosoftTeams.tasks.startTask()fonction dans la bibliothèque cliente JavaScript de Microsoft Teams (TeamsJS).Microsoft Teams affiche la boîte de dialogue.
La section suivante fournit des détails sur l’envoi du résultat d’une boîte de dialogue.
Soumettre le résultat d’une boîte de dialogue
Lorsque l’utilisateur a terminé la boîte de dialogue, le résultat est renvoyé à votre application. Le fonctionnement de la soumission dépend du type de contenu de la boîte de dialogue :
-
Carte adaptative (TaskInfo.carte) : lorsque l’utilisateur sélectionne un
Action.Submitbouton, Teams envoie un événement d’envoi de boîte de dialogue à votre application. Le handler d’envoi de votre boîte de dialogue reçoit les données du formulaire de la carte. En C#, utilisez l’attribut[TaskSubmit]. Dans TypeScript, utilisez .app.on('dialog.submit', ...)En Python, utilisez@app.on_dialog_submit. -
Page Web (TaskInfo.url) : la page Web appelle
microsoftTeams.tasks.submitTask(formData)à partir de la bibliothèque cliente TeamsJS, ce qui déclenche le même événement d’envoi de boîte de dialogue dans votre application.
Gérer les événements d’envoi de dialogue
Lorsque l’utilisateur envoie une boîte de dialogue, le bot reçoit un task/submit message d’appel. Vous disposez de plusieurs options pour répondre :
| Type de réponse | Scénario |
|---|---|
| Aucune réponse | La réponse la plus simple n’est pas du tout une réponse. Votre bot n’est pas obligé de répondre lorsque l’utilisateur a terminé la boîte de dialogue. |
MessageTask |
Teams affiche un message dans une zone de message contextuelle de la boîte de dialogue. |
ContinueTask |
Vous permet de chaîner des séquences de Cartes adaptatives dans un Assistant ou une expérience en plusieurs étapes. |
Les onglets suivants montrent comment gérer les événements d’envoi de dialogue dans .NET, TypeScript et Python :
using System.Text.Json;
using Microsoft.Teams.Apps;
using Microsoft.Teams.Apps.TaskModules;
teams.OnTaskSubmit(async (context, cancellationToken) =>
{
var data = context.Activity.Value?.Data as JsonElement?;
if (data == null)
{
return TaskModuleResponse.CreateBuilder()
.WithType(TaskModuleResponseTypes.Message)
.WithMessage("No data found in the activity value")
.Build();
}
var submissionType = data.Value.TryGetProperty("submissiondialogtype", out var submissionTypeObj) && submissionTypeObj.ValueKind == JsonValueKind.String
? submissionTypeObj.ToString()
: null;
string? GetFormValue(string key)
{
if (data.Value.TryGetProperty(key, out var val))
{
if (val is JsonElement element)
return element.GetString();
return val.ToString();
}
return null;
}
switch (submissionType)
{
case "simple_form":
var name = GetFormValue("name") ?? "Unknown";
await context.SendAsync($"Hi {name}, thanks for submitting the form!", cancellationToken);
return TaskModuleResponse.CreateBuilder()
.WithType(TaskModuleResponseTypes.Message)
.WithMessage("Form was submitted")
.Build();
default:
return TaskModuleResponse.CreateBuilder()
.WithType(TaskModuleResponseTypes.Message)
.WithMessage("Unknown submission type")
.Build();
}
});
Chaînage de boîtes de dialogue en plusieurs étapes
Vous pouvez chaîner les cartes adaptatives dans un Assistant à plusieurs étapes en renvoyant une ContinueTask réponse du gestionnaire d’envoi. Chaque étape renvoie une nouvelle carte, et la dernière étape renvoie une MessageTask pour fermer la boîte de dialogue.
using System.Text.Json;
using Microsoft.Teams.Apps;
using Microsoft.Teams.Apps.Schema;
using Microsoft.Teams.Apps.TaskModules;
using Microsoft.Teams.Cards;
// Add these cases to your OnTaskSubmit method
case "webpage_dialog_step_1":
var nameStep1 = GetFormValue("name") ?? "Unknown";
var nextStepCardJson = $$"""
{
"type": "AdaptiveCard",
"version": "1.4",
"body": [
{
"type": "TextBlock",
"text": "Email",
"size": "Large",
"weight": "Bolder"
},
{
"type": "Input.Text",
"id": "email",
"label": "Email",
"placeholder": "Enter your email",
"isRequired": true
}
],
"actions": [
{
"type": "Action.Submit",
"title": "Submit",
"data": {"submissiondialogtype": "webpage_dialog_step_2", "name": "{{nameStep1}}"}
}
]
}
""";
var nextStepCard = JsonSerializer.Deserialize<AdaptiveCard>(nextStepCardJson)
?? throw new InvalidOperationException("Failed to deserialize next step card");
TeamsAttachment nextStepAttachment = TeamsAttachment.CreateBuilder()
.WithAdaptiveCard(JsonSerializer.SerializeToElement(nextStepCard))
.Build();
return TaskModuleResponse.CreateBuilder()
.WithType(TaskModuleResponseTypes.Continue)
.WithTitle($"Thanks {nameStep1} - Get Email")
.WithCard(nextStepAttachment)
.Build();
case "webpage_dialog_step_2":
var nameStep2 = GetFormValue("name") ?? "Unknown";
var emailStep2 = GetFormValue("email") ?? "No email";
await context.SendAsync($"Hi {nameStep2}, thanks for submitting the form! We got that your email is {emailStep2}", cancellationToken);
return TaskModuleResponse.CreateBuilder()
.WithType(TaskModuleResponseTypes.Message)
.WithMessage("Multi-step form completed successfully")
.Build();
actions de carte Bot Framework et action de carte adaptative.Envoyer des actions
Le schéma des actions de carte Bot Framework est différent des actions de carte Action.Submit adaptative, et la façon d’appeler les boîtes de dialogue est également différente. L’objet data dans Action.Submit contient un msteams objet afin qu’il n’interfère pas avec d’autres propriétés de la carte. Le tableau suivant montre un exemple de chaque action de carte :
| action de carte Bot Framework | Action de carte adaptative.Envoyer l’action |
|---|---|
{ |
{ |
Exemple de code
| Exemple de nom | Description | .NET | Node.js | Manifeste | Python |
|---|---|---|---|---|---|
| Dialogue exemple bots-V4 | Cet exemple d’application montre comment utiliser les boîtes de dialogue (appelées modules de tâche dans TeamsJS v1.x) à l’aide de Bot Framework v4. | View | View | N/A | View |