Propriété de métadonnées dans les composants de réponse communs
La propriété Metadata des composants Common Response permet de définir le mode d'affichage des messages pour les utilisateurs.
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 :
|
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 |
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é |
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. Ces fonctions étant propres à la plate-forme, elles sont hors du composant Réponse commune et ne peuvent donc 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. 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é
Le fragment de code suivant montre comment générer un ensemble de mots-clés à 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 :
|
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é |
|
payload |
Charge utile de postback, qui possède les propriétés suivantes.
|
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, first,1st,one, second, 2nd, two, etc.)
keyword
dans les métadonnées. Par exemple, voici à quoi pourrait ressembler un flux de commande de 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
visible
facultative.
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 |
|
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 :
|
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 uniquement l'élément de réponse, la carte ou l'action lorsqu'une invite de déshomonymie 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 délimitée par des virgules des noms d'élément de conteneur composite pour lesquels l'élément de réponse doit être affiché (include ) ou masqué (exclude ).
|
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 :
|
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é |
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
Quelques points à noter pour 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
oucall
. -
Les types d'action
share
etlocation
seront ignorés ou ne s'afficheront pas.
Conseil :
Les actions non postback telles queurl
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 sembler incohérent car seules certaines options sont numérotées.
A l'aide du kit SDK, vous pouvez créer une sortie plus cohérente en désactivant la numérotation automatique pour la 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 textuelle dans les composants de 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 |
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 |
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 |
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.
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 cartetitle
etdescription
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éstitle
etdescription
, 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
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.
- 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.
card
, procédez comme suit :
- Définissez la propriété
title
. Dans le fragment de code suivant, une expression utilise la variable FreeMarkerindex
pour ajouter un nombre en guise de préfixe au titre (renvoyé par${pizzas.name}
lorsque la valeur de la variabletextOnly
est définie surtrue
). 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 variabletextOnly
est définie surfalse
:- 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 surtrue
.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 |
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
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 | Au moins une seule propriété label ou imageUrl 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
Field
contient les propriétés suivantes :
Nom | Description | Type | Requis ? |
---|---|---|---|
displayType |
Type du champ | String |
Non |
label |
Libellé du champ | String |
Oui |
channelExtensions |
Ensemble 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 le libellé du champ. Les valeurs autorisées sont small , medium (valeur par défaut) et large .
|
String |
Non |
labelFontWeight |
Poids de police utilisé pour le libellé du champ. Les valeurs autorisées sont light , medium (valeur par défaut) et gras.
|
String |
Non |
displayInTable |
Expression booléenne FreeMarker qui permet d'inclure un champ de façon conditionnelle dans la présentation du tableau dans un élément de réponse dataSet. | String |
Non (valeur par défaut : true )
|
displayInForm |
Expression booléenne FreeMarker qui permet d'inclure un champ de façon conditionnelle dans un élément de réponse editForm ou dans la présentation du formulaire dans un élément de réponse dataSet | String |
Non (valeur par défaut : true )
|
Champ ReadOnly
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 |
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.
TextField
TextField
hérite de toutes les propriétés du champ ReadOnly. La valeur 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 claires, moyennes (par défaut) et en gras.
|
Chaîne | Non |
LinkField
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 lorsqu'un utilisateur clique dessus. | Chaîne | Non |
MediaField
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 média du champ ("video" , "audio" , "image" )
|
String |
Oui |
ActionField
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
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 dans le formulaire | Liste<ReadOnlyField> | Oui |
formRows |
Liste des lignes affichées dans le formulaire. | Liste<FormRow> | |
actions |
Une liste d'actions | Liste<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 la forme d'une info-bulle (si 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
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 la forme d'une info-bulle (si elle est prise 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 du formulaire. | Valeur booléenne | Non |
channelExtensions |
Propriétés d'extension propres 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 du 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 à 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 propres au canal associées au message | JSONObject | Non |
Elément de réponse editForm
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 modifiable. | Liste<field> |
Oui |
formColumns |
Nombre de colonnes utilisées pour la présentation du formulaire. La valeur par défaut est une colonne. | Entier | Non |
actions |
Liste des actions liées à la carte. | Liste<Action> |
Non |
channelExtensions |
Ensemble 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 textInput
Champ permettant de saisir du texte libre. Vous pouvez définir les caractères minimum et maximum pour ce champ et appliquer le formatage à l'aide d'expressions régulières.
submittedFields
générée (une correspondance).
- 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 en référençant une variable de conteneur composite.L'élément de conteneur composite référencé peut être un élément 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 |
Libellé du champ | Chaîne | Non |
defaultValue |
Valeur initiale. Selon l'expression FreeMarker du 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 spécifie le format de la saisie de texte. | Chaîne | Non |
multiline |
La définition de cette propriété sur true permet aux utilisateurs de saisir plusieurs lignes de texte.
|
Valeur booléenne | 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. | Entier | Non |
maxLength |
Nombre maximal ou limite de caractères. | Entier | Non |
inputStyle |
Format appliqué au client. Les formats sont les suivants :
|
Chaîne | Non |
placeholder |
Conseil décrivant l'utilisation de ce champ. Ce texte s'affiche lorsque les utilisateurs n'ont pas encore saisi d'entrée. Par exemple :
|
Chaîne | Non |
autoSubmit |
Lorsque la valeur est définie sur 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 où autoSubmit est défini sur true . Nous vous recommandons de configurer la soumission automatique pour les champs conditionnellement dépendants. 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 de formulaire nécessite une saisie utilisateur dans ce champ | boolean |
Non |
clientErrorMessage |
Message utilisé par certains clients (MS Teams, Apple Business Messaging) en cas d'échec de la validation côté client. Dans 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 en cours 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 |
Ensemble 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 datePicker
maxDate
et minDate
du composant valident l'entrée utilisateur.
Le canal Slack ne prend pas en charge cette validation de valeur minimale et maximale.
submittedFields
générée (carte). - 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 illustre 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 Apache FreeMarker qui renvoie une chaîne vide lorsque l'élément de conteneur composite référencé (représenté par myDate ) a une valeur NULL.
|
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 de la fourchette de jours autorisés. Le modèle définit cette chaîne comme le jour en cours ("${.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 définie sur 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 où autoSubmit est défini sur true . Nous vous recommandons de configurer la soumission automatique pour les champs conditionnellement dépendants. 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 de formulaire nécessite une saisie utilisateur dans ce champ | boolean | Non |
clientErrorMessage |
Message utilisé par certains clients (MS Teams, Apple Business Messaging) en cas d'échec de la validation côté client. Dans 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 en cours 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 |
Ensemble 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
maxTime
et minTime
du composant valident l'entrée utilisateur.
Le canal Slack ne prend pas en charge la validation des valeurs minimale et maximale.
submittedFields
générée (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
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 de l'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 Apache FreeMarker qui renvoie une chaîne vide lorsque l'élément de conteneur composite référencé (représenté par myTime ) a une valeur NULL.
|
Chaîne | Non |
minTime |
Définit l'heure autorisée la plus ancienne, saisie au format HH:MM sur 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 de l'exemple de modèle 00:00 et 12:00 .
|
Chaîne | Non |
autoSubmit |
Lorsque la valeur est définie sur 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 où autoSubmit est défini sur true . Nous vous recommandons de configurer la soumission automatique pour les champs conditionnellement dépendants. 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 de formulaire nécessite une saisie utilisateur dans ce champ | boolean |
Non |
clientErrorMessage |
Message utilisé par certains clients (MS Teams, Apple Business Messaging) en cas d'échec de la validation côté client. Par exemple, Time must be in the morning . Dans 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 en cours 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 |
Ensemble 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
- 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 comme une expression Apache FreeMarker 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. | Entier | Non |
minvalue |
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 saisi de nombre. | Chaîne | Non |
autoSubmit |
Lorsque la valeur est définie sur 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 où autoSubmit est défini sur true . Nous vous recommandons de configurer la soumission automatique pour les champs conditionnellement dépendants. 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 de formulaire nécessite une saisie utilisateur dans ce champ | boolean |
Non |
clientErrorMessage |
Message utilisé par certains clients (MS Teams, Apple Business Messaging) en cas d'échec de la validation côté client. Dans 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 en cours 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 |
Ensemble 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
- Sur le canal Microsoft Teams, cet élément est toujours affiché sous forme de liste (même si
layoutStyle
est défini surradioGroup
) car les cartes adaptatives ne prennent pas en charge les boutons radio. - Sur le canal Slack, cet élément est affiché sous forme de liste au lieu d'un groupe de radio lorsqu'il existe plus de dix options.
submittedFields
générée (variable de mapping). - 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 queclientErrorMessage
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.
- 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 du libellé du champ qui décrit 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 comme une expression Apache FreeMarker 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 façon dynamique à l'aide des propriétés iteratorVariable et iteratorExpression : 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 la fonction intégrée split .
|
Liste<option> | Oui |
layoutStyle |
Mode de présentation des options à sélection unique 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 :
Cet espace réservé s'affiche pour l'affichage de la présentation de liste uniquement. |
Chaîne | Non |
autoSubmit |
Lorsque la valeur est définie sur 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 où autoSubmit est défini sur true . Nous vous recommandons de configurer la soumission automatique pour les champs conditionnellement dépendants. 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 de formulaire nécessite une saisie utilisateur dans ce champ | boolean |
Non |
clientErrorMessage |
Message utilisé par certains clients (MS Teams, Apple Business Messaging) en cas d'échec de la validation côté client. Dans 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 en cours 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 |
Ensemble 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 multiSelect
- Sur le canal Microsoft Teams, cet élément est toujours affiché sous forme de liste (même si
layoutStyle
est défini surcheckboxes
) 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 existe plus de dix options.
submittedFields
générée (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 Apache FreeMarker qui renvoie une chaîne vide lorsque l'élément de conteneur composite référencé (représenté par myMultiSelect ) a une valeur NULL.
|
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 façon dynamique à l'aide des propriétés iteratorVariable et iteratorExpression :
|
List<option> |
Oui |
placeholder |
Conseil décrivant l'utilisation du champ. Il s'affiche lorsque l'utilisateur n'a effectué aucune sélection.
Cet espace réservé s'affiche pour la présentation de liste uniquement. 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 définie sur 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 où autoSubmit est défini sur true . Nous vous recommandons de configurer la soumission automatique pour les champs conditionnellement dépendants. 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 de formulaire nécessite une saisie utilisateur dans ce champ | boolean | Non |
clientErrorMessage |
Message utilisé par certains clients (MS Teams, Apple Business Messaging) en cas d'échec de la validation côté client. Dans 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 en cours 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 |
Ensemble 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
Sur le canal Slack, cet élément est affiché sous la forme d'une paire de boutons radio.
- 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 en référençant 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 |
Libellé décrivant ce qui se passe lorsque l'option de bascule est activée. | Chaîne | Oui |
defaultValue |
Valeur initiale. Si vous souhaitez que la bascule soit activée initialement, définissez-la sur la valeur valueOn . Le modèle définit cette chaîne comme une expression Apache FreeMarker qui bascule lorsque l'élément de conteneur composite référencé (représenté par myToggle ) a une valeur NULL.
|
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 position de bascule | Chaîne | Non |
labelOff |
Libellé de la position d'arrêt 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 pour Facebook Messenger. | Carte<ChannelType, JSONObject> |
Non |
Champ de texte
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. | Entier | 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 pour Facebook Messenger. | Carte<ChannelType, JSONObject> |
Non |
Champ de lien
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. | Entier | 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 pour Facebook Messenger. | Carte<ChannelType, JSONObject> |
Non |
EditFormMessagePayload
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 modifiable. | Liste<field> |
Oui |
formColumns |
Nombre de colonnes utilisées pour la présentation du formulaire. La valeur par défaut est une colonne. | Entier | Non |
actions |
Une liste d'actions. | Liste<Action> |
Non |
globalActions |
Liste des actions globales. Le rendu de ces actions est propre au canal. Par exemple, les actions sur Facebook sont affichées par reply_actions .
|
Liste<Action> |
Non |
channelExtensions |
Ensemble 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
autoSubmit
définie sur true
, le client envoie une adresse FormSubmissionMessagePayload
avec la correspondance submittedField
contenant soit les valeurs de champ valides entrées jusqu'à présent, soit 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 obligatoires ou non) ou qui enfreignent une validation côté client ne sont pas inclus dans la carte submittedField
. Si le champ soumis automatiquement contient lui-même une valeur non valide, FormSubmissionMessagePayload
n'est pas envoyé et le message d'erreur client s'affiche à la place.
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 définir ce paramètre sur FormSubmissionMessagePayload , mais vous pouvez également définir les éléments suivants :
|
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 pour Facebook Messenger. | Carte<ChannelType, JSONObject> |
Non |
FormSubmissionMessagePayload
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<Chaîne, Objet> | Oui |
postback |
Charge utile de postback, qui peut inclure une propriété d'action pour déclencher la navigation. Nous vous recommandons d'utiliser la valeur SubmitFormAction |
JSONObject | Non |
partialSubmitField |
Nom du champ qui déclenche une soumission partielle de formulaire. 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
autosubmit
est défini sur true
pour un champ, soit parce que l'utilisateur a appuyé sur le bouton d'action submitForm
, il peut y avoir des situations dans lesquelles l'utilisateur n'a 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 enverra un nouveau message 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'}"
channelExtensions
de niveau racine de la charge utile du composant de réponse commun :...,
"channelExtensions": { "replaceMessage": "true"}
TableMessagePayload
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. | Entier | Oui |
paginationInfo |
Informations de pagination pouvant être utilisées pour afficher les boutons d'ensemble précédent ou suivant | PaginationInfo | Oui |
Ligne
Nom | Description | Type | Requis ? |
---|---|---|---|
fields |
Liste de champs en lecture seule | Liste <ReadOnly Field> | 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 la forme d'une info-bulle (si elle est prise en charge par le canal). | Action | Non |
channelExtensions |
Propriétés d'extension propres au canal associées au message | Carte<ChannelType>,JSONObject | Non |
TableHeading
Nom | Description | Type | Requis ? |
---|---|---|---|
label |
Libellé d'en-tête | Chaîne | Oui |
width |
Largeur de l'étiquette de titre | Chaîne | Non |
alignment |
Alignement de la valeur de colonne (left , right ou center ). Par défaut : right .
|
Chaîne | Non |
channelExtensions |
Ensemble de propriétés d'extension propres au canal. |
|
Non |
PaginationInfo
Représente les informations de pagination pour les 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 actuelle | 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 ensemble de résultats suivant | boolean | Oui |
tableFormMessageLayout
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. | Entier | 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 d'ensemble précédent ou suivant | 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 mise en page 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 mise en page 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 . Ceci n'est actuellement utilisé que sur les canaux Slack. Les autres canaux prennent en charge le développement de la ligne du 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 . Voir DataSet data Properties |
Oui |
DataSet Propriétés des données
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 actuelle 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 du canal Slack. Valeur par défaut : View details .
|
Non |
items |
Eléments de données à afficher pour chaque entrée de données. Reportez-vous à la section DataSet Data Item Properties. | Oui |
DataSet Propriétés de l'élément 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 la table. Cette propriété est uniquement applicable dans la présentation 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 présentation 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
system.entityToResolve
fournit des informations sur le statut en cours 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
prompt
, errorMessage
et les règles de validation.
Sorry,'${system.entityToResolve.value.userInput!'this'}' is not a valid pizza size.
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"
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
variable
. Par exemple, lorsque la propriété variable
est définie en tant que type primitif (chaîne, booléen, flottant, double), ces composants tentent de rapprocher la valeur à 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