Metodi del linguaggio di espressione per le azioni

Il linguaggio di espressione dell'assistente AI può essere utilizzato per specificare valori indipendenti o derivati dai valori raccolti nei passi o memorizzati nelle variabili di sessione. È possibile utilizzare un'espressione per definire una condizione di passaggio o per definire il valore di una variabile di sessione.

Il linguaggio di espressione dell'assistente AI si basa sullo Spring Expression LanguageSpEL), ma con alcune importanti differenze nella sintassi. Per informazioni dettagliate su SpEL, vedere Spring Expression Language (SpEL).

È possibile utilizzare le espressioni SpEL in due modi:

Riferimento a variabili d'azione

Una variabile di azione viene creata implicitamente per ogni passo che richiede un input da parte del cliente e la variabile è legata al passo. Per fare riferimento a una variabile d'azione all'interno di un'espressione, è necessario specificare l'ID del passo utilizzando il formato '${step_id} (ad esempio, '${step_771}. Per trovare l'ID di un passo, selezionare il passo e poi guardare la fine del sito URL nel browser.

Riferimento a variabili di sessione

Le variabili di sessione vengono create esplicitamente nella sezione Variabili del passo. Per fare riferimento a una variabile di sessione all'interno di un'espressione, è necessario specificare l'ID della variabile utilizzando il formato '${variable_id} (ad esempio, '${current_time}. L'ID della variabile si trova nell'elenco delle variabili. (Per ulteriori informazioni, vedere Uso delle variabili per gestire le informazioni sulle conversazioni)

Quando si modifica un'espressione, si può digitare '$ per visualizzare un elenco di variabili a cui fare riferimento. Selezionare una variabile dall'elenco per inserire automaticamente l'ID del passo o l'ID della variabile.

Tipi di dati supportati

Le espressioni possono utilizzare tipi JSON atomici (come 'integer, 'string, 'number e 'boolean) e tipi di dati composti (come array JSON ([]) e oggetti ({}). Quando si specificano valori letterali di stringa, si possono usare virgolette singole (') o doppie (").

I valori che le fasi di azione raccolgono dai clienti utilizzano tipi di risposta del cliente come data, ora, valuta o percentuale. Questi valori sono memorizzati come oggetti JSON nel seguente formato:

{
  "system_type": "{system_type}",
  "value": "{value}"
}

dove " {system_type} è uno dei seguenti tipi:

  • time
  • percentage
  • currency

Metodi di data e ora

Sono disponibili diversi metodi per lavorare con i valori di data e ora.

now(String timezone)

Il metodo 'now() restituisce la data e l'ora correnti per un fuso orario specificato, nel formato 'yyyy-MM-dd HH:mm:ss 'GMT'XXX:

now('Australia/Sydney').

In questo esempio, se la data e l'ora correnti sono '2021-11-26 11:41:00, la stringa restituita è '2021-11-26 21:41:00 GMT+10.00 o '2021-11-26 21:41:00 GMT+11.00, a seconda dell'ora legale.

La modifica del formato della stringa di output è applicabile anche ai metodi di calcolo della data e dell'ora. Ad esempio, se la stringa '<date> utilizzata è nel formato 'yyyy-MM-dd HH:mm:ss, come quando si utilizza il metodo 'today(), l'output è nello stesso formato (yyyy-MM-dd HH:mm:ss). Tuttavia, se la stringa '<date> è nel formato 'yyyy-MM-dd HH:mm:ss 'GMT'XXX, come quando si utilizza il metodo 'now(), l'output è nel formato 'yyyy-MM-dd HH:mm:ss 'GMT'XXX.

.reformatDateTime(String format)

Formatta le stringhe di data e ora per l'output. Il parametro è una stringa di formato che specifica la formattazione del valore della data o dell'ora. La stringa di formato deve essere specificata utilizzando la sintassi Java SimpleDateFormat.

Questo metodo restituisce una stringa formattata secondo il formato specificato:

  • MM/dd/yyyy per 12/31/2016
  • h a per 10pm

Per restituire il giorno della settimana:

  • EEEE per martedì
  • E per Mar
  • u per l'indice del giorno (1 = lunedì, ..., 7 = Domenica)

Ad esempio, questa espressione restituisce il valore 17:30:00 come '5:30 PM:

${system_current_date}.reformatDateTime('h:mm a')

Se la stringa di input include solo l'ora, nell'output viene utilizzata la data predefinita " 1970-01-01 ". Se la stringa di input include solo una data, viene utilizzato l'orario predefinito " 12 AM (00:00) ".

.before(String date/time)

  • Determina se un valore di data e ora è precedente all'argomento di data e ora specificato, come in questo esempio:
${system_current_date}.before('2021-11-19')

È possibile confrontare una data con un'altra data o un'ora con un'altra ora. È anche possibile confrontare un tempo con un valore di data e ora, nel qual caso la data viene ignorata e vengono confrontati solo i tempi. Qualsiasi altro confronto di valori non corrispondenti (ad esempio, il confronto di una data con un'ora) restituisce 'false, mentre un'eccezione viene registrata in 'output.debug.log_messages (che si può vedere nell'anteprima dell'assistente AI o nelle risposte API).

.after(String date/time)

  • Determina se il valore della data e dell'ora è successivo all'argomento della data e dell'ora.

.sameMoment(String date/time)

  • Determina se il valore della data e dell'ora è uguale all'argomento della data e dell'ora.

.sameOrAfter(String date/time)

  • Determina se il valore della data e dell'ora è successivo o uguale all'argomento della data e dell'ora.
  • Simile a .after().

.sameOrBefore(String date/time)

  • Determina se il valore della data e dell'ora è precedente o uguale all'argomento della data e dell'ora.

Calcoli di data e ora

Utilizza i seguenti metodi per calcolare una data.

Calcoli della data
Metodo Descrizione
<date>.minusDays(_n_) Restituisce la data del giorno n giorni prima della data specificata.
<date>.minusMonths(_n_) Restituisce la data del giorno n mesi prima della data specificata.
<date>.minusYears(_n_) Restituisce la data del giorno n anni prima della data specificata.
<date>.plusDays(_n_) Restituisce la data del giorno n giorni dopo la data specificata.
<date>.plusMonths(_n_) Restituisce la data del giorno n mesi dopo la data specificata.
<date>.plusYears(n) Restituisce la data del giorno n anni dopo la data specificata.

dove " <date> è specificato nel formato " yyyy-MM-dd o " yyyy-MM-dd HH:mm:ss.

Ad esempio, per ottenere la data di domani, specificare la seguente espressione:

${system_current_date}.plusDays(1)

Utilizzare i seguenti metodi per calcolare un tempo.

Calcolo del tempo
Metodo Descrizione
<time>.minusHours(_n_) Restituisce l'ora n ore prima dell'ora specificata.
<time>.minusMinutes(_n_) Restituisce l'ora n minuti prima dell'ora specificata.
<time>.minusSeconds(_n_) Restituisce l'ora n secondi prima dell'ora specificata.
<time>.plusHours(_n_) Restituisce l'ora n ore dopo l'ora specificata.
<time>.plusMinutes(_n_) Restituisce l'ora n minuti dopo l'ora specificata.
<time>.plusSeconds(_n_) Restituisce l'ora n secondi dopo l'ora specificata.

dove " <time> è specificato nel formato " HH:mm:ss.

Ad esempio, per ottenere l'ora a partire da un'ora, specificare la seguente espressione:

 now().plusHours(1)  

Utilizzo degli intervalli di tempo

Per mostrare una risposta in base al fatto che la data odierna rientri in un certo intervallo di tempo, è possibile utilizzare una combinazione di metodi legati al tempo. Ad esempio, se ogni anno fate un'offerta speciale durante le festività natalizie, potreste voler verificare se la data odierna cade tra il 25 novembre e il 24 dicembre di quest'anno.

Innanzitutto, definire le date di interesse come variabili di sessione. Nelle seguenti espressioni della variabile di sessione data iniziale e data finale, la data viene costruita concatenando il valore dinamico dell'anno corrente con i valori hardcoded del mese e del giorno:

start_date = now().reformatDateTime('Y') + '-12-24'
end_date = now().reformatDateTime('Y') + '-11-25'

Poi, in una condizione di passo, si può indicare che si vuole mostrare la risposta solo se la data corrente cade tra le date di inizio e fine definite come variabili di sessione:

now().after(${start_date}) && now().before(${end_date})

java.util.Date supporto

Oltre ai metodi integrati, puoi utilizzare i metodi standard della classe java.util.Date.

Ad esempio, per ottenere la data del giorno che cade a una settimana da oggi, si può usare la seguente sintassi:

new Date(new Date().getTime() + (7 * (24*60*60*1000L)))

Questa espressione richiama innanzitutto la data corrente in millisecondi (da January 1, 1970, 00:00:00 GMT). Calcola anche il numero di millisecondi in 7 giorni (il(24*60*60*1000L) rappresenta un giorno in millisecondi). Quindi aggiunge 7 giorni alla data corrente. Il risultato è la data completa del giorno che cade a una settimana da oggi (ad esempio, " Fri Jan 26 16:30:37 UTC 2018).

Metodi numerici

Questi metodi ti consentono di acquisire e riformattare i valori numerici.

Per informazioni sul riconoscimento dei numeri nelle risposte dei clienti, vedere Scelta del tipo di risposta.

Per modificare la posizione decimale di un numero (ad esempio, per riformattare un numero come valore di valuta), vedere il metodo String format().

toDouble()

Converte l'oggetto o il campo nel tipo di numero Doppio. Puoi chiamare questo metodo su qualsiasi oggetto o campo. Se la conversione non riesce, viene restituito null.

toInt()

Converte l'oggetto o il campo nel tipo di numero Intero. Puoi chiamare questo metodo su qualsiasi oggetto o campo. Se la conversione non riesce, viene restituito null.

toLong()

Converte l'oggetto o il campo nel tipo di numero Lungo. Puoi chiamare questo metodo su qualsiasi oggetto o campo. Se la conversione non riesce, viene restituito null.

Per specificare un tipo di numero Long in un'espressione SpEL, è necessario aggiungere un " L al numero per identificarlo come tale (ad esempio, " 5000000000L). Questa sintassi è necessaria per tutti i numeri che non rientrano nel tipo Integer a 32 bit. I numeri maggiori di 2^31 (2.147.483.648) o minori di -2 (-2.147.483.648) sono considerati numeri lunghi. I tipi di numero Lungo hanno un valore minimo di -2^63 e un valore massimo di 2^63-1 (o 9.223.372.036.854.775.807).

Matematica standard

Utilizza le espressioni SpEL per definire le equazioni matematiche standard dove gli operatori sono rappresentati utilizzando questi simboli:

Matematica standard
Operazione aritmetica Simbolo
aggiunta +
divisione,reparto /
moltiplicazione *
sottrazione -

java.lang.Math()

È possibile utilizzare le funzioni della classe java.lang.Math per eseguire operazioni numeriche di base.

È possibile utilizzare i metodi della Classe, tra cui:

  • max():

    T(Math).max(${step_297},${step_569})
    
  • min():

    T(Math).min(${step_297},${step_569})
    
  • pow():

    T(Math).pow(${step_297}.toDouble(),2.toDouble())
    

Per informazioni sugli altri metodi, consultare la documentazione di riferimento dijava.lang.Math.

java.util.Random()

Restituisce un numero casuale. È possibile utilizzare una delle seguenti opzioni di sintassi:

  • Per restituire un valore booleano casuale (true o " false), utilizzare " new Random().nextBoolean().
  • Per restituire un numero doppio casuale compreso tra 0 (incluso) e 1 (escluso), utilizzare 'new Random().nextDouble()
  • Per restituire un numero intero casuale compreso tra 0 (incluso) e un numero specificato dall'utente, utilizzare 'new Random().nextInt(_n_), dove n è 1 maggiore del massimo dell'intervallo di numeri desiderato. Ad esempio, se si desidera restituire un numero casuale compreso tra 0 e 10, specificare " new Random().nextInt(11).
  • Per restituire un numero intero casuale dall'intero intervallo di valori interi (da -2147483648 a 2147483648), utilizzare 'new Random().nextInt().

Ad esempio, si può creare un passo che viene eseguito solo per un sottoinsieme di clienti selezionati in modo casuale. La seguente condizione di passo significa che il passo ha il 50% di probabilità di essere eseguito:

new Random().nextInt(2) == 1

Per informazioni sugli altri metodi, consultare la documentazione di riferimento dijava.util.Random.

È inoltre possibile utilizzare i metodi standard delle seguenti classi:

  • java.lang.Byte
  • java.lang.Integer
  • java.lang.Long
  • java.lang.Double
  • java.lang.Short
  • java.lang.Float

Metodi stringa

Questi metodi aiutano a lavorare con il testo.

Per i dettagli sulla sintassi da utilizzare nei metodi che coinvolgono le espressioni regolari, vedere il riferimento alla sintassi diRE2.

String.append(Object)

Questo metodo aggiunge un oggetto di input (come stringa) a una stringa e restituisce una stringa modificata.

${step_297}.append('next text')

String.contains(String)

Questo metodo restituisce 'true se la variabile azione o la variabile di sessione contiene una sottostringa, utile nelle condizioni.

${step_297}.contains('Yes')

String.endsWith(String)

Questo metodo restituisce 'true se la stringa termina con la sottostringa in ingresso.

${step_297}.endsWith('?')

String.equals(String)

Questo metodo restituisce 'true se la stringa specificata corrisponde alla variabile azione o alla variabile di sessione.

${step_297}.equals('Yes')

String.equalsIgnoreCase(String)

Questo metodo restituisce 'true se la stringa specificata corrisponde alla variabile azione o alla variabile di sessione, indipendentemente dal caso.

${step_297}.equalsIgnoreCase('Yes')

String.extract(String regexp, Integer groupIndex)

Questo metodo restituisce una stringa dall'input che corrisponde al modello di gruppo di espressioni regolari specificato. Restituisce una stringa vuota se non vengono trovate corrispondenze.

Questo metodo è progettato per estrarre le corrispondenze per i diversi gruppi di modelli regex, non le diverse corrispondenze per un singolo modello regex. Per trovare diverse corrispondenze, vedere il metodo getMatch().

In questo esempio, la variabile azione salva una stringa che corrisponde al gruppo di pattern regex specificato dall'utente. Nell'espressione, sono definiti due gruppi di modelli regex, ciascuno racchiuso tra parentesi. Un terzo gruppo, composto dai due gruppi, è quello intrinseco. Questo è il primo gruppo regexgroupIndex 0); corrisponde a una stringa che contiene l'intero gruppo di numeri e il gruppo di testo. Il secondo gruppo regex (groupIndex 1) corrisponde alla prima ricorrenza di un gruppo di numeri. Il terzo gruppo (groupIndex 2) corrisponde alla prima ricorrenza di un gruppo di testo dopo un gruppo di numeri.

${step_297}.extract('([\d]+)(\b [A-Za-z]+)', <n>)

Se la variabile azione contiene:

Hello 123 this is 456.

i risultati sono i seguenti:

  • Quando '<n>=0, il valore è '123 this.
  • Quando '<n>=1, il valore è '123.
  • Quando '<n>=2, il valore è 'this.

String.find(String regexp)

Questo metodo restituisce 'true se un qualsiasi segmento della stringa corrisponde all'espressione regolare inserita. Questo metodo può essere richiamato per un elemento JSONArray o JSONObject e converte l'array o l'oggetto in una stringa prima di effettuare il confronto.

Ad esempio, se la variabile d'azione '${step_297} raccoglie la stringa 'Hello 123456, la seguente espressione restituisce 'true:

${step_297}.find('^[^\d]*[\d]{6}[^\d]*$')

La condizione è 'true perché la parte numerica del testo inserito corrisponde all'espressione regolare '^[^\d]*[\d]{6}[^\d]*$.

String.getMatch(String regexp, Integer matchIndex)

Questo metodo restituisce una stringa che corrisponde all'occorrenza del modello di espressione regolare specificato. Questo metodo restituisce una stringa vuota se non vengono trovate corrispondenze.

Man mano che vengono trovate, le corrispondenze vengono aggiunte a quello che si può considerare un array di corrispondenze. Poiché il conteggio degli elementi dell'array parte da 0, se si vuole restituire la terza corrispondenza, si deve specificare 2 come valore di 'matchIndex. Ad esempio, se immetti una stringa di testo con tre parole che corrispondono al modello specificato, puoi restituire solo la prima, la seconda o la terza corrispondenza specificando il suo valore di indice.

Ad esempio, l'esempio seguente cerca un gruppo di numeri in una variabile azione.

${step_297}.getMatch('([\d]+)', 1)

Se la variabile azione '${step_297} contiene la stringa 'hello 123 i said 456 and 8910, questa espressione restituisce '456.

String.isEmpty()

Questo metodo restituisce 'true se la stringa è vuota, ma non 'null, come in questo esempio:

${step_297}.isEmpty()

String.length()

Questo metodo restituisce la lunghezza dei caratteri della stringa, come in questo esempio:

${step_297}.length()

Se la variabile d'azione '${step_297} contiene la stringa 'Hello, questa espressione restituisce 5.

String.matches(String regexp)

Questo metodo restituisce 'true se la stringa corrisponde all'espressione regolare inserita, come nell'esempio:

${step_297}.matches('^Hello$')

Se la variabile d'azione '${step_297} contiene la stringa 'Hello, questa espressione viene valutata come 'true.

String.startsWith(String)

Questo metodo restituisce 'true se la stringa inizia con la sottostringa specificata, come in questo esempio:

${step_297}.startsWith('What')

Se la variabile azione '${step_297} contiene la stringa 'What is your name?, questa espressione restituisce 'true.

String.substring(Integer beginIndex, Integer endIndex)

Questo metodo restituisce una sottostringa che inizia con il carattere in corrispondenza di 'beginIndex e termina con il carattere prima di 'endIndex. (Il carattere " endIndex non è incluso nella sottostringa) I valori dell'indice sono basati su zero, quindi il primo carattere della stringa si trova all'indice 0.

Questo esempio restituisce una sottostringa che inizia dall'indice 5 (che è il sesto carattere) e continua fino alla fine della stringa:

${step_297}.substring(5, ${step_297}.length())

Se la variabile azione '${step_297} contiene la stringa 'This is a string., questa espressione restituisce 'is a string.

String.toJson()

Questo metodo analizza una stringa contenente dati JSON e restituisce un oggetto o un array JSON, come in questo esempio:

${json_var}.toJson()

Se la variabile di sessione " ${json_var} contiene la seguente stringa:

"{ \"firstname\": \"John\", \"lastname\": \"Doe\" }"

il metodo 'toJson() restituisce il seguente oggetto:

{
  "firstname": "John",
  "lastname": "Doe"
}

String.toLowerCase()

Questo metodo restituisce la stringa specificata che viene convertita in lettere minuscole, come in questo esempio:

${step_297}.toLowerCase()

Se la variabile azione '${step_297} contiene la stringa 'This is A DOG!, questa espressione restituisce la stringa 'this is a dog!.

String.toUpperCase()

Questo metodo restituisce la stringa originale convertita in lettere maiuscole, come in questo esempio:

${step_297}.toUpperCase()

Se la variabile azione '${step_297} contiene la stringa 'hi there, questo metodo restituisce la stringa 'HI THERE.

String.trim()

Questo metodo taglia gli spazi all'inizio e alla fine di una stringa e restituisce la stringa modificata, come in questo esempio:

${step_297}.trim()

Se la variabile azione '${step_297} contiene la stringa ' something is here , questo metodo restituisce la stringa 'something is here.

java.lang.String supporto

Oltre ai metodi integrati, puoi utilizzare i metodi standard della classe java.lang.String.

java.lang.String.format()

Puoi applicare il metodo Java String format() standard al testo. Per informazioni sulla sintassi da utilizzare, vedere Sintassi delle stringhe di formato.

Questo esempio prende tre numeri interi decimali (1, 1 e 2) e li aggiunge a una frase:

T(java.lang.String).format('%d + %d equals %d', 1, 1, 2)

La stringa risultante è '1 + 1 equals 2.

Questo esempio modifica la posizione decimale di un numero raccolto da un passo:

T(String).format('%.2f',${step_297})

Se la variabile '${step_297} che deve essere formattata in dollari USA è 4.5, la stringa risultante è '4.50.

Metodi di array

Questi metodi aiutano a lavorare con gli array.

Array.add(value...)

Questo metodo aggiunge uno o più nuovi valori all'array e restituisce 'true se l'operazione ha successo.

${Items}.add('four', 'five')

Se 'Items è '['one', 'two', 'three'], questo esempio lo aggiorna al posto di '['one', 'two', 'three', 'four', 'five'].

Array.addAll(Array array)

Questo metodo aggiunge un array a un altro e restituisce 'null.

${Items}.addAll(${New_items})

Se 'Items è '['one', 'two', 'three'] e 'New_items è '['four', 'five', 'six'], questo esempio aggiorna 'Items al posto di '['one', 'two', 'three', 'four', 'five', 'six'].

Array.append(value...)

Questo metodo aggiunge uno o più nuovi valori all'array e restituisce il risultato come un nuovo array. L'array originale non viene modificato.

${Items}.append('four', 'five')

Se 'Items è '['one', 'two', 'three'], questo esempio restituisce il nuovo array '['one', 'two', 'three', 'four', 'five'].

Array.clear()

Questo metodo rimuove tutti i valori dall'array e restituisce null.

${Items}.clear()

Dopo la valutazione di questa espressione, 'Items è un array vuoto ([]).

Array.contains(value)

Questo metodo restituisce 'true se l'array contiene un elemento esattamente uguale al valore di input. Il valore specificato può essere una stringa o un numero.

${Items}.contains(123)

Se 'Items è '[123, 456, 789], questo esempio restituisce 'true.

Array.containsIgnoreCase(value)

Questo metodo restituisce 'true se l'array contiene un elemento uguale al valore di input. Le stringhe vengono abbinate indipendentemente dal fatto che il valore sia specificato in lettere maiuscole o minuscole. Il valore specificato può essere una stringa o un numero.

${Items}.contains('two')

Questo esempio restituisce " true se l'array " Items contiene una qualsiasi capitalizzazione della stringa " two (ad esempio, anche " TWO o " Two corrisponderebbero).

Array.filter(temp_var, "temp_var.property operator comparison_value")

Filtra una matrice confrontando ogni elemento della matrice con un valore specificato dall'utente, restituendo una nuova matrice contenente solo gli elementi corrispondenti.

L'espressione di filtro è composta dai seguenti valori:

  • temp_var: un nome arbitrario per una variabile temporanea che viene utilizzata per contenere ogni elemento dell'array durante la sua valutazione. Ad esempio, se l'array originale contiene oggetti che descrivono città, si può usare 'city come nome della variabile temporanea.

  • property: La proprietà dell'elemento che si vuole filtrare. Deve essere una proprietà degli elementi dell'array di origine. Specificare la proprietà come proprietà di 'temp_var, utilizzando la sintassi 'temp_var.property. Ad esempio, se 'latitude è un nome di proprietà valido per gli elementi sorgente, si può specificare la proprietà come 'city.latitude.

  • operator: L'operatore da utilizzare per confrontare il valore della proprietà con il valore di confronto. È possibile utilizzare uno dei seguenti operatori:

    Operatori di filtraggio supportati
    Operatore Descrizione
    == È uguale a
    > È maggiore di
    < È minore di
    >= È maggiore di o uguale a
    <= È minore di o uguale a
    != Non è uguale a
  • comparison_value: il valore con cui si vuole confrontare il valore della proprietà di ciascun elemento della matrice. È possibile specificare un valore letterale o un riferimento a una variabile.

Esempi di filtri

Ad esempio, si potrebbe avere un array di oggetti che contengono i nomi delle città e il loro numero di abitanti:

[
   {
      "name":"Tokyo",
      "population":13988129

   },
   {
      "name":"Rome",
      "population":2860009

   },
   {
      "name":"Beijing",
      "population":21893095

   },
   {
      "name":"Paris",
      "population":2165423

   }
]

Se l'array di origine è memorizzato in una variabile chiamata " ${cities}, la seguente espressione restituisce un array più piccolo che contiene solo le città con popolazione superiore a 5 milioni:

${cities}.filter("city", "city.population > 5000000")

L'espressione restituisce il seguente array filtrato:

[
   {
      "name":"Tokyo",
      "population":13988129

   },
   {
      "name":"Beijing",
      "population":21893095

   }
]

Invece di un valore di confronto codificato, si può anche filtrare in base a un valore dinamico memorizzato in una variabile. Questo esempio filtra utilizzando un valore di popolazione specificato da una risposta del cliente in una fase precedente:

${cities}.filter("city", "city.population > ${step_123}")

Quando si confrontano i valori numerici, assicurarsi di impostare la variabile di contesto coinvolta nel confronto su un valore valido prima di attivare il metodo di filtro. Tieni presente che null può essere un valore valido se l'elemento dell'array con cui lo stai confrontando potrebbe contenerlo.

Array.get(Integer index)

Questo metodo restituisce l'elemento dell'array che si trova nella posizione di indice specificata. Gli array sono indicizzati a zero, il che significa che il primo elemento dell'array si trova alla posizione di indice '0.

${Items}.get(1)

Se 'Items è '['one', 'two', 'three'], questo esempio restituisce 'two.

Il metodo " get() è un'alternativa all'uso delle parentesi ([]) per recuperare un elemento da un array. Anche il seguente esempio è valido e restituisce lo stesso risultato:

${Items}[1]

Se si utilizza un valore specificato da un cliente per scegliere un elemento da una matrice, potrebbe essere necessario sottrarre 1 per convertire in un valore con indice zero. Ad esempio, si può usare un'espressione come '${Items}.get(${step_123} - 1) per recuperare il valore desiderato.

Array.getRandomItem()

Questo metodo restituisce un elemento scelto a caso dall'array.

${Items}.getRandomItem()

Se 'Items è '['one', 'two', 'three'], questo esempio restituisce 'one, 'two o 'three, in modo casuale.

Array.indexOf(value)

Questo metodo restituisce la posizione dell'indice della prima occorrenza del valore di input nell'array, oppure '-1 se l'array non contiene il valore di input. Il valore specificato può essere una stringa o un numero.

${Items}.indexOf(`two`)

Se 'Items è '['one', 'two', 'three'], questo esempio restituisce il numero intero '1 (che indica la seconda posizione nell'array a indicizzazione zero).

Array.join(String delimiter)

Questo metodo unisce tutti i valori di questo array a una stringa. I valori vengono convertiti in stringa e delimitati dal delimitatore di input.

Ad esempio, si può utilizzare una variabile denominata 'pizza_toppings che contiene l'array '["pepperoni", "ham", "mushrooms"]. La seguente espressione converte questo array nella stringa 'pepperoni, ham, mushrooms:

${toppings_array}.join(', ')

Se si utilizza questa espressione per definire il valore di una variabile, è possibile fare riferimento a tale variabile nell'output dell'assistente AI per creare un messaggio leggibile dall'uomo (ad esempio, " You have selected the following toppings: pepperoni, ham, mushrooms).

JSONArray.joinToArray(template, retainDataType)

Questo metodo estrae le informazioni da ogni elemento dell'array e costruisce un nuovo array formattato secondo il modello specificato. Il modello può essere una stringa, un oggetto JSON o un array. Il metodo restituisce un array di stringhe, un array di oggetti o un array di array, a seconda del tipo di modello.

Questo metodo è utile per formattare le informazioni come stringa da restituire come parte dell'output di un passo o per trasformare i dati in una struttura diversa, in modo da poterli usare con un'API esterna.

Nel modello, è possibile fare riferimento ai valori della matrice di origine utilizzando la seguente sintassi:

%e.{property}%

dove '{property} rappresenta il nome della proprietà nell'array di origine.

Ad esempio, supponiamo che l'assistente AI memorizzi un array contenente i dettagli del volo in una variabile di sessione. I dati memorizzati potrebbero avere il seguente aspetto:

"flights": [
      {
        "flight": "AZ1040",
        "origin": "JFK",
        "carrier": "Alitalia",
        "duration": 485,
        "destination": "FCO",
        "arrival_date": "2019-02-03",
        "arrival_time": "07:00",
        "departure_date": "2019-02-02",
        "departure_time": "16:45"
      },
      {
        "flight": "DL1710",
        "origin": "JFK",
        "carrier": "Delta",
        "duration": 379,
        "destination": "LAX",
        "arrival_date": "2019-02-02",
        "arrival_time": "10:19",
        "departure_date": "2019-02-02",
        "departure_time": "07:00"
      },
      {
        "flight": "VS4379",
        "origin": "BOS",
        "carrier": "Virgin Atlantic",
        "duration": 385,
        "destination": "LHR",
        "arrival_date": "2019-02-03",
        "arrival_time": "09:05",
        "departure_date": "2019-02-02",
        "departure_time": "21:40"
      }
    ]

Per costruire un array di stringhe che descrivano questi voli in una forma leggibile dall'utente, si può usare la seguente espressione:

${Flight_data}.joinToArray("Flight %e.flight% to %e.destination%", true)

Questa espressione restituisce il seguente array di stringhe: '["Flight AZ1040 to FCO","Flight DL1710 to LAX","Flight VS4379 to LHR"].

Il parametro opzionale 'retainDataType specifica se il metodo conserva il tipo di dati di tutti i valori di input nell'array restituito. Se 'retainDataType è impostato su 'false o omesso, in alcune situazioni le stringhe nell'array di input potrebbero essere convertite in numeri nell'array restituito. Ad esempio, se i valori selezionati dall'array di input sono '"1", '"2" e '"3", l'array restituito potrebbe essere '[ 1, 2, 3 ]. Per evitare conversioni di tipo impreviste, specificare 'true per questo parametro.

Modelli complessi

Un modello più complesso può contenere una formattazione che visualizza le informazioni in modo leggibile. Per un modello complesso, si potrebbe voler memorizzare il modello in una variabile di sessione, da passare al metodo 'joinToArray al posto di una stringa.

Ad esempio, questo modello complesso contiene un sottoinsieme degli elementi della matrice, aggiungendo etichette e formattazione:

<br/>Flight number: %e.flight% <br/> Airline: %e.carrier% <br/> Departure date: %e.departure_date% <br/> Departure time: %e.departure_time% <br/> Arrival time: %e.arrival_time% <br/>

Assicurarsi che la formattazione utilizzata nel modello sia supportata dall'integrazione del canale che visualizza l'output dell'assistente AI.

Se si crea una variabile di sessione denominata 'Template e si assegna a questo modello il suo valore, è possibile utilizzare la variabile nelle espressioni:

${Flight_data}.joinToArray(${Template})

In fase di esecuzione, la risposta sarà simile a questa:

Flight number: AZ1040
Airline: Alitalia
Departure date: 2019-02-02
Departure time: 16:45
Arrival time: 07:00

Flight number: DL1710
Airline: Delta
Departure date: 2019-02-02
Departure time: 07:00
Arrival time: 10:19

Flight number: VS4379
Airline: Virgin Atlantic
Departure date: 2019-02-02
Departure time: 21:40
Arrival time: 09:05

Modelli JSON

Invece di una stringa, è possibile definire un modello come oggetto JSON, che fornisce un modo per standardizzare la formattazione delle informazioni provenienti da sistemi diversi o per trasformare i dati nel formato richiesto da un servizio esterno.

In questo esempio, un modello è definito come un oggetto JSON che estrae i dettagli del volo dagli elementi specificati nell'array memorizzato nella variabile di sessione " Flight data:

{
  "departure": "Flight %e.flight% departs on %e.departure_date% at %e.departure_time%.",
  "arrival": "Flight %e.flight% arrives on %e.arrival_date% at %e.arrival_time%."
}

Utilizzando questo modello, il metodo 'joinToArray() restituisce un nuovo array di oggetti con la struttura specificata.

Array.remove(Integer index)

Questo metodo rimuove dall'array l'elemento nella posizione di indice specificata e restituisce l'array aggiornato.

${Items}.remove(1)

Se 'Items è '['one', 'two', 'three'], questo esempio restituisce '['one', 'three']. Anche l'array originale 'Items viene modificato al suo posto.

Array.removeValue(value)

Questo metodo rimuove la prima occorrenza del valore specificato dall'array e restituisce l'array aggiornato. Il valore specificato può essere una stringa o un numero.

${Items}.removeValue('two')

Se 'Items è '['one', 'two', 'three'], questo esempio restituisce '['one', 'three']. Anche l'array originale 'Items viene modificato al suo posto.

Array.set(Integer index, value)

Questo metodo sostituisce l'elemento nella posizione di indice specificata con il valore specificato e restituisce l'array aggiornato.

${Items}.set(2,'five')

Se 'Items è '['one', 'two', 'three'], questo esempio restituisce '['one', 'two', 'five']. Anche l'array originale 'Items viene modificato al suo posto.

Array.size()

Questo metodo restituisce il numero di elementi dell'array come numero intero.

${Items}.size()

Se 'Items è '['one', 'two', 'three'], questo esempio restituisce '3.

Array.sort()

Questo metodo esegue un ordinamento in-place e restituisce l'array ordinato. Il parametro predefinito è " ascending. È possibile specificare " descending per modificare l'ordine di ordinamento. Qualsiasi altro parametro inserito viene ignorato e viene visualizzato un errore di registro.

${Items}.sort("ascending")

Il metodo confronta numeri e stringhe. Un numero è sempre più piccolo di una stringa. Qualsiasi altro tipo viene convertito in stringa per impostazione predefinita per il confronto.

Ad esempio:

Esempi di ordinamento
Array originale Array ordinato
[2,1,3,5,4,3,2] [1,2,2,3,3,4,5]
["Banana", "Arancia", "Mela", "Mango"] ["Mela", "Banana", "Mango", "Arancia"]
[3, 2, 4, "1", "10", "12", "Banana", "Arancia", 0, "Mela", "Mango"] [0, 2, 3, 4, "1", "10", "12", "Mela", "Banana", "Mango", "Arancia"]

Array.transform()

Il metodo 'Array.transform() viene utilizzato solo con la variabile 'session_history. È possibile trasformare l'output della variabile per adattarla a uno specifico sistema di IA generativa.

Tabella: Firme per i formati di chat mostra le firme che si possono usare per i diversi formati di chat:

Tabella: Firme per i formati di chat
Dettagli OpenAI Google PaLM2 Llama2
Firma transform(String rolePrefix, String userPrefix, String assistantPrefix, optional Boolean currentAction=false) transform(String rolePrefix, String userPrefix, String assistantPrefix, optional Boolean currentAction=false) transform(optional String systemPrompt, optional Boolean currentAction=false)
Formato del messaggio del cliente {$rolePrefix: $userPrefix, "content": $content} {$rolePrefix: $userPrefix, "content": $content} <s>[INST] <<SYS>>{{ $systemPrompt }} <</SYS>>{{ $user_content }} [/INST] {{ $assistant_content }} </s><s>[INST] {{ $user_content }} [/INST]
Formato del messaggio dell'assistente {$rolePrefix: $assistantPrefix, "content": $content} {$rolePrefix: $assistantPrefix, "content": $content} ND
Esempio ${system_session_history}.transform("role", "user", "assistant") ${system_session_history}.transform("author", "USER", "AI") ${system_session_history}.transform("<your system prompt>")

Se 'currentAction è vero:

Se currentAction è vero
L'assistente AI utilizza Descrizione
Solo azioni La trasformazione esclude tutti i messaggi in cui 'nè vero, il che indica che una domanda del cliente ha attivato una nuova azione di base.
Solo dialogo currentAction viene ignorato e la trasformazione include l'intero contenuto della variabile 'session history.
Dialogo e azioni La trasformazione include tutto ciò che si trova nella variabile 'session_history dall'ultimo avvio di un'azione, indipendentemente dal fatto che siano stati attivati nodi di dialogo.

I flag 'n : true non sono inclusi nell'output di transform.