D Informations de référence sur Apache FreeMarker
Opérations FreeMarker intégrées - Chaînes
tester
, dont la valeur est envoyée à "hello world "
(avec trois espaces vides de fin).
L'expression suivante permet au robot de générer la valeur
tester
ou no string found
si aucune valeur n'a été définie pour la variable.${tester.value!'no string found'}
Opération intégrée | Utilisation | Sortie |
---|---|---|
capitalize |
${tester.value?capitalize} |
Hello World |
last_index_of |
${tester.value?last_index_of('orld')} |
7 |
left_pad |
${tester.value?left_pad(3,'_')} |
___hello world |
length |
${tester.value?length} |
14 |
lower_case |
${tester.value?lower_case} |
hello world |
upper_case |
${tester.value?upper_case} |
HELLO WORLD |
replace |
${tester.value?replace('world', 'friends')} |
hello friends |
remove_beginning |
${tester.value?remove_beginning('hello')} |
world |
trim |
${tester.value?trim} |
hello world (les trois espaces de fin sont supprimés)
|
ensure_starts_with |
${tester.value?ensure_starts_with('brave new ')} |
brave new hello world |
ensure_ends_with |
${tester.value?ensure_ends_with(' my friend')}$ |
hello world my friend |
contains |
${tester.value?contains('world')?string ('You said world', 'You did not say world')} |
You said world Les expressions |
ends_with |
${tester.value?ends_with('world')?string ('Ends with world', 'Doesn't end with world')} |
Ends with world |
starts_with |
${tester.value?starts_with('world')?string ('Starts with world', 'Doesn't start with world')} |
Doesn't start with world |
matches (l'expression rationnelle retourne true ou false)
|
${tester.value?matches('^([^0-9]*)$')} |
L'expression rationnelle retourne true ou false selon que la valeur contient un nombre (dans ce cas, la valeur booléenne est retournée comme false ). La valeur tester retourne true .
|
matches (l'expression rationnelle retourne une chaîne)
|
${tester.value?matches('^([^0-9]*)$')?} |
Identique à ci-dessus, mais cette fois, true est retournée comme chaîne. La fonction matches('regular expression') retourne true ou false comme types booléens. Pour afficher true ou false dans un composant System.Output , utilisez ?string pour effectuer une conversion en chaîne.
Note : Vous ne pouvez pas utiliser d'expression rationnelle pour retourner un groupe de valeurs; utilisez-les pour retourner une seule valeur correspondante (ou aucune correspondance). |
Exemple : Transformation de la casse avec le composant Switch
Imaginez un cas où différents états sont appelés en fonction de l'entrée de l'utilisateur (vin ou bière) stockée dans la variable choice
.
upper_case
pour uniformiser la casse :${choice.value?upper_case}
Exemple : Concaténation d'expressions FTL
Vous pouvez également concaténer les opérations FTL en une seule expression.
flight.value
) de UA1234
et de UA 1234
seraient tous deux transformés en 1234
.
${flight.value?trim?lower_case?remove_beginning('ua ')?remove_beginning('ua')}"
Opérations FreeMarker intégrées - Nombres
negativeValue
(-2.5) et positiveValue
(0.5175) :
Opération | Exemple | Sortie |
---|---|---|
abs |
${negativeValue.value?abs} |
2,5
L'opérateur transforme la valeur numérique négative en valeur positive. |
string (utilisée avec une valeur numérique)
|
${negativeValue.value?abs?string.percent} |
250 %
L'opérateur convertit d'abord la valeur négative en valeur positive. Puis, il la convertit en pourcentage, en la multipliant implicitement par 100. |
string (avec la valeur au format décimal et différentes devises)
Conseil : Consultez Charbase pour obtenir d'autres symboles de devise. |
${positiveValue.value?string['###.##']} |
0,51 |
${positiveValue.value?string['###.##%']} |
51 %
L'opérateur ajoute un caractère de pourcentage après avoir multiplié la valeur par 100. |
|
${positiveValue.value?string['##.###\u00A4']} |
0,51 $ | |
${positiveValue.value?string['##.###\u20AC']} |
0,51 € | |
${positiveValue.value?string['##.###\u00A3']} |
0,51 TSI | |
round |
${negativeValue.value?round} |
-2
L'opérateur arrondit au nombre entier le plus proche. Si le nombre se termine par ,5, il est arrondi au nombre entier supérieur. |
${positiveValue.value?round} |
1
L'opérateur arrondit au nombre entier le plus proche. Si le nombre se termine par ,5, il est arrondi au nombre entier supérieur. |
|
floor |
${positiveValue.value?floor} |
0
L'opérateur arrondit au nombre entier inférieur. |
ceiling |
${positiveValue.value?ceiling} |
1
L'opérateur arrondit au nombre entier supérieur. |
lower_abc |
${negativeValue.value?abs?round?lower_abc} |
c
L'opérateur convertit la valeur négative en valeur positive, puis l'arrondit à 3. Il retourne c, la troisième lettre de l'alphabet. |
upper_abc |
${negativeValue.value?abs?round?upper_abc} |
C
L'opérateur convertit la valeur négative en valeur positive, puis l'arrondit à 3. Il retourne C, la troisième lettre de l'alphabet. |
is_infinite |
${positiveValue.value?is_infinite?string} |
false
L'opérateur retourne false, car une valeur flottante n'est pas infinie selon l'IEEE 754 (norme sur l'arithmétique à virgule flottante). Note : La valeur retournée est une valeur booléenne sans |
Opérations FreeMarker intégrées - Tableaux
Les opérations de tableau (ou séquence) permettent à votre robot, entre autres, de déterminer la taille d'un tableau, de trier des tableaux ou de rechercher du contenu dans un tableau.
person
et colors
, respectivement.[
{
"firstName" : "Frank",
"lastName" : "Normal"
},
{
"firstName" : "Grant",
"lastName" : "Right"
},
{
"firstName" : "Geoff",
"lastName" : "Power"
},
{
"firstName" : "Marcelo",
"lastName" : "Jump"
}
]
[
"yellow", "blue", "red", "black", "white", "green"
]
Ces tableaux sont utilisés pour illustrer les opérations de tableau dans le tableau suivant et dans Exemple : Itération de tableaux.
Opérateur | Exemple | Sortie |
---|---|---|
size |
${person.value?size?number} |
4 —Taille (quatre membres) du tableau person
|
index de tableau | ${person.value[1].firstName} |
Grant —Valeur de la deuxième propriété firstName dans le tableau person .
|
${person.value[1].firstName !'unknown'} |
Identique à l'élément précédent mais, dans ce cas, le robot présente une sortie inconnue si la deuxième propriété firstName n'a pas de valeur.
|
|
first |
${person.value?first.firstName} |
Frank —Première entrée du tableau des personnes Cette opération n'utilise pas l'index de tableau.
|
last |
${person.value?last.firstName} |
Marcelo —Valeur lastName finale dans le tableau des personnes.
|
sort_by |
${person.value?sort_by('lastName') [0].firstName} |
Marcelo Cet opérateur trie le tableau
person dans l'ordre croissant de la propriété lastName . Il affiche ensuite la valeur de la propriété firstName correspondante pour une entrée finale dans le tableau des personnes :
Note : À moins que vous n'ayez enregistré le tableau trié dans une variable à l'aide de |
${person.value?sort_by('lastName')?reverse[0].firstName} |
Grant —Les valeurs sont triées dans l'ordre décroissant :
|
|
seq_index_of |
${colors.value?seq_index_of('red')} |
2 —Valeur d'index pour le rouge dans le tableau des couleurs.
|
seq_last_index_of |
${colors.value?seq_last_index_of('red')} |
2 —Dernière valeur d'index pour le rouge dans le
|
join |
${colors.value?join(',')} |
Retourne le tableau colors sous la forme d'une chaîne séparée par des virgules : yellow, blue, red, black, white, green |
seq_contains |
${colors.value?seq_contains('red')?string('Yes', 'No') |
Retourne Yes car le tableau contient la valeur "red".
Note : |
sort |
${colors.value?sort?join(',')} |
Retourne le tableau des couleurs sous forme de chaîne séparée par des virgules dans l'ordre croissant : black, blue, green, red, white, yellow |
reverse |
${colors.value?sort?reverse?join(',')} |
Retourne le tableau colors sous la forme d'une chaîne séparée par des virgules dans l'ordre décroissant : yellow, blue, red, black, white, green |
Renvoi des intentions et des notes
-
${skill.system.nlpresult.value.entityMatches[‘name of entity’]}
retourne un tableau d'entités trouvées dans une chaîne d'utilisateur transmise au moteur d'intention stockée dans la variablenlpresult
. -
${skill.system.nlpresult.value.intentMatches.summary[n].intent}
retourne le nom de l'intention dont le classement de confiance estn
, où0
représente l'intention de premier rang,1
représente l'intention de deuxième rang, etc. ${skill.system.nlpresult.value.intentMatches.summary[n].score}
retourne la note de confiance pour l'intention indiquée.
n
est l'index de l'élément que vous voulez consulter. Par exemple, l'expression servant à retourner le nom de l'intention la plus résolue serait :${skill.system.nlpresult.value.intentMatches.summary[0].intent}
Pour la note de l'intention principale, l'expression serait :${skill.system.nlpresult.value.intentMatches.summary[0].score}
Vous pouvez utiliser ces expressions pour des intentions dont la note est supérieure au seuil de confiance, mais également pour retourner des intentions dont la note est inférieure. Ces expressions ne dépendent pas de la valeur du seuil de confiance configurée dans la page Settings (Settings) de la compétence. Vous pouvez donc l'utiliser pour retourner les intentions candidates et leurs notes même si aucune intention n'a pu être résolue et qu'une action unresolvedIntent
a été déclenchée. Dans ce cas, par exemple, vous pouvez utiliser ces expressions pour retourner les trois premières intentions et leurs notes inférieures au seuil de confiance.
Si vous devez faire référence à l'intention qu'un utilisateur a sélectionnée après avoir été invité à désambiguïser, vous pouvez utiliser
${system.intent.name}
. (${skill.system.nlpresult.value.intentMatches.summary[0].intent}
retourne toujours l'intention avec la note supérieure, ce qui peut ne pas être l'intention sélectionnée par l'utilisateur lors de la désambiguïté.
Exemple : Itération de tableaux
Les tableaux déterminent le nombre d'entités dans l'entrée utilisateur.
L'extrait de code suivant de la propriété Métadonnées d'un composant de réponse commune indique comment déterminer la taille du tableau dans la variable person
, puis passer en boucle sur ses éléments afin que la compétence produise une sortie semblable à ce qui suit :
responseItems:
- type: "text"
text: "${person?index+1}. ${person.firstName} ${person.lastName}"
name: "Sorry"
separateBubbles: true
iteratorVariable: "person"
La sortie décrite dans ce code n'est pas triée (c'est-à-dire qu'aucune opération
sort_by
n'est utilisée).
Opérations FreeMarker intégrées - Dates
.now
et l'opérateur date
intégré.
${.now?date}
Opération(s) | Exemple | Sortie |
---|---|---|
date |
${.now?date} |
La date courante |
time |
${.now?time} |
Heure du jour, comme 5:46:09 PM |
datetime |
${.now?datetime} |
Affiche la date et l'heure courantes, comme Jan 17, 2018 5:36:13 PM. |
long et number_to_date |
${(.now?long + 86400000)?number_to_date } |
Ajoute 24 heures à la date courante. Si l'appel est effectué le 17 janvier 2018, FreeMarker indique le 18 janvier 2018. |
string (avec styles de formatage)
|
${.now?string.full} |
Convertit la date courante en chaîne dans le format Wednesday, January 17, 2018 6:35:12 PM UTC. |
${.now?string.long} |
Convertit une date en chaîne avec la sortie formatée suivante : January 17, 20186:36:47 PM UTC. | |
${.now?string.short} |
Convertit une date en chaîne avec la sortie formatée suivante : 1/17/18 6:37 PM | |
${.now?string.medium} |
Convertit une date en chaîne avec la sortie formatée suivante : Jan 17, 2018 6:38:35. | |
${.now?string.iso} |
Affiche la date au format ISO 8601, par exemple 2018-01-17T18:54:01.129Z. |
|
string (avec les formats de sortie spécifiés)
|
${.now?string['dd.MM.yyyy, HH:mm']} |
Affiche la date courante dans un format personnalisé, par exemple 17.01.2018, 18:58. |
${.now?string['yyyy']} |
2018 |
|
datetime (avec string et style de formatage)
|
${date_variable?datetime?string.short} |
Convertit la date en chaîne formatée : 1/17/18 6:37 PM.
L'opérateur |
Conversion de la valeur de l'entité en chaîne à l'aide de
|
${dateVar.value.date?long?number_to_date?date?string.short} |
Convertit la date de l'extraction de l'entité en chaîne au format 11/17/18.
L'opérateur de date indique à FreeMarker que la variable contient uniquement une date et non des informations horaires. L'utilisation de ce format permet d'éviter les erreurs. |
${dateVar.value.date?long?number_to_date?string.medium} |
Convertit la date dérivée de l'extraction de l'entité en chaîne formatée : Jan 17, 2018.
Note : Tous les autres formats, tels que |
|
${dateVar.value.date?long?number_to_date?string['dd.MM.yyyy']} |
Affiche la date dans un format personnalisé. Par exemple : 17.01.2018, 18:58. | |
${dateVar.value.date?long?number_to_date?string['yyyy']} |
Affiche la date calculée à partir de l'entité dans un format personnalisé. |
Exemple : Extraction de dates à partir de l'entrée utilisateur
DATE
, pour extraire tomorrow (demain) de la demande. Il affiche la date demandée à l'aide de ${(theDate.value.date?long + 86400000)?number_to_date}
pour ajouter 24 heures (ou 86 400 000 millisecondes) à "demain".
Texte avec expression | Sortie |
---|---|
|
|
|
|
|
|
Exemple : Définition d'une date par défaut (si aucune valeur de date n'est définie)
Si le message de l'utilisateur n'inclut aucune information de date, votre compétence peut inviter les utilisateurs à entrer une date ou en fournir une par défaut. Pour indiquer la date courante, vous pouvez utiliser l'expression suivante :
${.now?datetime?string.long}
Variables de système accessibles par FreeMarker
Oracle Digital Assistant dispose d'un ensemble de variables de système, par lequel vous pouvez extraire des informations utiles dans vos flux de dialogue au moyen d'expressions FreeMarker.
Dans leurs formes les plus simples, ces expressions se présentent comme suit :
${system.variableName}
Certaines variables peuvent contenir des objets dont les propriétés imbriquées sont accessibles au moyen de la notation avec point après le nom de variable comme suit.
${system.variableName.propertyName}
De plus, les valeurs de propriété imbriquée peuvent aussi être des objets à propriétés imbriquées.
Voici les variables de système disponibles au moyen des expressions FreeMarker.
Variable | Description |
---|---|
system.actualState |
Nom de l'état que l'utilisateur a atteint en touchant un bouton dans un message ancien. Si les données utiles de republication contiennent une propriété system.state , le moteur de dialogue passe à cet état et règle cette variable au nom de celui-ci. Voir aussi Configurer le flux de dialogue pour des actions inattendues.
|
system.authorizedUsers |
Liste de tous les utilisateurs autorisés pour un clavardage en groupe donné. |
system.channelType |
Type de canal de la session utilisateur courante. Valeurs admissibles : facebook , androidsdk , iossdk , websdk , slack , twilio , msteams , cortana , webhook et test .
Si la session est en cours d'exécution dans le testeur, la valeur correspond au type de canal simulé. |
system.entityToResolve |
Objet représentant l'élément d'entité composite courant à résoudre dans le composant de réponse commune lorsque la propriété de variable du composant référence un objet entity.The d'entité composite a les propriétés suivantes :
Voir Variable system.entityToResolve pour obtenir des exemples de l'utilisation de |
system.errorAction |
Texte de message d'une erreur inattendue générée lors de l'exécution de l'état. |
system.errorState |
Nom de l'état qui a généré une erreur inattendue lors de l'exécution. |
system.expectedState |
Lorsque l'utilisateur fait défiler vers le haut l'historique des messages et touche un bouton dans un ancien message, cette variable est alimentée par le nom de l'état qui devait être exécuté, mais ne l'a jamais été car l'utilisateur a décidé de toucher ce bouton. Voir aussi Configurer le flux de dialogue pour des actions inattendues. |
system.intent.name |
Utilisez cette option pour faire référence à l'intention qu'un utilisateur a sélectionnée après avoir été invité à désambiguïser. (
renvoie toujours l'intention avec la note supérieure, qui n'est peut-être pas l'intention sélectionnée par l'utilisateur lors de la désambiguïté.) |
system.invalidUserInput |
Valeur booléenne réglée à true lorsque l'entrée utilisateur ne peut pas être mise en correspondance avec le type de variable demandé.
|
system.message |
Dernier message reçu par Oracle Digital Assistant. Cette variable contient les propriétés suivantes :
|
system.requestedState |
Si un utilisateur entre dans une conversation à un état requérant une autorisation alors qu'il ne figure pas dans la liste des utilisateurs stockés dans system.authorizedUsers , le moteur de dialogue stocke l'état qu'il avait l'intention d'exécuter dans cette variable.
|
system.selectedCardIndex |
Cette variable contient l'index de la carte sélectionnée lors de l'utilisation de l'option d'optimisation du rendu de carte pour les canaux textuels tels que Twilio. Cette optimisation permet à l'utilisateur de sélectionner une carte en deux étapes : une liste de cartes est présentée, puis l'utilisateur peut entrer le nombre de cartes qu'il veut sélectionner. Le numéro d'index correspondant de cette carte est stocké dans cette variable. |
Les variables de système du tableau ci-dessus sont les seules que vous pouvez utiliser dans les expressions FreeMarker. D'autres variables système ne sont pas publiques et leur utilisation est sujette à changement, ce qui signifie que vos compétences ne peuvent pas compter sur elles.
Par exemple, les variables system.routingFromSkill
, system.routingToSkill
, system.routingFromIntent
et system.routingToIntent
ne sont disponibles que pour des paramètres d'assistant numérique spécifiques. Voir Variables de système pour assistants numériques.