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 comment 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 particuliers des messages texte, liste, carte ou fichier joint produits par ce composant.
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 Obligatoire?
responseItems Liste des éléments de réponse, chacun ayant généré un nouveau message envoyé au client de clavardage (ou 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 les éléments de réponse en utilisant ces valeurs :
  • text-Bulles de texte (propriété text) pouvant inclure une liste de boutons généralement affichés sous forme de boutons.

    Dans le cas des entités composites (c'est-à-dire que la propriété variable nomme une variable d'entité composite), vous pouvez utiliser une invite d'expression FreeMarker pour demander une valeur pour l'entité courante ( "${system.entityToResolve.value.prompt}").

  • cards-Série de cartes qui défilent horizontalement ou verticalement.

  • attachment- Image, audio, vidéo ou fichier joint que les utilisateurs peuvent charger ou télécharger.

  • editForm-Un formulaire interactif.
  • form
  • dataSet
Oui
globalActions Liste d'actions globales, c'est-à-dire qui ne sont pas spécifiques à un élément de réponse. Ces actions sont généralement affichées au bas de la fenêtre de clavardage. Dans Facebook Messenger, par exemple, ces options sont appelées réponses rapides. Non
keywords Liste de mots clés correspondant à ceux entrés par un utilisateur pour les données utiles de republication correspondantes. Les mots clés prennent en charge les canaux textuels où les boutons d'action ne s'affichent pas. Non
Vous configurez également les métadonnées pour les différents éléments de réponse, tels que les messages textuels et les messages avec carte ou avec fichier joint.
Propriété Description Obligatoire?
type Type d'élément de réponse qui détermine le format du message. Vous pouvez définir un message en tant que text, attachment ou cards. Oui
name Nom de l'élément de réponse utilisé à l'interne. Il n'est pas utilisé lors de l'exécution. Non
iteratorVariable Ajoute de manière dynamique plusieurs éléments de texte, mot clé ou fichier joint à la réponse en répétant les éléments de variable. Non
iteratorExpression Expression FreeMarker utilisée pour afficher les valeurs d'un tableau imbriqué dans la variable spécifiée par la propriété iteratorVariable.

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

Non
visible Détermine la manière dont les messages sont affichés suivant l'entrée et le canal de l'utilisateur. Voir La propriété visible. Non
rangeStart Si vous avez spécifié une valeur iteratorVariable, vous pouvez créer un sous-ensemble d'éléments de réponse en combinant les propriétés rangeStart et rangeSize. Vous pouvez entrer une valeur codée de façon permanente ou utiliser une expression FreeMarker référençant une variable de flux de dialogue qui contient le début de l'intervalle. En utilisant une variable rangeStart, vous pouvez ensuite passer à la page du jeu de données suivant en définissant la variable rangeStart dans les données utiles 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 affichés comme indiqué par les propriétés iteratorVariable et rangeStart. Non
channelCustomProperties Liste des propriétés qui déclenchent des fonctions propres à un canal. Étant donné que ces fonctions sont propres à la plate-forme, elles ne font pas partie du groupe de pages Réponse commune. Elles ne peuvent donc pas être contrôlées par les propriétés de niveau racine ou élément de réponse du groupe. Vous pouvez trouver un exemple de cette propriété dans l'état OrderPizza de CrcPizzaBot.
channelCustomProperties:
          - channel: "facebook"
            properties:
              top_element_style: "large"
Pour des informations détaillées sur l'utilisation de channelCustomProperties et sur les propriétés disponibles pour chaque canal, voir Extensions propres au canal.
Non

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

Vous pouvez créer des raccourcis pour des actions en définissant des propriétés de mot clé et d'étiquette. Par exemple, ils permettent aux utilisateurs d'entrer S pour Small
.
L'extrait de code suivant illustre comment un jeu 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 Obligatoire?
keyword Liste de mots clés qui déclenchent les données utiles de republication définies par la propriété payload. Vous pouvez utiliser une expression FreeMarker pour retourner les mots clés que la propriété iteratorVariable génère à partir des entités de liste de valeurs à l'aide des propriétés type et enumValues (iteratorVariable: "pizzaSize.type.enumValues"). Oui
label Étiquette de l'action, qui peut être une chaîne de texte ou une expression Apache FreeMarker. Par exemple, une expression qui indique un mot clé de deux lettres apparaît comme suit :

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

Pour prendre en charge plusieurs langues, utilisez une expression Apache FreeMarker qui référence un ensemble de ressources.
Non
skipAutoNumber Réglez à true pour supprimer la numérotation automatique d'un élément de clé lorsque l'option Enable Auto Numbering on Cards (Activer la numérotation automatique des cartes) est définie au niveau de l'assistant numérique ou de la compétence. Non
visible Détermine la manière dont les messages texte sont affichés selon l'entrée et le canal d'utilisateur. Voir La propriété visible Non
iteratorVariable Ajoute de manière dynamique plusieurs mots clés en passant en boucle sur les éléments stockés dans la variable indiquée. Par exemple, iteratorVariable: "pizzaSize.type.enumValues". Non
iteratorExpression Expression FreeMarker utilisée pour afficher les valeurs d'un tableau imbriqué dans la variable spécifiée par la propriété iteratorVariable.

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

payload Données utiles de republication, qui ont les propriétés suivantes.
  • action—Action cible.
  • <variable names>-Définit des valeurs pour les variables.
Vous devez définir au moins une de ces propriétés. Voir Propriétés de données utiles.
 

Extraire des mots clés des messages

Le composant déclenche une republication lorsque les utilisateurs entrent un nombre, mais vous pouvez étendre votre compétence pour qu'elle prenne en charge une entrée plus générale telle que La première ou essayons la une. 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, c'est à quoi cela peut ressembler dans 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 l'intervalle courant. Il est réglé à la dernière pizza actuellement affichée, selon le nombre de fois où le client a entré "more".

La propriété visible

Définissez l'affichage selon l'entrée et le canal d'utilisateur à l'aide de la propriété visible facultative.
Propriété Description Obligatoire?
expression Directive Apache FreeMarker qui montre ou masque conditionnellement le texte, la carte ou le fichier joint. 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 une liste séparée par des virgules de types de canal pour lesquels le texte, la carte ou le fichier joint doivent être affichés (include) ou masqués (exclude). Les valeurs de canal possibles sont :
  • 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 le fichier joint lorsque l'entrée de l'utilisateur est valide (value=false) ou non valide (value=true). Non
onDisambiguation Lorsque true, affiche uniquement l'élément de réponse, la carte ou l'action 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 d'entité composite. Ajoutez une liste séparée par des virgules de noms d'élément d'entité composite 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 d'un composant (par exemple, les actions de réponse rapide de Facebook). Vous ne pouvez pas configurer d'actions pour les messages avec fichier joint.

Propriété Description Obligatoire?
type Type d'action :
  • postback-Retourne un objet JSON qui contient l'état, l'action et les variables.

  • share—Ouvre une boîte de dialogue de partage dans le client de messagerie et permet aux utilisateurs de partager des bulles de messages avec leurs amis.

  • call—Appelle le numéro de téléphone indiqué dans les données utiles.

  • url—Ouvre l'URL indiquée dans les données utiles du 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 courant. Sur Facebook Messenger, l'emplacement courant n'est pas pris en charge pour les réponses textuelles ou les réponses avec carte. Il est pris en charge uniquement pour une réponse rapide. Pour plus d'informations, voir la documentation sur la plate-forme Facebook Messenger.

Oui
label Étiquette de l'action. Pour localiser cette étiquette, vous pouvez utiliser une expression FreeMarker pour référencer une entrée dans l'ensemble de ressources de votre robot. Oui
iteratorVariable Option permettant d'ajouter plusieurs actions en passant en boucle sur les éléments stockés dans la variable spécifié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 spécifiée par la propriété iteratorVariable.

Par exemple, si vous avez réglé la valeur de la propriété iteratorVariable à "team" et que cette variable comporte un élément nommé members dont vous voulez afficher les valeurs, vous utilisez 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é pour afficher une icône de bouton de réponse rapide Facebook (qui est une action globale). Non
skipAutoNumbering Lorsque cette propriété est réglée à true, elle exclut une action de republication individuelle de la numérotation automatique. Vous pouvez utiliser cette propriété pour une réponse textuelle ou une réponse avec carte. Non
channelCustomProperties Liste de propriétés dont certaines déclenchent des fonctionnalités spécifiques à un canal non contrôlées par les propriétés d'action standard. Vous pouvez trouver un exemple dans l'état OrderPizza de CrcPizzaBot. Non
name Nom qui identifie l'action sur la plate-forme de l'assistant numérique. Ce nom est utilisé à l'interne et ne s'affiche pas dans le message. Non
visible Détermine le mode d'affichage des fichiers joints suivant l'entrée et le canal d'utilisateur. Voir La propriété visible. Non
payload Objet de données utiles pour les éléments de réponse call, url et postback. Voir Propriétés de données utiles. Non

Propriétés de données utiles

Propriété Description Obligatoire?
action Transition action déclenchée lorsque l'utilisateur choisit cette action. Non
variables Définit les valeurs des variables lorsque vous réglez le type d'action à postback et ajoutez des propriétés de données utiles nommées pour les variables. Lorsque l'utilisateur touche l'action, les variables sont réglées aux valeurs spécifiées par cette propriété. Non
url URL du site Web qui s'ouvre lorsque les utilisateurs touchent cette action. Cette propriété est requise pour le type d'action url.
phoneNumber Numéro de téléphone appelé lorsqu'un utilisateur touche cette action. Cette propriété est requise pour le type d'action call.

Rendu des actions sans republication sur les canaux textuels

Quelques points à noter pour ces propriétés de métadonnées d'action pour les composants de réponse commune.

  • Si le canal textuel prend en charge les hyperliens, vous pouvez les utiliser à la place des boutons lorsque le type de l'action globale est url ou call.

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

Conseil :

Il n'est pas possible de numéroter les actions sans republication comme url et call, car elles n'ont pas été 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 robot peut sembler incohérent car seules certaines options sont numérotées.
Image d'exécution d'une numération sans republication et avec republication.
À l'aide de la trousse SDK, vous pouvez créer une sortie plus cohérente en désactivant la numérotation automatique pour la republication. 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": { ...}
    }
  ]
}

Élément de réponse textuelle

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

Propriété Description Obligatoire?
text Texte qui invite l'utilisateur. Oui
iteratorExpression Expression FreeMarker utilisée pour afficher les valeurs d'un tableau imbriqué dans la variable spécifiée par la propriété iteratorVariable.

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

 
iteratorVariable Ajoute de manière dynamique plusieurs éléments de texte, mot clé ou fichier joint à la réponse en répétant les éléments de variable. Non
footerText Texte affiché au bas du message (au-dessous des actions de texte et de bouton, le cas échéant). Ajoutez un pied de page pour améliorer la sortie sur les canaux textuels. Comme indiqué dans la rubrique Pieds de page, vous pouvez utiliser des expressions FreeMarker pour définir le texte du pied de page pour les canaux textuels. Non
separateBubbles Vous pouvez définir cette propriété si vous définissez également la propriété iteratorVariable. Lorsque cette propriété est réglée à true, chaque élément de texte est envoyé sous forme de message distinct, comme Pizzas et Pastas dans les états ShowMenu et OrderPizza de CrcPizzaBot. Si vous la réglez à false, un seul message texte, dont chaque élément débute sur une nouvelle ligne, est envoyé. Non
visible Détermine la manière dont les messages texte sont affichés selon l'entrée et le canal d'utilisateur. Voir La propriété visible. Non
actions Action de republication. Pour prendre en charge le texte seul, vous pouvez définir des mots clés. Non
Pour voir un exemple de réponse textuelle avec actions, consultez les métadonnées de l'état showMenu de CrcPizzaBot : Comme il désigne postback comme une action, il permet à la compétence de gérer le comportement inattendu de l'utilisateur, par exemple la sélection d'un élément dans un ancien message au lieu du 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"

Élément de réponse avec carte

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

Propriété Description Obligatoire?
cardLayout Disposition de 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 s'affiche en tant que sous-titre. Non
imageUrl URL de l'image, qui s'affiche sous le sous-titre. Non
cardUrl URL d'un site Web. Elle s'affiche sous forme d'hyperlien sur la carte. Les utilisateurs touchent ce lien pour l'ouvrir. Non
iteratorExpression Expression FreeMarker utilisée pour afficher les valeurs d'un tableau imbriqué dans la variable spécifiée par la propriété iteratorVariable.

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

 
iteratorVariable Ajoute de manière dynamique plusieurs cartes à la réponse en passant en boucle sur les éléments stockés dans la variable que vous indiquez pour cette propriété. Même si vous définissez 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 avec une expression comme ${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 spécifié une valeur iteratorVariable, vous pouvez créer un sous-ensemble de cartes en combinant les propriétés rangeStart et rangeSize. Vous pouvez entrer une valeur codée de façon permanente ou utiliser une expression FreeMarker référençant une variable qui contient le début de l'intervalle. En utilisant une variable rangeStart, vous pouvez ensuite passer à la page du jeu de données suivant en définissant la variable rangeStart dans les données utiles d'une option de navigation. Non
rangeSize Nombre de cartes affichées comme indiqué par les propriétés iteratorVariable et rangeStart. Non
visible Détermine le rendu des étiquettes d'action selon l'entrée et le canal d'utilisateur. Voir La propriété visible. Non

Vous pouvez affecter un jeu d'actions spécifiques à une carte particulière ou une liste d'actions jointes à la fin de la liste de cartes.

L'état de CrcPizzaBot OrderPizza inclut une définition d'élément de réponse avec carte, comme illustré dans l'extrait 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')}"

Rendu des cartes sur les canaux textuels

Les composants de réponse communs affichent les réponses sous forme de cartes. Lorsque votre compétence est exécutée sur un canal textuel, certaines propriétés d'élément de réponse avec carte se comportent différemment. Voici quelques points à garder à l'esprit.

  • Le défilement vertical ou horizontal n'est pas possible (comportements définis par l'option cardLayout). Toutes les cartes sont affichées 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 nouvelle ligne. Vous pouvez numéroter la propriété title de la carte.

  • Les hyperliens sont toujours pris en charge dans les canaux textuels. L'adresse configurée pour la propriété cardUrl est affichée dans la bulle, et les propriétés title et description sont séparées par un caractère de nouvelle ligne.

  • Les images spécifiées par la propriété imageURL sont rendues.

  • Le texte de l'étiquette des boutons d'action est affiché (mais les boutons eux-mêmes ne sont pas rendus). Les utilisateurs peuvent entrer le texte ou, si la numérotation automatique est activée, le numéro correspondant pour des raisons pratiques.


Optimiser les cartes sur des canaux textuels avec des mots clés

La plupart des cartes comportent une seule action, comme le bouton Order Now (Commander maintenant) de CRCPizzaBot et une action globale telle que More (Plus) pour charger la carte suivante dans le carrousel. Comme illustré dans la rubrique Rendu des cartes sur les canaux textuels?, l'étiquette de chaque action est numérotée automatiquement lorsque la compétence est exécutée sur des canaux de SMS ou textuels. Dans ces canaux, un jeu de cartes est représenté dans une bulle unique, ce qui peut devenir long et donc difficile à lire. Vous pouvez éviter ce problème en configurant des actions de republication qui ne sont pas associées aux étiquettes d'action, mais exécutées par des mots clés utilisateur (1,2,3, cheese ou more, par exemple).


Description de card-text-only.png ci-dessous
Description de l'illustration cards-text-only.png

Vous pouvez masquer les étiquettes d'action lorsque votre compétence est exécutée sur des canaux textuels à l'aide de ces directives générales.

Dans la propriété metadata :
  • Définissez la propriété keywords. Dans l'extrait de code suivant de CRCPizzaBot, l'expression ${pizza.name} définie pour la propriété keyword définit 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 ajoutés uniquement lorsque la variable textOnly est vraie.

Dans les métadonnées card :
  • Définissez la propriété title. Dans l'extrait de code suivant, une expression utilise la variable FreeMarker index pour ajouter un nombre en préfixe du titre (retourné par ${pizzas.name} lorsque la valeur de la variable textOnly est true). Cela signifie que lorsque le client entre more, la compétence charge une autre bulle de message contenant le groupe suivant de pizzas en 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 l'extrait de code suivant, les actions de carte ("Order" et "More Pizzas") ne sont affichées que lorsque la valeur de la variable textOnly est 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 s'affiche uniquement lorsque la valeur de la variable textOnly est 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>"

Élément de réponse avec fichier joint

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

Propriété Description Obligatoire?
attachmentType Type de fichier joint : image, audio, video et file (fichier). Oui
attachmentURL URL ou source de téléchargement du fichier joint. Oui
L'état Confirmation de CrcPizzaBot utilise un élément de réponse avec fichier joint pour afficher la photo de la commande, photo différente de l'élément présenté 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 représente un élément que l'utilisateur peut sélectionner.
Le nom Description Type Obligatoire?
type Type d'action chaîne Oui
label Texte de l'étiquette descriptive de l'action. chaîne Au moins un élément label ou imageUrl doit être inclus.
imageUrl Image de l'action chaîne Au moins une propriété label ou imageUrl unique doit être incluse.
style Style de rendu du bouton "primary", "danger", "default" Non
displayType Rendu 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 :
Le nom Description Type Obligatoire?
displayType Type de champ String Non
label Étiquette du champ String Oui
channelExtensions Jeu de propriétés d'extension propres au canal. Map<ChannelType, JSONObject> Non
marginTop Quantité d'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 l'étiquette de champ. Les valeurs autorisées sont small, medium (valeur par défaut) et large. String Non
labelFontWeight Poids de police utilisé pour l'étiquette de champ. Les valeurs autorisées sont light, medium (valeur par défaut) et en gras. String Non
displayInTable Expression FreeMarker booléenne qui vous permet d'inclure conditionnellement un champ dans la disposition de table dans un élément de réponse dataSet. String Non (par défaut, true)
displayInForm Expression FreeMarker booléenne qui vous permet d'inclure conditionnellement un champ dans un élément de réponse editForm ou dans la disposition de formulaire d'un élément de réponse dataSet String Non (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 :
Le nom Description Type Obligatoire?
value Valeur du champ chaîne Oui
width Pourcentage suggéré de la largeur totale disponible que le champ doit occuper dans une disposition de tableau. nombre Non
alignment Alignement de la valeur dans une colonne de table. L'alignement par défaut est right. "left", "center" et "right" Non
Note

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 les données utiles du message.
TextField
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 Obligatoire?
truncateAt Position à laquelle le texte long 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 légères, moyennes (valeur par défaut) et en gras. 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 Obligatoire?
linkLabel Étiquette utilisée pour le lien hypertexte Chaîne Non
imageUrl URL de l'image qui ouvre un lien lorsque l'utilisateur clique 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 :
Le nom Description Type Obligatoire?
mediaType Type de média du 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 :
Le nom Description Type Obligatoire?
action Action qui doit être effectuée lorsque l'utilisateur clique sur le bouton d'action. Action Oui

Formulaire

Représente un tableau de champs avec un titre.
Le nom Description Type Obligatoire?
title Titre affiché au-dessus de la disposition du formulaire Chaîne Non
fields Liste des champs en lecture seule dans le formulaire Liste<ReadOnlyField> Oui
formRows Liste des rangées affichées dans le formulaire. Lister<FormRow>  
actions Liste des actions Lister<Action> Non
selectAction Action exécutée lorsque le formulaire a été sélectionné. Lorsque les utilisateurs positionnent le pointeur de la souris sur le formulaire, l'étiquette de l'action s'affiche sous forme d'infobulle (lorsqu'elle est prise en charge par le canal). Action Non
channelExtensions Propriétés d'extension propres au canal associées au message JSONObject Non

FormRow

Le nom Description Type Obligatoire?
columns Liste des colonnes affichées dans la rangée du formulaire. Lister <colonne> Oui
selectAction Actions exécutées lorsque le formulaire a été sélectionné. Lorsque les utilisateurs positionnent le pointeur de la souris sur le formulaire, l'étiquette de l'action s'affiche sous forme d'infobulle (lorsqu'elle est prise en charge par le canal). Action Non
separator Le réglage de cette propriété à Vrai insère une ligne de séparation au-dessus du contenu dans la ligne du formulaire. Boolean Non
channelExtensions Propriétés d'extension propres au canal associées au message JSONObject Non

Colonne

Le nom Description Type Obligatoire?
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 une FormRow dans une Form. Les champs peuvent être en lecture seule et modifiables lorsque FormRow est utilisé dans un EditFormMessagePayload. Lister les<champ> 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 rangée du formulaire. Les valeurs autorisées sont auto (valeur par défaut) et stretch. Lorsque cette option est réglée à stretch, la colonne prend toute la largeur restante après l'affichage des colonnes à largeur automatique. Si plusieurs colonnes sont réglées à stretch, elles divisent uniformément la largeur restante. Chaîne Non
channelExtensions Propriétés d'extension propres au canal associées au message JSONObject Non

Élément de réponse editForm

Cet élément de réponse forme EditFormMessagePayload qui est relayé au client au moyen d'un canal.
Le nom Description Type Obligatoire?
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 disposition du formulaire. La valeur par défaut est une colonne. Entier Non
actions Liste des actions liées à la carte. Lister<Action> Non
channelExtensions Jeu de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale pour Facebook Messenger. Carte<ChannelType, JSONObject> Non

Le champ textInput

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

Cet extrait illustre la collecte des entrées utilisateur en référençant la variable submittedFields générée (un mappage).
      - 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
Cet extrait illustre la collecte de l'entrée utilisateur en référençant une variable d'entité composite.
Note

L'élément d'entité composite référencé peut être une chaîne.
      - 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
Le nom Description Type Obligatoire?
displayType Type de champ. textInput (chaîne) Oui
name Nom unique du champ dans le formulaire d'entrée. Ce nom est utilisé comme identificateur au moment de l'exécution. Chaîne Oui
label Étiquette du champ Chaîne Non
defaultValue La valeur initiale. Selon l'expression FreeMarker dans le modèle, la valeur est une chaîne lorsque l'élément d'entité référencé (représenté par myText) n'a pas de valeur ("${(submittedFields.value.myText)!''}"). Chaîne Non
validationRegularExpression Expression rationnelle qui spécifie le format de l'entrée de texte. Chaîne Non
multiline Le réglage de cette propriété à true permet aux utilisateurs d'entrer plusieurs lignes de texte. Boolean Non
minlength Nombre minimum de caractères requis pour valider le champ. Les utilisateurs reçoivent un message d'erreur s'ils entrent trop peu de caractères. Entier Non
maxLength Nombre maximal ou limite de caractères. Entier Non
inputStyle Format appliqué au client. Les formats sont les suivants :
  • text
  • email
  • url
  • tel
  • password
Le format par défaut est du 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 entré d'entrée. Par exemple :
What is the expense justification? Enter between 10 and 50 characters.
Chaîne Non
autoSubmit Lorsque la valeur est réglée à true, le formulaire est partiellement soumis lorsque l'utilisateur a entré une valeur pour le champ. Dans FormSubmissionMessagePayload, partialSubmitField est réglé au nom du champ où autoSubmit est réglé à true. Nous vous recommandons de configurer la soumission automatique pour les champs dépendants conditionnellement. 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 Indique si la soumission du formulaire nécessite une entrée utilisateur dans ce champ boolean Non
clientErrorMessage Message utilisé par certains clients (équipes MS, messagerie Apple Business ) en cas d'échec de la validation côté client. Dans Slack, cette propriété n'est utilisée que 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 côté serveur de ce type se produisent, nous vous recommandons de remplacer le message de formulaire courant plutôt qu'un nouveau message ajouté à la conversation en configurant la propriété channelExtensions pour indiquer que le dernier message de formulaire doit être remplacé. Chaîne Non
channelExtensions Jeu de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale pour Facebook Messenger. Carte<ChannelType, JSONObject> Non

Le 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 l'entrée utilisateur.
Note

Le canal Slack ne prend pas en charge cette validation des valeurs minimale et maximale.
Cet extrait de code montre comment saisir l'entrée utilisateur à l'aide de la variable submittedFields générée (un mappage).
 - 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
Cet extrait montre comment capturer l'entrée utilisateur en référençant une variable d'entité 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
Le nom Description Type Obligatoire?
displayType Type de champ datePicker (chaîne) Oui
id Nom unique du champ dans le formulaire d'entrée. Ce nom est utilisé comme identificateur au moment de l'exécution. Chaîne Oui
label Étiquette descriptive. Chaîne Non
defaultValue Valeur par défaut du champ, formatée comme AAAA-MM-JJ. Le modèle définit cette chaîne comme une expression Apache FreeMarker qui retourne une chaîne vide lorsque l'élément d'entité composite référencé (représenté par myDate) a une valeur nulle.
"${(submittedFields1.value.myDate)!''}"
Chaîne Non
minDate Première date de l'intervalle 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 l'intervalle de jours autorisés. Le modèle définit cette chaîne comme le jour courant ("${.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 réglée à true, le formulaire est partiellement soumis lorsque l'utilisateur a entré une valeur pour le champ. Dans FormSubmissionMessagePayload, partialSubmitField est réglé au nom du champ où autoSubmit est réglé à true. Nous vous recommandons de configurer la soumission automatique pour les champs dépendants conditionnellement. 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 Indique si la soumission du formulaire nécessite une entrée utilisateur dans ce champ booléen Non
clientErrorMessage Message utilisé par certains clients (équipes MS, messagerie Apple Business ) en cas d'échec de la validation côté client. Dans Slack, cette propriété n'est utilisée que 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 côté serveur de ce type se produisent, nous vous recommandons de remplacer le message de formulaire courant plutôt qu'un nouveau message ajouté à la conversation en configurant la propriété channelExtensions pour indiquer que le dernier message de formulaire doit être remplacé. Chaîne Non
channelExtensions Jeu de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale pour Facebook Messenger. Carte<ChannelType, JSONObject> Non

Le champ timePicker

Permet à l'utilisateur d'entrer une valeur de temps dans un intervalle spécifié. Les propriétés maxTime et minTime du composant valident l'entrée utilisateur.
Note

Le canal Slack ne prend pas en charge la validation des valeurs minimale et maximale.
Le champ du sélecteur de temps 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 de 24 heures.
L'extrait de code suivant montre comment saisir l'entrée utilisateur à l'aide de la variable submittedFields générée (un mappage).
      - 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
Le nom Description Type Obligatoire?
displayType Type de champ timePicker (chaîne) Oui
id Nom unique du champ dans le formulaire d'entrée. Ce nom est utilisé comme identificateur au moment de l'exécution. Chaîne Oui
label Étiquette décrivant les paramètres de sélection des heures. Chaîne Oui
defaultValue Valeur initiale de ce champ, au format 24 heures. Le modèle définit cette chaîne comme une expression Apache FreeMarker qui retourne une chaîne vide lorsque l'élément d'entité composite référencé (représenté par myTime) a une valeur nulle.
"${(submittedFields.value.myTime)!''}"
Chaîne Non
minTime Définit l'heure autorisée au plus tôt, entrée en tant que HH:MM au format 24 heures. Par exemple : 00:00 Chaîne Non
maxTime Définit le dernier temps autorisé, entré 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, qui reflète les valeurs minTime et maxTime de l'exemple du modèle, 00:00 et 12:00. Chaîne Non
autoSubmit Lorsque la valeur est réglée à true, le formulaire est partiellement soumis lorsque l'utilisateur a entré une valeur pour le champ. Dans FormSubmissionMessagePayload, partialSubmitField est réglé au nom du champ où autoSubmit est réglé à true. Nous vous recommandons de configurer la soumission automatique pour les champs dépendants conditionnellement. 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 Indique si la soumission du formulaire nécessite une entrée utilisateur dans ce champ boolean Non
clientErrorMessage Message utilisé par certains clients (équipes MS, messagerie Apple Business ) en cas d'échec de la validation côté client. Par exemple, Time must be in the morning. Dans Slack, cette propriété n'est utilisée que 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 côté serveur de ce type se produisent, nous vous recommandons de remplacer le message de formulaire courant plutôt qu'un nouveau message ajouté à la conversation en configurant la propriété channelExtensions pour indiquer que le dernier message de formulaire doit être remplacé. Chaîne Non
channelExtensions Jeu de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale pour Facebook Messenger. Carte<ChannelType, JSONObject> Non

Le champ numberInput

Collecte l'entrée de numéro dans un intervalle spécifié.
      - 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
Le nom Description Type Obligatoire?
displayType Type de champ numberInput (chaîne) Oui
name Nom unique du champ dans le formulaire d'entrée. Ce nom est utilisé comme identificateur au moment de l'exécution. Chaîne Oui
label Étiquette descriptive de la valeur de date requise par l'utilisateur. Chaîne Non
defaultValue La valeur initiale. Le modèle définit cette chaîne comme une expression Apache FreeMarker qui retourne une chaîne vide lorsque l'élément d'entité composite référencé (représenté par myNumber) a une valeur nulle. "${(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. Entier Non
minvalue Un plus petit nombre autorisé Entier Non
placeholder Conseil décrivant l'utilisation du champ. Ce texte s'affiche lorsque l'utilisateur n'a pas encore entré de nombre. Chaîne Non
autoSubmit Lorsque la valeur est réglée à true, le formulaire est partiellement soumis lorsque l'utilisateur a entré une valeur pour le champ. Dans FormSubmissionMessagePayload, partialSubmitField est réglé au nom du champ où autoSubmit est réglé à true. Nous vous recommandons de configurer la soumission automatique pour les champs dépendants conditionnellement. 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 Indique si la soumission du formulaire nécessite une entrée utilisateur dans ce champ boolean Non
clientErrorMessage Message utilisé par certains clients (équipes MS, messagerie Apple Business ) en cas d'échec de la validation côté client. Dans Slack, cette propriété n'est utilisée que 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 côté serveur de ce type se produisent, nous vous recommandons de remplacer le message de formulaire courant plutôt qu'un nouveau message ajouté à la conversation en configurant la propriété channelExtensions pour indiquer que le dernier message de formulaire doit être remplacé. Chaîne Non
channelExtensions Jeu de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale pour Facebook Messenger. Carte<ChannelType, JSONObject> Non

Le champ singleSelect

Permet aux utilisateurs de sélectionner une seule valeur 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 si layoutStyle est réglé à 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 y a plus de dix options.
L'extrait de code suivant illustre l'alimentation de la liste à l'aide de la variable submittedFields générée (une variable de mappage)
 - 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 compétences 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.
Cet extrait illustre comment alimenter la liste en référençant une entité 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 Obligatoire?
displayType Type de champ singleSelect (chaîne) Oui
name Nom unique du champ dans le formulaire d'entrée. Ce nom est utilisé comme identificateur au moment de l'exécution. Chaîne Oui
label Texte de l'étiquette de champ décrivant le contenu de la liste à sélection unique. Chaîne Oui
defaultValue La sélection par défaut. Le modèle définit cette valeur de chaîne comme une expression Apache FreeMarker qui retourne une chaîne vide lorsque l'élément d'entité composite référencé (représenté par mySingleSelect) a une valeur nulle. "${(submittedFields.value.mySingleSelect)!''}" Chaîne Non
options Tableau des options disponibles. Le modèle définit ces options statiquement avec des paires label et value individuelles avec des valeurs de chaîne, mais vous pouvez alimenter 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 cet extrait de code, les valeurs de type de frais retourné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 de boutons radio (layoutStyle: radioGroup). Chaîne  
placeholder Conseil décrivant l'utilisation du 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.
Ce paramètre fictif s'affiche uniquement pour le rendu de la disposition de liste.
Chaîne Non
autoSubmit Lorsque la valeur est réglée à true, le formulaire est partiellement soumis lorsque l'utilisateur a entré une valeur pour le champ. Dans FormSubmissionMessagePayload, partialSubmitField est réglé au nom du champ où autoSubmit est réglé à true. Nous vous recommandons de configurer la soumission automatique pour les champs dépendants conditionnellement. 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 Indique si la soumission du formulaire nécessite une entrée utilisateur dans ce champ boolean Non
clientErrorMessage Message utilisé par certains clients (équipes MS, messagerie Apple Business ) en cas d'échec de la validation côté client. Dans Slack, cette propriété n'est utilisée que 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 côté serveur de ce type se produisent, nous vous recommandons de remplacer le message de formulaire courant plutôt qu'un nouveau message ajouté à la conversation en configurant la propriété channelExtensions pour indiquer que le dernier message de formulaire doit être remplacé. Chaîne Non
channelExtensions Jeu de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale pour Facebook Messenger. Carte<ChannelType, JSONObject> Non

Le champ multiSelect

Permet aux utilisateurs de sélectionner 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 jeu 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 si layoutStyle est réglé à checkboxes), car les cartes adaptatives ne prennent pas en charge les cases à cocher à sélection multiple.
  • Sur le canal Slack, cet élément s'affiche sous forme de liste au lieu d'un ensemble de cases à cocher à sélection multiple lorsqu'il y a plus de dix options.
Cet extrait illustre comment alimenter la liste en référençant la variable submittedFields générée (un mappage).
 - 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

Cet extrait illustre le référencement d'une entité composite pour alimenter 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
Le nom Description Type Obligatoire?
displayType Type de champ multiselect (chaîne) Oui
name Nom unique du champ dans le formulaire d'entrée. Ce nom est utilisé comme identificateur au moment de l'exécution. Chaîne Oui
label Étiquette de champ qui décrit le contenu de la liste multiSelect. Chaîne Oui
defaultValue La sélection par défaut. Le modèle définit cette chaîne comme une expression Apache FreeMarker qui retourne une chaîne vide lorsque l'élément d'entité composite référencé (représenté par myMultiSelect) a une valeur nulle.
"${(submittedFields.value.myMultiSelect?join(','))!''}"
List<String> Non
options Tableau des options disponibles. Le modèle définit ces options statiquement avec des paires label et value individuelles avec des valeurs de chaîne, mais vous pouvez alimenter 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 l'utilisation du champ. Elle s'affiche lorsque l'utilisateur n'a effectué aucune sélection.
label: Attendees
        placeholder: Select one or more attendees
Ce paramètre fictif s'affiche uniquement pour la disposition de liste. Il 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 réglée à true, le formulaire est partiellement soumis lorsque l'utilisateur a entré une valeur pour le champ. Dans FormSubmissionMessagePayload, partialSubmitField est réglé au nom du champ où autoSubmit est réglé à true. Nous vous recommandons de configurer la soumission automatique pour les champs dépendants conditionnellement. 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 Indique si la soumission du formulaire nécessite une entrée utilisateur dans ce champ booléen Non
clientErrorMessage Message utilisé par certains clients (équipes MS, messagerie Apple Business ) en cas d'échec de la validation côté client. Dans Slack, cette propriété n'est utilisée que 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 côté serveur de ce type se produisent, nous vous recommandons de remplacer le message de formulaire courant plutôt qu'un nouveau message ajouté à la conversation en configurant la propriété channelExtensions pour indiquer que le dernier message de formulaire doit être remplacé. Chaîne Non
channelExtensions Jeu de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale pour 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.
Note

Sur le canal Slack, cet élément s'affiche sous la forme d'une paire de boutons radio.
Cet extrait illustre la saisie de l'entrée utilisateur en référençant la variable submittedForms générée (un mappage).
      - displayType: toggle
        defaultValue: "false"
        name: TipIncluded
        labelOn: Tip
        label: Tip Included?
        valueOff: "false"
        labelOff: No Tip
        valueOn: "true"
Cet extrait illustre la capture des entrées utilisateur en référençant une variable d'entité 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"
Le nom Description Type Obligatoire?
displayType Type de champ toggle (chaîne) Oui
id Nom unique du champ dans le formulaire d'entrée. Ce nom est utilisé comme identificateur au moment de l'exécution. Chaîne Oui
label Étiquette décrivant ce qui se passe lorsque le commutateur est activé. Chaîne Oui
defaultValue La valeur initiale. Si vous voulez que l'activation/désactivation soit activée initialement, réglez cette valeur à valueOn. Le modèle définit cette chaîne comme une expression Apache FreeMarker qui active l'activation/désactivation lorsque l'élément d'entité composite référencé (représenté par myToggle) a une valeur nulle.
"${(submittedFields.value.myToggle)!'true'}"
Chaîne Oui
valueOff Valeur lorsque le commutateur est désactivé. La valeur par défaut, selon le modèle, est false (valueOff: "false"). Chaîne Oui
valueOn Valeur lorsque le commutateur est activé. La valeur par défaut du modèle est true (value On: "true"). Chaîne Oui
labelOn Étiquette de la position de la bascule Chaîne Non
labelOff Étiquette de la position désactivée du commutateur. Chaîne Non
channelExtensions Jeu de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale pour Facebook Messenger. Carte<ChannelType, JSONObject> Non

Champ de texte

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

Champ de lien

Un élément de champ contient les propriétés suivantes :
Nom Description Type Obligatoire?
displayType Type de champ link (chaîne) Oui
name Nom unique du champ dans le formulaire d'entrée. Ce nom est utilisé comme identificateur au moment 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'article doit occuper dans une disposition de tableau. La largeur restante, à partir de 100 moins les articles avec une largeur spécifiée, est également divisée sur les articles sans une largeur spécifiée. Entier Non
alignment Alignement de la valeur avec une colonne de table. Les valeurs autorisées sont left, center et right. La valeur par défaut est right. Chaîne Non
channelExtensions Jeu de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale pour Facebook Messenger. Carte<ChannelType, JSONObject> Non

EditFormMessagePayload

Ces données utiles définissent le formulaire modifiable qui est envoyé aux canaux.
Le nom Description Type Obligatoire?
type Type de données utiles du message. editForm (chaîne) Oui
headerText Texte d'en-tête affiché au-dessus du formulaire. Chaîne Non
footerText Texte qui s'affiche 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 rangées 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 disposition du formulaire. La valeur par défaut est une colonne. Entier Non
actions Liste des actions. Lister<Action> Non
globalActions Liste d'actions globales. Le rendu de ces actions est propre au canal. Par exemple, les actions sur Facebook sont affichées par reply_actions. Lister<Action> Non
channelExtensions Jeu de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale pour Facebook Messenger. Carte<ChannelType, JSONObject> Non
Soumission automatique d'un champ
Lorsqu'un champ a la propriété autoSubmit réglée à true, le client envoie un FormSubmissionMessagePayload avec le mappage submittedField contenant les valeurs de champ valides qui ont été entrées jusqu'à présent, ou simplement la valeur du champ soumis automatiquement (la mise en oeuvre est propre au canal). Tous les champs qui ne sont pas encore définis (qu'ils soient obligatoires ou non) ou les champs qui violent une validation côté client ne sont pas inclus dans le mappage submittedField. Si le champ soumis automatiquement lui-même contient une valeur non valide, FormSubmissionMessagePayload n'est pas envoyé et le message d'erreur du client s'affiche à la place.
Note

Microsoft Teams ne prend pas en charge la soumission automatique.

SubmitFormAction

Le nom Description Type Obligatoire?
type Type d'action submitForm (chaîne) Oui
postback Données utiles de republication, qui peuvent 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 republication FormSubmissionMessagePayload. JSONObject Non
variable Nom de la variable qui stocke les valeurs soumises. Ces valeurs sont dans FormSubmissionMessagePayload. Chaîne Non
processingMethod Instructions de traitement utilisées par le groupe de pages Résoudre entités pour les valeurs de champ soumises. Vous pouvez régler cette valeur à FormSubmissionMessagePayload, mais vous pouvez également définir :
  • mapVariable
  • separateVariables
  • compositeBag
.
Chaîne Oui
label Étiquette de l'action d'affichage. Chaîne Oui - Vous devez spécifier au moins une valeur label ou imageUrl.
imageUrl Image de l'action d'affichage. Chaîne Vous devez spécifier au moins une valeur label ou imageUrl.
channelExtensions Jeu de propriétés d'extension propres au canal. Par exemple, vous pouvez définir la hauteur maximale pour Facebook Messenger. Carte<ChannelType, JSONObject> Non
FormSubmissionMessagePayload
Ces données utiles sont renvoyées par les canaux au pipeline ODA lorsque l'utilisateur a soumis un formulaire en cliquant sur un bouton SubmitFormAction. Il possède les propriétés suivantes :
Le nom Description Type Obligatoire?
type Type des données utiles. "formSubmission" (une valeur de chaîne) Oui
submittedFields Paires clé-valeur des valeurs de champ soumises. La clé est le nom (ID) du champ. Mapper <Chaîne, Objet> Oui
postback Données utiles de republication, qui peuvent inclure une propriété d'action pour déclencher la navigation. Nous recommandons que la valeur soit tirée 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

Mise à jour du formulaire d'entrée

Lorsque l'utilisateur final soumet le formulaire, soit parce que autosubmit est réglé à true dans 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, ou que certaines valeurs de champ contiennent une valeur non valide. Dans un tel cas, le moteur de dialogue enverra un nouveau message EditFormMessagePayload, mais ce message devrait remplacer le message de formulaire précédent. Pour indiquer 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'}"
Au moment de l'exécution, cette propriété est ajoutée à l'élément channelExtensions de niveau racine des données utiles du composant de réponse commun :
...,
"channelExtensions": { "replaceMessage": "true"}

TableMessagePayload

Présente les données sous forme de tableau et de formulaire.
Le nom Description Type Obligatoire?
type Type de données utiles du message "table" Oui
headings Liste des en-têtes de colonne de table Lister<TableHeading> Oui
rows Liste des rangées de table Lister les<rangées> Oui
forms Liste des formulaires Liste Oui
formColumns Nombre de colonnes utilisées dans la disposition du formulaire. La valeur par défaut est 1. Entier Oui
paginationInfo Informations de pagination pouvant être utilisées pour afficher les boutons du jeu précédent ou suivant PaginationInfo Oui

Rangée

Le nom Description Type Obligatoire?
fields Liste de champs en lecture seule Lister le <champ ReadOnly> Oui
selectAction Actions exécutées lorsque le formulaire a été sélectionné. Lorsque les utilisateurs positionnent le pointeur de la souris sur le formulaire, l'étiquette de l'action s'affiche sous forme d'infobulle (lorsqu'elle est prise en charge par le canal). Action Non
channelExtensions Propriétés d'extension propres au canal associées au message Mapper <ChannelType>,JSONObject Non

TableHeading

Un en-tête de table contient les propriétés suivantes :
Le nom Description Type Obligatoire?
label L'étiquette d'en-tête Chaîne Oui
width Largeur de lable du titre Chaîne Non
alignment Alignement de la valeur de colonne (left, right ou center). Par défaut, right. Chaîne Non
channelExtensions Jeu de propriétés d'extension propres au canal.
Map<ChannelType>, JSONObject>
Non

PaginationInfo

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

Le nom Description Type Obligatoire?
totalCount Nombre total de résultats nombre Oui
rangeSize Taille de l'intervalle des résultats par page nombre Oui
status Message de statut de pagination chaîne Oui
currentRangeSize Taille de l'intervalle de résultats courant nombre Oui
rangeStart Décalage de début de l'intervalle de résultats courant nombre Oui
nextRangeSize Taille de l'intervalle de résultats suivant nombre Oui
hasPrevious Indique s'il existe un jeu de résultats précédent booléen Oui
hasNext Indique s'il existe un jeu de résultats suivant booléen Oui

tableFormMessageLayout

Présente les données sous forme de tableau et de formulaire.
Le nom Description Type Obligatoire?
type Type de données utiles du message "tableForm" Oui
headings Liste des en-têtes de colonne de table Lister<TableHeading> Oui
rows Liste des rangées de table Lister les<rangées> Oui
forms Liste des formulaires Liste Oui
formColumns Nombre de colonnes utilisées dans la disposition du formulaire. La valeur par défaut est 1. Entier Oui
showFormButtonLabel Étiquette du bouton utilisé pour afficher la disposition du formulaire pour une rangée spécifique. Chaîne Oui
paginationInfo Informations de pagination pouvant être utilisées pour afficher les boutons du jeu précédent ou suivant PaginationInfo Oui

Élé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 Obligatoire?
layout Style de disposition 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 disposition de formulaire. Applicable uniquement lorsque la disposition est form ou tableForm. Par défaut : 1. Non
showFormButtonLabel Étiquette utilisée pour ouvrir la boîte de dialogue de formulaire dans un style de disposition tableForm. Actuellement, elle n'est utilisée que sur les canaux Slack. Les autres canaux prennent en charge le développement de la rangée du tableau pour afficher les éléments supplémentaires dans une disposition de formulaire Non
data Sert à définir une entrée de données dans dataSet. Voir Propriétés de données DataSet Oui

Propriétés de 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 Obligatoire?
iteratorExpression Définit une expression Freemarker qui retourne une liste d'entrées à itérer, ce qui vous permet d'ajouter dynamiquement plusieurs entrées de données à dataSet. Non
iteratorVariable Indique le nom de la variable d'itérateur que vous pouvez utiliser pour référencer l'entrée de données courante dans la liste des entrées de données qui sont 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 la manière dont les messages sont affichés suivant l'entrée et le canal de l'utilisateur. Voir La propriété visible. Non
formTitle Titre utilisé pour la boîte de dialogue de formulaire dans la disposition tableForm du canal Slack. Affiche par défaut View details. Non
items Éléments de données à afficher pour chaque entrée de données. Voir DataSet Propriétés de l'élément de données. Oui

Propriétés de l'élément de données DataSet

Propriété Description Obligatoire?
width Pourcentage (exprimé en nombre entier) de la largeur totale disponible que l'élément doit utiliser dans une disposition de tableau. La largeur restante, à partir de 100 moins les articles avec une largeur spécifiée, est également divisée sur les articles sans une largeur spécifiée. Non
alignment Alignement de la valeur avec une colonne de table. Les valeurs autorisées sont left, center et right. La valeur par défaut est left. Non
displayType Type d'affichage de l'article. Les valeurs autorisées sont text et link. La valeur par défaut est text. Non
linkLabel Étiquette utilisée pour l'hyperlien lorsque le type d'affichage est réglé à 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é en tant que colonne dans la table. Cette propriété est applicable uniquement dans la disposition tableForm. La valeur par défaut est false. Non
displayInForm Définit si l'élément doit être affiché en tant que champ dans le formulaire. Cette propriété est applicable uniquement dans la disposition tableForm. La valeur par défaut est false. Non
label Étiquette de l'élément de données. Oui
value Valeur de l'élément de données. Oui

La variable system.entityToResolve

La variable system.entityToResolve fournit des informations sur le statut courant 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 de réponse commune lorsque vous souhaitez personnaliser des messages. Vous pouvez l'utiliser pour définir la logique d'un message d'erreur d'entité ou pour diverses propriétés appartenant aux groupes de pages Résoudre entités et Réponse commune. Ajoutez les propriétés suivantes pour retourner la valeur d'entité courante :
  • userInput
  • prompt
  • promptCount
  • updatedEntities
  • outOfOrderMatches
  • disambiguationValues
  • enumValues
  • needShowMoreButton
  • rangeStartVar
  • nextRangeStart
Vous pouvez également référencer les propriétés des expressions FreeMarker utilisées comme les propriétés prompt, errorMessage et les règles de validation.
Voici un exemple d'utilisation de cette variable pour retourner l'entrée utilisateur courante 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 system.entityToResolve. Parmi celles-ci 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 Show More (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"
L'étiquette Show More doit comprendre system.showMore (action: "system.showMore"). Sinon, elle ne fonctionne pas.

Validation d'un message 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 (chaîne, valeur boolean, flottant, double), ces composants tentent de rapprocher la valeur à un des types primitifs. Lorsque la propriété de variable est définie pour une variable de type d'entité, ces composants appellent le moteur TLN pour résoudre la valeur à une des entités. Toutefois, lorsque ces composants ne peuvent pas valider une valeur, votre robot 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 robot. Cette variable est une expression booléenne. Vous pouvez l'utiliser comme condition avec la directive FreeMarker if pour afficher le message uniquement lorsqu'un utilisateur entre une valeur non valide. Sinon, le message est masqué. L'état AskPizzaSize de CrcPizzaBot référencé dans l'extrait de code suivant illustre cette situation en ajoutant cette variable comme condition dans un modèle FreeMarker évalué par la directive if. Étant donné qu'elle est réglée à true, le robot ajoute un message d'erreur au message standard (What size do you want? (quelle taille voulez-vous?)) lorsque l'utilisateur entre 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