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.
Importante
Les plug-ins d’API sont uniquement pris en charge en tant qu’actions au sein d’agents déclaratifs. Ils ne sont pas activés dans Microsoft 365 Copilot.
Les plug-ins d’API peuvent utiliser des modèles de réponse de carte adaptative pour améliorer la réponse générée par Microsoft 365 Copilot en fonction de la réponse reçue de l’API. La carte adaptative affiche les citations dans la réponse générée.
Les plug-ins d’API peuvent définir un modèle de réponse de carte adaptative de deux manières : en tant que modèle statique défini dans le manifeste du plug-in d’API, ou en tant que modèle dynamique retourné dans le cadre de la réponse de l’API. Les développeurs de plug-in ont défini des modèles à l’aide du schéma de carte adaptative en combinaison avec le langage de modèle Cartes adaptatives.
Modèles de réponse statiques
Les modèles de réponse statique sont un bon choix si votre API retourne toujours des éléments du même type et que le format de la carte adaptative n’a pas besoin de changer souvent. Un modèle statique est défini dans la static_template propriété de l’objet response_semantics dans le manifeste du plug-in, comme illustré dans l’exemple suivant.
"functions": [
{
"name": "GetBudgets",
"description": "Returns details including name and available funds of budgets, optionally filtered by budget name",
"capabilities": {
"response_semantics": {
"data_path": "$",
"properties": {
"title": "$.name",
"subtitle": "$.availableFunds"
},
"static_template": {
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.5",
"body": [
{
"type": "Container",
"$data": "${$root}",
"items": [
{
"type": "TextBlock",
"text": "Name: ${if(name, name, 'N/A')}",
"wrap": true
},
{
"type": "TextBlock",
"text": "Available funds: ${if(availableFunds, formatNumber(availableFunds, 2), 'N/A')}",
"wrap": true
}
]
}
]
}
}
}
},
]
- La
response_semantics.data_pathpropriété est définie sur$. Cette valeur est une requête JSONPath qui indique que la racine de la réponse JSON contient les données pertinentes. - La
static_template.body["$data"]propriété a la${$root}valeur , qui est la syntaxe du langage du modèle carte adaptative pour remplacer toute étendue de données antérieure et revenir à la racine. La définition de cette valeur ici n’est pas strictement nécessaire, car estdata_pathdéjà défini sur la racine. - La
textpropriété de la premièreTextBlockutilise la syntaxe${if(name, name, 'N/A')}du modèle de carte adaptative . Cette propriété fait référence à lanamepropriété dans la réponse de l’API. Laiffonction spécifie que sinamea une valeur, utilisez cette valeur ; sinon, utilisezN/A. - La
textpropriété de la secondeTextBlockutilise la syntaxe${if(availableFunds, formatNumber(availableFunds, 2), 'N/A')}du modèle de carte adaptative . Cette propriété fait référence à laavailableFundspropriété dans la réponse de l’API. LaformatNumberfonction restitue le nombre en une chaîne avec deux décimales.
Considérez ce modèle statique et la réponse d’API suivante.
[
{
"name": "Fourth Coffee lobby renovation",
"availableFunds": 12000
}
]
Cette combinaison aboutit à la carte adaptative suivante.
Modèles de réponse dynamique
Les modèles de réponse dynamique sont un bon choix si votre API retourne plusieurs types. Avec les modèles dynamiques, vous pouvez attribuer un modèle de réponse à chaque élément retourné. Un ou plusieurs modèles dynamiques sont retournés dans le cadre de la réponse de l’API, et les éléments de données dans la réponse indiquent le modèle à utiliser.
Pour utiliser des modèles dynamiques, indiquez la propriété sur les éléments de données qui spécifie le modèle dans la response_semantics.properties.template_selector propriété dans le manifeste du plug-in d’API, comme illustré dans cet exemple.
{
"name": "GetTransactions",
"description": "Returns details of transactions identified from filters like budget name or category. Multiple filters can be used in combination to refine the list of transactions returned",
"capabilities": {
"response_semantics": {
"data_path": "$.transactions",
"properties": {
"template_selector": "$.displayTemplate"
}
}
}
}
Dans cet exemple, la propriété a la data_path valeur $.transactions, ce qui indique que les données des cartes se trouvent dans la transactions propriété à la racine de la réponse de l’API. La template_selector propriété a la $.displayTemplatevaleur , ce qui indique que la propriété sur chaque élément du transactions tableau qui spécifie le modèle à utiliser est la displayTemplate propriété .
La propriété indiquée par la template_selector propriété contient une requête JSONPath pour localiser le modèle de l’élément dans la réponse.
Considérez ce modèle et la réponse d’API suivante.
{
"transactions": [
{
"budgetName": "Fourth Coffee lobby renovation",
"amount": -2000,
"description": "Property survey for permit application",
"expenseCategory": "permits",
"displayTemplate": "$.templates.debit"
},
{
"budgetName": "Fourth Coffee lobby renovation",
"amount": -7200,
"description": "Lumber and drywall for lobby",
"expenseCategory": "materials",
"displayTemplate": "$.templates.debit"
},
{
"budgetName": "Fourth Coffee lobby renovation",
"amount": 5000,
"description": "Additional funds to cover cost overruns",
"expenseCategory": null,
"displayTemplate": "$.templates.credit"
}
],
"templates": {
"debit": {
"type": "AdaptiveCard",
"version": "1.5",
"body": [
{
"type": "TextBlock",
"size": "medium",
"weight": "bolder",
"color": "attention",
"text": "Debit"
},
{
"type": "FactSet",
"facts": [
{
"title": "Budget",
"value": "${budgetName}"
},
{
"title": "Amount",
"value": "${formatNumber(amount, 2)}"
},
{
"title": "Category",
"value": "${if(expenseCategory, expenseCategory, 'N/A')}"
},
{
"title": "Description",
"value": "${if(description, description, 'N/A')}"
}
]
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json"
},
"credit": {
"type": "AdaptiveCard",
"version": "1.5",
"body": [
{
"type": "TextBlock",
"size": "medium",
"weight": "bolder",
"color": "good",
"text": "Credit"
},
{
"type": "FactSet",
"facts": [
{
"title": "Budget",
"value": "${budgetName}"
},
{
"title": "Amount",
"value": "${formatNumber(amount, 2)}"
},
{
"title": "Description",
"value": "${if(description, description, 'N/A')}"
}
]
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json"
}
}
}
- La
transactionspropriété dans la réponse contient un tableau d’éléments. - La
templatespropriété est un objet, chaque propriété de cet objet contenant un modèle de carte adaptative. - Sur
displayTemplatechaque objet dutransactionstableau est défini sur$.templates.debitou$.templates.credit.
La combinaison de ce manifeste de plug-in et de la réponse de l’API entraîne les cartes adaptatives suivantes.
Utilisation de modèles statiques et dynamiques ensemble
Les plug-ins peuvent combiner l’utilisation de modèles statiques et dynamiques. Dans ce scénario, le modèle statique agit comme un modèle par défaut qui est utilisé si l’élément n’a pas la template_selector propriété présente ou si sa valeur ne se résout pas en modèle dans la réponse de l’API.
Garantir la réactivité des cartes adaptatives sur Microsoft 365 Copilot hubs
Les cartes adaptatives doivent être conçues pour être réactives sur différentes tailles de surface. Cela garantit une expérience utilisateur transparente, quel que soit l’appareil ou la plateforme utilisé. Pour ce faire, veillez à valider les cartes adaptatives sur différents hubs Microsoft 365 Copilot, notamment Teams, Word et PowerPoint, et à valider différentes largeurs de fenêtre d’affichage en sous-traitant et en développant l’interface utilisateur Copilot. Cela garantit que les cartes adaptatives fonctionnent de manière optimale et fournissent une expérience cohérente sur toutes les plateformes. Appliquez les meilleures pratiques suivantes :
- Évitez d’utiliser des dispositions à plusieurs colonnes dans la mesure du possible. Les dispositions à une seule colonne ont tendance à s’afficher correctement même aux largeurs de fenêtre d’affichage les plus étroites.
- Évitez de placer des éléments de texte et d’image dans la même ligne, sauf si l’image est une petite icône ou un avatar.
- Évitez d’affecter une largeur fixe aux éléments de la carte adaptative ; au lieu de cela, autorisez-les à se redimensionner en fonction de la largeur de la fenêtre d’affichage. Toutefois, vous pouvez affecter une largeur fixe à de petites images telles que des icônes et des avatars.
Contenu connexe
- Concepteur de cartes adaptatives pour concevoir et tester des cartes adaptatives dans un outil visuel.
- Documentation sur la carte adaptative
- Informations de référence sur le manifeste du plug-in d’API