D Riferimento Apache FreeMarker
Operazioni FreeMarker stringa built-in
tester
, il cui valore viene inviato a "hello world "
(con tre spazi vuoti finali).
L'espressione seguente consente al bot di eseguire l'output del valore
tester
oppure, no string found
se non è stato impostato alcun valore per la variabile.${tester.value!'no string found'}
Operazione integrata | Utilizzo | Output |
---|---|---|
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 (i tre spazi finali vengono rimossi)
|
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 Le espressioni |
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'espressione regolare restituisce true o false)
|
${tester.value?matches('^([^0-9]*)$')} |
L'espressione regolare restituisce true o false a seconda che il valore contenga un numero (nel qual caso il valore booleano viene restituito come false ). Il valore tester restituisce true .
|
matches (l'espressione regolare restituisce una stringa)
|
${tester.value?matches('^([^0-9]*)$')?} |
Come sopra, ma questa volta, true viene restituito come una stringa. La funzione matches('regular expression') restituisce true o false come tipi booleani. Per stampare true o false in un componente System.Output , utilizzare ?string per eseguire una conversione to-string.
Nota: non è possibile utilizzare l'espressione regolare per restituire un gruppo di valori; utilizzarli per restituire un singolo valore corrispondente (o nessuna corrispondenza). |
Esempio: trasformazione del caso con il componente Switch
Immaginate un caso in cui diversi stati vengono chiamati a seconda dell'input dell'utente (vino o birra), che viene memorizzato nella variabile choice
.
upper_case
per rendere uniforme l'involucro:${choice.value?upper_case}
Esempio: concatenazione delle espressioni FTL
È inoltre possibile concatenare le operazioni FTL in una singola espressione.
flight.value
) di UA1234
e UA 1234
verranno entrambi trasformati in 1234
.
${flight.value?trim?lower_case?remove_beginning('ua ')?remove_beginning('ua')}"
Operazioni numero FreeMarker integrate
negativeValue
(-2.5) e positiveValue
(0.5175):
Operazione | Esempio | Output |
---|---|---|
abs |
${negativeValue.value?abs} |
2,5
L'operatore trasforma il valore numerico negativo in un valore positivo. |
string (utilizzato con un valore numerico)
|
${negativeValue.value?abs?string.percent} |
250%
L'operatore prima modifica il valore negativo in positivo. Quindi lo converte in percentuale, moltiplicando implicitamente il valore per 100. |
string (con il valore del formato decimale e varie valute)
Suggerimento: per gli altri simboli di valuta, vedere Charbase. |
${positiveValue.value?string['###.##']} |
0,51 |
${positiveValue.value?string['###.##%']} |
51%
L'operatore aggiunge un carattere percentuale dopo aver moltiplicato il valore per 100. |
|
${positiveValue.value?string['##.###\u00A4']} |
0,51 $ | |
${positiveValue.value?string['##.###\u20AC']} |
0,51 € | |
${positiveValue.value?string['##.###\u00A3']} |
0,51 £ | |
round |
${negativeValue.value?round} |
-2
L'operatore viene arrotondato al numero intero più vicino. Se il numero termina con .5, viene arrotondato verso l'alto. |
${positiveValue.value?round} |
1
L'operatore viene arrotondato al numero intero più vicino. Se il numero termina con .5, viene arrotondato verso l'alto. |
|
floor |
${positiveValue.value?floor} |
0
L'operatore viene arrotondato verso il basso. |
ceiling |
${positiveValue.value?ceiling} |
1
L'operatore viene arrotondato verso l'alto. |
lower_abc |
${negativeValue.value?abs?round?lower_abc} |
c
L'operatore trasforma il valore negativo in positivo, quindi lo arrotonda a 3. Restituisce c, la terza lettera dell'alfabeto. |
upper_abc |
${negativeValue.value?abs?round?upper_abc} |
c
L'operatore trasforma il valore negativo in positivo, quindi lo arrotonda a 3. Restituisce C, la terza lettera dell'alfabeto. |
is_infinite |
${positiveValue.value?is_infinite?string} |
false
L'operatore restituisce false, poiché un valore a virgola mobile non è infinito in base a IEEE 754 (standard per l'aritmetica a virgola mobile). Nota: il valore restituito sarebbe un valore booleano senza |
Operazioni di array FreeMarker integrate
Le operazioni di array (o sequenza) consentono al bot di determinare, tra le altre cose, le dimensioni di un array, ordinare gli array o trovare il contenuto all'interno di un array.
person
e colors
, rispettivamente.[
{
"firstName" : "Frank",
"lastName" : "Normal"
},
{
"firstName" : "Grant",
"lastName" : "Right"
},
{
"firstName" : "Geoff",
"lastName" : "Power"
},
{
"firstName" : "Marcelo",
"lastName" : "Jump"
}
]
[
"yellow", "blue", "red", "black", "white", "green"
]
Questi array vengono utilizzati per illustrare le operazioni degli array nella tabella riportata di seguito e nell'Esempio: iterazione degli array.
Operatore | Esempio | Output |
---|---|---|
size |
${person.value?size?number} |
4 : la dimensione (quattro membri) dell'array person
|
indice di array | ${person.value[1].firstName} |
Grant : è il valore della seconda proprietà firstName nell'array person .
|
${person.value[1].firstName !'unknown'} |
Come sopra, ma in questo caso, il bot restituisce un output sconosciuto se la seconda proprietà firstName non contiene alcun valore.
|
|
first |
${person.value?first.firstName} |
Frank : la prima voce dell'array di persone. Questa operazione non utilizza l'indice array.
|
last |
${person.value?last.firstName} |
Marcelo : il valore lastName finale nell'array persona.
|
sort_by |
${person.value?sort_by('lastName') [0].firstName} |
Marcelo Questo operatore ordina l'array
person in base alla proprietà lastName in ordine crescente. Viene quindi stampato il valore della proprietà firstName corrispondente per l'immissione finale nell'array persona:
Nota: a meno che non si salvi l'array ordinato in una variabile utilizzando |
${person.value?sort_by('lastName')?reverse[0].firstName} |
Grant : i valori vengono ordinati in modo decrescente:
|
|
seq_index_of |
${colors.value?seq_index_of('red')} |
2 : il valore dell'indice per il rosso nell'array di colori.
|
seq_last_index_of |
${colors.value?seq_last_index_of('red')} |
2 : l'ultimo valore di indice per il rosso nel
|
join |
${colors.value?join(',')} |
Restituisce l'array colors come stringa separata da virgole: yellow, blue, red, black, white, green |
seq_contains |
${colors.value?seq_contains('red')?string('Yes', 'No') |
Restituisce Yes perché l'array contiene il colore rosso.
Nota: |
sort |
${colors.value?sort?join(',')} |
Restituisce l'array di colori come stringa separata da virgole in ordine crescente: black, blue, green, red, white, yellow |
reverse |
${colors.value?sort?reverse?join(',')} |
Restituisce l'array colors come stringa separata da virgole in ordine decrescente: yellow, blue, red, black, white, green |
Restituzione di intenti e punteggi
-
${skill.system.nlpresult.value.entityMatches[‘name of entity’]}
restituisce un array di entità trovato in una stringa utente passata al motore degli intenti memorizzato nella variabilenlpresult
. -
${skill.system.nlpresult.value.intentMatches.summary[n].intent}
restituisce il nome dell'intento con classificazione di attendibilitàn
, dove0
rappresenta l'intento di primo livello,1
rappresenta l'intento di secondo livello e così via. ${skill.system.nlpresult.value.intentMatches.summary[n].score}
restituisce il punteggio di affidabilità per l'intento specificato.
n
è l'indice dell'elemento che si desidera cercare. Ad esempio, l'espressione che restituisce il nome dell'intento risolto più in alto sarà:${skill.system.nlpresult.value.intentMatches.summary[0].intent}
Per il punteggio dell'intento principale, l'espressione sarà:${skill.system.nlpresult.value.intentMatches.summary[0].score}
È possibile utilizzare queste espressioni per intenti con punteggio superiore alla soglia di affidabilità, ma è anche possibile utilizzarle per restituire intenti il cui punteggio è inferiore alla soglia di affidabilità. Queste espressioni non dipendono dal valore della soglia di affidabilità configurato nella pagina Impostazioni dello skill, pertanto è possibile utilizzarle per restituire gli intenti del candidato e i relativi punteggi anche quando non è stato possibile risolvere alcun intento e è stata attivata un'azione unresolvedIntent
. In questo caso, ad esempio, è possibile utilizzare queste espressioni per restituire i primi tre intenti e i relativi punteggi di soglia di sicurezza secondaria.
Se è necessario fare riferimento all'intento selezionato da un utente dopo la richiesta di disambiguazione, è possibile utilizzare
${system.intent.name}
. (${skill.system.nlpresult.value.intentMatches.summary[0].intent}
restituisce sempre l'intento con il punteggio più alto, che potrebbe non essere l'intento selezionato dall'utente durante la disambiguazione.
Esempio: iterazione degli array
Gli array determinano il numero di entità nell'input utente.
Il seguente snippet della proprietà Metadati di un componente Risposta comune mostra come determinare la dimensione dell'array contenuto nella variabile person
e quindi iterare i relativi elementi in modo che la competenza restituisca qualcosa di simile:
responseItems:
- type: "text"
text: "${person?index+1}. ${person.firstName} ${person.lastName}"
name: "Sorry"
separateBubbles: true
iteratorVariable: "person"
L'output descritto in questo codice non è ordinato, ovvero non viene utilizzata alcuna operazione
sort_by
.
Operazioni data FreeMarker integrate
.now
e l'operatore date
incorporato.
${.now?date}
Operazione/i | Esempio | Output |
---|---|---|
date |
${.now?date} |
La data corrente |
time |
${.now?time} |
L'ora del giorno, come 5:46:09 PM |
datetime |
${.now?datetime} |
Stampa la data e l'ora correnti, ad esempio 17 gen 2018 5:36:13 PM. |
long e number_to_date |
${(.now?long + 86400000)?number_to_date } |
Aggiunge 24 ore alla data corrente. Se la chiamata viene effettuata il 17 gennaio 2018, FreeMarker esce il 18 gennaio 2018. |
string (con stili di formattazione)
|
${.now?string.full} |
Converte la data corrente in stringa formattata come mercoledì 17 gennaio 2018 6:35:12 UTC. |
${.now?string.long} |
Converte la data in stringa con il seguente output formattato: 17 gennaio 20186:36:47 UTC PM. | |
${.now?string.short} |
Converte la data in stringa con il seguente output formattato: 1/17/18 6:37 PM | |
${.now?string.medium} |
Converte la data in stringa con il seguente output formattato: 17 gen 2018 6:38:35. | |
${.now?string.iso} |
Stampa la data nello standard ISO 8601, ad esempio 2018-01-17T18:54:01.129Z. |
|
string (con formati di output specificati)
|
${.now?string['dd.MM.yyyy, HH:mm']} |
Stampa la data corrente in un formato personalizzato, ad esempio 17.01.2018, 18:58. |
${.now?string['yyyy']} |
2.018 |
|
datetime (con string e stile di formattazione)
|
${date_variable?datetime?string.short} |
Converte la data in una stringa formattata come 1/17/18 6:37 PM.
L'operatore |
Conversione del valore dell'entità in una stringa mediante
|
${dateVar.value.date?long?number_to_date?date?string.short} |
Converte la data dall'estrazione dell'entità in una stringa formattata come 11/17/18.
L'operatore di data indica a FreeMarker che la variabile contiene solo informazioni sulla data e non sull'ora. L'uso di questo formato evita errori. |
${dateVar.value.date?long?number_to_date?string.medium} |
Converte la data derivata dall'estrazione dell'entità in una stringa formattata come 17 gennaio 2018.
Nota: tutti gli altri formati, ad esempio |
|
${dateVar.value.date?long?number_to_date?string['dd.MM.yyyy']} |
Stampa la data in formato personalizzato. ad esempio: 17.01.2018, 18:58. | |
${dateVar.value.date?long?number_to_date?string['yyyy']} |
Stampa la data derivata dall'entità in un formato personalizzato. |
Esempio: estrazione di date dall'input utente
DATE
, per estrarre domani dalla richiesta. Viene restituita la data richiesta utilizzando ${(theDate.value.date?long + 86400000)?number_to_date}
per aggiungere 24 ore (o 86.400.000 millisecondi) a "domani".
Testo con espressione | Output |
---|---|
|
|
|
|
|
|
Esempio: impostazione di una data predefinita (quando non viene impostato alcun valore data)
Se il messaggio utente non include informazioni sulla data, lo skill può richiedere agli utenti la data o fornire una data predefinita. Per specificare la data corrente, è possibile utilizzare l'espressione seguente:
${.now?datetime?string.long}
FreeMarker: variabili di sistema accessibili
Oracle Digital Assistant dispone di un set di variabili di sistema attraverso il quale è possibile recuperare informazioni utili nei flussi di dialogo mediante le espressioni FreeMarker.
Nelle loro forme più semplici, queste espressioni assumono la seguente forma:
${system.variableName}
Alcune variabili possono contenere oggetti con proprietà nidificate a cui è possibile accedere utilizzando la notazione a punti dopo il nome della variabile nel seguente modulo.
${system.variableName.propertyName}
Inoltre, i valori delle proprietà nidificate possono essere anche oggetti con proprietà nidificate.
Di seguito sono riportate le variabili di sistema disponibili mediante le espressioni FreeMarker.
Variabile | descrizione; |
---|---|
system.actualState |
Nome dello stato a cui l'utente ha navigato toccando un vecchio pulsante "fuori ordine". Se il payload di postback contiene una proprietà system.state , il motore della finestra di dialogo passerà a questo stato e imposterà questa variabile sul nome dello stato. Vedere anche Configurazione del flusso di finestre di dialogo per le azioni impreviste.
|
system.authorizedUsers |
Elenco di tutti gli utenti autorizzati per una determinata chat di gruppo. |
system.channelType |
Tipo di canale della sessione utente corrente. Valori consentiti: facebook , androidsdk , iossdk , websdk , slack , twilio , msteams , cortana , webhook e test .
Se la sessione è in esecuzione nel tester, il valore corrisponde al tipo di canale simulato. |
system.entityToResolve |
L'oggetto che rappresenta l'elemento sacchetto composito corrente da risolvere nel componente Risposta comune quando la proprietà variabile del componente si riferisce a un oggetto sacchetto composito entity.The ha le seguenti proprietà:
Per esempi su come utilizzare |
system.errorAction |
Testo del messaggio di errore di un errore imprevisto restituito durante l'esecuzione dello stato. |
system.errorState |
Nome dello stato che ha restituito un errore imprevisto durante l'esecuzione. |
system.expectedState |
Quando l'utente scorre la cronologia dei messaggi e tocca un vecchio pulsante "fuori ordine", questa variabile viene popolata con il nome dello stato che si prevedeva di eseguire, ma non è mai stata eseguita perché l'utente ha deciso di toccare questo pulsante "fuori ordine". Vedere anche Configurazione del flusso di finestre di dialogo per le azioni impreviste. |
system.intent.name |
Utilizzare per fare riferimento all'intento selezionato da un utente dopo che è stato chiesto di disambiguare. (
restituisce sempre l'intento con il punteggio più alto, che potrebbe non essere l'intento selezionato dall'utente durante la disambiguazione). |
system.invalidUserInput |
Valore booleano impostato su true quando l'input utente non può essere corrispondente al tipo di variabile richiesto.
|
system.message |
Ultimo messaggio ricevuto da Oracle Digital Assistant. Questa variabile dispone delle proprietà riportate di seguito.
|
system.requestedState |
Se un utente immette una conversazione in uno stato che richiede l'autorizzazione e non si trova nella lista di utenti memorizzati in system.authorizedUsers , il modulo di gestione della finestra di dialogo memorizza lo stato che intende eseguire in questa variabile.
|
system.selectedCardIndex |
Questa variabile contiene l'indice della scheda selezionata quando si utilizza la funzione per ottimizzare il rendering delle schede per canali di solo testo come Twilio. Questa ottimizzazione consente all'utente di selezionare una carta in un processo in due fasi: prima viene presentato un elenco di carte, quindi l'utente può inserire il numero delle carte che desidera selezionare. Il numero di indice corrispondente di questa scheda viene memorizzato in questa variabile. |
Le variabili di sistema nella tabella precedente sono le uniche che è possibile utilizzare nelle espressioni FreeMarker. Altre variabili di sistema non sono pubbliche e il loro utilizzo è soggetto a modifiche, il che significa che le tue abilità non possono fare affidamento su di esse.
Ad esempio, le variabili system.routingFromSkill
, system.routingToSkill
, system.routingFromIntent
e system.routingToIntent
sono disponibili solo per impostazioni specifiche dell'assistente digitale. Vedere Variabili di sistema per assistenti digitali.