D Referencia de Apache FreeMarker
Operaciones de cadena de FreeMarker incorporadas
tester
, cuyo valor se envía a "hello world "
(con tres espacios en blanco finales).
La siguiente expresión permite al bot generar el valor
tester
o no string found
si no se ha definido ningún valor para la variable.${tester.value!'no string found'}
Operación incorporada | Uso | Salida |
---|---|---|
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 |
reemplazar |
${tester.value?replace('world', 'friends')} |
hello friends |
remove_beginning |
${tester.value?remove_beginning('hello')} |
world |
trim |
${tester.value?trim} |
hello world (los tres espacios finales se eliminan)
|
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 Las expresiones |
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 (la expresión regular devuelve true o false)
|
${tester.value?matches('^([^0-9]*)$')} |
La expresión regular devuelve true o false , en función de si el valor contiene un número (en cuyo caso el valor booleano se devuelve como false ). El valor tester devuelve true .
|
matches (la expresión regular devuelve una cadena)
|
${tester.value?matches('^([^0-9]*)$')?} |
Igual que antes, pero esta vez true se devuelve como cadena. La función matches('regular expression') devuelve true o false como tipos booleanos. Para imprimir true o false en un componente System.Output , use ?string para realizar una conversión a cadena.
Nota: no puede utilizar una expresión regular para devolver un grupo de valores; utilícela para devolver un único valor coincidente (o sin coincidencia). |
Ejemplo: transformación de casos con el componente Switch
Imagine un caso en el que se llaman a diferentes estados según la entrada del usuario (wine o beer), que se almacena en la variable choice
.
upper_case
para uniformar las mayúsculas y minúsculas:${choice.value?upper_case}
Ejemplo: concatenación de expresiones FTL
También puede concatenar operaciones FTL en una sola expresión.
flight.value
) de UA1234
y UA 1234
se transformarían en 1234
.
${flight.value?trim?lower_case?remove_beginning('ua ')?remove_beginning('ua')}"
Operaciones numéricas de FreeMarker incorporadas
negativeValue
(-2,5) y positiveValue
(0,5175):
Operación | Ejemplo | Salida |
---|---|---|
abs |
${negativeValue.value?abs} |
2,5
El operador convierte el valor numérico negativo en un valor positivo. |
string (se utiliza con un valor numérico)
|
${negativeValue.value?abs?string.percent} |
250%
El operador cambia, en primer lugar, el valor negativo por uno positivo. A continuación, lo convierte en un porcentaje multiplicando implícitamente el valor por 100. |
string (con el valor de formato decimal y varias monedas)
Consejo: Busque en Charbase los símbolos de otras monedas. |
${positiveValue.value?string['###.##']} |
0,51 |
${positiveValue.value?string['###.##%']} |
51%
El operador agrega un carácter de porcentaje después de multiplicar el valor por 100. |
|
${positiveValue.value?string['##.###\u00A4']} |
0,51 $ | |
${positiveValue.value?string['##.###\u20AC']} |
0,51 € | |
${positiveValue.value?string['##.###\u00A3']} |
0,51 £ | |
round |
${negativeValue.value?round} |
-2
El operador redondea al número entero más cercano. Si el número termina en ,5, redondea hacia arriba. |
${positiveValue.value?round} |
1
El operador redondea al número entero más cercano. Si el número termina en ,5, redondea hacia arriba. |
|
floor |
${positiveValue.value?floor} |
0
El operador redondea hacia abajo. |
ceiling |
${positiveValue.value?ceiling} |
1
El operador redondea hacia arriba. |
lower_abc |
${negativeValue.value?abs?round?lower_abc} |
c
El operador convierte el valor negativo en positivo y, a continuación, lo redondea a 3. Devuelve c, la tercera letra del alfabeto. |
upper_abc |
${negativeValue.value?abs?round?upper_abc} |
C
El operador convierte el valor negativo en positivo y, a continuación, lo redondea a 3. Devuelve C, la tercera letra del alfabeto. |
is_infinite |
${positiveValue.value?is_infinite?string} |
false
El operador devuelve false, ya que un valor flotante no es infinito según IEEE 754 (estándar para aritmética en coma flotante). Nota: el valor devuelto será un booleano sin |
Operaciones de matriz de FreeMarker Incorporadas
Las operaciones de matriz (o sequence ) permiten al bot, entre otras cosas, determinar el tamaño de una matriz, ordenar las matrices o buscar contenido en una matriz.
person
y colors
, respectivamente.[
{
"firstName" : "Frank",
"lastName" : "Normal"
},
{
"firstName" : "Grant",
"lastName" : "Right"
},
{
"firstName" : "Geoff",
"lastName" : "Power"
},
{
"firstName" : "Marcelo",
"lastName" : "Jump"
}
]
[
"yellow", "blue", "red", "black", "white", "green"
]
Estas matrices se utilizan para ilustrar las operaciones de matriz en la siguiente tabla y en Ejemplo: iteración de matrices.
Operador | Ejemplo | Salida |
---|---|---|
size |
${person.value?size?number} |
4 : tamaño (cuatro miembros) de la matriz person
|
índice de matriz | ${person.value[1].firstName} |
Grant : indica el valor de la segunda propiedad firstName de la matriz person .
|
${person.value[1].firstName !'unknown'} |
Igual que el anterior, pero, en este caso, el bot genera una salida desconocida si la segunda propiedad firstName no tiene ningún valor.
|
|
first |
${person.value?first.firstName} |
Frank : primera entrada de la matriz de personas. Esta operación no utiliza el índice de matriz.
|
last |
${person.value?last.firstName} |
Marcelo : último valor lastName en la matriz de personas.
|
sort_by |
${person.value?sort_by('lastName') [0].firstName} |
Marcelo Este operador ordena la matriz
person en orden ascendente según la propiedad lastName . A continuación, imprime el valor de la propiedad firstName correspondiente para la entrada final en la matriz de personas:
Nota: salvo en el caso de que guarde la matriz ordenada en una variable mediante |
${person.value?sort_by('lastName')?reverse[0].firstName} |
Grant : los valores se ordenan en orden descendente:
|
|
seq_index_of |
${colors.value?seq_index_of('red')} |
2 : valor de índice para el rojo en la matriz de colores.
|
seq_last_index_of |
${colors.value?seq_last_index_of('red')} |
2 : el último valor de índice para el rojo en
|
join |
${colors.value?join(',')} |
Devuelve la matriz colors como una cadena separada por comas: yellow, blue, red, black, white, green |
seq_contains |
${colors.value?seq_contains('red')?string('Yes', 'No') |
Devuelve Yes porque la matriz contiene el rojo.
Nota: |
sort |
${colors.value?sort?join(',')} |
Devuelve la matriz de colores como una cadena separada por comas en orden ascendente: black, blue, green, red, white, yellow |
reverse |
${colors.value?sort?reverse?join(',')} |
Devuelve la matriz colors como una cadena separada por comas en orden descendente: yellow, blue, red, black, white, green |
Devolución de intenciones y puntuaciones
-
${skill.system.nlpresult.value.entityMatches[‘name of entity’]}
devuelve una matriz de las entidades encontradas en una cadena de usuario que se transfiere al motor de intenciones almacenado en la variablenlpresult
. -
${skill.system.nlpresult.value.intentMatches.summary[n].intent}
devuelve el nombre de la intención que tiene una clasificación de confianza den
, donde0
representa la intención con la clasificación superior,1
representa la segunda intención con la clasificación, etc. ${skill.system.nlpresult.value.intentMatches.summary[n].score}
devuelve la puntuación de confianza de la intención especificada.
n
es el índice del elemento que desea buscar. Por ejemplo, la expresión para devolver el nombre de intención resuelta principal sería:${skill.system.nlpresult.value.intentMatches.summary[0].intent}
Para la puntuación de la intención principal, la expresión sería:${skill.system.nlpresult.value.intentMatches.summary[0].score}
Puede utilizar estas expresiones para las intenciones que se puntúen por encima del umbral de confianza, pero también puede utilizarlas para devolver intenciones cuya puntuación esté por debajo del umbral de confianza. Estas expresiones no dependen del valor de umbral de confianza configurado en la página Configuración de la aptitud, por lo que puede utilizarlas para devolver las intenciones del candidato y sus puntuaciones incluso cuando no se haya resuelto ninguna intención y se haya activado una acción unresolvedIntent
. En este caso, puede, por ejemplo, utilizar estas expresiones para devolver las tres intenciones principales y sus puntuaciones de umbral de subconfianza.
Si necesita hacer referencia a la intención que un usuario ha seleccionado después de que se le pida que desambigue, puede utilizar
${system.intent.name}
. (${skill.system.nlpresult.value.intentMatches.summary[0].intent}
siempre devuelve la intención con la puntuación superior, que puede que no sea la intención que el usuario seleccione al desambiguar.
Ejemplo: iteración de matrices
Las matrices determinan el número de entidades en la entrada de usuario.
El siguiente fragmento de la propiedad Metadatos de un componente de respuesta común muestra cómo determinar el tamaño de la matriz retenida en la variable person
y, a continuación, iterar sobre sus elementos para que la aptitud genere algo parecido a lo siguiente:
responseItems:
- type: "text"
text: "${person?index+1}. ${person.firstName} ${person.lastName}"
name: "Sorry"
separateBubbles: true
iteratorVariable: "person"
La salida descrita en este código no se ordena (es decir, no se utiliza ninguna operación
sort_by
).
Operaciones de fecha de FreeMarker incorporadas
.now
, y el operador date
incorporado.
${.now?date}
Operaciones | Ejemplo | Salida |
---|---|---|
date |
${.now?date} |
Fecha actual |
time |
${.now?time} |
Hora del día, por ejemplo, 5:46:09 PM |
datetime |
${.now?datetime} |
Imprime la fecha y la hora actuales, por ejemplo, 17 de enero de 2018 5:36:13 PM. |
long y number_to_date |
${(.now?long + 86400000)?number_to_date } |
Añade 24 horas a la fecha actual. Si la llamada se realiza el 17 de enero de 2018, FreeMarker genera la fecha 18 de enero de 2018. |
string (con estilos de formato)
|
${.now?string.full} |
Convierte la fecha actual en una cadena con el formato miércoles, 17 de enero de 2018 6:35:12 PM UTC. |
${.now?string.long} |
Convierte la fecha en una cadena con la salida con este formato: 17 de enero de 2018 6:36:47 PM UTC. | |
${.now?string.short} |
Convierte la fecha en una cadena con la salida con este formato: 1/17/18 6:37 PM | |
${.now?string.medium} |
Convierte la fecha en una cadena con la salida con este formato: 17 de enero de 2018 6:38:35. | |
${.now?string.iso} |
Imprime la fecha según la norma ISO 8601, como 2018-01-17T18:54:01.129Z. |
|
string (con los formatos de salida especificados)
|
${.now?string['dd.MM.yyyy, HH:mm']} |
Imprime la fecha actual en un formato personalizado, por ejemplo, 17.01.2018, 18:58. |
${.now?string['yyyy']} |
2018 |
|
datetime (con string y estilo de formato)
|
${date_variable?datetime?string.short} |
Convierte la fecha en una cadena con el formato 1/17/18 6:37 PM.
El operador |
Conversión del valor de entidad en una cadena utilizando
|
${dateVar.value.date?long?number_to_date?date?string.short} |
Convierte la fecha de la extracción de la entidad en una cadena con el formato 11/17/18.
El operador date indica a FreeMarker que la variable contiene una fecha, pero no una hora. El uso de este formato evita errores. |
${dateVar.value.date?long?number_to_date?string.medium} |
Convierte la fecha derivada de la extracción de la entidad en una cadena con el formato 17 de enero de 2018.
Nota: todos los demás formatos, como |
|
${dateVar.value.date?long?number_to_date?string['dd.MM.yyyy']} |
Imprime la fecha en formato personalizado. Por ejemplo: 17.01.2018, 18:58. | |
${dateVar.value.date?long?number_to_date?string['yyyy']} |
Imprime la fecha derivada de la entidad en un formato personalizado. |
Ejemplo: extracción de fechas desde la entrada del usuario
DATE
, para extraer mañana de la solicitud. Muestra la fecha solicitada mediante ${(theDate.value.date?long + 86400000)?number_to_date}
para agregar 24 horas (o 86.400.000 milisegundos) a "mañana".
Texto con Expresión | Salida |
---|---|
|
|
|
|
|
|
Ejemplo: configuración de una fecha predeterminada (si no se establece ningún valor de fecha)
Si el mensaje del usuario no incluye información de fecha, la aptitud puede preguntar a los usuarios la fecha o proporcionar una fecha por defecto. Para proporcionar la fecha actual, puede utilizar la siguiente expresión:
${.now?datetime?string.long}
Variables del sistema a las que puede acceder FreeMarker
Oracle Digital Assistant tiene un juego de variables del sistema mediante el que se puede recuperar información útil en los flujos de diálogo mediante expresiones de FreeMarker.
En sus formas más sencillas, estas expresiones toman el siguiente formato:
${system.variableName}
Algunas variables pueden contener objetos con propiedades anidadas a las que se puede acceder utilizando la notación de puntos después del nombre de la variable en el formato siguiente.
${system.variableName.propertyName}
Además, los valores de propiedad anidada también pueden ser objetos con propiedades anidadas.
Estas son las variables del sistema que están disponibles mediante expresiones FreeMarker.
Variable | Descripción |
---|---|
system.actualState |
Nombre del estado al que ha navegado el usuario al pulsar un botón "en secuencia incorrecta" más antiguo. Si la carga útil de devolución contiene una propiedad system.state , el motor de diálogo navega a este estado y define esta variable en el nombre de dicho estado. Consulte también Configuración del flujo de diálogo para acciones inesperadas.
|
system.authorizedUsers |
Lista de todos los usuarios autorizados para un chat de grupo determinado. |
system.channelType |
Tipo de canal de la sesión de usuario actual. Valores permitidos: facebook , androidsdk , iossdk , websdk , slack , twilio , msteams , cortana , webhook y test .
Si la sesión se está ejecutando en el comprobador, el valor corresponde al tipo de canal que se está simulando. |
system.entityToResolve |
El objeto que representa el elemento de bolsa compuesta actual que resolver en el componente de respuesta común cuando la propiedad de variable del componente hace referencia a un objeto entity.The de bolsa compuesta tiene las siguientes propiedades:
Consulte Variable system.entityToResolve para obtener ejemplos sobre cómo utilizar |
system.errorAction |
Texto de mensaje de error generado por un error inesperado devuelto durante la ejecución del estado. |
system.errorState |
Nombre del estado que ha devuelto un error inesperado durante la ejecución. |
system.expectedState |
Cuando el usuario se desplaza al historial de mensajes y pulsa un botón"en secuencia incorrecta" más antiguo, esta variable se rellena con el nombre del estado que se esperaba ejecutar, pero que nunca se ejecutó porque el usuario decidió pulsar este botón "en secuencia incorrecta". Consulte también Configuración del flujo de diálogo para acciones inesperadas. |
system.intent.name |
Se utiliza para hacer referencia a la intención que ha seleccionado un usuario después de que se le pida que desambigue. (
siempre devuelve la intención con la puntuación superior, que puede que no sea la intención que el usuario seleccione al desambiguar). |
system.invalidUserInput |
Valor booleano establecido en true cuando la entrada de usuario no coincide con el tipo de variable solicitado.
|
system.message |
Último mensaje recibido por Oracle Digital Assistant. Esta variable incluye las propiedades siguientes:
|
system.requestedState |
Si un usuario accede a una conversación que se encuentra en un estado que requiere autorización y el usuario no está en la lista de usuarios almacenados en system.authorizedUsers , el motor de diálogo almacena el estado que tenía previsto ejecutar en esta variable.
|
system.selectedCardIndex |
Esta variable mantiene el índice de la tarjeta seleccionada al utilizar la función para optimizar la representación de tarjetas para canales de solo texto, como Twilio. Esta optimización permite al usuario seleccionar una tarjeta en un proceso de dos pasos: en primer lugar, se presenta una lista de tarjetas; a continuación, el usuario puede introducir el número de tarjetas que quiera seleccionar. El número de índice correspondiente de esta tarjeta se almacena en esta variable. |
Las variables del sistema de la tabla anterior son las únicas que puede utilizar en expresiones FreeMarker. Otras variables del sistema no son públicas y su uso está sujeto a cambios, lo que significa que sus habilidades no pueden confiar en ellas.
Por ejemplo, las variables system.routingFromSkill
, system.routingToSkill
, system.routingFromIntent
y system.routingToIntent
solo están disponibles para una configuración de asistente digital específica. Consulte Variables del sistema para asistentes digitales.