Configura entità sacchetto composito
Le entità sacchetto composito consentono di scrivere definizioni di flusso di dialogo molto più brevi e compatte perché possono essere risolte utilizzando un solo componente (Entità di risoluzione o Risposta comune).
-
Acquisisci tutto il testo libero, consenti il caricamento dei file e raccogli la posizione corrente dell'utente con gli elementi STRING, ATTACHMENT e LOCATION.
-
Esegui il comportamento individuale per ogni entità membro nel bag: è possibile aggiungere prompt specifici per valore e messaggi di errore per singole entità all'interno del bag composito (che include entità personalizzate, entità di sistema e gli elementi STRING, ATTACHMENT e LOCATION). È inoltre possibile controllare quali entità devono (o non devono) corrispondere all'input utente. Poiché è possibile creare una sequenza di prompt, la competenza può generare prompt diversi per ogni tentativo utente.
-
Presenta elenchi di selezione a scelta multipla.
-
Convalida le corrispondenze dei valori in base alle regole di convalida.
-
Supporto per il flusso infelice: gli utenti possono correggere le voci precedenti.
-
Esegui transizioni temporanee basate su corrispondenza: il flusso della finestra di dialogo può uscire temporaneamente dal componente quando viene trovata una corrispondenza per un'entità, in modo che un altro stato possa eseguire una funzione di supporto come una chiamata REST. Una volta completata la funzione, il flusso della finestra di dialogo torna al componente in modo che il valore corrispondente possa continuare. Ad esempio:
-
Dopo che un utente ha caricato una ricevuta, è necessario eseguire la scansione della ricevuta stessa in modo da poter estrarre da essa valori quali la data di spesa, l'importo e il tipo di spesa per le altre entità del sacchetto. Ciò consente al componente di riempire il resto dei valori dalla ricevuta, non da alcun input utente.
-
L'abilità genera un messaggio come "Quasi lì, poche altre domande" tra i set di entità corrispondenti nella borsa.
-
L'input utente deve essere convalidato tramite una chiamata REST backend. La convalida potrebbe essere necessaria immediatamente, poiché determina quali articoli del sacchetto devono richiedere ulteriori input da parte dell'utente. In alternativa, la chiamata potrebbe restituire informazioni che devono essere condivise con l'utente, ad esempio un'avvertenza fuori criterio.
-
-
Disambigua valori: è possibile isolare un valore dall'input utente tramite prompt specifici dell'entità e proprietà del componente. Questi includono il supporto per le correzioni all'input precedente (il flusso "infelice") e per richiedere l'input dell'utente per specifiche proprietà di entità incorporate.
Crea un'entità sacchetto composito
-
Fare clic su Entità
nella barra di navigazione laterale.
-
Fare clic su Aggiungi entità.
-
Scegliere Borsa composta come tipo di entità.
- Immettere il nome e la descrizione.
- Fare clic su + Gestore eventi se si desidera utilizzare il prompt e la logica del sacchetto composto a livello di programmazione utilizzando gestori eventi entità.
-
Fare clic su + Elemento set per aprire la finestra di dialogo Aggiungi elemento set. Se si aggiunge un'entità incorporata o un'entità personalizzata esistente, è possibile creare un nome specifico del sacchetto e aggiungere una descrizione del relativo ruolo nel contesto del sacchetto composito.
-
È possibile riempire il sacchetto con entità personalizzate, entità incorporate e quanto segue:
-
STRING (STRING) - Acquisisce il testo libero dall'utente.
-
LOCATION (UBICAZIONE) - Acquisisce la posizione dell'utente.
-
ATTACHMENT: accetta file, file audio, video o file immagine caricati dall'utente. L'entità sacchetto composito memorizza l'URL in cui è ospitato l'allegato.
-
-
Se si fa clic su Chiudi, si torna alla pagina Entità, ma è possibile aggiungere prima altre funzionalità specifiche del sacchetto all'elemento (o aggiornarlo in seguito facendo clic su
nella pagina Entità).
-
Passi successivi
- Aggiungere singoli messaggi di errore, prompt di disambiguazione o prompt condizionale per gli elementi del sacchetto.
Nota
Se si aggiunge l'entità a un sacchetto composito, queste verranno sovrascritte. -
Aggiungere l'entità a un intento. Vedere Aggiungi entità a intenti.
-
Configurare il flusso della finestra di dialogo per utilizzare l'entità sacchetto composito.
- Aggiungere singoli messaggi di errore, prompt di disambiguazione o prompt condizionale per gli elementi del sacchetto.
Riempimento slot avanzato
- Verrà aggiornato solo l'elemento attualmente in fase di risoluzione. Quando una corrispondenza si applica a più articoli della borsa, l'articolo della borsa attualmente risolvente ha la precedenza sugli altri articoli. Se si disattiva il riempimento avanzato degli slot, tutti gli elementi vengono aggiornati con lo stesso valore.
- Se l'articolo risolutore corrente è un articolo della borsa STRING, nessun altro articolo della borsa viene mai aggiornato.
- Se una corrispondenza entità si applica a più articoli bag (non risolti), viene visualizzata una finestra di dialogo di disambiguazione che consente all'utente di scegliere l'articolo da aggiornare anziché aggiornare tutti gli articoli bag.
- Lo switch Prompt per disambiguazione dell'entità viene ignorato. Si consiglia di implementare la disambiguazione personalizzata con un gestore di eventi entità.
L'opzione Usa riempimento slot avanzato è attivata per impostazione predefinita per le competenze create utilizzando la versione 22.08 della piattaforma. È disattivato per gli skill che sono stati aggiornati a questa versione.
Aggiungi prompt
-
Se si desidera abilitare la richiesta, lasciare vuoto il campo Richiedi valore (stato predefinito). L'immissione di
false
nel campo Richiedi valore impedisce la richiesta. Per richiedere un valore condizionale, aggiungere un'espressione FreeMarker booleana che restituiscatrue
(per la richiesta) ofalse
.Suggerimento
Quando si imposta Richiedi valore sufalse
, l'elemento può comunque essere risolto come parte di un altro elemento richiesto quando si abilita Estrazione fuori ordine. -
Fare clic su Aggiungi prompt per creare la sequenza di prompt. È possibile riordinarlo mescolando i campi mediante azioni di trascinamento della selezione o rinumerandoli. È possibile randomizzare l'output dei prompt quando si assegnano due o più prompt con lo stesso numero.NotaÈ possibile memorizzare i prompt nei bundle di risorse (ad esempio,
È possibile aggiungere prompt per entità incorporate solo quando vengono aggiunti a un sacchetto composto.${rb.askCheese}
) o scriverli come combinazioni di testo e espressioni FreeMarker.
Aggiornamento dei valori fessurati con le espressioni FreeMarker di Apache
Nel campo Aggiornabile, immettere un'espressione FreeMarker Apache che restituisca true
per consentire l'aggiornamento del valore inserito nello slot per un elemento sacchetto composto.
Abilita estrazione fuori ordine
- Always (sempre): l'opzione predefinita. Quando si sceglie questa opzione per un elemento, il relativo valore può essere inserito in uno slot senza alcuna richiesta. Ad esempio, l'entità PizzaSize potrebbe essere risolta quando un cliente immette Voglio una pizza di grandi dimensioni. Questa opzione consente inoltre di modificare il valore dell'elemento in qualsiasi momento, a condizione che l'espressione nella proprietà Aggiornabile non restituisca
false
. Ad esempio, quando il sacchetto composito richiede l'entità PizzaType, il cliente potrebbe quindi rispondere Veggie, ma renderlo un supporto. Lo skill può aggiornare il valore dell'entità PizzaSize con il supporto senza riavviare la conversazione perché Sempre è abilitato per gli elementi PizzaSize e PizzaType del bag.Nota
Sebbene questa opzione sia il comportamento predefinito, potrebbe non essere sempre appropriata per gli elementi STRING. Se si sceglie questa opzione per un articolo STRING, ad esempio, il primo messaggio utente verrà memorizzato dall'articolo STRING anziché essere abbinato all'entità desiderata (che potrebbe essere designata come primo articolo del carrello da risolvere). - Mai: quando si sceglie questa opzione, l'elemento viene inserito nello slot solo dopo che è stato richiesto, anche quando altri messaggi utente contengono valori validi. Scegliere Mai per evitare corrispondenze involontarie.
- Solo quando si risolve l'espressione dell'intento: limita lo slotting del valore fuori ordine alla prima espressione utente risolta nell'intento associato all'entità sacchetto composito.
Regola estrazione out of order | Uso utente iniziale | Valore con slot | Note |
---|---|---|---|
Sempre | Ordina pizza con tonno | Tonno | Lo slotting dei valori per l'elemento PizzaToppings può essere trovato ogni volta che il messaggio utente contiene il valore corretto ("funghi invece!). Può essere slotting o aggiornato in qualsiasi punto della conversazione senza richiedere. |
mai | Ordina pizza con tonno | Nessuna | Il valore dell'articolo PizzaTopping non può essere inserito in uno slot out of order o aggiornato ad hoc. Può essere abbinato solo quando viene richiesto. |
Solo quando si risolve l'espressione dell'intento | Ordina pizza con tonno | Tonno. Tuttavia, se l'utente ha inserito "Ordina pizza grande", il sacchetto composito dovrebbe richiedere il valore PizzaTopping. | L'elemento PizzaTopping può essere inserito in uno slot out of order solo quando il primo enunciato utente che si risolve in un intento ha un valore corrispondente. Altrimenti, questo valore deve essere richiesto. Il sacchetto composito non consentirà l'aggiornamento o lo slotting ad hoc di questo articolo. |
Abilita estrazione con
- Il sacchetto composito ha due entità relative all'indirizzo: NamedAddress, un'entità valore elenco con valori come home e office e DeliveryAddress, un'entità ADDRESS.
- Il prompt dell'entità DeliveryAddress è Dove si desidera che venga consegnato?
- L'entità NamedAddress non richiede l'input (false viene immesso nel campo Prompt per valore).
- L'entità NamedAddress può essere estratta con DeliveryAddress (DeliveryAddress è selezionata dal menu Estrai con).
Quando il sacchetto composto richiede l'entità DeliveryAddress, può risolvere l'entità utilizzando un indirizzo fisico o uno dei valori della lista NamedAddress (home o office).
Aggiungi regole di convalida
varName
è il nome dell'entità sacchetto composito dichiarata come variabile nella definizione del flusso della finestra di dialogo:${varName.value.itemName}
Se l'espressione restituisce false, l'input utente non è valido.amount
dell'entità CURRENCY:${expense.value.Amount.amount > 4}
Amounts below 5 ${expense.value.Amount.currency} cannot be expensed. Enter a higher amount or type 'cancel'.
Per ulteriori informazioni sulle altre proprietà VALUTA e sulle altre proprietà entità incorporate, vedere Entità incorporate e relative proprietà.
Configura un flusso di finestre di dialogo YAML per entità sacchetto composito
Se la tua abilità viene sviluppata in modalità finestra di dialogo YAML, ecco le cose che devi fare per configurare il flusso della finestra di dialogo per le entità sacchetto composito:
-
Nel nodo
context
, dichiarare l'entità sacchetto composito come variabile:... metadata: platformVersion: "1.1" main: true name: "ExpenseBot" context: variables: expense: "Expense" iResult: "nlpresult"
-
È possibile utilizzare
System.ResolveEntities
oSystem.CommonResponse
. Entrambi questi componenti consentono di sfruttare l'entità sacchetto composito ed entrambi offrono i propri vantaggi. IlSystem.ResolveEntities
è il più semplice dei due, con un piccolo insieme di proprietà. A differenza del componenteSystem.ResolveEntities
,System.CommonResponse
offre un maggiore controllo sull'interfaccia utente utilizzata per risolvere le entità nel bag. Ad esempio, è possibile aggiungere una logica condizionale per determinare i prompt e le azioni globali correlate al valore.Suggerimento
Poiché i metadati per il componenteSystem.CommonResponse
possono diventare molto complessi quando si utilizzano entità bag composte, si consiglia di utilizzare il componenteSystem.ResolveEntities
e i gestori di eventi entità per qualsiasi personalizzazione dell'interfaccia utente. -
Fare riferimento alla variabile di contesto dell'entità sacchetto composito nella proprietà
variable
del componente, quindi definire le altre proprietà in base alle esigenze. System.ResolveEntities e Proprietà componente le descrivono e forniscono ulteriori esempi.Di seguito è riportato un esempio del componenteSystem.ResolveEntities
.createExpense: component: "System.ResolveEntities" properties: variable: "expense" useFullEntityMatches: true nlpResultVariable: "iResult" cancelPolicy: "immediate" transitions: actions: cancel: "cancelExpense" return: "done"
La variabile system.entityToResolve
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
prompt
, errorMessage
e le regole di convalida.
Sorry,'${system.entityToResolve.value.userInput!'this'}' is not a valid pizza size.
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"
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à.
entityToResolve Espressioni
Espressione | descrizione; |
---|---|
${system.entityToResolve.value.resolvingField} |
Restituisce il nome dell'articolo del sacchetto. |
${system.entityToResolve.value.allMatches[0].entityName} |
Restituisce il nome dell'entità a cui fa riferimento l'articolo del sacchetto. L'array allMatches contiene tutte le entità i cui valori potrebbero essere potenzialmente aggiornati dal messaggio dell'utente.
|
${<variable>1.value[system.entityToResolve.value.resolvingField]} |
Restituisce il valore dell'elemento bag immesso o selezionato dagli utenti. |
${system.entityToResolve.value.userInput} |
Restituisce il testo immesso dall'utente. È possibile utilizzare questa espressione per registrare l'input utente o visualizzarlo nella chat, ad esempio quando un utente immette un valore non valido. |
${system.entityToResolve.value.outOfOrderMatches[n].entityName} |
Restituisce il nome o i nomi delle entità estratte fuori ordine. Insieme ai valori richiesti dalle entità di risoluzione o dai componenti di risposta comune, gli utenti possono fornire valori aggiuntivi che attivano l'estrazione dei valori fuori ordine e gli aggiornamenti ad altre entità nel sacchetto composito. |
${system.entityToResolve.value.outOfOrderMatches[n].name} |
Restituisce il nome dell'articolo sacchetto composito. |
${system.entityToResolve.value.outOfOrderMatches? has_content?then(…,…)} |
Restituisce il valore di un'entità con corrispondenza fuori ordine. Poiché è probabile che non sia stata trovata alcuna corrispondenza per entità fuori ordine, questa espressione utilizza l'operatore has_content .
|
Handler eventi entità
È possibile gestire il servizio distribuito per EEH dalla pagina Componenti

bots-node-sdk
. Ad esempio, lo snippet riportato di seguito illustra la definizione di un evento validate
in una voce sacchetto denominata ExpenseDate che impedisce agli utenti di immettere una data futura durante l'archiviazione di una nota spese.ExpenseDate: {
validate: async (event, context) => {
if (new Date(event.newValue.date) > new Date()) {
context.addValidationError("ExpenseDate",context.translate('ExpenseDate.text'));
return false;
}
}
La documentazione Writing Entity Event Handler di bots-node-sdk
descrive la struttura complessiva del codice del gestore eventi, gli eventi a livello di elemento e entità e i metodi EntityResolutionContext come addValidationError
e translate
nello snippet sopra riportato.
Poiché i gestori di eventi entità sono scritti in JavaScript, è possibile utilizzare una logica avanzata che non è facile da ottenere o addirittura fattibile con le espressioni FreeMarker che è possibile utilizzare per definire la convalida, gli errori e i prompt nella pagina Modifica elemento bag e nel flusso della finestra di dialogo. Sono anche più facili da eseguire il debug. Detto questo, non è necessario scegliere gestori di eventi entità su espressioni FreeMarker. È possibile combinare i due. Ad esempio, è possibile utilizzare le espressioni FreeMarker per semplici convalide e prompt e riservare un EEH per funzioni più complesse come la chiamata di un'API REST quando tutti gli elementi del bag sono stati risolti.
Crea gestori eventi entità con editor di codice gestore eventi
È possibile creare EEH utilizzando l'editor Codice gestore eventi a cui si accede dalla pagina delle proprietà del sacchetto composito o con l'IDE desiderato. Mentre l'editor Event Handler Code presenta alcuni vantaggi rispetto a uno strumento di terze parti, potresti voler alternare un IDE di terze parti a seconda delle dimensioni dell'attività e delle librerie di cui hai bisogno. Per valutare i pro e i contro, vedere Quale IDE dovrei usare?
- Fare clic su + Handler eventi.
- Completare la finestra di dialogo Crea handler di eventi aggiungendo un nome di servizio e un nome di handler.
Dopo aver creato l'handler, è possibile aprire l'editor facendo clic su .
L'editor è popolato con il codice iniziale. Il relativo oggetto handlers
contiene gli oggetti entity
, items
e custom
. All'interno di questi oggetti, si definiscono gli eventi a livello di evento, attivati per l'intero sacchetto composito, gli eventi a livello di articolo, che controllano la risoluzione dei singoli articoli del sacchetto e gli eventi personalizzati attivati su azioni di postback. Per impostazione predefinita, per l'oggetto handler
è stato definito un oggetto entity
. Gli oggetti items
e custom
vengono popolati quando si aggiunge un modello a livello di elemento o personalizzato.
Descrizione dell'immagine eeh-default-template.png
event
: oggetto JSON delle proprietà specifiche dell'evento.context
: riferimento alla classe EntityResolutionContext, i cui metodi (ad esempioaddValidationError
nello snippet seguente) forniscono la logica del gestore di eventi.
items: {
Amount: {
validate: async (event, context) => {
let amount = event.newValue.amount;
if (amount < 5) {
context.addValidationError("Amount",`Amounts below 5 ${event.newValue.currency} cannot be expensed. Enter a higher amount or type 'cancel'.`);
}
}
}
Refer to the
bots-node-sdk
’s Writing Entity Event Handlers documentation for further information on the EEH starter code, item- and entity-level events, EntityResolutionContext, and code samples.
Aggiungi eventi
Ad esempio, l'aggiunta di un modello di evento
validate
inserisce nell'editor il codice seguente:validate: async (event, context) => {
},
È quindi possibile aggiornare questo modello con il proprio codice:validate: async (event, context) => {
if (event.newValue.value === 'PEPPERONI')
context.addValdiationError('Type', "Sorry, no pepperoni pizzas today!");
},
Quando il codice è valido, fare clic su Salva per distribuirlo automaticamente e inserirlo in un file TGZ. È possibile monitorare lo stato della distribuzione e scaricare il file TGZ per riutilizzarlo in altre competenze dalla pagina Componenti.
Suggerimento
Per verificare la presenza di errori di runtime, attivare Abilita log dei componenti, quindi rivedere i log, a cui è possibile accedere facendo clic su Diagnostica > Visualizza log, per trovare informazioni sui parametri che hanno richiamato gli eventi.

Aggiungi gestori eventi a livello di entità
validate
, publishMessage
, maxPromptsReached
, resolved
, attachmentReceived
e locationReceived
.Evento | descrizione; |
---|---|
validate |
Handler per le convalide a livello di entità chiamato quando il valore di almeno uno degli elementi del bag è stato modificato. |
publishMessage |
Handler di fallback generico che viene chiamato ogni volta che un oggetto bag manca di un messaggio di prompt o di una gestione di disambiguazione. |
maxPromptsReached |
Handler di fallback generico quando non è stato specificato l'handler specifico dell'elemento per il raggiungimento del numero massimo di prompt. |
resolved |
Questa funzione viene chiamata quando l'entità sacchetto composito è stata risolta. In genere si aggiunge un evento resolved per chiamare un'interfaccia API backend che completa una transazione correlata ai valori raccolti dall'entità sacchetto composto. Se la chiamata API restituisce errori perché alcuni valori raccolti dal sacchetto composito non sono validi, è possibile cancellare questi valori.
|
attachmentReceived |
Questo handler viene chiamato quando l'utente invia un allegato. |
locationReceived |
Questo handler viene chiamato quando l'utente invia una posizione. |
publishMessage
. Tramite le funzioni updatedItemMessage
e outOfOrderItemsMessage
(definite anche nel modello predefinito), questo evento consente di generare messaggi che confermano l'aggiornamento di un valore di elemento del sacchetto precedentemente risolto o che ha accettato input validi per un elemento del sacchetto diverso da quello richiesto dall'entità (input fuori ordine).Questo evento è facoltativo. È possibile eliminarlo, lasciarlo così com'è o aggiungervi funzionalità. Ad esempio, è possibile aggiungere un pulsante Annulla quando i tentativi di un utente di immettere un valore valido hanno superato il numero massimo di prompt.
publishMessage: async (event, context) => {
updatedItemsMessage(context);
outOfOrderItemsMessage(context);
//Add Cancel button for invalid values entered by users
let message = context.getCandidateMessageList()[0];
}
…
message.addGlobalAction(context.getMessageFactory().createPostbackAction('Cancel', {action:'cancel'}));
context.addMessage(message); }
}
Aggiungi handler a livello di articolo
shouldPrompt
, validate
, publishPromptMessage
, publishDisambiguateMessage
e MaxPromptsReached
.Evento | descrizione; |
---|---|
shouldPrompt |
Richiede un articolo in base ai valori degli altri articoli nel sacchetto. Questo handler ha la precedenza sulla richiesta configurata tramite il campo Richiedi valore. |
validate |
Questo handler viene chiamato solo quando è stato impostato un valore per un elemento bag. Se la validità del valore dipende da altri articoli sacchetto, è necessario implementare l'evento validate a livello di entità.
|
publishPromptMessage |
Utilizzare questa funzione per sostituire o estendere il messaggio generato dai componenti Risposta comune e Risolvi entità per richiedere l'elemento. |
publishDisambiguateMessage |
Utilizzare questa funzione per sostituire o estendere il messaggio del prompt di disambiguazione generato dai componenti Entità risposta comune e Risolvi. |
maxPromptsReached |
Questa funzione viene chiamata quando viene raggiunto il numero massimo di prompt per questo elemento, specificato dal numero massimo di tentativi di input utente nella schermata dell'elemento del sacchetto composito. |
L'aggiunta di un evento a livello di elemento genera l'oggetto items
.
Descrizione della figura eeh-items-block.png
Aggiungi eventi personalizzati
L'aggiunta di un modello personalizzato aggiunge un oggetto
custom
con il codice evento di base. Per esempi sull'implementazione di un evento personalizzato, fare riferimento alla documentazione Writing Entity Event Handler del sito bots-node-sdk
.someCustomEvent: async (event, context) => {
}
Sostituire o rimuovere un handler di eventi entità
- Selezionare una riga vuota dal menu Gestore eventi per riattivare il pulsante + Gestore eventi.
- Aprire la pagina Componenti
. Disattivare Servizio abilitato o eliminare il servizio.
Nota
Non è possibile eliminare o disabilitare un servizio se l'EEH è ancora associato all'entità sacchetto composto. - Se necessario, aggiungere un nuovo EEH al sacchetto composito oppure, se non si sta optando per un nuovo EEH, è possibile aggiungere la logica di risoluzione con espressioni FreeMarker.
Suggerimento
L'eliminazione dell'entità sacchetto composto comporta anche l'eliminazione del servizio distribuito per EEH.Quale IDE dovrei usare?
bots-node-sdk pack
oppure utilizzare l'editor Codice gestore eventi fornito. Quando si utilizza il nostro editor, non è necessario impostare l'ambiente di sviluppo o il package e distribuire il codice. Il codice viene distribuito automaticamente dopo il salvataggio. Puoi anche rivedere il codice direttamente senza doverlo ridistribuire, cosa che non puoi fare quando crei un package e distribuisci un handler creato con il tuo IDE. Impossibile aggiungere altri package NPM utilizzando l'editor di codice dell'handler di eventi. Avrai bisogno di un altro IDE. Ad esempio, se si desidera utilizzare Moment.js per utilizzare le date, è necessario scaricare l'area TGZ, aggiungere la libreria utilizzando l'ambiente IDE desiderato, quindi riconfezionare e distribuire l'area TGZ. Successivamente, è possibile continuare a utilizzare l'editor Codice gestore eventi.
Suggerimento
L'editor Codice gestore eventi potrebbe essere un'opzione migliore per le piccole modifiche. Se è necessario apportare modifiche più grandi o aggiungere pacchetti NPM aggiuntivi, è possibile scaricare il file TGZ dalla pagina Componenti, decomprimerlo e quindi utilizzare l'editor preferito per modificare il codice prima di riconfezionarlo e distribuirlo.Semplifica i flussi di dialogo con i gestori di eventi entità
I gestori di eventi entità possono semplificare la definizione del flusso della finestra di dialogo perché vengono utilizzati con le best practice di abbreviazione della finestra di dialogo che sono entità bag composte. Quando si tratta di servizi backend, la definizione del flusso di finestre di dialogo diventa meno complessa perché non è necessario scrivere uno stato separato per il componente personalizzato che li chiama.
metadata
del componente Risposta comune. È invece possibile aggiungere la giostra tramite un codice semplice, il che significa che è anche possibile aggiungere risposte alle carte al componente Risolvi entità. Ad esempio, questo codice consente al componente Risolvi entità di generare una giostra a scorrimento orizzontale di schede per il tipo di pizza, con ciascuna carta con un pulsante Annulla:Type: {
publishPromptMessage: async (event, context) => {
let candidateMessage = context.getCandidateMessageList()[0];
const mf = context.getMessageFactory();
const message = mf.createCardMessage()
.setLayout(horizontal)
.setCards(context.getEnumValues().map(p => {
mf.createCard(p.value)
.setDescription(pizzaInfo[p.value].description)
.setImageUrl(pizzaInfo[p.value].image)
.addAction(mf.createPostbackAction('Order',{variables: {pizza: p.value}}));
})
.setGlobalActions(candidateMessage.getGlobalActions());
context.addMessage(message);
}
Esercitazioni del gestore di eventi entità
Seguire questa esercitazione per acquisire familiarità con i gestori di eventi entità creando uno utilizzando l'editor. Quindi, eseguire il check-out di questa esercitazione avanzata per creare un handler di eventi entità con un IDE esterno e bots-node-sdk
.
Disambigua gli articoli e i sottotipi di borsa nidificati
startTime
e endTime
per un sottotipo INTERVAL, presenta agli utenti il valore definito per la proprietà Etichetta per chiarire l'input richiesto. Suggerimento
Come per tutte le stringhe, si consiglia di definire il valore Etichetta come bundle di risorse.Aggiungere l'entità DATE_TIME a un sacchetto composito
Sebbene sia possibile utilizzare la data, l'ora e la durata come entità autonome, è consigliabile utilizzarle all'interno di entità sacchetto composto.
- Prima di creare un articolo bag DATE_TIME, configurare le regole di risoluzione delle ambiguità di data e ora appropriate per il caso d'uso. Ad esempio, se si sta creando uno skill per le note spese, selezionare Passato. Se lo skill è uno scheduler riunioni, selezionare Futuro.
- Nell'entità sacchetto composto fare clic su Aggiungi articolo.
- Selezionare Entità nel menu Tipo.
- Selezionare DATE_TIME dal menu Nome entità.
- Scegliere un sottotipo DATE_TIME dal menu Sottotipo.
Le opzioni di configurazione nella pagina Aggiungi elemento del sacchetto cambiano a seconda del sottotipo selezionato. Ad esempio, se si seleziona il sottotipo Ricorrente, è possibile accedere alle opzioni di configurazione per gli elementi del sacchetto nidificato specifici per l'impostazione di un evento ripetuto, ad esempio l'oggetto Data e ora per la data e l'ora di inizio iniziali e l'oggetto Durata per l'impostazione della frequenza dell'evento. - Se sono stati selezionati i sottotipi Ricorrente o Intervallo:
- Impostare i valori del sottotipo richiesti dal sacchetto composito dal menu Richiedi.
- Poiché in genere le riunioni iniziano e terminano lo stesso giorno, attivare Data di fine predefinita fino alla data di inizio per il sottotipo
startDate
. In questo modo la data di fine viene impostata come la data di inizio quando il messaggio utente non menziona la data di fine (o quando la data di fine non viene estratta fuori ordine).
- Se si desidera, aggiungere un'etichetta di disambiguazione se l'input utente può corrispondere a più sottotipi.
Suggerimento
È inoltre possibile configurare le proprietà non specifiche di DATE_TIME, ad esempio riempimento avanzato degli slot, aggiornamento dei valori di slotting con Apache FreeMarker, prompt personalizzati e messaggi di errore. - È possibile accedere alla configurazione a livello di sottotipo facendo clic su un sottotipo. Utilizzare l'attraversamento per tornare alla configurazione a livello di articolo.
- Passi successivi
- Associare l'entità sacchetto composito all'intento.
- Dichiarare una variabile per l'entità nel flusso della finestra di dialogo.
- Nel flusso della finestra di dialogo, fare riferimento all'entità sacchetto composito con l'elemento DATE_TIME utilizzando lo stato Risolvi sacchetto composito.
- I valori DATE_TIME sono rappresentati come ISO 8601. Per un output intuitivo, utilizzare Apache FreeMarker
.xs
integrato. Nello snippet seguente, il valore del sottotipo Ora viene formattato utilizzando.value?time.xs?string['hh:mm a']
.
Anziché fare riferimento all'elemento DATE_TIME come stringa, è possibile seguire l'approccio basato sulle migliori prassi per fare riferimento a tale elemento in un bundle di risorse, ad esempioYour pizza will be delivered at ${pizza.value.deliveryTime.value?time.xs?string['hh:mm a']}.
DeliveryMessage
nell'esempio riportato di seguito.
Per il messaggio del bundle di risorse${rb('DeliveryMessage','time',pizza.value.deliveryTime.value?time.xs?string['hh:mm a'])}
DeliveryMessage
, il valore viene visualizzato tramite il parametro{time}
:Your pizza will be delivered at {time}.
Esercitazione: Estrazione di entità nel mondo reale con entità di borse composte
È possibile dare un'occhiata pratica alla creazione di un sacchetto composito attraverso questa esercitazione: Abilita estrazione di entità Real-World con entità sacchetto composito.