Propriété de métadonnées dans les composants de réponse communs

Vous utilisez la propriété Metadata dans les composants Common Response pour définir la manière dont les messages seront affichés pour les utilisateurs.

Vous définissez les métadonnées à deux niveaux : au niveau racine, où vous définissez la sortie et les actions propres au composant lui-même, et au niveau de la réponse, où vous définissez l'affichage et le comportement propres au texte, à la liste, à la carte ou aux messages de pièce jointe que ce composant génère.
metadata:
  responseItems:
  - text: "To which location do you want the pizza to be delivered?"
    type: "text"
    name: "What location"
    separateBubbles: true
  globalActions:
  - label: "Send Location"
    type: "location"
    name: "SendLocation"
Propriété Description Requis ?
responseItems Liste des éléments de réponse, chacun ayant pour résultat l'envoi d'un nouveau message au client de discussion (ou de plusieurs messages lorsque vous définissez l'itération pour l'élément de réponse à l'aide de la propriété iteratorVariable ou d'une combinaison des propriétés iteratorVariable et iteratorExpression). Définissez ces éléments de réponse à l'aide des valeurs suivantes :
  • text : bulles de texte (propriété text) pouvant inclure la liste des boutons qui apparaissent généralement sous forme de boutons.

    Pour les entités de conteneur composite (c'est-à-dire que la propriété variable nomme une variable d'entité de conteneur composite), vous pouvez utiliser une invite d'expression FreeMarker pour une valeur pour l'entité en cours (“${system.entityToResolve.value.prompt}”).

  • cards : série de cartes qui défilent horizontalement ou verticalement.

  • attachment : image, fichier audio, vidéo ou pièce jointe que les utilisateurs peuvent télécharger vers le serveur ou en local.

  • editForm : formulaire interactif.
  • form
  • dataSet
Oui
globalActions Liste des actions globales, ce qui signifie qu'elles ne sont pas propres à des éléments de réponse. Ces actions apparaissent généralement au bas de la fenêtre de discussion. Par exemple, dans Facebook Messenger, ces options sont appelées réponses rapides. Non
keywords Liste des mots-clés établissant une correspondance entre les mots-clés saisis par un utilisateur et la charge utile de postback correspondante. Les mots-clés prennent en charge les canaux de texte uniquement lorsque les boutons d'action ne s'affichent pas correctement. Non
Vous configurez également les métadonnées des différents éléments de réponse, tels que le texte, la carte ou les messages de pièce jointe.
Propriété Description Requis ?
type Type d'élément de réponse déterminant le format de message. Vous pouvez définir un message de la manière suivante : text, attachment ou cards. Oui
name Nom de l'élément de réponse utilisé en interne. Il n'est pas utilisé lors de l'exécution. Non
iteratorVariable Ajoute dynamiquement plusieurs éléments de texte, de pièce jointe ou de mot-clé à la réponse à l'aide d'itérations dans les éléments de variable. Non
iteratorExpression Expression FreeMarker utilisée pour afficher les valeurs d'un tableau imbriqué dans la variable indiquée par la propriété iteratorVariable.

Par exemple, si vous avez défini la valeur de la propriété iteratorVariable sur "team" et que cette variable comporte un élément nommé members dont vous voulez afficher les valeurs, vous devez utiliser l'expression ${team.value.members}.

Non
visible Détermine le mode d'affichage des messages par saisie utilisateur et canal. Reportez-vous à Propriété visible. Non
rangeStart Si vous avez indiqué un paramètre iteratorVariable, vous pouvez appliquer un sous-ensemble d'éléments de réponse en spécifiant la propriété rangeStart en association avec la propriété rangeSize. Vous pouvez entrer une valeur codée en dur ou utiliser une expression FreeMarker qui référence une variable de flux de dialogue contenant le début de la plage. L'utilisation d'une variable rangeStart vous permet de parcourir l'ensemble de données suivant en définissant la variable rangeStart dans la charge utile de l'option de navigation. Vous pouvez voir un exemple des propriétés rangeStart et rangeSize dans l'état OrderPizza de CrcPizzaBot. Non
rangeSize Nombre d'éléments de réponse qui seront affichés tel qu'indiqué par les propriétés iteratorVariable et rangeStart. Non
channelCustomProperties Liste des propriétés qui déclenchent des fonctions propres à un canal. Comme ces fonctions sont propres à la plate-forme, elles sont hors du composant Réponse commune et ne peuvent pas être contrôlées par les propriétés au niveau racine ou au niveau de l'élément de réponse du composant. Vous trouverez un exemple de cette propriété dans l'état OrderPizza de CrcPizzaBot.
channelCustomProperties:
          - channel: "facebook"
            properties:
              top_element_style: "large"
Pour plus de détails sur l'utilisation de channelCustomProperties, ainsi que sur les propriétés disponibles pour chaque canal, reportez-vous à Extensions propres à un canal.
Non

Propriétés des métadonnées de mot-clé

Vous pouvez créer des raccourcis pour des actions en définissant les propriétés de mot-clé et de libellé. Par exemple, ils permettent aux utilisateurs d'entrer S pour Small.

Le fragment de passe suivant montre comment un ensemble de mots-clés peut être généré à partir d'une variable pizzaSize qui contient la liste des valeurs définies pour une entité PizzaSize.
      
responseItems:         
- type: "text"  
  text: "What size of pizza do you want?" 
  actions: 
  - label: "(${enumValue[0]?upper_case})${enumValue?keep_after(enumValue[0])}"
    type: "postback"
    keyword: "${enumValue[0]?upper_case},${(enumValue?index)+1}"
    payload: 
      variables: 
        pizzaSize: "${enumValue}" 
    iteratorVariable: "pizzaSize.type.enumValues"
Propriété Description Requis ?
keyword Liste des mots-clés déclenchant la charge utile de postback définie par la propriété payload. Vous pouvez utiliser une expression FreeMarker pour renvoyer des mots-clés que la propriété interatorVariable génère à partir d'entités de liste de valeurs à l'aide des propriétés type et enumValues (iteratorVariable: "pizzaSize.type.enumValues"). Oui
label Libellé de l'action, qui peut être une chaîne de texte ou une expression Apache FreeMarker. Par exemple, une expression indiquant un mot-clé à deux lettres se présente comme suit :

label: "(${enumValue[0]?upper_case}${enumValue[1]?upper_case})${enumValue?keep_after(enumValue[1])}"

Pour la prise en charge de plusieurs langues, utilisez une expression Apache FreeMarker qui référence un groupe de ressources.
Non
skipAutoNumber Définissez cette option sur true afin de supprimer la numérotation automatique pour un élément clé lorsque l'option Activer la numérotation automatique sur les cartes est activée au niveau de Digital Assistant ou de la brique. Non
visible Détermine le mode d'affichage des messages texte par saisie utilisateur et canal. Reportez-vous à Propriété visible Non
iteratorVariable Ajoute dynamiquement plusieurs mots-clés à l'aide d'itérations sur les éléments stockés dans la variable spécifiée. Par exemple, iteratorVariable: "pizzaSize.type.enumValues". Non
iteratorExpression Expression FreeMarker utilisée pour afficher les valeurs d'un tableau imbriqué dans la variable indiquée par la propriété iteratorVariable.

Par exemple, si vous avez défini la valeur de la propriété iteratorVariable sur "team" et que cette variable comporte un élément nommé members dont vous voulez afficher les valeurs, vous devez utiliser l'expression ${team.value.members}.

payload Charge utile de postback, qui possède les propriétés suivantes.
  • action : action cible.
  • <variable names> : définit les valeurs des variables.
Vous devez définir au moins l'une de ces propriétés. Reportez-vous à Propriétés de la charge utile.
 

Extraction de mots-clés à partir des messages

Bien que le composant déclenche un postback lorsque les utilisateurs saisissent un nombre, vous pouvez étendre votre brique à une entrée plus large comme First ou let's try the 1st item. Pour ce faire, créez une variable de tableau pour les expressions de mot-clé (par exemple, premier,1er,un, deuxième, 2e, deux, etc.)

Référencez ensuite la variable dans la propriété keyword des métadonnées. Par exemple, voici à quoi pourrait ressembler un flux pour commander une pizza.
- keyword: "${pizzas.name},<#if pizzas?index <KEYWORDS_VAR.value?size>${numberKeywords.value[pizzas?index].keywords}</#if>,<#if pizzas?index==cardsRangeStart?number+[cardsRangeStart?number+3,pizzaCount.value?number-cardsRangeStart?number-1]?min>last</#if>"
Dans cette définition, le dernier mot-clé est basé sur le début de la plage en cours. Il est défini sur la dernière pizza actuellement affichée, en fonction du nombre de fois que le client a saisi "more".

La propriété visible

Définissez l'affichage en fonction de la saisie utilisateur et du canal à l'aide de la propriété facultative visible.
Propriété Description Requis ?
expression Directive Apache FreeMarker permettant d'afficher ou de masquer du texte, des cartes ou des pièces jointes de manière conditionnelle. Par exemple, l'état OrderPizza de CrcPizzaBot utilise ""<#if cardsRangeStart?number+4 < pizzas.value?size && textOnly=='false'>true<#else>false</#if>" Non
channels:
 include:
 exclude:
Pour include et exclude, entrez la liste des types de canal séparés par une virgule pour lesquels le texte, la carte ou la pièce jointe doivent être affichés (include) ou masqués (exclude). Les valeurs de canal valides sont les suivantes :
  • facebook

  • webhook

  • websdk

  • androidsdk

  • iossdk

  • twilio

  • slack

  • msteams

  • cortana

  • test

metadata:
  responseItems:
  - type: "text"
    text: "This text is only shown in Facebook Messenger"
    visible:
      channels:
        include: "facebook"             
  - type: "text"
    text: "This text is NOT shown in Facebook Messenger and Twilio"
    visible:
      channels:
        exclude: "facebook, twilio"
    actions:
    - label: "This action is only shown on web channel"
      type: "postback"
      payload:
        action: "someAction"
      visible:
        channels:
          include: "websdk"
Non
onInvalidUserInput Indicateur booléen qui affiche l'élément de texte ou la pièce jointe lorsque l'utilisateur saisit une entrée valide (value=false) ou lorsqu'il saisit une entrée non valide (value=true). Non
onDisambiguation Lorsque true affiche l'élément de réponse, la carte ou l'action uniquement lorsqu'une invite de désambiguïsation est affichée. Non
entitiesToResolve Utilisez cette propriété pour créer un message personnalisé pour chaque élément de conteneur composite. Ajoutez une liste de noms d'élément de conteneur composite séparés par des virgules pour lesquels l'élément de réponse doit être affiché (include) ou masqué (exclude).
visible:
           entitiesToResolve:
           include: "Amount"
Non

Propriétés des métadonnées d'action

Vous pouvez définir des actions pour une carte ou des listes, un type de réponse ou des actions globales pour un composant (par exemple, les actions de réponse rapide de Facebook). Vous ne pouvez pas configurer d'actions pour les messages de pièce jointe.

Propriété Description Requis ?
type Type d'action :
  • postback : renvoie un objet JSON contenant l'état, l'action et les variables.

  • share : ouvre une boîte de dialogue de partage dans le client de messagerie, qui permet aux utilisateurs de partager des bulles de message avec leurs amis.

  • call : numéro de téléphone indiqué dans la charge utile.

  • url : ouvre l'URL spécifiée dans la charge utile dans le navigateur. Pour Facebook Messenger, vous pouvez définir la propriété channelCustomProperties avec webview_height_ratio, messenger_extensions et fallback_url.

  • location : envoie l'emplacement actuel. Dans Facebook Messenger, l'emplacement actuel n'est pas pris en charge pour les réponses de texte ou de carte. Il est uniquement pris en charge à l'aide d'une réponse rapide. Pour plus d'informations, reportez-vous à la documentation de la plate-forme Facebook Messenger.

Oui
label Libellé de l'action. Pour localiser ce libellé, vous pouvez utiliser une expression FreeMarker afin de référencer une entrée dans le groupe de ressources de votre bot. Oui
iteratorVariable Cette option permet d'ajouter plusieurs actions à l'aide d'itérations sur les éléments stockés dans la variable indiquée. Vous ne pouvez pas utiliser cette propriété avec les actions de partage et d'emplacement. Non
iteratorExpression Expression FreeMarker utilisée pour afficher les valeurs d'un tableau imbriqué dans la variable indiquée par la propriété iteratorVariable.

Par exemple, si vous avez défini la valeur de la propriété iteratorVariable sur "team" et que cette variable comporte un élément nommé members dont vous voulez afficher les valeurs, vous devez utiliser l'expression ${team.value.members}.

Non
imageUrl URL de l'image utilisée pour une icône identifiant une action. Vous pouvez utiliser cette propriété afin d'afficher une icône pour le bouton de réponse rapide Facebook (qui est une action globale). Non
skipAutoNumbering Lorsque cette propriété est définie sur true, elle exclut une action de postback individuelle de l'application de la numérotation automatique. Vous pouvez utiliser cette propriété pour une réponse de texte ou de carte. Non
channelCustomProperties Liste des propriétés qui déclenchent une fonctionnalité propre à un canal non contrôlée par les propriétés d'action standard. Vous trouverez un exemple dans l'état OrderPizza de CrcPizzaBot. Non
name Nom identifiant l'action sur la plate-forme Digital Assistant. Ce nom est utilisé en interne et ne s'affiche pas dans le message. Non
visible Détermine le mode d'affichage des pièces jointes par saisie utilisateur et canal. Reportez-vous à Propriété visible. Non
payload Objet de charge utile pour les éléments de réponse call, url et postback. Reportez-vous à Propriétés de la charge utile. Non

Propriétés de la charge utile

Propriété Description Requis ?
action Transition action déclenchée lorsque l'utilisateur choisit cette action. Non
variables Définit les valeurs des variables lorsque vous définissez le type d'action sur postback et que vous ajoutez les propriétés de charge utile nommées pour les variables. Lorsque l'utilisateur appuie sur l'action, les variables sont définies sur les valeurs spécifiées par cette propriété. Non
url URL du site Web qui est ouvert lorsque les utilisateurs appuient sur cette action. Cette propriété est requise pour le type d'action url.
phoneNumber Numéro de téléphone appelé lorsqu'un utilisateur appuie sur cette action. Cette propriété est requise pour le type d'action call.

Affichage des actions non postback sur les canaux de texte uniquement

Remarques concernant ces propriétés de métadonnées d'action pour les composants de réponse commune.

  • Si le canal de texte uniquement prend en charge les liens hypertexte, vous pouvez les utiliser à la place de boutons lorsque le type d'action globale est url ou call.

  • Les types d'action share et location seront ignorés ou ne s'afficheront pas.

Conseil :

Les actions non postback telles que url et call ne peuvent pas être numérotées car elles ne sont pas transmises au moteur de dialogue et ne peuvent donc pas être déclenchées par des mots-clés. Par conséquent, si vous mélangez les deux types d'action, le message de votre bot peut paraître incohérent car certaines options seulement sont numérotées.
Image d'exécution de la numérotation de non postback et postback.
A l'aide du kit SDK, vous pouvez créer une sortie plus cohérente en désactivant la numérotation automatique pour le postback. Par exemple :
{
  "type": "text",
  "text": "Please choose one of the following options",
  "actions": [
    {
      "type": "url",
      "label": "Check out our website",
      "url": "http://www.oracle.com"
    },
    {
      "type": "postback",
      "label": "<#if autoNumberPostbackActions.value>Enter 1 to Order pizza<#else>Order Pizza<#if>"
      "skipAutoNumber": true
      "keyword": "1"
      "postback": { ...}
    }
  ]
}

Elément de réponse de texte

Voici les propriétés des éléments de réponse texte dans les composants Réponse commune.

Propriété Description Requis ?
text Texte qui invite l'utilisateur à effectuer une action. Oui
iteratorExpression Expression FreeMarker utilisée pour afficher les valeurs d'un tableau imbriqué dans la variable indiquée par la propriété iteratorVariable.

Par exemple, si vous avez défini la valeur de la propriété iteratorVariable sur "team" et que cette variable comporte un élément nommé members dont vous voulez afficher les valeurs, vous devez utiliser l'expression ${team.value.members}.

 
iteratorVariable Ajoute dynamiquement plusieurs éléments de texte, de pièce jointe ou de mot-clé à la réponse à l'aide d'itérations dans les éléments de variable. Non
footerText Texte affiché en bas du message (sous le texte et les actions de bouton, le cas échéant). Ajoutez un pied de page pour améliorer la sortie sur les canaux de texte uniquement. Comme décrit dans Pieds de page, vous pouvez utiliser des expressions FreeMarker afin d'appliquer des conditions au texte de pied de page pour les canaux de texte uniquement. Non
separateBubbles Vous pouvez définir cette propriété si vous définissez également la propriété iteratorVariable. Lorsque vous définissez cette propriété sur true, chaque élément de texte est envoyé sous la forme d'un message distinct, tel que Pizzas et Pastas dans les états ShowMenu et OrderPizza de CrcPizzaBot. Si vous définissez cette propriété sur false, un seul message texte est envoyé, dans lequel chaque élément de texte commence sur une nouvelle ligne. Non
visible Détermine le mode d'affichage des messages texte par saisie utilisateur et canal. Reportez-vous à Propriété visible. Non
actions Action de postback. Pour la prise en charge de texte uniquement, vous pouvez définir des mots-clés. Non
Si vous voulez voir un exemple de réponse textuelle avec des actions, examinez les métadonnées de l'état showMenu de CrcPizzaBot : Comme postback est nommé en tant qu'action, la brique gère le comportement inattendu d'un utilisateur, par exemple en sélectionnant un élément dans un message plus ancien au lieu d'en sélectionner un dans le message le plus récent.
metadata:
  responseItems:
    - type: "text"
      text: "Hello ${profile.firstName}, this is our menu today:"
      footerText: "${(textOnly.value=='true')?then('Enter number to make your choice','')}"
      name: "hello"
      separateBubbles: true
      actions:
        - label: "Pizzas"
          type: "postback"
          keyword: "${numberKeywords.value[0].keywords}"
          payload:
            action: "pizza"
          name: "Pizzas"
        - label: "Pastas"
          keyword: "${numberKeywords.value[1].keywords}"
          type: "postback"
          payload:
            action: "pasta"
          name: "Pastas"

Elément de réponse de carte

Voici les propriétés des éléments de réponse de carte dans les composants Réponse commune.

Propriété Description Requis ?
cardLayout Disposition de la carte : horizontal (valeur par défaut) et vertical. Oui
headerText Texte d'en-tête. Par exemple, headerText : "<#if cardsRangeStart?number == 0>Here are our pizzas you can order today:<#else>Some more pizzas for you:</#if>". Non
title Titre de la carte Oui
description Description de la carte, qui est affichée comme sous-titre. Non
imageUrl URL de l'image qui apparaît sous le sous-titre. Non
cardUrl URL d'un site Web. Ce lien apparaît sous la forme d'un lien hypertexte sur la carte, sur lequel les utilisateurs appuient pour l'ouvrir. Non
iteratorExpression Expression FreeMarker utilisée pour afficher les valeurs d'un tableau imbriqué dans la variable indiquée par la propriété iteratorVariable.

Par exemple, si vous avez défini la valeur de la propriété iteratorVariable sur "team" et que cette variable comporte un élément nommé members dont vous voulez afficher les valeurs, vous devez utiliser l'expression ${team.value.members}.

 
iteratorVariable Ajoute dynamiquement plusieurs cartes à la réponse à l'aide d'itérations sur les éléments stockés dans la variable que vous spécifiez pour cette propriété. Bien que vous définissiez la variable en tant que chaîne, elle contient un tableau JSON lorsqu'elle est utilisée en tant que variable d'itérateur. Vous pouvez référencer des propriétés dans un objet du tableau à l'aide d'une expression telle que ${iteratorVarName.propertyName}. Par exemple, avec une variable d'itérateur nommée pizzas, la propriété de nom d'une pizza peut être référencée à l'aide de l'expression ${pizzas.name}. Non
rangeStart Si vous avez indiqué un paramètre iteratorVariable, vous pouvez appliquer un sous-ensemble de cartes en spécifiant la propriété rangeStart en association avec la propriété rangeSize. Vous pouvez entrer une valeur codée en dur ou utiliser une expression FreeMarker qui référence une variable contenant le début de la plage. L'utilisation d'une variable rangeStart vous permet de parcourir l'ensemble de données suivant en définissant la variable rangeStart dans la charge utile d'une option de navigation. Non
rangeSize Nombre de cartes qui seront affichées tel qu'indiqué par les propriétés iteratorVariable et rangeStart. Non
visible Détermine le mode d'affichage des libellés d'action par saisie utilisateur et canal. Reportez-vous à Propriété visible. Non

Vous pouvez affecter un ensemble d'actions propres à une carte donnée, ou une liste d'actions attachée à la fin de la liste de cartes.

L'état OrderPizza de CrcPizzaBot inclut une définition d'élément de réponse de carte, comme indiqué dans le fragment de code suivant :
responseItems:
  - type: "cards"
    headerText: "<#if cardsRangeStart?number == 0>Here are our pizzas you can order today:<#else>Some more pizzas for you:</#if>"
    cardLayout: "vertical"
    name: "PizzaCards"
    actions:
      - label: "More Pizzas"
        keyword: "more"
        type: "postback"
        skipAutoNumber: true
        visible:
          expression: "<#if cardsRangeStart?number+4 < pizzas.value?size && textOnly=='false'>true<#else>false</#if>"
        payload:
          action: "more"
          variables:
            cardsRangeStart: "${cardsRangeStart?number+4}"
        name: "More"
    cards:
      - title: "${(textOnly=='true')?then((pizzas?index+1)+'. ','')}${pizzas.name}"
        description: "${pizzas.description}"
        imageUrl: "${pizzas.image}"
        name: "PizzaCard"
        iteratorVariable: "pizzas"
        rangeStart: "${cardsRangeStart}"
        rangeSize: "4"
        actions:
          - label: "Order Now"
            type: "postback"
            payload:
              action: "order"
              variables:
                orderedPizza: "${pizzas.name}"
                orderedPizzaImage: "${pizzas.image}"
            name: "Order"
            visible:
              expression: "${(textOnly=='true')?then('false','true')}"

Comment les cartes sont-elles affichées sur des canaux de texte uniquement ?

Les composants de réponse communs affichent les réponses sous forme de cartes. Lorsque votre brique s'exécute dans un canal de type texte uniquement, certaines propriétés des éléments de réponse de carte se comportent différemment. Voici quelques points à prendre en compte.

  • Il n'existe aucun défilement vertical ou horizontal (comportements définis par l'option cardLayout). Toutes les cartes s'affichent dans une bulle de message unique, qui peut inclure un en-tête et un pied de page. Les propriétés de carte title et description sont séparées par un caractère de retour à la ligne. Vous pouvez numéroter la propriété de titre de la carte.

  • Les liens hypertexte sont toujours pris en charge dans les canaux de texte uniquement. L'adresse configurée pour la propriété cardUrl apparaît dans la bulle avec les propriétés title et description, séparées par un caractère de retour à la ligne.

  • Les images indiquées par la propriété imageURL sont affichées.

  • Le texte de libellé des boutons d'action s'affiche (même si les boutons eux-mêmes ne sont pas affichés). Les utilisateurs peuvent saisir du texte ou, si la numérotation automatique est activée, entrer le numéro correspondant pour plus de simplicité.


Optimisation des cartes sur les canaux de texte uniquement à l'aide de mots-clés

La plupart des cartes possèdent une action unique, comme le bouton Commander maintenant de CRCPizzaBot et l'action globale Plus permettant de charger la carte suivante dans le carrousel. Comme illustré dans Comment les cartes sont-elles affichées sur des canaux de texte uniquement ?, le libellé de chaque action est numéroté automatiquement lorsque la brique est exécutée sur les canaux SMS/texte uniquement. Sur ces canaux, un ensemble de cartes est représenté dans une seule bulle. Celle-ci peut donc devenir longue et difficile à lire. Pour éviter cela, configurez des actions de postback qui ne sont pas associées aux libellés d'action, mais qui sont exécutées par des mots-clés de l'utilisateur (par exemple, 1, 2, 3, cheese ou more).


Description de l'image cards-text-only.png
Description de l'image cards-text-only.png

Vous pouvez masquer les libellés d'action lorsque votre brique est exécutée sur des canaux de texte uniquement en suivant ces instructions générales.

Dans la propriété metadata :
  • Définissez la propriété keywords. Dans le fragment de code de CRCPizzaBot suivant, l'expression ${pizza.name} définie pour la propriété de mot-clé indique un mot-clé pour chaque nom de pizza :
    
    metadata:
      keywords:
        - keyword: "${pizzas.name},<#if pizzas?index <numberKeywords.value?size>${numberKeywords.value[pizzas?index].keywords}</#if>,<#if pizzas?index==cardsRangeStart?number+[cardsRangeStart?number+3,pizzaCount.value?number-cardsRangeStart?number-1]?min>last</#if>"
          visible:
            expression: "${textOnly.value}"
    ...

    Ces mots-clés sont uniquement ajoutés lorsque textOnly est défini sur True.

Dans les métadonnées card, procédez comme suit :
  • Définissez la propriété title. Dans le fragment de code suivant, une expression utilise la variable FreeMarker index pour ajouter un nombre en guise de préfixe au titre (renvoyé par ${pizzas.name} lorsque la valeur de la variable textOnly est définie sur true). Ainsi, lorsqu'un client saisit plus, la brique charge une autre bulle de message contenant l'ensemble suivant de pizzas commençant au numéro 5 (rangeSize: "4").
    cards:
            - title: "${(textOnly=='true')?then((pizzas?index+1)+'. ','')}${pizzas.name}"
              description: "${pizzas.description}"
              imageUrl: "${pizzas.image}"
              name: "PizzaCard"
              iteratorVariable: "pizzas"
              rangeStart: "${cardsRangeStart}"
              rangeSize: "4"
  • Dans le fragment de code suivant, les actions de carte ("Order" et "More Pizzas") s'affichent uniquement lorsque la valeur de la variable textOnly est définie sur false :
            - label: "More Pizzas"
              keyword: "more"
              type: "postback"
              skipAutoNumber: true
              visible:
                expression: "<#if cardsRangeStart?number+4 < pizzas.value?size && textOnly=='false'>true<#else>false</#if>"
  • Ajoutez un pied de page qui apparaît uniquement lorsque la valeur de la variable textOnly est définie sur true.
    footerText: "<#if textOnly=='true'>Enter a pizza number to make your choice<#if cardsRangeStart?number+4 < pizzas.value?size>, or type 'more' to see more pizzas</#if></#if>"

Elément de réponse de pièce jointe

L'élément de réponse attachment inclut les propriétés suivantes.

Propriété Description Requis ?
attachmentType Type de pièce jointe : image, audio, video et file. Oui
attachmentURL URL de téléchargement ou source de la pièce jointe. Oui
L'état Confirmation de CrcPizzaBot utilise un élément de réponse de pièce jointe pour afficher une image de la commande différente de l'élément indiqué dans le menu.
metadata:
  responseItems:
  - text: "Thank you for your order, your ${pizzaSize} ${orderedPizza} pizza\
      \ will be delivered in 30 minutes at GPS position ${location.value.latitude},${location.value.longitude}!"
    type: "text"
    name: "conf"
    separateBubbles: true
  - type: "attachment"
    attachmentType: "image"
    name: "image"
    attachmentUrl: "${orderedPizzaImage}"

Action

Une action correspond à un élément que l'utilisateur peut sélectionner.
Nom Description Type Requis ?
type Type d'action chaîne Oui
label Texte du libellé descriptif de l'action. chaîne Au moins l'un des éléments label ou imageUrl doit être inclus.
imageUrl Image de l'action chaîne Vous devez inclure au moins une propriété label ou imageUrl unique.
style Style de rendu du bouton "primary", "danger", "default" Non
displayType Affichage du type d'élément d'action (bouton, lien ou icône) "button", "link", "icon" Non
channelExtensions Propriétés d'extension propres au canal associées à l'action JSONObject Non

Champ

Un élément Field contient les propriétés suivantes :
Nom Description Type Requis ?
displayType Type du champ String Non
label Le libellé du champ String Oui
channelExtensions Ensemble de propriétés d'extension propres au canal. Map<ChannelType, JSONObject> Non
marginTop Espace vertical entre ce champ et le champ précédent dans la même colonne. Les valeurs autorisées sont none, medium (valeur par défaut) et large. String Non
labelFontSize Taille de police utilisée pour le libellé de champ. Les valeurs autorisées sont small, medium (valeur par défaut) et large. String Non
labelFontWeight Poids de police utilisé pour le libellé de champ. Les valeurs autorisées sont light, medium (valeur par défaut) et gras. String Non
displayInTable Expression booléenne FreeMarker qui vous permet d'inclure de manière conditionnelle un champ dans la présentation de table dans un élément de réponse dataSet. String Non (valeur par défaut : true)
displayInForm Expression booléenne FreeMarker qui vous permet d'inclure de manière conditionnelle un champ dans un élément de réponse L'élément de réponse editForm ou dans la présentation de formulaire dans un élément de réponse dataSet String Non (valeur par défaut : true)

Champ ReadOnly

Représente un champ en lecture seule. Tous les champs en lecture seule héritent des propriétés Field et possèdent les propriétés supplémentaires suivantes :
Nom Description Type Requis ?
value Valeur du champ chaîne Oui
width Pourcentage suggéré de la largeur totale disponible que le champ doit occuper dans une présentation de tableau. nombre Non
alignment Alignement de la valeur dans une colonne de tableau. L'alignement par défaut est right. "left", "center" et "right" Non
Remarque

Dans la version 23.06 d'Oracle Digital Assistant, les champs en lecture seule ne s'affichent pas dans les formulaires d'entrée, même s'ils sont reçus dans la charge utile du message.
Champ de texte
L'élément TextField hérite de toutes les propriétés du champ ReadOnly. displayType pour cet élément est "text". Il possède les propriétés supplémentaires suivantes :
Nom Description Type Requis ?
truncateAt Position à laquelle le texte est tronqué et des points de suspension sont ajoutés pour indiquer que la valeur a été tronquée. Un entier Non
fontSize Taille de police utilisée pour la valeur field. Les valeurs autorisées sont small, medium (valeur par défaut) et large. Chaîne Non
fontWeight Poids de police utilisé pour la valeur field. Les valeurs autorisées sont light, medium (par défaut) et bold. Chaîne Non
LinkField
L'élément LinkField hérite de toutes les propriétés du champ ReadOnly. Il possède les propriétés supplémentaires suivantes :
Nom Description Type Requis ?
linkLabel Libellé utilisé pour le lien hypertexte Chaîne Non
imageUrl URL de l'image qui ouvre un lien lorsque vous cliquez dessus. Chaîne Non
MediaField
L'élément MediaField hérite de toutes les propriétés du champ ReadOnly. Il possède les propriétés supplémentaires suivantes :
Nom Description Type Requis ?
mediaType Type de support de champ ("video", "audio", "image") String Oui
ActionField
L'élément ActionField hérite de toutes les propriétés du champ ReadOnly. Il possède les propriétés supplémentaires suivantes :
Nom Description Type Requis ?
action Action à effectuer lorsque l'utilisateur clique sur le bouton d'action. Action Oui

Formulaire

Représente un tableau de champs avec un titre.
Nom Description Type Requis ?
title Titre affiché au-dessus de la présentation du formulaire Chaîne Non
fields Liste des champs en lecture seule du formulaire Répertorier<ReadOnlyField> Oui
formRows Liste des lignes affichées dans le formulaire. Liste<FormRow>  
actions Une liste d'actions Lister<Action> Non
selectAction Action exécutée lorsque le formulaire a été sélectionné. Lorsque les utilisateurs survolent le formulaire, le libellé de l'action s'affiche sous forme d'info-bulle (lorsqu'il est pris en charge par le canal). Action Non
channelExtensions Propriétés d'extension spécifiques au canal associées au message JSONObject Non

FormRow

Nom Description Type Requis ?
columns Liste des colonnes affichées dans la ligne du formulaire. Répertorier <colonne> Oui
selectAction Actions exécutées lorsque le formulaire a été sélectionné. Lorsque les utilisateurs survolent le formulaire, le libellé de l'action s'affiche sous forme d'info-bulle (lorsqu'il est pris en charge par le canal). Action Non
separator La définition de cette propriété sur True insère une ligne de séparation au-dessus du contenu dans la ligne de formulaire. Boolean Non
channelExtensions Propriétés d'extension spécifiques au canal associées au message JSONObject Non

Colonne

Nom Description Type Requis ?
fields Liste des champs qui s'affichent verticalement dans la colonne. Ces champs doivent être des instances ReadOnlyField lorsque la colonne est utilisée dans un élément FormRow dans un élément Form. Les champs peuvent être à la fois en lecture seule et modifiables lorsque FormRow est utilisé dans un élément EditFormMessagePayload. Liste<Champs> Oui
verticalAlignment Alignement vertical de la colonne par rapport aux autres colonnes de la même ligne de formulaire. Chaîne Non
width Détermine la largeur de la colonne dans la ligne de formulaire. Les valeurs autorisées sont auto (valeur par défaut) et stretch. Lorsqu'elle est définie sur stretch, la colonne prend toute la largeur restante après l'affichage des colonnes de largeur automatique. Si plusieurs colonnes sont définies sur stretch, elles divisent uniformément la largeur restante. Chaîne Non
channelExtensions Propriétés d'extension spécifiques au canal associées au message JSONObject Non

Elément de réponse editForm

Cet élément de réponse forme le fichier EditFormMessagePayload qui est relayé par un canal au client.
Nom Description Type Requis ?
type Type d'élément de réponse. editform Oui
title Le titre du formulaire Chaîne Non
items Liste de champs, en lecture seule et modifiables. Liste<field> Oui
formColumns Nombre de colonnes utilisées pour la présentation du formulaire. Par défaut, il y a une colonne. Integer Non
actions Liste des actions liées aux cartes. Répertorier <Action> Non
channelExtensions Ensemble de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale de Facebook Messenger. Carte<ChannelType, JSONObject> Non

Champ textInput

Champ permettant de saisir du texte libre. Vous pouvez définir les caractères minimum et maximum de ce champ et appliquer le formatage à l'aide d'expressions régulières.

Ce fragment de code illustre la collecte des entrées utilisateur en référençant la variable submittedFields générée (une carte).
      - displayType: textInput
        multiLine: true
        defaultValue: "${(submittedFields.value.Description)!''}"
        minLength: 10
        name: Description
        label: Description
        placeholder: What is the expense justification?
        clientErrorMessage: "Description must be 10 characters minimum, 50 characters maximum."
        maxLength: 50
        required: true
      - displayType: textInput
        multiLine: true
        defaultValue: "${(submittedFields.value.Notes)!''}"
        minLength: 10
        name: Notes
        inputStyle: email
        label: Notes
        placeholder: Expense notes (optional)
        maxLength: 50
        required: false
Ce fragment de code illustre la collecte de l'entrée utilisateur par référence à une variable de conteneur composite.
Remarque

L'élément de conteneur composite référencé peut être un STRING.
      - displayType: textInput
        serverErrorMessage: "${(system.entityToResolve.value.validationErrors['Tip'])!''}"
        defaultValue: "${(expense.value.Tip.originalString)!''}"
        displayInForm: "${(((expense.value.TipIncluded.yesno)!'') == 'NO')?then(true, false)}"
        name: Tip
        label: Tip
        placeholder: Enter the tip
        clientErrorMessage: Tip is required
        required: true
Nom Description Type Requis ?
displayType Type du champ. textInput (chaîne) Oui
name Nom unique du champ dans le formulaire de saisie. Ce nom est utilisé comme identificateur lors de l'exécution. Chaîne Oui
label Le libellé du champ Chaîne Non
defaultValue Valeur initiale. Selon l'expression FreeMarker dans le modèle, la valeur est une chaîne lorsque l'élément de conteneur référencé (représenté par myText) n'a pas de valeur ("${(submittedFields.value.myText)!''}"). Chaîne Non
validationRegularExpression Expression régulière qui indique le format de la saisie de texte. Chaîne Non
multiline La définition de cette propriété sur true permet aux utilisateurs d'entrer plusieurs lignes de texte. Boolean Non
minlength Nombre minimal de caractères requis pour valider le champ. Les utilisateurs reçoivent un message d'erreur s'ils saisissent trop peu de caractères. Integer Non
maxLength Nombre maximal ou limite de caractères. Integer Non
inputStyle Format appliqué au client. Les formats sont les suivants :
  • text
  • email
  • url
  • tel
  • password
Le format par défaut est le texte lorsque cette propriété n'a pas été définie.
Chaîne Non
placeholder Conseil décrivant comment utiliser ce champ. Ce texte s'affiche lorsque les utilisateurs n'ont pas encore saisi d'entrée. Par exemple :
What is the expense justification? Enter between 10 and 50 characters.
Chaîne Non
autoSubmit Lorsque la valeur est true, le formulaire est partiellement soumis lorsque l'utilisateur a saisi une valeur pour le champ. Dans FormSubmissionMessagePayload, partialSubmitField est défini sur le nom du champ dans lequel autoSubmit est défini sur true. Nous vous recommandons de configurer la soumission automatique pour les champs dépendant de conditions. Par exemple, définissez cette propriété lorsqu'un champ doit être affiché ou masqué en fonction de la valeur d'un autre champ, ou lorsque les valeurs autorisées d'un champ dépendent de la valeur définie dans un autre champ. En soumettant automatiquement un champ dont dépendent d'autres champs, le formulaire peut être mis à jour immédiatement avec les modifications pertinentes apportées aux champs dépendants. Chaîne Non
required Si la soumission du formulaire nécessite une entrée utilisateur dans ce champ boolean Non
clientErrorMessage Message utilisé par certains clients (MS Teams, Apple Business Messaging) lorsque la validation côté client échoue. Sur Slack, cette propriété est utilisée uniquement lorsque le formulaire modifiable est affiché dans la page de conversation. Il ne s'affiche pas dans une boîte de dialogue modale. Chaîne Non
serverErrorMessage Message d'erreur envoyé au client lorsque la validation côté serveur d'une valeur de champ de formulaire échoue. Lorsque des erreurs de ce type se produisent côté serveur, nous vous recommandons de remplacer le message de formulaire actuel plutôt que d'ajouter un nouveau message à la conversation en configurant la propriété channelExtensions pour indiquer que le dernier message de formulaire doit être remplacé. Chaîne Non
channelExtensions Ensemble de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale de Facebook Messenger. Carte<ChannelType, JSONObject> Non

Champ datePicker

Champ avec un calendrier déroulant qui permet aux utilisateurs de sélectionner un jour, un mois et une année. Les propriétés maxDate et minDate du composant valident la saisie utilisateur.
Remarque

Le canal Slack ne prend pas en charge cette validation des valeurs minimale et maximale.
Ce fragment de code illustre la capture de l'entrée utilisateur à l'aide de la variable submittedFields générée (matrice).
 - displayType: datePicker
        defaultValue: "${(submittedFields.value.Date)!''}"
        name: Date
        maxDate: "${.now?iso_utc[0..9]}"
        label: Expense Date
        placeholder: Pick a date in the past
        clientErrorMessage: Expense date is required and must be in the past.
        required: true
Ce fragment de code explique comment capturer les entrées utilisateur en référençant une variable de conteneur composite.
     - displayType: datePicker
        serverErrorMessage: "${(system.entityToResolve.value.validationErrors['Date'])!''}"
        defaultValue: "${(expense.value.Date.date?number_to_date?iso_utc)!''}"
        name: Date
        maxDate: "${.now?iso_utc[0..9]}"
        label: Expense Date
        placeholder: Pick a date in the past
        clientErrorMessage: Expense date is required and must be in the past.
        required: true
Nom Description Type Requis ?
displayType Type du champ datePicker (chaîne) Oui
id Nom unique du champ dans le formulaire de saisie. Ce nom est utilisé comme identificateur lors de l'exécution. Chaîne Oui
label Libellé descriptif. Chaîne Non
defaultValue Valeur par défaut du champ, au format AAAA-MM-JJ. Le modèle définit cette chaîne comme une expression FreeMarker Apache qui renvoie une chaîne vide lorsque l'élément de conteneur composite référencé (représenté par myDate) a une valeur NULL.
"${(submittedFields1.value.myDate)!''}"
Chaîne Non
minDate Première date de la fourchette de jours autorisés. Le canal Slack ne prend pas en charge cette validation côté client. Chaîne Non
maxDate Dernière date dans la fourchette de jours autorisés. Le modèle définit cette chaîne comme le jour actuel ("${.now?iso_utc[0..9]}"). Le canal Slack ne prend pas en charge cette validation côté client. Chaîne Non
placeholder Description de l'entrée attendue qui s'affiche lorsque l'utilisateur n'a pas encore sélectionné de date. Chaîne Non
autoSubmit Lorsque la valeur est true, le formulaire est partiellement soumis lorsque l'utilisateur a saisi une valeur pour le champ. Dans FormSubmissionMessagePayload, partialSubmitField est défini sur le nom du champ dans lequel autoSubmit est défini sur true. Nous vous recommandons de configurer la soumission automatique pour les champs dépendant de conditions. Par exemple, définissez cette propriété lorsqu'un champ doit être affiché ou masqué en fonction de la valeur d'un autre champ, ou lorsque les valeurs autorisées d'un champ dépendent de la valeur définie dans un autre champ. En soumettant automatiquement un champ dont dépendent d'autres champs, le formulaire peut être mis à jour immédiatement avec les modifications pertinentes apportées aux champs dépendants. Chaîne Non
required Si la soumission du formulaire nécessite une entrée utilisateur dans ce champ boolean Non
clientErrorMessage Message utilisé par certains clients (MS Teams, Apple Business Messaging) lorsque la validation côté client échoue. Sur Slack, cette propriété est utilisée uniquement lorsque le formulaire modifiable est affiché dans la page de conversation. Il ne s'affiche pas dans une boîte de dialogue modale. Chaîne Non
serverErrorMessage Message d'erreur envoyé au client lorsque la validation côté serveur d'une valeur de champ de formulaire échoue. Lorsque des erreurs de ce type se produisent côté serveur, nous vous recommandons de remplacer le message de formulaire actuel plutôt que d'ajouter un nouveau message à la conversation en configurant la propriété channelExtensions pour indiquer que le dernier message de formulaire doit être remplacé. Chaîne Non
channelExtensions Ensemble de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale de Facebook Messenger. Carte<ChannelType, JSONObject> Non

Le champ timePicker

Permet à l'utilisateur de saisir une valeur d'heure dans une plage spécifiée. Les propriétés maxTime et minTime du composant valident la saisie utilisateur.
Remarque

Le canal Slack ne prend pas en charge la validation des valeurs minimale et maximale.
Le champ du sélecteur d'heure lit et écrit la valeur au format 24 heures. Le format d'affichage dans le canal client peut utiliser un format de 12 heures avec une indication AM/PM, mais il doit toujours réécrire une heure formatée sur 24 heures.
Le fragment de code suivant illustre la capture de l'entrée utilisateur à l'aide de la variable submittedFields générée (matrice).
      - displayType: timePicker
        defaultValue: "${(submittedFields.value.Time.value?time.xs?string['hh:mm a'])!''}"
        maxTime: "23:00"
        minTime: "13:00"
        name: Time
        label: Expense Time
        placeholder: What time was the expense?
        clientErrorMessage: This time is outside the limits.
        required: true
Nom Description Type Requis ?
displayType Type du champ timePicker (chaîne) Oui
id Nom unique du champ dans le formulaire de saisie. Ce nom est utilisé comme identificateur lors de l'exécution. Chaîne Oui
label Libellé décrivant les paramètres de sélection d'heure. Chaîne Oui
defaultValue Valeur initiale de ce champ, au format 24 heures. Le modèle définit cette chaîne comme une expression FreeMarker Apache qui renvoie une chaîne vide lorsque l'élément de conteneur composite référencé (représenté par myTime) a une valeur NULL.
"${(submittedFields.value.myTime)!''}"
Chaîne Non
minTime Définit l'heure autorisée la plus ancienne, saisie en tant que HH:MM au format 24 heures. Par exemple, 00:00 Chaîne Non
maxTime Définit la dernière heure autorisée, saisie en tant que HH:MM, au format 24 heures. Par exemple : 13:00. Chaîne Non
placeholder Conseil pour l'entrée. Selon le modèle, l'exemple placeholder est Pick a time in the morning, ce qui reflète les valeurs minTime et maxTime du modèle, à savoir 00:00 et 12:00. Chaîne Non
autoSubmit Lorsque la valeur est true, le formulaire est partiellement soumis lorsque l'utilisateur a saisi une valeur pour le champ. Dans FormSubmissionMessagePayload, partialSubmitField est défini sur le nom du champ dans lequel autoSubmit est défini sur true. Nous vous recommandons de configurer la soumission automatique pour les champs dépendant de conditions. Par exemple, définissez cette propriété lorsqu'un champ doit être affiché ou masqué en fonction de la valeur d'un autre champ, ou lorsque les valeurs autorisées d'un champ dépendent de la valeur définie dans un autre champ. En soumettant automatiquement un champ dont dépendent d'autres champs, le formulaire peut être mis à jour immédiatement avec les modifications pertinentes apportées aux champs dépendants. Chaîne Non
required Si la soumission du formulaire nécessite une entrée utilisateur dans ce champ boolean Non
clientErrorMessage Message utilisé par certains clients (MS Teams, Apple Business Messaging) lorsque la validation côté client échoue. Par exemple, Time must be in the morning. Sur Slack, cette propriété est utilisée uniquement lorsque le formulaire modifiable est affiché dans la page de conversation. Il ne s'affiche pas dans une boîte de dialogue modale. Chaîne Non
serverErrorMessage Message d'erreur envoyé au client lorsque la validation côté serveur d'une valeur de champ de formulaire échoue. Lorsque des erreurs de ce type se produisent côté serveur, nous vous recommandons de remplacer le message de formulaire actuel plutôt que d'ajouter un nouveau message à la conversation en configurant la propriété channelExtensions pour indiquer que le dernier message de formulaire doit être remplacé. Chaîne Non
channelExtensions Ensemble de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale de Facebook Messenger. Carte<ChannelType, JSONObject> Non

Le champ numberInput

Collecte les entrées de nombre dans une plage spécifiée.
      - displayType: numberInput
        minValue: 5
        serverErrorMessage: "${(amountError.value)!''}"
        maxValue: 500
        defaultValue: "${(submittedFields.value.Amount)!''}"
        name: Amount
        label: Amount
        placeholder: Enter the expense amount (do not include currency symbol)
        clientErrorMessage: Amount is required and must be between 5 and 500 characters
Nom Description Type Requis ?
displayType Type du champ numberInput (chaîne) Oui
name Nom unique du champ dans le formulaire de saisie. Ce nom est utilisé comme identificateur lors de l'exécution. Chaîne Oui
label Libellé descriptif de la valeur de date requise par l'utilisateur. Chaîne Non
defaultValue Valeur initiale. Le modèle définit cette chaîne en tant qu'expression FreeMarker Apache qui renvoie une chaîne vide lorsque l'élément de conteneur composite référencé (représenté par myNumber) a une valeur NULL. "${(submittedFields.value.myNumber)!''}" Chaîne Non
maxvalue Le plus grand nombre autorisé. Le canal Slack ne prend pas en charge la validation de valeur minimale ou maximale. Integer Non
minvalue Plus petit nombre autorisé Integer Non
placeholder Conseil décrivant comment utiliser le champ. Ce texte s'affiche lorsque l'utilisateur n'a pas encore saisi de nombre. Chaîne Non
autoSubmit Lorsque la valeur est true, le formulaire est partiellement soumis lorsque l'utilisateur a saisi une valeur pour le champ. Dans FormSubmissionMessagePayload, partialSubmitField est défini sur le nom du champ dans lequel autoSubmit est défini sur true. Nous vous recommandons de configurer la soumission automatique pour les champs dépendant de conditions. Par exemple, définissez cette propriété lorsqu'un champ doit être affiché ou masqué en fonction de la valeur d'un autre champ, ou lorsque les valeurs autorisées d'un champ dépendent de la valeur définie dans un autre champ. En soumettant automatiquement un champ dont dépendent d'autres champs, le formulaire peut être mis à jour immédiatement avec les modifications pertinentes apportées aux champs dépendants. Chaîne Non
required Si la soumission du formulaire nécessite une entrée utilisateur dans ce champ boolean Non
clientErrorMessage Message utilisé par certains clients (MS Teams, Apple Business Messaging) lorsque la validation côté client échoue. Sur Slack, cette propriété est utilisée uniquement lorsque le formulaire modifiable est affiché dans la page de conversation. Il ne s'affiche pas dans une boîte de dialogue modale. Chaîne Non
serverErrorMessage Message d'erreur envoyé au client lorsque la validation côté serveur d'une valeur de champ de formulaire échoue. Lorsque des erreurs de ce type se produisent côté serveur, nous vous recommandons de remplacer le message de formulaire actuel plutôt que d'ajouter un nouveau message à la conversation en configurant la propriété channelExtensions pour indiquer que le dernier message de formulaire doit être remplacé. Chaîne Non
channelExtensions Ensemble de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale de Facebook Messenger. Carte<ChannelType, JSONObject> Non

Le champ singleSelect

Permet aux utilisateurs de sélectionner une valeur unique dans une liste prédéfinie. Vous pouvez définir ce contrôle comme une liste que les utilisateurs peuvent interroger et sélectionner, ou comme un ensemble de boutons radio. Cet élément a un rendu spécifique au canal :
  • Sur le canal Microsoft Teams, cet élément s'affiche toujours sous forme de liste (même lorsque layoutStyle est défini sur radioGroup) car les cartes adaptatives ne prennent pas en charge les boutons radio.
  • Sur le canal Slack, cet élément s'affiche sous forme de liste au lieu d'un groupe radio lorsqu'il existe plus de dix options.
Le fragment de code suivant illustre le remplissage de la liste à l'aide de la variable submittedFields générée (variable de correspondance).
 - displayType: singleSelect
        defaultValue: "${(submittedFields.value.Type)!''}"
        name: Type
        options:
          - iteratorVariable: option
            iteratorExpression: "${expenseType.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
        layoutStyle: list
        label: Expense Type
        placeholder: Select expense type
        clientErrorMessage: Expense type is required
        required: true

Conseil :

Bien que clientErrorMessage soit un attribut facultatif, nous vous recommandons de le définir pour les briques exécutées sur le canal Microsoft Teams car les cartes adaptatives ne génèrent pas de message lorsque la validation côté client échoue.
Ce fragment de code explique comment remplir la liste en référençant une entité de conteneur composite :
     - autoSubmit: true
        displayType: singleSelect
        serverErrorMessage: "${(system.entityToResolve.value.validationErrors['Type'])!''}"
        defaultValue: "${(expense.value.Type.value)!''}"
        name: Type
        options:
          - iteratorVariable: option
            iteratorExpression: "${expenseType.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
        layoutStyle: list
        label: Expense Type
        placeholder: Select expense type
        clientErrorMessage: Expense type is required
        required: true
Nom Description Type Requis ?
displayType Type du champ singleSelect (chaîne) Oui
name Nom unique du champ dans le formulaire de saisie. Ce nom est utilisé comme identificateur lors de l'exécution. Chaîne Oui
label Texte de libellé de champ décrivant le contenu de la liste à sélection unique. Chaîne Oui
defaultValue Option par défaut. Le modèle définit cette valeur de chaîne en tant qu'expression FreeMarker Apache qui renvoie une chaîne vide lorsque l'élément de conteneur composite référencé (représenté par mySingleSelect)) a une valeur NULL. "${(submittedFields.value.mySingleSelect)!''}" Chaîne Non
options Tableau des options disponibles. Le modèle définit ces options de manière statique avec des paires label et value individuelles avec des valeurs de chaîne, mais vous pouvez remplir les options de sélection de manière dynamique à l'aide des propriétés iteratorVariable et iteratorExpression :
        defaultValue: "${(submittedFields.value.Type)!''}"
        name: Type
        options:
          - iteratorVariable: option
            iteratorExpression: "${expenseType.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
Dans ce fragment de code, les valeurs de type de dépense renvoyées par les propriétés type et enum sont séquencées dans la liste à l'aide de l'élément intégré split.
Liste<option> Oui
layoutStyle Comment les options à sélection unique sont présentées dans le formulaire. Ils peuvent être regroupés sous forme de liste (layoutStyle: list) ou sous forme de boutons radio (layoutStyle: radioGroup). Chaîne  
placeholder Conseil décrivant comment utiliser le champ. Elle s'affiche lorsque l'utilisateur n'a pas encore effectué la sélection. Par exemple :
label: 
        placeholder: Select an expense type. You can pick only one.
Cet espace réservé s'affiche uniquement pour l'affichage de la présentation de liste.
Chaîne Non
autoSubmit Lorsque la valeur est true, le formulaire est partiellement soumis lorsque l'utilisateur a saisi une valeur pour le champ. Dans FormSubmissionMessagePayload, partialSubmitField est défini sur le nom du champ dans lequel autoSubmit est défini sur true. Nous vous recommandons de configurer la soumission automatique pour les champs dépendant de conditions. Par exemple, définissez cette propriété lorsqu'un champ doit être affiché ou masqué en fonction de la valeur d'un autre champ, ou lorsque les valeurs autorisées d'un champ dépendent de la valeur définie dans un autre champ. En soumettant automatiquement un champ dont dépendent d'autres champs, le formulaire peut être mis à jour immédiatement avec les modifications pertinentes apportées aux champs dépendants. Chaîne Non
required Si la soumission du formulaire nécessite une entrée utilisateur dans ce champ boolean Non
clientErrorMessage Message utilisé par certains clients (MS Teams, Apple Business Messaging) lorsque la validation côté client échoue. Sur Slack, cette propriété est utilisée uniquement lorsque le formulaire modifiable est affiché dans la page de conversation. Il ne s'affiche pas dans une boîte de dialogue modale. Chaîne Non
serverErrorMessage Message d'erreur envoyé au client lorsque la validation côté serveur d'une valeur de champ de formulaire échoue. Lorsque des erreurs de ce type se produisent côté serveur, nous vous recommandons de remplacer le message de formulaire actuel plutôt que d'ajouter un nouveau message à la conversation en configurant la propriété channelExtensions pour indiquer que le dernier message de formulaire doit être remplacé. Chaîne Non
channelExtensions Ensemble de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale de Facebook Messenger. Carte<ChannelType, JSONObject> Non

Champ multiSelect

Permet aux utilisateurs de choisir une ou plusieurs valeurs dans une liste prédéfinie. Vous pouvez définir ce style comme une liste de sélection que les utilisateurs peuvent interroger ou comme un ensemble de cases à cocher. Cet élément a un rendu spécifique au canal :
  • Sur le canal Microsoft Teams, cet élément s'affiche toujours sous forme de liste (même lorsque layoutStyle est défini sur checkboxes) car les cartes adaptatives ne prennent pas en charge les cases à cocher multisélection.
  • Sur le canal Slack, cet élément s'affiche sous forme de liste au lieu d'un ensemble de cases à cocher multisélection lorsqu'il existe plus de dix options.
Ce fragment de code illustre comment remplir la liste en référençant la variable submittedFields générée (une carte).
 - displayType: multiSelect
        defaultValue: "${(submittedFields.value.Attendees?join(','))!''}"
        name: Attendees
        options:
          - iteratorVariable: option
            iteratorExpression: "${attendee.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
        layoutStyle: list
        label: Attendees
        placeholder: Select one or more attendees

Ce fragment de code illustre le référencement d'une entité de conteneur composite pour remplir la liste.
     - displayType: multiSelect
        serverErrorMessage: "${(system.entityToResolve.value.validationErrors['Attendees'])!''}"
        displayInForm: "${(((expense.value.Type.value)!'') == 'Meal')?then(true, false)}"
        defaultValue: "${(expense.value.Attendees?map(a -> a.value)?join(','))!''}"
        name: Attendees
        options:
          - iteratorVariable: option
            iteratorExpression: "${attendee.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
        layoutStyle: list
        label: Attendees
        placeholder: Select attendees
        clientErrorMessage: Attendees are required when expense type is a Meal
        required: true
Nom Description Type Requis ?
displayType Type du champ multiselect (chaîne) Oui
name Nom unique du champ dans le formulaire de saisie. Ce nom est utilisé comme identificateur lors de l'exécution. Chaîne Oui
label Libellé de champ décrivant le contenu de la liste multiSelect. Chaîne Oui
defaultValue Option par défaut. Le modèle définit cette chaîne comme une expression FreeMarker Apache qui renvoie une chaîne vide lorsque l'élément de conteneur composite référencé (représenté par myMultiSelect) a une valeur NULL.
"${(submittedFields.value.myMultiSelect?join(','))!''}"
List<String> Non
options Tableau des options disponibles. Le modèle définit ces options de manière statique avec des paires label et value individuelles avec des valeurs de chaîne, mais vous pouvez remplir les options de sélection de manière dynamique à l'aide des propriétés iteratorVariable et iteratorExpression :
        defaultValue: "${(submittedFields.value.Attendees?join(','))!''}"
        name: Attendees
        options:
          - iteratorVariable: option
            iteratorExpression: "${attendee.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
List<option> Oui
placeholder Conseil décrivant comment utiliser le champ. Elle s'affiche lorsque l'utilisateur n'a effectué aucune sélection.
label: Attendees
        placeholder: Select one or more attendees
Cet espace réservé s'affiche pour la présentation de liste uniquement. Elle n'est pas disponible pour les dispositions de case à cocher.
Chaîne Non
layoutStyle Disposition des options multiSelect. Les options sont list et checkboxes. Chaîne Non
autoSubmit Lorsque la valeur est true, le formulaire est partiellement soumis lorsque l'utilisateur a saisi une valeur pour le champ. Dans FormSubmissionMessagePayload, partialSubmitField est défini sur le nom du champ dans lequel autoSubmit est défini sur true. Nous vous recommandons de configurer la soumission automatique pour les champs dépendant de conditions. Par exemple, définissez cette propriété lorsqu'un champ doit être affiché ou masqué en fonction de la valeur d'un autre champ, ou lorsque les valeurs autorisées d'un champ dépendent de la valeur définie dans un autre champ. En soumettant automatiquement un champ dont dépendent d'autres champs, le formulaire peut être mis à jour immédiatement avec les modifications pertinentes apportées aux champs dépendants. Chaîne Non
required Si la soumission du formulaire nécessite une entrée utilisateur dans ce champ boolean Non
clientErrorMessage Message utilisé par certains clients (MS Teams, Apple Business Messaging) lorsque la validation côté client échoue. Sur Slack, cette propriété est utilisée uniquement lorsque le formulaire modifiable est affiché dans la page de conversation. Il ne s'affiche pas dans une boîte de dialogue modale. Chaîne Non
serverErrorMessage Message d'erreur envoyé au client lorsque la validation côté serveur d'une valeur de champ de formulaire échoue. Lorsque des erreurs de ce type se produisent côté serveur, nous vous recommandons de remplacer le message de formulaire actuel plutôt que d'ajouter un nouveau message à la conversation en configurant la propriété channelExtensions pour indiquer que le dernier message de formulaire doit être remplacé. Chaîne Non
channelExtensions Ensemble de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale de Facebook Messenger. Carte<ChannelType, JSONObject> Non

Champ à bascule

Présente un commutateur pour deux options. Sur le canal Slack, ce contrôle s'affiche sous forme de cases à cocher.
Remarque

Sur le canal Slack, cet élément s'affiche sous la forme d'une paire de boutons radio.
Ce fragment de code illustre la capture de l'entrée utilisateur en référençant la variable submittedForms générée (une carte).
      - displayType: toggle
        defaultValue: "false"
        name: TipIncluded
        labelOn: Tip
        label: Tip Included?
        valueOff: "false"
        labelOff: No Tip
        valueOn: "true"
Ce fragment de code illustre la capture des entrées utilisateur par référence à une variable de conteneur composite.
      - autoSubmit: true
        displayType: toggle
        defaultValue: "${(expense.value.TipIncluded.yesno)!'YES'}"
        name: TipIncluded
        labelOn: "Yes"
        label: Tip Included?
        valueOff: "NO"
        labelOff: "No"
        required: false
        valueOn: "YES"
Nom Description Type Requis ?
displayType Type du champ toggle (chaîne) Oui
id Nom unique du champ dans le formulaire de saisie. Ce nom est utilisé comme identificateur lors de l'exécution. Chaîne Oui
label Etiquette décrivant ce qui se passe lorsque la bascule est activée. Chaîne Oui
defaultValue Valeur initiale. Si vous voulez que la bascule soit activée initialement, définissez-la sur la valeur valueOn. Le modèle définit cette chaîne en tant qu'expression FreeMarker Apache qui active la bascule lorsque l'élément de conteneur composite référencé (représenté par myToggle) a une valeur NULL.
"${(submittedFields.value.myToggle)!'true'}"
Chaîne Oui
valueOff Valeur lorsque la bascule est désactivée. La valeur par défaut, selon le modèle, est false (valueOff: "false" ). Chaîne Oui
valueOn Valeur lorsque la bascule est activée. La valeur par défaut du modèle est true (value On: "true"). Chaîne Oui
labelOn Libellé de la bascule sur la position Chaîne Non
labelOff Libellé de la position de désactivation de la bascule. Chaîne Non
channelExtensions Ensemble de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale de Facebook Messenger. Carte<ChannelType, JSONObject> Non

Champ de texte

Un élément de champ contient les propriétés suivantes :
Nom Description Type Requis ?
displayType Type d'élément. text (chaîne) Oui
name Nom unique du champ dans le formulaire de saisie. Ce nom est utilisé comme identificateur lors de l'exécution. Chaîne Oui
value Valeur brute du champ Chaîne Oui
width Pourcentage de la largeur totale disponible que l'élément doit occuper dans une présentation de tableau. La largeur restante, à partir de 100 moins les éléments avec une largeur spécifiée, est également divisée sur les éléments sans largeur spécifiée. Integer Non
alignment Alignement de la valeur avec une colonne de tableau. left, center et right. La valeur par défaut est right. Non
channelExtensions Ensemble de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale de Facebook Messenger. Carte<ChannelType, JSONObject> Non

Le champ du lien

Un élément de champ contient les propriétés suivantes :
Nom Description Type Requis ?
displayType Type du champ link (chaîne) Oui
name Nom unique du champ dans le formulaire de saisie. Ce nom est utilisé comme identificateur lors de l'exécution. Chaîne Oui
value Adresse URL. Par exemple : http:www.oracle.com Chaîne Oui
width Pourcentage de la largeur totale disponible que l'élément doit occuper dans une présentation de tableau. La largeur restante, à partir de 100 moins les éléments avec une largeur spécifiée, est également divisée sur les éléments sans largeur spécifiée. Integer Non
alignment Alignement de la valeur avec une colonne de tableau. Les valeurs autorisées sont left, center et right. La valeur par défaut est right. Chaîne Non
channelExtensions Ensemble de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale de Facebook Messenger. Carte<ChannelType, JSONObject> Non

EditFormMessagePayload

Cette charge utile définit le formulaire modifiable qui est envoyé aux canaux.
Nom Description Type Requis ?
type Type de charge utile du message. editForm (chaîne) Oui
headerText Texte d'en-tête affiché au-dessus du formulaire. Chaîne Non
footerText Texte affiché sous le formulaire et les actions, mais au-dessus des actions globales. Chaîne Non
title Le titre du formulaire Chaîne Non
formRows Liste des lignes affichées dans le formulaire. Liste<FormRow> Non
fields Liste de champs, en lecture seule et modifiables. Liste<field> Oui
formColumns Nombre de colonnes utilisées pour la présentation du formulaire. Par défaut, il y a une colonne. Integer Non
actions Une liste d'actions. Répertorier <Action> Non
globalActions Liste des actions globales. Le rendu de ces actions est spécifique au canal. Par exemple, les actions sur Facebook sont affichées par reply_actions. Répertorier <Action> Non
channelExtensions Ensemble de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale de Facebook Messenger. Carte<ChannelType, JSONObject> Non
Soumettre automatiquement un champ
Lorsque la propriété autoSubmit d'un champ est définie sur true, le client envoie une correspondance FormSubmissionMessagePayload avec la correspondance submittedField contenant les valeurs de champ valides entrées jusqu'à présent ou uniquement la valeur du champ soumis automatiquement (l'implémentation est propre au canal). Les champs qui ne sont pas encore définis (qu'ils soient requis ou non) ou les champs qui enfreignent une validation côté client ne sont pas inclus dans la correspondance submittedField. Si le champ soumis automatiquement lui-même contient une valeur qui n'est pas valide, FormSubmissionMessagePayload n'est pas envoyé et le message d'erreur client s'affiche à la place.
Remarque

Microsoft Teams ne prend pas en charge la soumission automatique.

SubmitFormAction

Nom Description Type Requis ?
type Type d'action submitForm (chaîne) Oui
postback Charge utile de postback, qui peut inclure une propriété d'action pour déclencher la navigation. Nous recommandons que la valeur de cette propriété soit extraite de l'objet de postback FormSubmissionMessagePayload. JSONObject Non
variable Nom de la variable qui stocke les valeurs soumises. Ces valeurs se trouvent dans FormSubmissionMessagePayload. Chaîne Non
processingMethod Instructions de traitement utilisées par le composant Résoudre entités pour les valeurs de champ soumises. Vous pouvez la définir sur FormSubmissionMessagePayload, mais vous pouvez également la définir :
  • mapVariable
  • separateVariables
  • compositeBag
.
Chaîne Oui
label Libellé de l'action d'affichage. Chaîne Oui – Vous devez indiquer au moins une valeur label ou imageUrl.
imageUrl Image de l'action d'affichage. Chaîne Vous devez indiquer au moins une valeur label ou imageUrl.
channelExtensions Ensemble de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale de Facebook Messenger. Carte<ChannelType, JSONObject> Non
FormSubmissionMessagePayload
Ces données traitées sont renvoyées par les canaux vers le pipeline ODA lorsque l'utilisateur a soumis un formulaire en cliquant sur un bouton SubmitFormAction. Il possède les propriétés suivantes :
Nom Description Type Requis ?
type Type de la charge utile. "formSubmission" (valeur String) Oui
submittedFields Paires clé-valeur des valeurs de champ soumises. La clé est le nom (ID) du champ. Map<String, Objet> Oui
postback Charge utile de postback, qui peut inclure une propriété d'action pour déclencher la navigation. Nous recommandons que la valeur soit extraite de SubmitFormAction JSONObject Non
partialSubmitField Nom du champ qui déclenche la soumission d'un formulaire partiel. Les champs pour lesquels la soumission automatique est activée (autoSubmit: true) peuvent déclencher une soumission partielle de formulaire. Chaîne Non

Mettre à jour le formulaire d'entrée

Lorsque l'utilisateur final soumet le formulaire, soit parce que autosubmit est défini sur true pour un champ, soit parce que l'utilisateur a appuyé sur le bouton d'action submitForm, il peut arriver que l'utilisateur n'ait pas fourni toutes les informations requises, soit parce que certaines valeurs de champ contiennent une valeur non valide. Dans ce cas, le moteur de dialogue envoie un nouveau EditFormMessagePayload, mais ce message doit remplacer le message de formulaire précédent. Pour demander au canal client de remplacer le message de formulaire précédent, au lieu d'ajouter un nouveau message de formulaire à la conversation, configurez la propriété d'extension de canal replaceMessage comme suit :
- channel: ${system.channelType}
  properties:
    replaceMessage: "${system.message.messagePayload.type == 'formSubmission'}"
Lors de l'exécution, cette propriété est ajoutée à l'élément channelExtensions de niveau racine de la charge utile de composant de réponse commun :
...,
"channelExtensions": { "replaceMessage": "true"}

TableMessagePayload

Présente les données sous forme de tableau et de formulaire.
Nom Description Type Requis ?
type Type de charge utile du message "table" Oui
headings Liste des en-têtes de colonne de table Liste<TableHeading> Oui
rows Liste de lignes de table Liste<Ligne> Oui
forms Liste de formulaires Liste Oui
formColumns Nombre de colonnes utilisées dans la présentation du formulaire. Valeur par défaut : 1. Integer Oui
paginationInfo Informations de pagination pouvant être utilisées pour afficher les boutons de configuration précédents ou suivants PaginationInfo Oui

Ligne

Nom Description Type Requis ?
fields Liste de champs en lecture seule Répertorier le <champ ReadOnly> Oui
selectAction Actions exécutées lorsque le formulaire a été sélectionné. Lorsque les utilisateurs survolent le formulaire, le libellé de l'action s'affiche sous forme d'info-bulle (lorsqu'il est pris en charge par le canal). Action Non
channelExtensions Propriétés d'extension spécifiques au canal associées au message Carte<ChannelType>,JSONObject Non

TableHeading

Un en-tête de tableau contient les propriétés suivantes :
Nom Description Type Requis ?
label Libellé d'en-tête Chaîne Oui
width Largeur du libellé de titre Chaîne Non
alignment Alignement de la valeur de colonne (left, right ou center). La valeur par défaut est right. Chaîne Non
channelExtensions Ensemble de propriétés d'extension propres au canal.
Map<ChannelType>, JSONObject>
Non

PaginationInfo

Représente les informations de pagination des résultats dans les objets Table, Form et Table-Form.

Nom Description Type Requis ?
totalCount Nombre total de résultats nombre Oui
rangeSize Taille de plage des résultats par page nombre Oui
status Message de statut de pagination chaîne Oui
currentRangeSize Taille de la plage de résultats incurvée nombre Oui
rangeStart Décalage de début de la plage de résultats actuelle nombre Oui
nextRangeSize Taille de la prochaine plage de résultats nombre Oui
hasPrevious Indique s'il existe un ensemble de résultats précédent boolean Oui
hasNext Indique s'il existe un jeu de résultats suivant boolean Oui

tableFormMessageLayout

Présente les données sous forme de tableau et de formulaire.
Nom Description Type Requis ?
type Type de charge utile du message "tableForm" Oui
headings Liste des en-têtes de colonne de table Liste<TableHeading> Oui
rows Liste de lignes de table Liste<Ligne> Oui
forms Liste de formulaires Liste Oui
formColumns Nombre de colonnes utilisées dans la présentation du formulaire. Valeur par défaut : 1. Integer Oui
showFormButtonLabel Libellé du bouton utilisé pour afficher la présentation du formulaire pour une ligne spécifique. Chaîne Oui
paginationInfo Informations de pagination pouvant être utilisées pour afficher les boutons de configuration précédents ou suivants PaginationInfo Oui

Elément de réponse dataSet

L'élément de réponse dataSet vous permet de créer des tables et des formulaires. Elle inclut les propriétés suivantes.

Propriété Description Requis ?
layout Style de présentation utilisé pour afficher dataSet. Les valeurs autorisées sont table, form et tableForm. Oui
formColumns Nombre de colonnes utilisées pour afficher les éléments dans une présentation de formulaire. Applicable uniquement lorsque la présentation est form ou tableForm. Définir par défaut sur 1. Non
showFormButtonLabel Libellé utilisé pour ouvrir la boîte de dialogue de formulaire dans un style de présentation tableForm. Cette option est actuellement utilisée uniquement sur les canaux Slack. Les autres canaux prennent en charge le développement de la ligne de tableau pour afficher les éléments supplémentaires dans une présentation de formulaire Non
data Permet de définir une entrée de données dans dataSet. Reportez-vous à la section DataSet data Properties. Oui

Propriétés des données DataSet

La propriété data de l'élément de réponse dataSet inclut les sous-propriétés suivantes.

Propriété Description Requis ?
iteratorExpression Définit une expression Freemarker qui renvoie une liste d'entrées à répéter, ce qui vous permet d'ajouter dynamiquement plusieurs entrées de données à dataSet. Non
iteratorVariable Spécifie le nom de la variable d'itérateur que vous pouvez utiliser pour référencer l'entrée de données en cours dans la liste des entrées de données itérées. Non
rangeSize Nombre d'entrées de données qui seront affichées simultanément lorsque vous aurez spécifié les propriétés iteratorExpression et iteratorVariable. Non
visible Détermine le mode d'affichage des messages par saisie utilisateur et canal. Reportez-vous à Propriété visible. Non
formTitle Titre utilisé pour la boîte de dialogue de formulaire dans la présentation tableForm dans le canal Slack. Valeur par défaut : View details. Non
items Eléments de données à afficher pour chaque saisie de données. Reportez-vous à la section DataSet Data Item Properties. Oui

DataSet Propriétés des éléments de données.

Propriété Description Requis ?
width Pourcentage (exprimé sous forme d'entier) de la largeur totale disponible que l'élément doit utiliser dans une présentation de tableau. La largeur restante, à partir de 100 moins les éléments avec une largeur spécifiée, est également divisée sur les éléments sans largeur spécifiée. Non
alignment Alignement de la valeur avec une colonne de tableau. Les valeurs autorisées sont left, center et right. La valeur par défaut est left. Non
displayType Type d'affichage de l'élément. Les valeurs autorisées sont text et link. La valeur par défaut est text. Non
linkLabel Libellé utilisé pour le lien hypertexte lorsque le type d'affichage est défini sur link. La valeur par défaut est la valeur de la propriété value de l'élément. Non
displayInTable Définit si l'élément doit être affiché sous forme de colonne dans le tableau. Cette propriété est uniquement applicable dans la disposition tableForm. Valeur par défaut : false. Non
displayInForm Définit si l'élément doit être affiché en tant que champ dans le formulaire. Cette propriété est uniquement applicable dans la disposition tableForm. Valeur par défaut : false. Non
label Libellé de l'élément de données. Oui
value Valeur de l'élément de données. Oui

Variable system.entityToResolve

La variable system.entityToResolve fournit des informations sur le statut actuel du processus de résolution d'entité, tel qu'exécuté par les composants Résoudre les entités et Réponse commune. Vous référencez généralement les propriétés de cette valeur de variable dans les métadonnées du composant Réponse commune lorsque vous souhaitez personnaliser les messages. Vous pouvez l'utiliser pour définir la logique du message d'erreur d'une entité, ou pour diverses propriétés appartenant aux composants Résoudre les entités et Réponse commune. Ajoutez les propriétés suivantes pour renvoyer la valeur d'entité actuelle :
  • userInput
  • prompt
  • promptCount
  • updatedEntities
  • outOfOrderMatches
  • disambiguationValues
  • enumValues
  • needShowMoreButton
  • rangeStartVar
  • nextRangeStart
Vous pouvez également référencer les propriétés dans les expressions FreeMarker qui utilisent les propriétés d'élément de conteneur telles que prompt, errorMessage et les règles de validation.
Voici un exemple d'utilisation de cette variable pour renvoyer la saisie utilisateur actuelle dans le message d'erreur d'une entité :
Sorry,'${system.entityToResolve.value.userInput!'this'}' is not a valid pizza size.
Voici un exemple d'utilisation de diverses définitions de system.entityToResolve. Parmi ces définitions se trouve un message défini pour la propriété text, qui confirme la mise à jour d'une valeur d'entité précédemment définie à l'aide d'une directive Apache FreeMarker list et de la propriété updatedEntities.
    metadata:
      responseItems:        
      - type: "text" 
        text: "<#list system.entityToResolve.value.updatedEntities>I have updated <#items as ent>${ent.description}<#sep> and </#items>. </#list><#list system.entityToResolve.value.outOfOrderMatches>I got <#items as ent>${ent.description}<#sep> and </#items>. </#list>"
      - type: "text" 
        text: "${system.entityToResolve.value.prompt}"
        actions:
        - label: "${enumValue}"
          type: "postback"
          iteratorVariable: "system.entityToResolve.value.enumValues"
Pour les actions globales, cette variable contrôle l'action globale Afficher plus avec les propriétés needShowMoreButton, rangeStartVar et nextRangeStart :
        globalActions: 
        - label: "Show More"
          type: "postback" 
          visible:
            expression: "${system.entityToResolve.value.needShowMoreButton}"
          payload:
            action: "system.showMore"
            variables: 
              ${system.entityToResolve.value.rangeStartVar}: ${system.entityToResolve.value.nextRangeStart} 
        - label: "Cancel"
          type: "postback" 
          visible:
            onInvalidUserInput: true
          payload:
            action: "cancel"
Le libellé Afficher plus doit inclure une valeur system.showMore (action: "system.showMore"). Sinon, il ne fonctionne pas.

Validation de messages utilisateur

Les composants de réponse communs valident la valeur de texte libre fournie par l'utilisateur qui est définie pour la propriété variable. Par exemple, lorsque la propriété variable est définie en tant que type primitif (string, boolean, float, double), ces composants tentent de rapprocher la valeur de l'un des types primitifs. Lorsque la propriété variable est définie pour une variable de type d'entité, ces composants appellent le moteur de traitement du langage naturel pour résoudre la valeur sur l'une des entités. Cependant, lorsque ces composants ne peuvent pas valider une valeur, votre bot peut afficher un message d'erreur. En référençant la variable system.invalidUserInput, vous pouvez ajouter un message d'erreur conditionnel aux réponses de votre bot. Cette variable est une valeur booléenne, vous pouvez donc l'utiliser comme condition avec la directive FreeMarker if afin d'afficher le message uniquement lorsqu'un utilisateur saisit une valeur non valide. Sinon, le message est masqué. L'état AskPizzaSize du CrcPizzaBot référencé dans le snippet suivant illustre cette situation en ajoutant cette variable en tant que condition dans un modèle FreeMarker évalué par la directive if. Puisqu'elle est définie sur true, le bot ajoute un message d'erreur au message standard ( Quelle taille voulez-vous ?) lorsque l'utilisateur saisit une valeur non valide.
metadata:
  responseItems:
  - type: "text"
    text: "<#if system.invalidUserInput == 'true'>Invalid size, please try again.\
      \ </#if>What size do you want?"
    name: "What size"
    separateBubbles: true