Proprietà metadati nei componenti di risposta comuni

La proprietà Metadati viene utilizzata nei componenti Risposta comune per definire la modalità di visualizzazione dei messaggi agli utenti.

I metadati vengono definiti a due livelli: a livello radice, in cui è possibile definire l'output e le azioni specifiche del componente stesso e a livello di risposta, in cui è possibile definire la visualizzazione e il comportamento specifici per i messaggi di testo, elenco, scheda o allegato restituiti da questo componente.
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"
Proprietà descrizione; Richiesto?
responseItems Una lista di elementi di risposta, ognuno dei quali restituisce un nuovo messaggio inviato al client di chat (o più messaggi quando si imposta l'iterazione per l'elemento di risposta utilizzando la proprietà iteratorVariable o una combinazione delle proprietà iteratorVariable e iteratorExpression). Definire questi elementi di risposta utilizzando i seguenti valori:
  • text: le bolle di testo (proprietà text) che possono includere un elenco di pulsanti in genere visualizzati come pulsanti.

    Per le entità sacchetto composto (ovvero la proprietà variable assegna un nome a una variabile entità sacchetto composto), è possibile utilizzare un prompt espressione FreeMarker per un valore per l'entità corrente (“${system.entityToResolve.value.prompt}”).

  • cards: serie di schede che scorrono orizzontalmente o verticalmente.

  • attachment: un'immagine, un audio, un video o un file allegato che gli utenti possono caricare o scaricare.

  • editForm: un modulo interattivo.
  • form
  • dataSet
globalActions Elenco di azioni globali, ovvero non specifiche di nessuno degli elementi di risposta. Queste azioni vengono in genere visualizzate nella parte inferiore della finestra di chat. In Facebook Messenger, ad esempio, queste opzioni sono chiamate risposte rapide. No
keywords Lista di parole chiave che corrispondono alle parole chiave immesse da un utente a un payload di postback corrispondente. Le parole chiave supportano i canali di solo testo in cui i pulsanti di azione non vengono visualizzati correttamente. No
È inoltre possibile configurare i metadati per i vari elementi di risposta, ad esempio i messaggi di testo, carta o allegato.
Proprietà descrizione; Richiesto?
type Tipo di elemento di risposta che determina il formato del messaggio. È possibile impostare un messaggio come text, attachment o cards.
name Nome dell'elemento di risposta utilizzato internamente. Non viene utilizzato in runtime. No
iteratorVariable Aggiunge in modo dinamico più elementi di testo, allegati o parole chiave alla risposta iterando gli elementi della variabile. No
iteratorExpression Espressione FreeMarker utilizzata per visualizzare i valori di un array nidificato all'interno della variabile specificata dalla proprietà iteratorVariable.

Ad esempio, se si è impostato il valore della proprietà iteratorVariable su "team" e tale variabile ha un elemento denominato members di cui si desidera visualizzare i valori, utilizzare l'espressione ${team.value.members}.

No
visible Determina la modalità di visualizzazione dei messaggi per input e canale utente. Vedere La proprietà visibile. No
rangeStart Se è stato specificato un valore iteratorVariable, è possibile eliminare un subset di elementi di risposta specificando la proprietà rangeStart in combinazione con la proprietà rangeSize. È possibile immettere un valore non modificabile o utilizzare un'espressione FreeMarker che fa riferimento a una variabile di flusso della finestra di dialogo che contiene l'inizio dell'intervallo. Utilizzando una variabile rangeStart, è possibile passare al set di dati successivo impostando la variabile rangeStart nel payload dell'opzione Sfoglia. È possibile vedere un esempio delle proprietà rangeStart e rangeSize nello stato OrderPizza di CrcPizzaBot. No
rangeSize Il numero di elementi di risposta che verranno visualizzati come specificato dalle proprietà iteratorVariable e rangeStart. No
channelCustomProperties Elenco di proprietà che attivano funzioni specifiche di un canale. Poiché queste funzioni sono specifiche della piattaforma, sono esterne al componente Risposta comune e pertanto non possono essere controllate dalle proprietà a livello di elemento radice o di elemento di risposta del componente. Potete trovare un esempio di questa proprietà nello stato OrderPizza di CrcPizzaBot.
channelCustomProperties:
          - channel: "facebook"
            properties:
              top_element_style: "large"
Per informazioni dettagliate sull'uso di channelCustomProperties, nonché sulle proprietà disponibili per ciascun canale, vedere Estensioni specifiche del canale.
No

Proprietà metadati parola chiave

È possibile creare collegamenti per le azioni definendo le proprietà delle parole chiave e delle etichette. Ad esempio, consentono agli utenti di immettere S per Piccolo.

Il seguente snippet illustra come è possibile generare un set di parole chiave da una variabile pizzaSize che contiene la lista di valori definita per un'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"
Proprietà descrizione; Richiesto?
keyword Lista di parole chiave che attivano il payload di postback definito dalla proprietà payload. È possibile utilizzare un'espressione FreeMarker per restituire le parole chiave generate dalla proprietà interatorVariable dalle entità dell'elenco di valori utilizzando le proprietà type e enumValues (iteratorVariable: "pizzaSize.type.enumValues").
label L'etichetta dell'azione, che può essere una stringa di testo o un'espressione FreeMarker Apache. Ad esempio, un'espressione che indica una parola chiave di due lettere è la seguente:

label: "(${enumValue[0]?upper_case}${enumValue[1]?upper_case})${enumValue?keep_after(enumValue[1])}"

Per il supporto multilingua, utilizzare un'espressione FreeMarker Apache che fa riferimento a un bundle di risorse.
No
skipAutoNumber Impostare su true per sopprimere la numerazione automatica per un elemento chiave quando l'opzione Abilita numerazione automatica su schede è impostata a livello di assistente digitale o di skill. No
visible Determina la modalità di visualizzazione dei messaggi di testo per input e canale utente. Vedere La proprietà visibile No
iteratorVariable Aggiunge dinamicamente più parole chiave iterando gli elementi memorizzati nella variabile specificata. Ad esempio, iteratorVariable: "pizzaSize.type.enumValues". No
iteratorExpression Espressione FreeMarker utilizzata per visualizzare i valori di un array nidificato all'interno della variabile specificata dalla proprietà iteratorVariable.

Ad esempio, se si è impostato il valore della proprietà iteratorVariable su "team" e tale variabile ha un elemento denominato members di cui si desidera visualizzare i valori, utilizzare l'espressione ${team.value.members}.

payload Il payload di postback, che ha le seguenti proprietà.
  • action: l'azione di destinazione.
  • <variable names>: imposta i valori per le variabili.
È necessario definire almeno una di queste proprietà. Vedere Proprietà payload.
 

Estrai parole chiave dai messaggi

Mentre il componente attiva un postback quando gli utenti immettono un numero, è possibile estendere la competenza per supportare input più ampi come Primo, o per provare il 1° elemento. A tale scopo, creare una variabile di array per le parole chiave (ad esempio first,1st,one, second, 2nd, two e così via).

Fare quindi riferimento alla variabile nella proprietà keyword nei metadati. Ad esempio, questo è ciò che potrebbe apparire in un flusso per ordinare una 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>"
In questa definizione l'ultima parola chiave si basa sull'inizio dell'intervallo corrente. È impostato sull'ultima pizza attualmente visualizzata, in base al numero di volte in cui il cliente ha immesso più pizza.

La proprietà visibile

Impostare la visualizzazione in base all'input e al canale dell'utente utilizzando la proprietà visible facoltativa.
Proprietà descrizione; Richiesto?
expression La direttiva FreeMarker di Apache che mostra o nasconde in modo condizionale testo, scheda o allegati. Ad esempio, lo stato OrderPizza di CrcPizzaBot utilizza ""<#if cardsRangeStart?number+4 < pizzas.value?size && textOnly=='false'>true<#else>false</#if>" No
channels:
 include:
 exclude:
Per include e exclude, immettere un elenco separato da virgole dei tipi di canale per i quali deve essere visualizzato il testo, la scheda o l'allegato (include) o nascosto (exclude). I valori di canale validi sono:
  • facebook

  • webhook

  • websdk

  • androidsdk

  • iossdk

  • twilio

  • slack

  • msteams

  • cortana

  • test

metadata:
  responseItems:
  - type: "text"
    text: "This text is only shown in Facebook Messenger"
    visible:
      channels:
        include: "facebook"             
  - type: "text"
    text: "This text is NOT shown in Facebook Messenger and Twilio"
    visible:
      channels:
        exclude: "facebook, twilio"
    actions:
    - label: "This action is only shown on web channel"
      type: "postback"
      payload:
        action: "someAction"
      visible:
        channels:
          include: "websdk"
No
onInvalidUserInput Flag booleano che mostra l'elemento o l'allegato di testo quando l'utente immette un input valido (value=false) o quando l'utente immette un input non valido (value=true). No
onDisambiguation Se true, mostra solo l'elemento di risposta, la scheda o l'azione quando viene visualizzato un prompt di disambiguazione. No
entitiesToResolve Utilizzare questa proprietà per creare un messaggio personalizzato per ogni articolo sacchetto composito. Aggiungere una lista delimitata da virgole di nomi di elementi sacchetto composto per i quali l'elemento di risposta deve essere visualizzato (include) o nascosto (exclude).
visible:
           entitiesToResolve:
           include: "Amount"
No

Proprietà metadati azione

È possibile definire azioni per una o più schede, un tipo di risposta o azioni globali per un componente, ad esempio le azioni di risposta rapida di Facebook. Impossibile configurare le azioni per i messaggi allegato.

Proprietà descrizione; Richiesto?
type Il tipo di azione:
  • postback: restituisce un oggetto JSON contenente lo stato, l'azione e le variabili.

  • share: apre una finestra di dialogo di condivisione nel client di messaggistica, che consente agli utenti di condividere le bolle dei messaggi con gli amici.

  • call: chiama il numero di telefono specificato nel payload.

  • url: apre l'URL specificato nel payload nel browser. Per Facebook Messenger, è possibile specificare la proprietà channelCustomProperties con webview_height_ratio, messenger_extensions e fallback_url.

  • location: invia la posizione corrente. Su Facebook Messenger, la posizione corrente non è supportata per le risposte di testo o carta. È supportato solo mediante una risposta rapida. Per ulteriori informazioni, vedere la documentazione relativa alla piattaforma Facebook Messenger.

label Un'etichetta per l'azione. Per localizzare questa etichetta, è possibile utilizzare un'espressione FreeMarker per fare riferimento a una voce nel bundle di risorse del bot.
iteratorVariable Questa opzione consente di aggiungere più azioni iterando gli elementi memorizzati nella variabile specificata. Impossibile utilizzare questa proprietà con le azioni di condivisione e ubicazione. No
iteratorExpression Espressione FreeMarker utilizzata per visualizzare i valori di un array nidificato all'interno della variabile specificata dalla proprietà iteratorVariable.

Ad esempio, se si è impostato il valore della proprietà iteratorVariable su "team" e tale variabile ha un elemento denominato members di cui si desidera visualizzare i valori, utilizzare l'espressione ${team.value.members}.

No
imageUrl L'URL dell'immagine utilizzata per un'icona che identifica un'azione. È possibile utilizzare questa proprietà per visualizzare un'icona per il pulsante di risposta rapida di Facebook (che è un'azione globale). No
skipAutoNumbering Quando è impostata su true, questa proprietà esclude l'applicazione della numerazione automatica di una singola azione postback. È possibile utilizzare questa proprietà per una risposta di testo o carta. No
channelCustomProperties Elenco di proprietà che alcune funzionalità specifiche del canale trigger non sono controllate dalle proprietà dell'azione standard. Puoi trovare un esempio nello stato OrderPizza di CrcPizzaBot. No
name Nome che identifica l'azione sulla piattaforma Digital Assistant. Questo nome viene utilizzato internamente e non viene visualizzato nel messaggio. No
visible Determina la modalità di visualizzazione degli allegati per input e canale utente. Vedere La proprietà visibile. No
payload Oggetto payload per gli elementi di risposta call, url e postback. Vedere Proprietà payload. No

Proprietà payload

Proprietà descrizione; Richiesto?
action Transizione action che viene attivata quando l'utente sceglie questa azione. No
variables Imposta i valori per le variabili quando si imposta il tipo di azione su postback e si aggiungono le proprietà del payload denominate per le variabili. Quando l'utente tocca l'azione, le variabili vengono impostate sui valori specificati da questa proprietà. No
url L'URL del sito Web che si apre quando gli utenti toccano questa azione. Questa proprietà è obbligatoria per il tipo di azione url.
phoneNumber Il numero di telefono chiamato quando un utente tocca questa azione. Questa proprietà è obbligatoria per il tipo di azione call.

Come vengono visualizzate le azioni non di postback sui canali di solo testo?

Alcune cose da notare per queste proprietà dei metadati di azione per i componenti di risposta comune.

  • Se il canale di solo testo supporta i collegamenti ipertestuali, è possibile utilizzarli al posto dei pulsanti quando il tipo di azione globale è url o call.

  • I tipi di azione share e location verranno ignorati o non verranno visualizzati.

Suggerimento

Le azioni non di postback come url e call non possono essere numerate, perché non vengono passate al motore di dialogo e quindi non possono essere attivate dalle parole chiave. Di conseguenza, se si mischiano i due tipi di azioni, il messaggio del bot può apparire incoerente perché solo alcune opzioni vengono numerate.
Immagine runtime di numerazione non postback e postback.
Utilizzando l'SDK, è possibile creare output più coerenti disabilitando la numerazione automatica per il postback. Ad esempio:
{
  "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": { ...}
    }
  ]
}

Elemento di risposta di testo

Di seguito sono riportate le proprietà per gli elementi di risposta di testo nei componenti Risposta comune.

Proprietà descrizione; Richiesto?
text Testo che richiede all'utente.
iteratorExpression Espressione FreeMarker utilizzata per visualizzare i valori di un array nidificato all'interno della variabile specificata dalla proprietà iteratorVariable.

Ad esempio, se si è impostato il valore della proprietà iteratorVariable su "team" e tale variabile ha un elemento denominato members di cui si desidera visualizzare i valori, utilizzare l'espressione ${team.value.members}.

 
iteratorVariable Aggiunge in modo dinamico più elementi di testo, allegati o parole chiave alla risposta iterando gli elementi della variabile. No
footerText Testo visualizzato nella parte inferiore del messaggio (sotto le eventuali azioni testo e pulsante). Aggiungere un piè di pagina per migliorare l'output sui canali di solo testo. Come descritto in Piè di pagina, è possibile utilizzare le espressioni FreeMarker per condizionare il testo del piè di pagina per i canali di solo testo. No
separateBubbles È possibile definire questa proprietà se si definisce anche la proprietà iteratorVariable. Quando si imposta questa proprietà su true, ogni elemento di testo viene inviato come messaggio separato, ad esempio Pizze e Pastas negli stati ShowMenu e OrderPizza di CrcPizzaBot. Se lo si imposta su false, viene inviato un singolo messaggio di testo, in cui ogni elemento di testo inizia su una nuova riga. No
visible Determina la modalità di visualizzazione dei messaggi di testo per input e canale utente. Vedere La proprietà visibile. No
actions Azione di postback. Per il supporto solo di testo, è possibile definire parole chiave. No
Se vuoi vedere un esempio di risposta testuale con azioni, dai un'occhiata ai metadati per lo stato showMenu di CrcPizzaBot: Poiché assegna un nome a postback come azione, consente alla competenza di gestire un comportamento utente imprevisto, ad esempio la selezione di un elemento da un messaggio meno recente invece di selezionarne uno dal messaggio più recente.
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"

Elemento risposta carta

Di seguito sono riportate le proprietà degli elementi di risposta della scheda nei componenti di risposta comune.

Proprietà descrizione; Richiesto?
cardLayout Il layout della scheda: horizontal (impostazione predefinita) e vertical.
headerText Testo intestazione. Ad esempio: headerText: "<#if cardsRangeStart?number == 0>Here are our pizzas you can order today:<#else>Some more pizzas for you:</#if>" . No
title Il titolo della scheda
description La descrizione della scheda, visualizzata come sottotitolo. No
imageUrl L'URL dell'immagine visualizzata sotto il sottotitolo. No
cardUrl L'URL di un sito Web. Viene visualizzato come collegamento ipertestuale sulla scheda, che gli utenti toccano per aprire. No
iteratorExpression Espressione FreeMarker utilizzata per visualizzare i valori di un array nidificato all'interno della variabile specificata dalla proprietà iteratorVariable.

Ad esempio, se si è impostato il valore della proprietà iteratorVariable su "team" e tale variabile ha un elemento denominato members di cui si desidera visualizzare i valori, utilizzare l'espressione ${team.value.members}.

 
iteratorVariable Aggiunge dinamicamente più schede alla risposta iterando gli elementi memorizzati nella variabile specificata per questa proprietà. Sebbene la variabile venga definita come stringa, contiene un array JSON quando viene utilizzata come variabile iteratore. È possibile fare riferimento alle proprietà in un oggetto dell'array con un'espressione come ${iteratorVarName.propertyName}. Ad esempio, con una variabile iteratore denominata pizzas, è possibile fare riferimento alla proprietà nome di una pizza utilizzando l'espressione ${pizzas.name}. No
rangeStart Se è stato specificato un valore iteratorVariable, è possibile eliminare un sottoinsieme di schede specificando la proprietà rangeStart in combinazione con la proprietà rangeSize. È possibile immettere un valore non modificabile o utilizzare un'espressione FreeMarker che fa riferimento a una variabile che contiene l'inizio dell'intervallo. Utilizzando una variabile rangeStart, è possibile passare al set di dati successivo impostando la variabile rangeStart nel payload di un'opzione Sfoglia. No
rangeSize Il numero di schede che verranno visualizzate come specificato dalle proprietà iteratorVariable e rangeStart. No
visible Determina il modo in cui le etichette delle azioni vengono rese in base all'input e al canale dell'utente. Vedere La proprietà visibile. No

È possibile assegnare un set di azioni specifiche per una scheda specifica o un elenco di azioni associate alla fine dell'elenco di carte.

Lo stato OrderPizza di CrcPizzaBot include una definizione di elemento di risposta della scheda, come mostrato nel seguente snippet:
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')}"

Come vengono visualizzate le schede sui canali solo testo?

I componenti di risposta comune visualizzano le risposte come schede. Quando lo skill viene eseguito in un canale di solo testo, alcune delle proprietà elemento risposta scheda si comportano in modo diverso. Di seguito sono riportate alcune considerazioni.

  • Non vi è scorrimento verticale o orizzontale (comportamenti impostati dall'opzione cardLayout). Tutte le schede vengono visualizzate all'interno di una singola bolla di messaggi, che può includere un'intestazione e un piè di pagina. Le proprietà title e description della scheda sono separate da un nuovo carattere di riga. Puoi numerare il titolo della carta.

  • I collegamenti ipertestuali sono ancora supportati nei canali di solo testo, con l'indirizzo configurato per la proprietà cardUrl visualizzata all'interno del fumetto insieme alle proprietà title e description, separate da un nuovo carattere di riga.

  • Le immagini specificate dalla proprietà imageURL vengono visualizzate.

  • Viene visualizzato il testo dell'etichetta per i pulsanti di azione, sebbene i pulsanti stessi non vengano visualizzati. Gli utenti possono immettere il testo oppure, se la numerazione automatica è abilitata, possono immettere il numero corrispondente per maggiore comodità.


Ottimizza schede su canali di solo testo con parole chiave

La maggior parte delle carte ha una singola azione, come il pulsante Ordina ora di CRCPizzaBot e un'azione globale come Altro per caricare la prossima carta nella giostra. Come illustrato in Come visualizzare le schede sui canali di solo testo, l'etichetta di ogni azione viene numerata automaticamente quando la skill viene eseguita su canali di solo testo o SMS. Su questi canali, un insieme di carte è rappresentato in una singola bolla, che può diventare lunga e quindi difficile da leggere. Per evitare questo problema, è possibile configurare azioni di postback non associate alle etichette delle azioni, ma eseguite dalle parole chiave utente (1,2,3, cheese o altro, ad esempio).


Segue la descrizione dell'immagine card-text-only.png
Descrizione dell'illustrazione cards-text-only.png

È possibile nascondere le etichette delle azioni quando lo skill viene eseguito su canali di solo testo utilizzando le linee guida generali riportate di seguito.

Nella proprietà metadata:
  • Definire la proprietà keywords. Nello snippet CRCPizzaBot seguente, l'espressione ${pizza.name} impostata per la proprietà keyword definisce una parola chiave per ogni nome 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}"
    ...

    Queste parole chiave vengono aggiunte solo se textOnly è true.

Nei metadati card:
  • Definire la proprietà title. Nel seguente snippet, un'espressione utilizza la variabile FreeMarker index per anteporre un numero al titolo (restituita da ${pizzas.name} quando il valore della variabile textOnly è true). Ciò significa che quando un cliente immette altro, l'abilità caricherà un'altra bolla di messaggi contenente il successivo set di pizze a partire dal numero 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"
  • Nel seguente snippet, le azioni della scheda ("Order" e "More Pizzas") vengono visualizzate solo quando il valore della variabile textOnly è false:
            - label: "More Pizzas"
              keyword: "more"
              type: "postback"
              skipAutoNumber: true
              visible:
                expression: "<#if cardsRangeStart?number+4 < pizzas.value?size && textOnly=='false'>true<#else>false</#if>"
  • Aggiungere un piè di pagina che viene visualizzato solo quando il valore della variabile textOnly è true.
    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>"

Elemento di risposta allegato

L'elemento di risposta attachment include le proprietà riportate di seguito.

Proprietà descrizione; Richiesto?
attachmentType Il tipo di allegato: image, audio, video e file.
attachmentURL URL o origine download dell'allegato.
Lo stato Confirmation di CrcPizzaBot utilizza un elemento di risposta allegato per visualizzare l'immagine dell'ordine, diversa dall'elemento visualizzato nel 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}"

Azione

Un'azione rappresenta qualcosa che l'utente può selezionare.
Nome descrizione; Digita Richiesto?
type Il tipo di azione stringa
label Testo dell'etichetta descrittiva per l'azione. stringa È necessario includere almeno una delle opzioni label o imageUrl.
imageUrl L'immagine per l'azione stringa È necessario includere almeno una singola proprietà label o imageUrl.
style Lo stile di rendering del pulsante "primary", "danger", "default" No
displayType Il rendering per il tipo di elemento azione (pulsante, collegamento o icona) "button", "link", "icon" No
channelExtensions Le proprietà di estensione specifiche del canale associate all'azione JSONObject No

Campo

Un elemento Field contiene le proprietà riportate di seguito.
Nome descrizione; Digita Richiesto?
displayType Il tipo di campo String No
label L'etichetta del campo String
channelExtensions Set di proprietà di estensione specifiche del canale. Map<ChannelType, JSONObject> No
marginTop Quantità di spazio verticale tra questo campo e il campo precedente nella stessa colonna. I valori consentiti sono none, medium (impostazione predefinita) e large. String No
labelFontSize La dimensione del carattere utilizzata per l'etichetta del campo. I valori consentiti sono small, medium (impostazione predefinita) e large. String No
labelFontWeight Spessore del carattere utilizzato per l'etichetta del campo. I valori consentiti sono light, medium (impostazione predefinita) e grassetto. String No
displayInTable Espressione booleana FreeMarker che consente di includere in modo condizionale un campo nel layout di tabella in un elemento di risposta dataSet. String No (l'impostazione predefinita è true)
displayInForm Espressione booleana FreeMarker che consente di includere in modo condizionale un campo in un elemento di risposta editForm o nel layout del form in un elemento di risposta dataSet String No (l'impostazione predefinita è true)

Campo ReadOnly

Rappresenta un campo di sola lettura. Tutti i campi di sola lettura ereditano le proprietà Field e dispongono delle proprietà aggiuntive riportate di seguito.
Nome descrizione; Digita Richiesto?
value Il valore del campo stringa
width Percentuale consigliata della larghezza totale disponibile che il campo deve occupare in un layout di tabella. numerica No
alignment L'allineamento del valore all'interno di una colonna di tabella. L'allineamento predefinito è right. "left", "center" e "right" No
Nota

Nella release 23.06 di Oracle Digital Assistant, i campi di sola lettura non vengono visualizzati all'interno dei form di input, anche se ricevuti nel payload dei messaggi.
TextField
L'elemento TextField eredita tutte le proprietà del campo ReadOnly. Il valore displayType per questo elemento è "text". Ha le seguenti proprietà aggiuntive:
Nome descrizione; Digita Richiesto?
truncateAt Posizione in cui il testo viene troncato e vengono aggiunti i puntini di sospensione per indicare che il valore è stato troncato. Un numero intero No
fontSize La dimensione del carattere utilizzata per il valore field. I valori consentiti sono small, medium (impostazione predefinita) e large. Stringa No
fontWeight Lo spessore del carattere utilizzato per il valore field. I valori consentiti sono light, medium (il valore predefinito) e bold. Stringa No
LinkField
L'elemento LinkField eredita tutte le proprietà del campo ReadOnly. Ha le seguenti proprietà aggiuntive:
Nome descrizione; Digita Richiesto?
linkLabel Etichetta utilizzata per il collegamento ipertestuale Stringa No
imageUrl L'URL dell'immagine che apre un collegamento quando viene fatto clic. Stringa No
MediaField
L'elemento MediaField eredita tutte le proprietà del campo ReadOnly. Ha le seguenti proprietà aggiuntive:
Nome descrizione; Digita Richiesto?
mediaType Tipo di supporto del campo ("video", "audio", "image") String
ActionField
L'elemento ActionField eredita tutte le proprietà del campo ReadOnly. Ha le seguenti proprietà aggiuntive:
Nome descrizione; Digita Richiesto?
action Azione da eseguire quando l'utente fa clic sul pulsante di azione. Azione

Form

Rappresenta un array di campi insieme a un titolo.
Nome descrizione; Digita Richiesto?
title Il titolo visualizzato sopra il layout del modulo Stringa No
fields Elenco di campi di sola lettura nel modulo Lista<ReadOnlyField>
formRows Elenco di righe visualizzate nel modulo. Elenco<FormRow>  
actions Un elenco di azioni Elenca<azione> No
selectAction Azione eseguita quando il modulo è stato selezionato. Quando gli utenti passano il mouse sul form, l'etichetta dell'azione viene visualizzata come suggerimento (se supportata dal canale). Azione No
channelExtensions Le proprietà di estensione specifiche del canale associate al messaggio JSONObject No

FormRow

Nome descrizione; Digita Richiesto?
columns Elenco di colonne visualizzate nella riga del form. <Colonna> lista
selectAction Le azioni eseguite quando il modulo è stato selezionato. Quando gli utenti passano il mouse sul modulo, l'etichetta dell'azione viene visualizzata come suggerimento (se supportata dal canale). Azione No
separator Se si imposta questa proprietà su true, viene inserita una riga di separazione sopra il contenuto nella riga del form. Boolean No
channelExtensions Le proprietà di estensione specifiche del canale associate al messaggio JSONObject No

A colonne

Nome descrizione; Digita Richiesto?
fields Elenco di campi visualizzati verticalmente all'interno della colonna. Questi campi devono essere istanze ReadOnlyField quando la colonna viene utilizzata in un FormRow all'interno di un Form. I campi possono essere sia di sola lettura che modificabili quando si utilizza FormRow all'interno di un EditFormMessagePayload. Elenca<campo>
verticalAlignment L'allineamento verticale della colonna rispetto alle altre colonne nella stessa riga del modulo. Stringa No
width Determina la larghezza della colonna all'interno della riga del form. I valori consentiti sono auto (impostazione predefinita) e stretch. Quando è impostata su stretch, la colonna assume tutta la larghezza rimanente dopo la visualizzazione delle colonne con larghezza automatica. Se sono presenti più colonne impostate su stretch, dividono in modo uniforme la larghezza rimanente. Stringa No
channelExtensions Le proprietà di estensione specifiche del canale associate al messaggio JSONObject No

Elemento di risposta editForm

Questo elemento di risposta costituisce il file EditFormMessagePayload trasmesso tramite un canale al client.
Nome descrizione; Digita Richiesto?
type Il tipo di elemento di risposta. editform
title Il titolo del modulo Stringa No
items Un elenco di campi, di sola lettura e modificabili. Lista<field>
formColumns Numero di colonne utilizzate per il layout del form. L'impostazione predefinita è una colonna. Valore intero No
actions Un elenco di azioni relative alla carta. Lista<Action> No
channelExtensions Set di proprietà di estensione specifiche del canale. Ad esempio, è possibile impostare l'altezza massima per Facebook Messenger. Mappa<ChannelType, JSONObject> No

Il campo textInput

Un campo per l'immissione di testo libero. È possibile impostare il numero minimo e massimo di caratteri per questo campo e applicare la formattazione utilizzando espressioni regolari.

Questo snippet illustra la raccolta dell'input utente facendo riferimento alla variabile submittedFields generata (una mappa).
      - 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
Questo snippet illustra la raccolta dell'input utente facendo riferimento a una variabile sacchetto composito.
Nota

L'articolo bag composto di riferimento può essere 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
Nome descrizione; Digita Richiesto?
displayType Il tipo di campo. textInput (una stringa)
name Nome univoco per il campo nel modulo di input. Questo nome viene utilizzato come identificativo in runtime. Stringa
label L'etichetta del campo Stringa No
defaultValue Il valore iniziale. In base all'espressione FreeMarker nel modello, il valore è una stringa quando l'elemento del sacchetto di riferimento (rappresentato da myText) non contiene alcun valore ("${(submittedFields.value.myText)!''}"). Stringa No
validationRegularExpression Espressione regolare che specifica il formato per l'input di testo. Stringa No
multiline L'impostazione di questa proprietà su true consente agli utenti di immettere più righe di testo. Boolean No
minlength Il numero minimo di caratteri richiesti per convalidare il campo. Gli utenti ricevono un messaggio di errore se inseriscono troppo pochi caratteri. Valore intero No
maxLength Il numero massimo o il limite massimo di caratteri. Valore intero No
inputStyle Il formato applicato al client. I formati sono i seguenti.
  • text
  • email
  • url
  • tel
  • password
Il formato predefinito è il testo quando questa proprietà non è stata definita.
Stringa No
placeholder Suggerimento che descrive come utilizzare questo campo. Questo testo viene visualizzato quando gli utenti non hanno ancora immesso alcun input. Ad esempio:
What is the expense justification? Enter between 10 and 50 characters.
Stringa No
autoSubmit Se impostato su true, il form viene parzialmente sottomesso quando l'utente ha immesso un valore per il campo. In FormSubmissionMessagePayload, partialSubmitField viene impostato sul nome del campo in cui autoSubmit è impostato su true. Si consiglia di configurare la sottomissione automatica per i campi dipendenti in modo condizionale. Ad esempio, impostare questa proprietà quando un campo deve essere visualizzato o nascosto in base al valore di un altro campo o quando i valori consentiti di un campo dipendono dal valore impostato in un altro campo. Con la sottomissione automatica di un campo da cui dipendono altri campi, il modulo può essere aggiornato immediatamente con le modifiche pertinenti ai campi dipendenti. Stringa No
required Indica se la sottomissione del modulo richiede l'input dell'utente in questo campo boolean No
clientErrorMessage Messaggio utilizzato da alcuni client (MS Teams, Apple Business Messaging) quando la convalida lato client non riesce. In Slack questa proprietà viene utilizzata solo quando il form modificabile viene visualizzato nella pagina della conversazione. Non viene visualizzata in una finestra di dialogo modale. Stringa No
serverErrorMessage Messaggio di errore inviato al client quando la convalida lato server di un valore di campo modulo non riesce. Quando si verificano errori di questo tipo sul lato server, si consiglia di sostituire il messaggio del modulo corrente anziché un nuovo messaggio aggiunto alla conversazione configurando la proprietà channelExtensions per indicare che l'ultimo messaggio del modulo deve essere sostituito. Stringa No
channelExtensions Set di proprietà di estensione specifiche del canale. Ad esempio, è possibile impostare l'altezza massima per Facebook Messenger. Mappa<ChannelType, JSONObject> No

Il campo datePicker

Campo con un calendario a discesa che consente agli utenti di selezionare un giorno, un mese e un anno. Le proprietà maxDate e minDate del componente convalidano l'input utente.
Nota

Il canale Slack non supporta questa convalida dei valori minimo e massimo.
Questo snippet di codice illustra come acquisire l'input utente utilizzando la variabile submittedFields generata (una mappa).
 - 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
Questo snippet illustra come acquisire l'input utente facendo riferimento a una variabile sacchetto composito.
     - 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
Nome descrizione; Digita Richiesto?
displayType Il tipo di campo datePicker (una stringa)
id Nome univoco per il campo nel modulo di input. Questo nome viene utilizzato come identificativo in runtime. Stringa
label Etichetta descrittiva. Stringa No
defaultValue Il valore predefinito per il campo, formattato come AAAA-MM-GG. Il modello definisce questa stringa come un'espressione FreeMarker Apache che restituisce una stringa vuota quando l'elemento bag composto di riferimento (rappresentato da myDate) ha un valore nullo.
"${(submittedFields1.value.myDate)!''}"
Stringa No
minDate La prima data nell'intervallo di giorni consentiti. Il canale Slack non supporta questa convalida lato client. Stringa No
maxDate Ultima data compresa nell'intervallo di giorni consentiti. Il modello definisce questa stringa come il giorno corrente ("${.now?iso_utc[0..9]}"). Il canale Slack non supporta questa convalida lato client. Stringa No
placeholder Descrizione dell'input previsto visualizzato quando l'utente non ha ancora selezionato una data. Stringa No
autoSubmit Se impostato su true, il form viene parzialmente sottomesso quando l'utente ha immesso un valore per il campo. In FormSubmissionMessagePayload, partialSubmitField viene impostato sul nome del campo in cui autoSubmit è impostato su true. Si consiglia di configurare la sottomissione automatica per i campi dipendenti in modo condizionale. Ad esempio, impostare questa proprietà quando un campo deve essere visualizzato o nascosto in base al valore di un altro campo o quando i valori consentiti di un campo dipendono dal valore impostato in un altro campo. Con la sottomissione automatica di un campo da cui dipendono altri campi, il modulo può essere aggiornato immediatamente con le modifiche pertinenti ai campi dipendenti. Stringa No
required Indica se la sottomissione del modulo richiede l'input dell'utente in questo campo boolean No
clientErrorMessage Messaggio utilizzato da alcuni client (MS Teams, Apple Business Messaging) quando la convalida lato client non riesce. In Slack questa proprietà viene utilizzata solo quando il form modificabile viene visualizzato nella pagina della conversazione. Non viene visualizzata in una finestra di dialogo modale. Stringa No
serverErrorMessage Messaggio di errore inviato al client quando la convalida lato server di un valore di campo modulo non riesce. Quando si verificano errori di questo tipo sul lato server, si consiglia di sostituire il messaggio del modulo corrente anziché un nuovo messaggio aggiunto alla conversazione configurando la proprietà channelExtensions per indicare che l'ultimo messaggio del modulo deve essere sostituito. Stringa No
channelExtensions Set di proprietà di estensione specifiche del canale. Ad esempio, è possibile impostare l'altezza massima per Facebook Messenger. Mappa<ChannelType, JSONObject> No

Il campo timePicker

Consente all'utente di immettere un valore orario compreso in un intervallo specificato. Le proprietà maxTime e minTime del componente convalidano l'input utente.
Nota

Il canale Slack non supporta la convalida dei valori minimo e massimo.
Il campo selettore ora legge e scrive il valore in formato 24 ore. Il formato di visualizzazione nel canale client potrebbe utilizzare il formato di 12 ore con un'indicazione AM/PM, ma dovrebbe sempre scrivere un'ora formattata di 24 ore.
Il seguente snippet illustra come acquisire l'input utente utilizzando la variabile submittedFields generata (una mappa).
      - 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
Nome descrizione; Digita Richiesto?
displayType Il tipo di campo timePicker (una stringa)
id Nome univoco per il campo nel modulo di input. Questo nome viene utilizzato come identificativo in runtime. Stringa
label Etichetta che descrive i parametri di selezione dell'ora. Stringa
defaultValue Il valore iniziale per questo campo, nel formato a 24 ore. Il modello definisce questa stringa come un'espressione FreeMarker Apache che restituisce una stringa vuota quando l'elemento bag composto di riferimento (rappresentato da myTime) ha un valore nullo.
"${(submittedFields.value.myTime)!''}"
Stringa No
minTime Definisce l'ora consentita meno recente, immessa come HH:MM nel formato a 24 ore. ad esempio 00:00 Stringa No
maxTime Definisce l'ora consentita più recente, immessa come HH:MM, nel formato 24 ore. Ad esempio, 13:00. Stringa No
placeholder Un suggerimento per l'input. Per il modello, l'esempio placeholder è Pick a time in the morning, che riflette i valori di esempio minTime e maxTime del modello 00:00 e 12:00. Stringa No
autoSubmit Se impostato su true, il form viene parzialmente sottomesso quando l'utente ha immesso un valore per il campo. In FormSubmissionMessagePayload, partialSubmitField viene impostato sul nome del campo in cui autoSubmit è impostato su true. Si consiglia di configurare la sottomissione automatica per i campi dipendenti in modo condizionale. Ad esempio, impostare questa proprietà quando un campo deve essere visualizzato o nascosto in base al valore di un altro campo o quando i valori consentiti di un campo dipendono dal valore impostato in un altro campo. Con la sottomissione automatica di un campo da cui dipendono altri campi, il modulo può essere aggiornato immediatamente con le modifiche pertinenti ai campi dipendenti. Stringa No
required Indica se la sottomissione del modulo richiede l'input dell'utente in questo campo boolean No
clientErrorMessage Messaggio utilizzato da alcuni client (MS Teams, Apple Business Messaging) quando la convalida lato client non riesce. Ad esempio, Time must be in the morning. In Slack questa proprietà viene utilizzata solo quando il form modificabile viene visualizzato nella pagina della conversazione. Non viene visualizzata in una finestra di dialogo modale. Stringa No
serverErrorMessage Messaggio di errore inviato al client quando la convalida lato server di un valore di campo modulo non riesce. Quando si verificano errori di questo tipo sul lato server, si consiglia di sostituire il messaggio del modulo corrente anziché un nuovo messaggio aggiunto alla conversazione configurando la proprietà channelExtensions per indicare che l'ultimo messaggio del modulo deve essere sostituito. Stringa No
channelExtensions Set di proprietà di estensione specifiche del canale. Ad esempio, è possibile impostare l'altezza massima per Facebook Messenger. Mappa<ChannelType, JSONObject> No

Il campo numberInput

Raccoglie l'input del numero all'interno di un intervallo specificato.
      - 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
Nome descrizione; Digita Richiesto?
displayType Il tipo di campo numberInput (una stringa)
name Nome univoco per il campo nel modulo di input. Questo nome viene utilizzato come identificativo in runtime. Stringa
label Etichetta descrittiva per il valore di data richiesto dall'utente. Stringa No
defaultValue Il valore iniziale. Il modello definisce questa stringa come un'espressione FreeMarker Apache che restituisce una stringa vuota quando l'elemento bag composto di riferimento (rappresentato da myNumber) ha un valore nullo. "${(submittedFields.value.myNumber)!''}" Stringa No
maxvalue Il numero più grande consentito. Il canale Slack non supporta la convalida del valore minimo o massimo. Valore intero No
minvalue Il più piccolo numero consentito Valore intero No
placeholder Suggerimento che descrive come utilizzare il campo. Questo testo viene visualizzato quando l'utente non ha ancora immesso un numero. Stringa No
autoSubmit Se impostato su true, il form viene parzialmente sottomesso quando l'utente ha immesso un valore per il campo. In FormSubmissionMessagePayload, partialSubmitField viene impostato sul nome del campo in cui autoSubmit è impostato su true. Si consiglia di configurare la sottomissione automatica per i campi dipendenti in modo condizionale. Ad esempio, impostare questa proprietà quando un campo deve essere visualizzato o nascosto in base al valore di un altro campo o quando i valori consentiti di un campo dipendono dal valore impostato in un altro campo. Con la sottomissione automatica di un campo da cui dipendono altri campi, il modulo può essere aggiornato immediatamente con le modifiche pertinenti ai campi dipendenti. Stringa No
required Indica se la sottomissione del modulo richiede l'input dell'utente in questo campo boolean No
clientErrorMessage Messaggio utilizzato da alcuni client (MS Teams, Apple Business Messaging) quando la convalida lato client non riesce. In Slack questa proprietà viene utilizzata solo quando il form modificabile viene visualizzato nella pagina della conversazione. Non viene visualizzata in una finestra di dialogo modale. Stringa No
serverErrorMessage Messaggio di errore inviato al client quando la convalida lato server di un valore di campo modulo non riesce. Quando si verificano errori di questo tipo sul lato server, si consiglia di sostituire il messaggio del modulo corrente anziché un nuovo messaggio aggiunto alla conversazione configurando la proprietà channelExtensions per indicare che l'ultimo messaggio del modulo deve essere sostituito. Stringa No
channelExtensions Set di proprietà di estensione specifiche del canale. Ad esempio, è possibile impostare l'altezza massima per Facebook Messenger. Mappa<ChannelType, JSONObject> No

Il campo singleSelect

Consente agli utenti di selezionare un singolo valore da un elenco predefinito. È possibile applicare uno stile a questo controllo come elenco da cui gli utenti possono eseguire query e selezionare o come set di pulsanti di opzione. Questo elemento ha un rendering specifico del canale:
  • Nel canale Microsoft Teams, questo elemento viene sempre visualizzato come elenco (anche quando layoutStyle è impostato su radioGroup) perché le schede adattive non supportano i pulsanti di opzione.
  • Nel canale Slack, questo elemento viene visualizzato come elenco anziché come gruppo di radio quando sono disponibili più di dieci opzioni.
Il seguente snippet illustra l'inserimento dei dati nell'elenco utilizzando la variabile submittedFields generata (una variabile mappa)
 - 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

Suggerimento

Sebbene clientErrorMessage sia un attributo facoltativo, è consigliabile definirlo per le competenze in esecuzione sul canale Microsoft Teams poiché le schede adattive non generano un messaggio quando la convalida lato client non riesce.
Questo snippet illustra come popolare l'elenco facendo riferimento a un'entità sacchetto composito:
     - 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
Nome descrizione; Digita Richiesto?
displayType Il tipo di campo singleSelect (una stringa)
name Nome univoco per il campo nel modulo di input. Questo nome viene utilizzato come identificativo in runtime. Stringa
label Testo dell'etichetta del campo che descrive il contenuto dell'elenco a selezione singola. Stringa
defaultValue L'impostazione predefinita. Il modello definisce questo valore String come un'espressione FreeMarker Apache che restituisce una stringa vuota quando l'elemento bag composto di riferimento (rappresentato da mySingleSelect) ha un valore nullo). "${(submittedFields.value.mySingleSelect)!''}" Stringa No
options Array delle opzioni disponibili. Il modello definisce in modo statico queste opzioni con singole coppie label e value con valori stringa, ma è possibile popolare dinamicamente le opzioni di selezione utilizzando le proprietà iteratorVariable e iteratorExpression:
        defaultValue: "${(submittedFields.value.Type)!''}"
        name: Type
        options:
          - iteratorVariable: option
            iteratorExpression: "${expenseType.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
In questo snippet i valori del tipo di spesa restituiti dalle proprietà type e enum vengono sequenziati nell'elenco utilizzando la funzione built-in split.
Elenco<option>
layoutStyle Modalità di visualizzazione delle opzioni a selezione singola nel modulo. Possono essere raggruppati come elenco (layoutStyle: list) o pulsanti di opzione (layoutStyle: radioGroup). Stringa  
placeholder Suggerimento che descrive come utilizzare il campo. Viene visualizzato quando l'utente non ha ancora effettuato la selezione. Ad esempio:
label: 
        placeholder: Select an expense type. You can pick only one.
Questo segnaposto viene visualizzato solo per il rendering del layout elenco.
Stringa No
autoSubmit Se impostato su true, il form viene parzialmente sottomesso quando l'utente ha immesso un valore per il campo. In FormSubmissionMessagePayload, partialSubmitField viene impostato sul nome del campo in cui autoSubmit è impostato su true. Si consiglia di configurare la sottomissione automatica per i campi dipendenti in modo condizionale. Ad esempio, impostare questa proprietà quando un campo deve essere visualizzato o nascosto in base al valore di un altro campo o quando i valori consentiti di un campo dipendono dal valore impostato in un altro campo. Con la sottomissione automatica di un campo da cui dipendono altri campi, il modulo può essere aggiornato immediatamente con le modifiche pertinenti ai campi dipendenti. Stringa No
required Indica se la sottomissione del modulo richiede l'input dell'utente in questo campo boolean No
clientErrorMessage Messaggio utilizzato da alcuni client (MS Teams, Apple Business Messaging) quando la convalida lato client non riesce. In Slack questa proprietà viene utilizzata solo quando il form modificabile viene visualizzato nella pagina della conversazione. Non viene visualizzata in una finestra di dialogo modale. Stringa No
serverErrorMessage Messaggio di errore inviato al client quando la convalida lato server di un valore di campo modulo non riesce. Quando si verificano errori di questo tipo sul lato server, si consiglia di sostituire il messaggio del modulo corrente anziché un nuovo messaggio aggiunto alla conversazione configurando la proprietà channelExtensions per indicare che l'ultimo messaggio del modulo deve essere sostituito. Stringa No
channelExtensions Set di proprietà di estensione specifiche del canale. Ad esempio, è possibile impostare l'altezza massima per Facebook Messenger. Mappa<ChannelType, JSONObject> No

Il campo multiSelect

Consente agli utenti di scegliere uno o più valori da un elenco predefinito. È possibile definire lo stile come un elenco di selezione su cui gli utenti possono eseguire query o come un insieme di caselle di controllo. Questo elemento ha un rendering specifico del canale:
  • Nel canale Microsoft Teams, questo elemento viene sempre visualizzato come elenco (anche se layoutStyle è impostato su checkboxes) perché le schede adattive non supportano le caselle di controllo a selezione multipla.
  • Nel canale Slack, questo elemento viene visualizzato come elenco invece di un set di caselle di controllo a selezione multipla quando sono presenti più di dieci opzioni.
Questo snippet illustra come popolare l'elenco facendo riferimento alla variabile submittedFields generata (una mappa).
 - 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

Questo snippet illustra il riferimento a un'entità sacchetto composito per popolare l'elenco.
     - 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
Nome descrizione; Digita Richiesto?
displayType Il tipo di campo multiselect (una stringa)
name Nome univoco per il campo nel modulo di input. Questo nome viene utilizzato come identificativo in runtime. Stringa
label Etichetta di campo che descrive il contenuto della lista multiSelect. Stringa
defaultValue L'impostazione predefinita. Il modello definisce questa stringa come un'espressione FreeMarker Apache che restituisce una stringa vuota quando l'elemento bag composto di riferimento (rappresentato da myMultiSelect) ha un valore nullo.
"${(submittedFields.value.myMultiSelect?join(','))!''}"
List<String> No
options Array delle opzioni disponibili. Il modello definisce in modo statico queste opzioni con singole coppie label e value con valori stringa, ma è possibile popolare dinamicamente le opzioni di selezione utilizzando le proprietà iteratorVariable e iteratorExpression:
        defaultValue: "${(submittedFields.value.Attendees?join(','))!''}"
        name: Attendees
        options:
          - iteratorVariable: option
            iteratorExpression: "${attendee.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
List<option>
placeholder Suggerimento che descrive come utilizzare il campo. Viene visualizzato quando l'utente non ha effettuato selezioni.
label: Attendees
        placeholder: Select one or more attendees
Questo segnaposto viene visualizzato solo per il layout elenco. Non è disponibile per i layout delle caselle di controllo.
Stringa No
layoutStyle Il layout per le opzioni multiSelect. Le opzioni disponibili sono list e checkboxes. Stringa No
autoSubmit Se impostato su true, il form viene parzialmente sottomesso quando l'utente ha immesso un valore per il campo. In FormSubmissionMessagePayload, partialSubmitField viene impostato sul nome del campo in cui autoSubmit è impostato su true. Si consiglia di configurare la sottomissione automatica per i campi dipendenti in modo condizionale. Ad esempio, impostare questa proprietà quando un campo deve essere visualizzato o nascosto in base al valore di un altro campo o quando i valori consentiti di un campo dipendono dal valore impostato in un altro campo. Con la sottomissione automatica di un campo da cui dipendono altri campi, il modulo può essere aggiornato immediatamente con le modifiche pertinenti ai campi dipendenti. Stringa No
required Indica se la sottomissione del modulo richiede l'input dell'utente in questo campo boolean No
clientErrorMessage Messaggio utilizzato da alcuni client (MS Teams, Apple Business Messaging) quando la convalida lato client non riesce. In Slack questa proprietà viene utilizzata solo quando il form modificabile viene visualizzato nella pagina della conversazione. Non viene visualizzata in una finestra di dialogo modale. Stringa No
serverErrorMessage Messaggio di errore inviato al client quando la convalida lato server di un valore di campo modulo non riesce. Quando si verificano errori di questo tipo sul lato server, si consiglia di sostituire il messaggio del modulo corrente anziché un nuovo messaggio aggiunto alla conversazione configurando la proprietà channelExtensions per indicare che l'ultimo messaggio del modulo deve essere sostituito. Stringa No
channelExtensions Set di proprietà di estensione specifiche del canale. Ad esempio, è possibile impostare l'altezza massima per Facebook Messenger. Mappa<ChannelType, JSONObject> No

Il campo di attivazione/disattivazione

Presenta uno switch per due opzioni. Nel canale Slack, questo controllo viene visualizzato come caselle di controllo.
Nota

Nel canale Slack, questo elemento viene visualizzato sotto forma di coppia di pulsanti di opzione.
Questo snippet illustra l'acquisizione dell'input utente facendo riferimento alla variabile submittedForms generata (una mappa).
      - displayType: toggle
        defaultValue: "false"
        name: TipIncluded
        labelOn: Tip
        label: Tip Included?
        valueOff: "false"
        labelOff: No Tip
        valueOn: "true"
Questo snippet illustra l'acquisizione dell'input utente facendo riferimento a una variabile sacchetto composito.
      - 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"
Nome descrizione; Digita Richiesto?
displayType Il tipo di campo toggle (una stringa)
id Nome univoco per il campo nel modulo di input. Questo nome viene utilizzato come identificativo in runtime. Stringa
label Etichetta che descrive cosa accade quando l'attivazione è attivata. Stringa
defaultValue Il valore iniziale. Se si desidera che l'attivazione sia inizialmente attiva, impostarla sul valore valueOn. Il modello definisce questa stringa come un'espressione FreeMarker Apache che attiva l'attivazione/disattivazione quando l'elemento bag composto di riferimento (rappresentato da myToggle) ha un valore nullo.
"${(submittedFields.value.myToggle)!'true'}"
Stringa
valueOff Il valore quando l'attivazione è disattivata. Il valore predefinito, in base al modello, è false (valueOff: "false" ). Stringa
valueOn Il valore quando l'attivazione è attivata. Il valore predefinito nel modello è true (value On: "true" ) Stringa
labelOn Etichetta per la posizione di attivazione/disattivazione Stringa No
labelOff Etichetta per la posizione disattivata dell'interruttore. Stringa No
channelExtensions Set di proprietà di estensione specifiche del canale. Ad esempio, è possibile impostare l'altezza massima per Facebook Messenger. Mappa<ChannelType, JSONObject> No

Campo di testo

Un elemento di campo contiene le proprietà riportate di seguito.
Nome descrizione; Digita Richiesto?
displayType Tipo di elemento. text (una stringa)
name Nome univoco per il campo nel modulo di input. Questo nome viene utilizzato come identificativo in runtime. Stringa
value Il valore RAW per il campo Stringa
width Percentuale della larghezza totale disponibile che l'elemento deve occupare in un layout di tabella. La larghezza rimanente, a partire da 100 meno gli elementi con una larghezza specificata, è equamente divisa sugli elementi senza una larghezza specificata. Valore intero No
alignment L'allineamento del valore con una colonna di tabella. left, center e right. L'impostazione predefinita è right. No
channelExtensions Set di proprietà di estensione specifiche del canale. Ad esempio, è possibile impostare l'altezza massima per Facebook Messenger. Mappa<ChannelType, JSONObject> No

Il campo del collegamento

Un elemento di campo contiene le proprietà riportate di seguito.
Nome descrizione; Digita Richiesto?
displayType Il tipo di campo link (una stringa)
name Nome univoco per il campo nel modulo di input. Questo nome viene utilizzato come identificativo in runtime. Stringa
value Indirizzo URL. Ad esempio: http:www.oracle.com Stringa
width Percentuale della larghezza totale disponibile che l'elemento deve occupare in un layout di tabella. La larghezza rimanente, a partire da 100 meno gli elementi con una larghezza specificata, è equamente divisa sugli elementi senza una larghezza specificata. Valore intero No
alignment L'allineamento del valore con una colonna di tabella. I valori consentiti sono left, center e right. L'impostazione predefinita è right. Stringa No
channelExtensions Set di proprietà di estensione specifiche del canale. Ad esempio, è possibile impostare l'altezza massima per Facebook Messenger. Mappa<ChannelType, JSONObject> No

EditFormMessagePayload

Questo payload definisce il form modificabile inviato ai canali.
Nome descrizione; Digita Richiesto?
type Tipo di payload del messaggio. editForm (una stringa)
headerText Il testo dell'intestazione visualizzato sopra il form. Stringa No
footerText Il testo visualizzato sotto il modulo e le azioni, ma sopra le azioni globali. Stringa No
title Il titolo del modulo Stringa No
formRows Elenco di righe visualizzate nel modulo. Elenco<FormRow> No
fields Un elenco di campi, di sola lettura e modificabili. Lista<field>
formColumns Numero di colonne utilizzate per il layout del form. L'impostazione predefinita è una colonna. Valore intero No
actions Lista di azioni. Lista<Action> No
globalActions Elenco di azioni globali. Il rendering di queste azioni è specifico del canale. Ad esempio, le azioni su Facebook vengono visualizzate da reply_actions. Lista<Action> No
channelExtensions Set di proprietà di estensione specifiche del canale. Ad esempio, è possibile impostare l'altezza massima per Facebook Messenger. Mappa<ChannelType, JSONObject> No
Sottomissione automatica di un campo
Quando la proprietà autoSubmit di un campo è impostata su true, il client invia un valore FormSubmissionMessagePayload con la mappa submittedField contenente i valori di campo validi immessi finora oppure solo il valore del campo con sottomissione automatica (l'implementazione è specifica del canale). I campi non ancora impostati (indipendentemente dal fatto che siano obbligatori) o che violino una convalida lato client non sono inclusi nella mappa submittedField. Se il campo sottomesso automaticamente contiene un valore non valido, il valore FormSubmissionMessagePayload non viene inviato e viene visualizzato il messaggio di errore del client.
Nota

Microsoft Teams non supporta la sottomissione automatica.

SubmitFormAction

Nome descrizione; Digita Richiesto?
type Il tipo di azione submitForm (una stringa)
postback Il payload di postback, che può includere una proprietà azione per l'attivazione della navigazione. Si consiglia di prendere il valore di questa proprietà dall'oggetto postback FormSubmissionMessagePayload. JSONObject No
variable Nome della variabile in cui sono memorizzati i valori sottomessi. Questi valori si trovano in FormSubmissionMessagePayload. Stringa No
processingMethod Istruzioni di elaborazione utilizzate dal componente Risolvi entità per i valori dei campi sottomessi. È possibile impostare questo valore su FormSubmissionMessagePayload, ma è anche possibile impostare:
  • mapVariable
  • separateVariables
  • compositeBag
.
Stringa
label Etichetta per l'azione di visualizzazione. Stringa Sì - È necessario specificare almeno un valore label o imageUrl.
imageUrl L'immagine per l'azione di visualizzazione. Stringa È necessario specificare almeno un valore label o imageUrl.
channelExtensions Set di proprietà di estensione specifiche del canale. Ad esempio, è possibile impostare l'altezza massima per Facebook Messenger. Mappa<ChannelType, JSONObject> No
FormSubmissionMessagePayload
Questo payload viene restituito dai canali alla pipeline ODA quando l'utente ha sottomesso un form facendo clic su un pulsante SubmitFormAction. Contiene le proprietà riportate di seguito.
Nome descrizione; Digita Richiesto?
type Il tipo di payload. "formSubmission" (un valore di stringa)
submittedFields Coppie chiave-valore dei valori di campo sottomessi. La chiave è il nome (ID) del campo. Mappa<String, Object>
postback Il payload di postback, che potrebbe includere una proprietà azione per attivare la navigazione. Si consiglia di prendere il valore dal SubmitFormAction JSONObject No
partialSubmitField Nome del campo che attiva l'invio parziale del modulo. I campi con la sottomissione automatica abilitata (autoSubmit: true) possono attivare una sottomissione parziale del modulo. Stringa No

Aggiornamento del modulo di input

Quando l'utente finale sottomette il modulo, poiché autosubmit è impostato su true o perché l'utente ha utilizzato il pulsante di azione submitForm, potrebbero verificarsi situazioni in cui l'utente non ha fornito tutte le informazioni richieste oppure alcuni valori di campo contengono un valore non valido. In tal caso, il motore della finestra di dialogo invierà un nuovo EditFormMessagePayload, ma tale messaggio dovrebbe sostituire il messaggio del modulo precedente. Per indicare al canale client di sostituire il messaggio del modulo precedente, invece di aggiungere un nuovo messaggio del modulo alla conversazione, configurare la proprietà di estensione del canale replaceMessage come indicato di seguito.
- channel: ${system.channelType}
  properties:
    replaceMessage: "${system.message.messagePayload.type == 'formSubmission'}"
In runtime, questa proprietà viene aggiunta all'elemento channelExtensions a livello radice del payload del componente di risposta comune:
...,
"channelExtensions": { "replaceMessage": "true"}

TableMessagePayload

Presenta i dati in formato tabulare e form.
Nome descrizione; Digita Richiesto?
type Il tipo di payload del messaggio "table"
headings Un elenco di intestazioni di colonna di tabella Elenco<TableHeading>
rows Una lista di righe di tabella Lista<riga>
forms Elenco di moduli Elenca
formColumns Numero di colonne utilizzate nel layout del form. Il valore predefinito è 1. Valore intero
paginationInfo Informazioni sull'impaginazione che possono essere utilizzate per visualizzare i pulsanti del set precedente o successivo PaginationInfo

Righe

Nome descrizione; Digita Richiesto?
fields Un elenco di campi di sola lettura Elenco <ReadOnly Campo>
selectAction Le azioni eseguite quando il modulo è stato selezionato. Quando gli utenti passano il mouse sul modulo, l'etichetta dell'azione viene visualizzata come suggerimento (se supportata dal canale). Azione No
channelExtensions Le proprietà di estensione specifiche del canale associate al messaggio Mappa<ChannelType>,JSONObject No

TableHeading

Un'intestazione di tabella contiene le proprietà riportate di seguito.
Nome descrizione; Digita Richiesto?
label L'etichetta dell'intestazione Stringa
width Larghezza etichetta intestazione Stringa No
alignment L'allineamento del valore della colonna (left, right o center). L'impostazione predefinita è right. Stringa No
channelExtensions Set di proprietà di estensione specifiche del canale.
Map<ChannelType>, JSONObject>
No

PaginationInfo

Rappresenta le informazioni di paging per i risultati negli oggetti Table, Form e Table-Form.

Nome descrizione; Digita Richiesto?
totalCount Il conteggio totale dei risultati numerica
rangeSize La dimensione dell'intervallo dei risultati per pagina numerica
status Messaggio di stato paging stringa
currentRangeSize Dimensione della gamma di risultati corrente numerica
rangeStart Offset iniziale dell'intervallo corrente di risultati numerica
nextRangeSize La dimensione del successivo intervallo di risultati numerica
hasPrevious Indica se esiste un set di risultati precedente boolean
hasNext Indica se esiste una serie successiva di risultati boolean

tableFormMessageLayout

Presenta i dati in formato tabulare e form.
Nome descrizione; Digita Richiesto?
type Il tipo di payload del messaggio "tableForm"
headings Un elenco di intestazioni di colonna di tabella Elenco<TableHeading>
rows Una lista di righe di tabella Lista<riga>
forms Elenco di moduli Elenca
formColumns Numero di colonne utilizzate nel layout del form. Il valore predefinito è 1. Valore intero
showFormButtonLabel Etichetta del pulsante utilizzata per mostrare il layout del form per una riga specifica. Stringa
paginationInfo Informazioni sull'impaginazione che possono essere utilizzate per visualizzare i pulsanti del set precedente o successivo PaginationInfo

Elemento di risposta dataSet

L'elemento di risposta dataSet consente di creare tabelle e form. Include le proprietà riportate di seguito.

Proprietà descrizione; Richiesto?
layout Lo stile di layout utilizzato per eseguire il rendering di dataSet. I valori consentiti sono table, form e tableForm.
formColumns Numero di colonne utilizzate per visualizzare gli elementi in un layout di form. Applicabile solo se il layout è form o tableForm. L'impostazione predefinita è 1. No
showFormButtonLabel Etichetta utilizzata per aprire la finestra di dialogo del form in uno stile di layout tableForm. Attualmente viene utilizzato solo sui canali Slack. Gli altri canali supportano l'espansione della riga della tabella per mostrare gli elementi aggiuntivi in un layout di modulo No
data Utilizzato per definire un'immissione dati nel file dataSet. Vedere DataSet Proprietà dati

Proprietà dati DataSet

La proprietà data dell'elemento di risposta dataSet include le seguenti proprietà secondarie.

Proprietà descrizione; Richiesto?
iteratorExpression Definisce un'espressione Freemarker che restituisce un elenco di voci su cui eseguire l'iterazione, consentendo di aggiungere dinamicamente più voci di dati a dataSet. No
iteratorVariable Specifica il nome della variabile iteratore che è possibile utilizzare per fare riferimento alla voce dati corrente all'interno dell'elenco di voci dati sottoposte a iterazione. No
rangeSize Il numero di voci di dati che verranno visualizzate contemporaneamente dopo aver specificato le proprietà iteratorExpression e iteratorVariable. No
visible Determina la modalità di visualizzazione dei messaggi per input e canale utente. Vedere La proprietà visibile. No
formTitle Titolo utilizzato per la finestra di dialogo del form nel layout tableForm nel canale Slack. L'impostazione predefinita è View details. No
items Gli elementi dati che devono essere visualizzati per ogni immissione dati. Vedere DataSet Proprietà elemento dati.

DataSet Proprietà elemento dati

Proprietà descrizione; Richiesto?
width Percentuale (espressa come numero intero) della larghezza totale disponibile che l'elemento deve utilizzare in un layout di tabella. La larghezza rimanente, a partire da 100 meno gli elementi con una larghezza specificata, è equamente divisa sugli elementi senza una larghezza specificata. No
alignment L'allineamento del valore con una colonna di tabella. I valori consentiti sono left, center e right. L'impostazione predefinita è left. No
displayType Tipo di visualizzazione dell'elemento. I valori consentiti sono text e link. L'impostazione predefinita è text. No
linkLabel Etichetta utilizzata per il collegamento ipertestuale quando il tipo di visualizzazione è impostato su link. L'impostazione predefinita è il valore della proprietà value dell'elemento. No
displayInTable Definisce se l'elemento deve essere visualizzato come colonna nella tabella. Questa proprietà è applicabile solo nel layout tableForm. L'impostazione predefinita è false. No
displayInForm Definisce se l'elemento deve essere visualizzato come campo nel modulo. Questa proprietà è applicabile solo nel layout tableForm. L'impostazione predefinita è false. No
label Etichetta dell'elemento dati.
value Valore dell'elemento dati.

La variabile system.entityToResolve

La variabile system.entityToResolve fornisce informazioni sullo stato corrente del processo di risoluzione delle entità eseguito dai componenti Risolvi entità e Risposta comune. In genere si fa riferimento alle proprietà di questo valore di variabile nei metadati del componente Risposta comune quando si desidera personalizzare i messaggi. È possibile utilizzarlo per definire la logica per il messaggio di errore di un'entità o per varie proprietà appartenenti ai componenti Risolvi entità e Risposta comune. Aggiungere le seguenti proprietà per restituire il valore dell'entità corrente:
  • userInput
  • prompt
  • promptCount
  • updatedEntities
  • outOfOrderMatches
  • disambiguationValues
  • enumValues
  • needShowMoreButton
  • rangeStartVar
  • nextRangeStart
È inoltre possibile fare riferimento alle proprietà nelle espressioni FreeMarker utilizzate per le proprietà degli elementi bag, ad esempio prompt, errorMessage e le regole di convalida.
Di seguito è riportato un esempio di utilizzo di questa variabile per restituire l'input utente corrente nel messaggio di errore di un'entità.
Sorry,'${system.entityToResolve.value.userInput!'this'}' is not a valid pizza size.
Di seguito è riportato un esempio di utilizzo di varie definizioni system.entityToResolve. Tra questi c'è un messaggio definito per la proprietà text, che conferma un aggiornamento fatto a un valore di entità precedentemente impostato utilizzando una direttiva FreeMarker list Apache e la proprietà 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"
Per le azioni globali, questa variabile controlla l'azione globale Mostra più con le proprietà needShowMoreButton, rangeStartVar e 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"
L'etichetta Mostra più deve includere un valore system.showMore (action: "system.showMore"). Altrimenti, non funzionerà.

Convalida messaggio utente

I componenti di risposta comune convalidano il valore di testo libero fornito dall'utente che viene impostato per la proprietà variable. Ad esempio, quando la proprietà variable è definita come tipo primitivo (stringa, booleano, a virgola mobile, doppio), questi componenti tentano di riconciliare il valore con uno dei tipi primitivi. Quando la proprietà della variabile è definita per una variabile di tipo entità, questi componenti chiamano il motore NLP per risolvere il valore in una delle entità. Tuttavia, quando questi componenti non possono convalidare un valore, il bot può visualizzare un messaggio di errore. Facendo riferimento alla variabile system.invalidUserInput, è possibile aggiungere un messaggio di errore condizionale alle risposte del bot. Questa variabile è booleana, pertanto è possibile utilizzarla come condizione con la direttiva FreeMarker if per visualizzare il messaggio solo quando un utente immette un valore non valido. In caso contrario, il messaggio è nascosto. Lo stato AskPizzaSize di CrcPizzaBot a cui si fa riferimento nel seguente snippet lo dimostra aggiungendo questa variabile come condizione all'interno di un modello FreeMarker valutato dalla direttiva if. Poiché è impostato su true, il bot aggiunge un messaggio di errore al messaggio standard (Quali dimensioni si desidera?) quando l'utente immette un valore non valido.
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