Instructions pour créer ou mettre à niveau un plug-in d’extension de message pour Copilot pour Microsoft 365

Importante

  • Les plug-ins pour Microsoft Copilot pour Microsoft 365 sont en préversion et fonctionnent uniquement dans Microsoft 365 Chat dans Microsoft Teams.
  • Vérifiez que Copilot pour Microsoft 365 est disponible pour votre organization. Vous disposez de deux façons d’obtenir un environnement de développement pour Copilot :
    • Un locataire Microsoft 365 de bac à sable avec Copilot (disponible en préversion limitée via l’appartenance TAP).
    • Un environnement de production client d’entreprise avec des licences Microsoft Copilot pour Microsoft 365.

Les plug-ins Microsoft 365 fournissent une intégration avec différents produits Microsoft 365, tels que Teams et Outlook. L’intégration permet aux utilisateurs de rechercher ou de créer du contenu dans des systèmes externes. Les plug-ins d’extension de message permettent aux Microsoft Copilot pour Microsoft 365 d’interagir avec les API d’autres logiciels et services via un bot. Avec Copilot pour Microsoft 365, vous pouvez :

  • Recherche pour obtenir les informations ou l’enregistrement les plus récents. Par exemple, le dernier ticket d’incident ou les résultats de l’enquête.
  • Résumez les informations en fonction de plusieurs enregistrements. Par exemple, résumez tous les tickets d’incident liés au projet Northwind.

Nous vous recommandons de créer ou de mettre à niveau vos extensions de message existantes pour optimiser leur utilité et leur facilité d’utilisation dans Copilot pour Microsoft 365. Les extensions de message doivent prendre en charge une ou plusieurs commandes de recherche, car Copilot pour Microsoft 365 les reconnaît comme des compétences qu’elles peuvent exécuter pour le compte de l’utilisateur. En outre, vos extensions doivent répondre aux normes de conformité, de performances, de sécurité et d’expérience utilisateur décrites dans cet article.

Le graphique montre l’expérience utilisateur entre Microsoft Teams et Copilot pour Microsoft 365 (conversation M365).

Exigences obligatoires

Les conditions requises pour créer des plug-ins d’extension de message pour Copilot pour Microsoft 365 sont les suivantes :

Définir des descriptions

Une bonne description offre un résumé clair et concis des fonctionnalités de l’application et permet Copilot pour Microsoft 365 de découvrir et d’exécuter efficacement les opérations de recherche. Lorsqu’un utilisateur entre le nom de l’application avec un verbe, par exemple Rechercher des tickets Contoso, le plug-in d’extension de message doit être appelé à partir de Copilot pour Microsoft 365 (conversation M365).

Capture d’écran montrant un scénario de réussite avec un exemple d’invite d’exemple de plug-in d’extension de message dans M365 Chat.

Capture d’écran montrant un scénario d’échec sans exemple d’exemple d’invite d’extension de message en tant que plug-in dans M365 Chat.

Veillez à respecter les instructions de description répertoriées dans le tableau suivant :

Action Reason
Anti-concurrence : évitez d’utiliser le nom d’un autre plug-in dans les descriptions courtes et longues.
IA responsable : évitez d’utiliser des mots clés inappropriés ou offensants.
Injections d’invite : assurez-vous que les descriptions ne guident pas Copilot à prendre des mesures qui contournent le fonctionnement normal de l’application. En outre, la description ne doit pas contenir de symboles ou de texte indiquant qu’elle peut être utilisée comme code pour l’injection d’invite. Évitez d’utiliser des expressions, des fonctions et du code qui appellent une application de façon récurrente.

Description de l’application

Les descriptions longues et courtes de l’application doivent être claires et définir l’étendue de l’application. Pour afficher une application en tant que plug-in dans Copilot pour Microsoft 365, modifiez la description de l’application en fonction des exigences suivantes du plug-in :

  • La description longue doit expliquer clairement la fonctionnalité et l’utilisation du plug-in d’extension de message dans Copilot pour Microsoft 365. Par exemple, utilisez le cloud Contoso dans Copilot pour Microsoft 365 pour rechercher et résumer vos tâches.
  • Une brève description doit décrire brièvement les fonctionnalités de l’application dans un langage naturel et peut inclure le nom de l’application.

Le tableau suivant répertorie les exemples de brève description pour chaque catégorie :

Description : Créez, recherchez, affichez des tickets, des bogues et des projets.

Exemple de description de l’application :

{
  "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.13/MicrosoftTeams.schema.json",
  "version": "1.0.0",
  "manifestVersion": "1.13",
  "id": "2bxxxxc5-5xxx-4xxx-aXXX-94xxxx8919e5",
  "name": {
    "short": "Tasks",
    "full": "Contoso Tasks"
  },
  "description": {
    "short": "Create, search, view tickets, bugs, and projects",
    "full": "Contoso Tasks makes it easy to stay organized. Create, assign, and track tasks individually or collaboratively with your team, and see everything come together in one place."
  },

Recherche description de la commande

La description de la commande mappe l’intention de l’utilisateur et l’énoncé à la commande de recherche à l’intérieur d’un plug-in et doit être basée sur l’analyse de l’intention de l’utilisateur et des mots clés. Recherche descriptions des commandes doivent :

  • Concentrez-vous sur ce que et comment la commande recherche (liste détaillée) en langage naturel.
  • Incluez des verbes et des synonymes, le cas échéant.
  • Concentrez-vous sur les mots clés susceptibles d’être utilisés dans la fonction de recherche de vos applications natives.

Description sémantique

La propriété semanticDescription est utilisée pour fournir une description détaillée d’une commande pour Copilot pour Microsoft 365. La description sémantique des commandes prend en charge jusqu’à 5 000 caractères et n’est pas affichée dans l’interface utilisateur. Si la semanticDescription propriété est vide, Copilot pour Microsoft 365 utilise les informations contenues dans le description champ. Lors de l’écriture d’un semanticDescription, vous devez inclure des informations sur les valeurs attendues, les limites et les plages de la commande.

La semanticDescription propriété n’est pas un champ obligatoire. Toutefois, si vous ajoutez semanticDescription dans le manifeste de l’application, les vérifications de validation existantes pour les descriptions courtes, de paramètres et de commandes s’appliquent également aux descriptions sémantiques.

Nous vous recommandons de passer en revue les instructions suivantes pour la description sémantique afin d’augmenter les chances que votre application réussisse le processus de soumission au Microsoft Teams Store :

  • Évitez les expressions d’instruction telles que « si l’utilisateur dit X », « ignorer », « supprimer », « réinitialiser », « nouvelles instructions », « Répondre en gras » ou « Ne rien imprimer ». [Correctif obligatoire]
  • Évitez les URL, les emojis ou les caractères masqués tels que les symboles hexadécimaux, binaires ou non conventionnels. [Correctif obligatoire]
  • Évitez les erreurs de grammaire et de ponctuation. [Correctif obligatoire]
  • Évitez le langage trop détaillé, fleuri ou marketing. [Correctif suggéré]
  • Évitez les revendications superlatives telles que « #1 », « étonnant » ou « meilleur ». [Correctif suggéré]

Le tableau suivant répertorie les exemples de commande et de description sémantique pour chaque catégorie :

Description : Recherche pour les tâches de haute priorité liées à Northwind qui doivent être effectuées demain.

Exemple de description de commande :

"commands": [
        {
          "id": "Search",
          "type": "query",
          "title": "Tasks",
          "description": "Search for high priority tasks related to Northwind that are due tomorrow.",
          "SemanticDescription": "Search for issues, epics, stories, tasks, sub tasks, bugs + additional details."
          "initialRun": true,
          "fetchTask": false,
          "context": [
            "commandBox",
            "compose",
            "message"
          ],

Description du paramètre

Chaque commande d’extension de message prise en charge a une propriété « parameters » correspondante qui prend en charge jusqu’à cinq paramètres et le premier paramètre doit être visible dans la barre de recherche de l’extension de message. Un paramètre doit avoir une bonne description, qui doit contenir une combinaison de paramètres, d’énumérations, d’acronymes et de format de sortie acceptables.

La propriété semanticDescription est utilisée pour fournir une description détaillée d’une commande pour Microsoft Copilot. La description sémantique des paramètres prend en charge jusqu’à 2 000 caractères et n’est pas affichée dans l’interface utilisateur. Si la semanticDescription propriété est laissée vide, Copilot utilise les informations contenues dans le description champ. Lors de l’écriture d’un semanticDescription, vous devez inclure des informations sur les valeurs attendues, les limites et les plages de la commande.

Une bonne description des paramètres explique les exigences du système dans un langage naturel avec un format de sortie. Voici quelques exemples de demandes de recherche de base et avancées pour chaque catégorie :

Recherche de base : Recherche pour les tâches liées à Northwind.
Recherche avancée : Recherche pour les tâches de haute priorité liées à Northwind qui doivent être effectuées demain.

Exemple de description du paramètre :

"parameters": [
    {
        "name": "Name",
        "title": "Project or Task Name",
        "description": "Project name or task name as keyword.",
        "inputType": "text"
    },
    {
        "name": "Time",
        "title": "Time",
        "description": "Date or number of days for which you need tasks for.",
        "semanticDescription": "Date or number of days for which you need tasks for. Output: Number",
        "inputType": "text"
    },
    {
        "name": "Priority",
        "title": "Priority",
        "description": "Priority of tasks.",
        "semanticDescription": "Priority of tasks. Acceptable values are high, medium, low, NA",
        "inputType": "text"
    }] 

Énoncés composés

Remarque

Recherche via la boîte de dialogue (appelée module de tâche dans TeamsJS v1.x) n’est pas prise en charge dans M365 Chat.

Pour M365 Chat, une extension de message basée sur la recherche doit prendre en charge plus de trois énoncés composés uniques pour effectuer une récupération approfondie d’informations précises. Pour activer les énoncés composés, vous devez étendre l’étendue de la recherche pour gérer au moins trois paramètres de recherche en mettant à jour le manifeste de l’application (précédemment appelé manifeste d’application Teams) et en veillant à ce que les éléments suivants :

  • Mettez à jour votre service web pour prendre en charge la recherche basée sur plusieurs paramètres. Pour plus d’informations sur la façon de répondre aux demandes des utilisateurs, consultez Répondre à la commande de recherche.

  • Copilot pour Microsoft 365 peut passer une chaîne vide ou une valeur null pour les paramètres, qui ne font pas partie de l’énoncé utilisateur, mettez à jour votre service web pour gérer les paramètres.

  • Une extension de message prend en charge jusqu’à 10 commandes (9 utilisables) et chaque commande a une propriété correspondante parameters qui prend en charge jusqu’à 5 paramètres.


Le code suivant est un exemple de plusieurs paramètres définis dans le manifeste de l’application :
"commands": [
                {
                    "id": "inventorySearch",
                    "context": [
                        "compose",
                        "commandBox"
                    ],
                    "description": "Search products by name, category, inventory status, supplier location, stock level",
                    "title": "Product inventory",
                    "type": "query",
                    "parameters": [
                        {
                            "name": "productName",
                            "title": "Product name",
                            "description": "Enter a product name here",
                            "inputType": "text"
                        },
                        {
                            "name": "categoryName",
                            "title": "Category name",
                            "description": "Enter the category of the product",
                            "inputType": "text"
                        },
                        {
                            "name": "inventoryStatus",
                            "title": "Inventory status",
                            "description": "Enter what status of the product inventory. Possible values are 'in stock', 'low stock', 'on order', or 'out of stock'",
                            "inputType": "text"
                        },
                        {
                            "name": "supplierCity",
                            "title": "Supplier city",
                            "description": "Enter the supplier city of product",
                            "inputType": "text"
                        },
                        {
                            "name": "stockQuery",
                            "title": "Stock level",
                            "description": "Enter a range of integers such as 0-42 or 100- (for >100 items). Only use if you need an exact numeric range.",
                            "inputType": "text"
                        }
                    ]
                },
                {
                    "id": "discountSearch",
                    "context": [
                        "compose",
                        "commandBox"
                    ],
                    "description": "Search for discounted products by category",
                    "title": "Discounts",
                    "type": "query",
                    "parameters": [
                        {
                            "name": "categoryName",
                            "title": "Category name",
                            "description": "Enter the category to find discounted products",
                            "inputType": "text"
                        }
                    ]
                },
                {
                    "id": "revenueSearch",
                    "context": [
                        "compose",
                        "commandBox"
                    ],
                    "description": "Find products based on their revenue/period",
                    "title": "Revenue",
                    "type": "query",
                    "parameters": [
                        {
                            "name": "revenueRange",
                            "title": "Revenue range",
                            "description": "Enter 'high' or 'low' or enter a range of integers such as 0-10000 or 5000- using this exact format",
                            "inputType": "text"
                        }
                    ]
                }
            ]

Capture d’écran montrant un exemple de scénario de réussite dans lequel l’application Northwind retourne une réponse pour un produit de la mer et des paramètres de stock.

Les paramètres de recherche doivent avoir des descriptions correctes avec des paramètres, des énumérations, des acronymes et un format de sortie acceptables. Pour plus d’informations et d’exemples, consultez Description du paramètre.

Exemples d’invites

La samplePrompts propriété guide les utilisateurs sur l’utilisation des différents plug-ins dans Copilot. Copilot utilise les exemples d’invites pour afficher les invites de l’utilisateur. Les invites doivent être adaptables à différents paramètres régionaux et effacer les différentes commandes. Des exemples d’invites sont disponibles dans les zones suivantes dans Copilot pour Microsoft 365 :

  • Expérience de première exécution (FRE) : lorsqu’un utilisateur installe ou active un plug-in pour la première fois.
  • Bibliothèque d’invites ou Copilot Lab : lorsqu’un utilisateur demande de l’aide pour les invites.
  • Suggestions de plug-in : pour guider les utilisateurs vers de meilleurs énoncés.

Capture d’écran montrant les exemples d’invites affichés lorsque le plug-in d’extension de message est activé dans Copilot.

Remarque

  • Si le manifeste de l’application ne spécifie pas la samplePrompts propriété, les invites ne s’affichent pas.
  • La samplePrompts propriété est obligatoire pour la validation de l’application pendant le processus de soumission de l’application.
  • Si vous définissez plusieurs commandes pour votre application, un maximum de trois invites (une à partir de chacune des trois premières commandes) sont affichées à l’utilisateur. Les invites pivotent pour fournir à l’utilisateur un ensemble diversifié d’invites sur différentes commandes.

Nous vous recommandons de suivre ces instructions pour augmenter les chances que votre application réussisse le processus de soumission au Microsoft Teams Store :

  • Un plug-in doit avoir au moins trois invites et un maximum de cinq invites pour chaque commande.
  • Chaque invite ne doit pas dépasser 128 caractères.
  • Deux commandes dans le même plug-in ne doivent pas avoir des invites identiques.
  • Les exemples d’invites doivent être génériques par nature et ne pas inclure de références personnalisées. Par exemple, les noms de projet et le nom de la tâche.
  • Tous les exemples d’invites doivent être fonctionnels et retourner des réponses.
  • L’invite doit être pertinente pour les commandes.

Le code suivant est un exemple de propriété dans le samplePrompts manifeste de l’application :

"composeExtensions": [
	{
		"canUpdateConfiguration": true,
		"botId": "bxxxxxx5-xxxx-xxxx-xxxx-4xxxxxx16599",
		"commands": [
			{
				"id": "orders",
				"title": "Orders",
				"context": [
					"Commandbox",
					"Compose"
				],
				"description": "Search for orders",
				"semanticDescription": "Search for orders",
				"samplePrompts": [
					{
						"text": "Search for all orders"
					},
					{
						"text": "Search for orders related to Contoso"
					},
					{
						"text": "Search for all pending orders"
					},
					{
						"text": "Search for all completed ordered for Fabrikam"
					}
				]
			}
		]
	}
]

Réponse de carte adaptative

Les extensions de message répondent à une entrée utilisateur avec une carte adaptative. Une carte adaptative pour un plug-in d’extension de message doit fonctionner efficacement, être riche et répondre aux exigences suivantes :

  • La réponse de carte adaptative doit inclure du contenu de carte adaptative et un aperçu carte informations dans le cadre du même modèle. [Obligatoire]

    Capture d’écran montrant un exemple d’application montrant que la réponse de l’application M365 Chat contient l’aperçu et le contenu dans la même réponse.


    Exemple de modèle de réponse de carte adaptative
    {
        "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
        "type": "AdaptiveCard",
        "version": "1.5",
        "body": [
          {
            "type": "Container",
            "items": [
              {
                "type": "TextBlock",
                "text": "${companyName}",
                "size": "Medium",
                "wrap": true,
                "style": "heading"
              },
              {
                "type": "TextBlock",
                "text": "${stockExchange} ${stockSymbol}",
                "isSubtle": true,
                "spacing": "None",
                "wrap": true
              },
              {
                "type": "TextBlock",
                "text": "${formattedDate} ${formattedTime}",
                "wrap": true
              }
            ]
          },
          {
            "type": "Container",
            "spacing": "None",
            "items": [
              {
                "type": "ColumnSet",
                "columns": [
                  {
                    "type": "Column",
                    "width": "stretch",
                    "items": [
                      {
                        "type": "TextBlock",
                        "text": "${currentPrice} ",
                        "size": "ExtraLarge",
                        "wrap": true
                      },
                      {
                        "type": "TextBlock",
                        "text": "${priceChange} ${percentChange}",
                        "color": "${changeColor}",
                        "spacing": "None",
                        "wrap": true
                      }
                    ]
                  },
                  {
                    "type": "Column",
                    "width": "auto",
                    "items": [
                      {
                        "type": "FactSet",
                        "facts": [
                          {
                            "title": "Open",
                            "value": "${openPrice} "
                          },
                          {
                            "title": "High",
                            "value": "${highPrice} "
                          },
                          {
                            "title": "Low",
                            "value": "${lowPrice} "
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ],
        "previewCard": {
          "contentType": "application/vnd.microsoft.card.hero",
          "content": {
            "title": "${companyName}",
            "text": "${stockSymbol}"
          }
        }
      }
    
  • Outre le logo de l’application, le titre, la miniature et le titre des informations, les données de la carte adaptative doivent représenter au moins deux informations. Vous pouvez identifier les champs à partir des attributs les plus fréquemment recherchés, tels que les données modifiées, l’auteur, les status et les indicateurs. [Obligatoire]

    Capture d’écran montrant un exemple de titre d’informations, de champs utilisateur supplémentaires et de bouton d’action dans une réponse de carte adaptative.

  • La carte adaptative doit être présentable sur le bureau, le web et les appareils mobiles (iOS et Android). [Obligatoire]

  • Une carte adaptative doit contenir au moins un bouton d’action, mais pas plus de quatre boutons d’action. [Obligatoire]

    Remarque

    Les types d’action imBackne messageBack sont pas pris en charge dans un objet de données.

    Les types d’actions suivants sont recommandés :

    • Action.OpenUrl: ouvre une URL spécifiée à partir de la carte.
    • Action.ToggleVisibility: affiche ou masque un ou plusieurs éléments dans le carte.
    • Action.Execute: collecte les champs d’entrée et les envoie en tant que requête à votre service de bot.
    • Action.Submit: ouvre une boîte de dialogue ou une vue d’étape à l’aide du type invoke dans l’objet de données.

    Le graphique montre un exemple des boutons d’action Mettre à jour le stock, réapprovisionner et Annuler le réapprovisionnement dans une réponse de carte adaptative dans M365 Chat.

  • Si un utilisateur peut modifier des informations sur le carte via la boîte de dialogue, stageview ou directement à partir de l’carte, nous recommandons la carte adaptative pour prendre en charge les actions universelles et l’actualisation automatique. [Recommandé]

  • Les cartes adaptatives doivent inclure une URL dans le cadre des métadonnées, ce qui permet aux cartes d’être facilement copiées d’un hub à un autre. [Recommandé]

  • À l’exception des miniatures, toute image d’une carte adaptative doit avoir un texte de remplacement. [Recommandé]

Exigences techniques

Pour qu’un plug-in soit validé, appelé et fonctionne en toute transparence, vérifiez qu’il répond aux critères suivants :

Critère Accomplissement
Version du manifeste La version du manifeste de l’application doit être 1.13 ou ultérieure. [Obligatoire]
Canal Microsoft 365 Pour que les utilisateurs puissent interagir avec votre extension de message à partir d’Outlook, vous devez ajouter le canal Microsoft 365 à votre bot. Pour plus d’informations, consultez Ajouter un canal Microsoft 365. [Obligatoire]
Temps de réponse Le temps de réponse ne doit pas dépasser 9 secondes pour 99 pour cent, 5 secondes pour 75 pour cent et 2 secondes pour 50 pour cent. [Obligatoire]
Fiabilité Les applications doivent maintenir une disponibilité de 99,9 %. Par instance, si Microsoft 365 Chat appelle un plug-in 1 000 fois, il doit fournir une réponse significative 999 fois. [Obligatoire]
Régressions nulles Si vous devez soumettre à nouveau votre application pour validation, la fonctionnalité d’extension de message existante qui fonctionnait précédemment ne doit pas s’arrêter. Cette exigence s’applique uniquement aux applications éditeurs de logiciels indépendants (ISV) et non aux applications conçues pour votre organization. [Obligatoire]
Authentification unique (SSO) Le cas échéant, mettez à jour votre inscription d’application Microsoft Entra ID pour l’authentification unique. [Recommandé]
Stratégie de sécurité du contenu Le cas échéant, modifiez vos en-têtes de stratégie de sécurité du contenu. [Recommandé]

Importante

Le cas échéant, mettez à jour vos en-têtes de stratégie de sécurité du contenu et X-Frame-Options conformément aux en-têtes Configurer la stratégie de sécurité du contenu.

Exemples de code

Exemple de nom Description TypeScript
Extension de message d’inventaire Northwind Cet exemple montre comment utiliser une extension de message Teams comme plug-in dans Microsoft Copilot pour Microsoft 365. View

Voir aussi