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.
Appelez 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 des 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 workflows à plusieurs étapes.
Il existe deux façons d’appeler des dialogues :
- Nouveau message
task/fetchd’appel : L’utilisation de l’actionAction.Executecarte pour les cartes adaptatives avectask/fetch, une boîte de dialogue HTML ou basée sur une carte adaptative est extraite dynamiquement à partir de votre bot. - URL de lien profond : à l’aide de la syntaxe de lien profond pour les dialogues, vous pouvez utiliser l’action
Action.OpenUrlcarte pour les cartes adaptatives. Avec les URL de lien profond, l’URL de boîte de dialogue ou le corps de la carte adaptative est déjà connu pour éviter un aller-retour de serveur par rapport à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 la boîte de dialogue à retourner.
Avertissement
Les services cloud de Microsoft, y compris les versions web des domaines Teams, Outlook et 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 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 Bibliothèque de client JavaScript Microsoft Teams.Si vous avez défini des en-têtes de stratégie de sécurité de contenu (CSP) pour votre application, mettez à jour la directive frame-ancestors pour inclure le
*.cloud.microsoftdomaine. Pour garantir la 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 le besoin 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 un dialogue (appelé module de tâche dans TeamsJS v1.x) à l’aide de task/fetch:
Cette image montre une carte adaptative avec une action Acheter
Action.Executecarte. 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 Kit de développement logiciel (SDK) Teams, vous gérez cela à l’aide duOnAdaptiveCardActiongestionnaire . Pour plus d’informations, consultez Exécution d’actions.Le bot crée un
ActionResponseobjet et le retourne. 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 du corps de la 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 de client JavaScript 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’un dialogue.
Envoyer le résultat d’une boîte de dialogue
Lorsque l’utilisateur a terminé avec 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. Votre gestionnaire d’envoi de boîte de dialogue reçoit les données du formulaire de la carte. En C#, utilisez l’attribut[TaskSubmit]. Dans TypeScript, utilisezapp.on('dialog.submit', ...). Dans Python, utilisez@app.on_dialog_submit. -
Page web (TaskInfo.url) : la page web appelle
microsoftTeams.tasks.submitTask(formData)à partir de la bibliothèque de client 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 boîte de dialogue
Lorsque l’utilisateur envoie une boîte de dialogue, le bot reçoit un message d’appel task/submit . 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 tenu de répondre lorsque l’utilisateur a terminé avec la boîte de dialogue. |
MessageTask |
Teams affiche un message dans une boîte de dialogue contextuelle. |
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 boîte de dialogue dans .NET, TypeScript et Python :
using System.Text.Json;
using Microsoft.Teams.Api.TaskModules;
using Microsoft.Teams.Apps;
using Microsoft.Teams.Apps.Activities.Invokes;
using Microsoft.Teams.Apps.Annotations;
using Microsoft.Teams.Common.Logging;
[TaskSubmit]
public async Task<Microsoft.Teams.Api.TaskModules.Response> OnTaskSubmit([Context] Tasks.SubmitActivity activity, [Context] IContext.Client client, [Context] ILogger log)
{
var data = activity.Value?.Data as JsonElement?;
if (data == null)
{
log.Info("[TASK_SUBMIT] No data found in the activity value");
return new Microsoft.Teams.Api.TaskModules.Response(
new Microsoft.Teams.Api.TaskModules.MessageTask("No data found in the activity value"));
}
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 client.Send($"Hi {name}, thanks for submitting the form!");
return new Microsoft.Teams.Api.TaskModules.Response(
new Microsoft.Teams.Api.TaskModules.MessageTask("Form was submitted"));
default:
return new Microsoft.Teams.Api.TaskModules.Response(
new Microsoft.Teams.Api.TaskModules.MessageTask("Unknown submission type"));
}
}
Chaînage de dialogues en plusieurs étapes
Vous pouvez chaîner des cartes adaptatives dans un Assistant à plusieurs étapes en retournant une ContinueTask réponse du gestionnaire d’envoi. Chaque étape retourne une nouvelle carte, et la dernière étape retourne un MessageTask pour fermer la boîte de dialogue.
using System.Text.Json;
using Microsoft.Teams.Api;
using Microsoft.Teams.Api.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");
var nextStepTaskInfo = new TaskInfo
{
Title = $"Thanks {nameStep1} - Get Email",
Card = new Attachment
{
ContentType = new ContentType("application/vnd.microsoft.card.adaptive"),
Content = nextStepCard
}
};
return new Response(new ContinueTask(nextStepTaskInfo));
case "webpage_dialog_step_2":
var nameStep2 = GetFormValue("name") ?? "Unknown";
var emailStep2 = GetFormValue("email") ?? "No email";
await client.Send($"Hi {nameStep2}, thanks for submitting the form! We got that your email is {emailStep2}");
return new Response(new MessageTask("Multi-step form completed successfully"));
actions de carte Bot Framework et action de carte adaptative.Envoyer des actions
Le schéma des actions carte Bot Framework est différent des actions de carte Action.Submit adaptative et la façon d’appeler des dialogues est également différente. L’objet data dans Action.Submit contient un msteams objet afin qu’il n’interfère pas avec les autres propriétés du 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 |
|---|---|---|---|---|---|
| Exemple de boîte de dialogue bots-V4 | Cet exemple d’application montre comment utiliser des 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 |