Componenti interfaccia utente
Questi sono i componenti disponibili nella categoria Interfaccia utente dell'editor di flusso della finestra di dialogo basata su YAML.
-
System.CommonResponse: consente di eseguire messaggi ricchi di contenuto.
-
System.Webview: integra il bot con un'applicazione Web.
-
System.IncidentCreation: crea un incidente per Oracle B2C Service o Oracle Fusion Service.
-
System.IntelligentAdvisor: integra la competenza con un'intervista Oracle Intelligent Advisor.
-
System.KnowledgeSearch: consente di cercare un servizio knowledge per informazioni su una materia.
-
System.AgentTransfer: abilita una competenza DA-as-agent per trasferire una conversazione a Oracle B2C Service o Oracle Fusion Service.
-
System.AgentTransferCondition: consente di verificare se gli agenti sono disponibili e di ottenere il tempo di attesa previsto.
-
System.AgentInitiation e System.AgentConversation: consente di trasferire una conversazione a un agente reale di Oracle B2C Service.
-
System.ResolveEntities: risolve i valori per le entità membro di un'entità sacchetto composto.
- System.Feedback: esegue l'output di un componente di rating del feedback.
System.CommonResponse
Il componente System.CommonResponse
consente di creare messaggi con funzioni avanzate dell'interfaccia utente, ad esempio caroselli di schede con immagini e pulsanti di azione oppure moduli con tabelle e campi di input.
In questo argomento viene descritto l'uso di questo componente in modalità YAML. Per informazioni sull'utilizzo in Visual Flow Designer, vedere Modelli comuni di componenti di risposta.
I modelli per il file System.CommonResponse
sono disponibili nella sezione Messaggistica utente della finestra di dialogo Aggiungi componente.
System.CommonResponse
in CrcPizzaBot, uno dei bot di esempio. In questa selezione sul PizzaBot, è possibile visualizzare un menu ricco di immagini con l'azione rapida Ordina ora pulsanti.
Nel contesto del componente System.CommonResponse
, i diversi tipi di messaggi sono noti come tipi di risposta e CrcPizzaBot mostra come, tra le altre cose, consentono agli utenti del bot di rispondere ai prompt utilizzando i pulsanti di azione e visualizzare il menu pizza come una cascata di elementi della scheda.
Nel menu Aggiungi componente è possibile selezionare modelli System.CommonResponse
diversi per le schede, il testo, le risposte agli allegati e per le entità sacchetto composto (dimostrato da CbPizzaBot). Questi modelli includono entrambe le proprietà comuni a tutte queste proprietà del tipo di risposta specifiche per i singoli tipi di risposta. Mentre il menu Aggiungi componente aggiunge stati separati per ogni tipo di risposta, è possibile combinare uno o più tipi di risposta in un unico stato. Il file CrcPizzaBot mostra esempi di entrambi gli stati ShowMenu
(risposta di testo) e OrderPizza
(risposte di testo e schede).
È necessario eseguire il test di ogni skill nei canali target all'inizio del ciclo di sviluppo per assicurarsi che i componenti vengano visualizzati come desiderato.
Le proprietà del componente
La configurazione dei componenti System.CommonResponse
comporta l'impostazione delle proprietà che indirizzano il motore delle finestre di dialogo insieme alle proprietà dei metadati che descrivono non solo il modo in cui il componente invia i messaggi (come prompt di testo, schede o allegati), ma imposta anche il contenuto e il comportamento dei messaggi stessi.
Nome | descrizione; | Richiesto? |
---|---|---|
metadata |
La risposta chat creata da questo componente è determinata dal contenuto della proprietà metadata . Vedere Proprietà dei metadati nei componenti di risposta comuni.
|
Sì |
processUserMessage |
Impostare questa proprietà su true per fare in modo che il motore di dialogo torni allo stato dopo che l'utente ha immesso del testo o ha toccato un pulsante. Impostare questa proprietà su false se non è richiesto o previsto alcun input utente.
Impostare questa proprietà su |
Sì |
autoNumberPostbackActions |
Questa proprietà viene utilizzata per borse composite, risposte testuali e risposte carta. Quando è impostata su true , questa opzione antepone i numeri alle opzioni. Anche se questa opzione non è stata impostata su true , è possibile applicare la numerazione automatica agli elementi della scheda quando la configurazione di Abilita numerazione automatica su azioni postback dell'assistente digitale è impostata su true . Come dimostrato dalla configurazione predefinita, la numerazione automatica specifica del canale può essere applicata a qualsiasi bot di skill registrato in un assistente digitale (${(system.channelType=='twilio')?then('true','false')} ):
|
No |
variable |
Questa variabile contiene il nome del contesto o della variabile utente che viene popolata quando un utente risponde immettendo testo libero anziché toccando un pulsante. Questa proprietà viene ignorata quando un utente tocca un pulsante perché il payload del pulsante determina quali valori di variabili vengono impostati. Se la proprietà della variabile è già stata impostata quando Dialog Engine entra in questo stato, lo stato viene saltato. Per le entità sacchetto composito, fare riferimento alla variabile entità sacchetto composito. Agli utenti viene richiesto di specificare i singoli valori di entità nel bag. Quando tutti i valori dell'entità sono impostati, il componente passa allo stato successivo. |
No |
nlpResultVariable |
Imposta la proprietà variable con un valore entità (quando tale valore entità non è già stato impostato per la variabile di riferimento). È possibile abilitare nlpResultVariable per restituire il valore quando viene definito utilizzando una variabile che contiene i risultati NLP, ad esempio iResult: "nlpresult" utilizzato nei bot di esempio. In questo modo, la proprietà nlpResultVariable può comunque popolare il valore quando è nullo se trova un'entità risolta che corrisponde a quella a cui fa riferimento la variabile. La finestra di dialogo passa allo stato successivo quando il valore nlpResultVariable viene impostato. È possibile utilizzare questa proprietà al posto del componente System.SetVariable.
|
No |
useFullEntityMatches |
Se impostato su true , i valori di entità personalizzati vengono memorizzati come oggetti JSON (simili ai valori di entità built-in). Ciò consente di creare espressioni per accedere a proprietà quali value , primaryLanguageValue e originalString , particolarmente importanti per le competenze che attualmente o eventualmente potrebbero diventare multilingue.
|
No |
maxPrompts |
Prima che il componente System.CommonResponse possa popolare il valore di variabile specificato per la proprietà variable dal testo immesso dall'utente, il valore viene convalidato in base al tipo di variabile. Può trattarsi di una convalida di tipo entità o, nel caso di un tipo primitivo, di un valore che può essere forzato sul tipo primitivo.
Quando il componente non è in grado di convalidare il valore, il modulo di gestione finestre di dialogo invia di nuovo il testo e le opzioni del messaggio. È possibile modificare questo messaggio per riflettere l'errore di convalida. Per evitare un loop infinito derivante dalla continua incapacità dell'utente di immettere un valore valido, utilizzare questa proprietà per impostare un limite al numero di tentativi concessi all'utente. Quando l'utente supera questa assegnazione, il componente Come descritto in Crea un'entità sacchetto composto, le singole entità nel sacchetto composto possono sostituire questa impostazione quando è impostata l'opzione Numero massimo di tentativi di input utente. |
No |
keepTurn |
La proprietà keepTurn viene applicata solo quando si imposta la proprietà processUserMessage su false . Vedere System.Output per scoprire come impostare questa proprietà.
|
No |
translate |
Utilizzare questa proprietà per sostituire il valore booleano impostato per la variabile di contesto autotranslate . Se questa variabile non è stata impostata oppure se è stata impostata su false , è possibile impostare questa proprietà su true per abilitare la traduzione automatica solo per questo componente. Se si imposta la variabile autotranslation su true , è possibile impostare questa proprietà su false per escludere questo componente dalla traduzione automatica. Vedere Translation Services in Skills.
|
No |
footerText |
Migliora 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 |
transitionAfterMatch (obsoleto)
|
Valore booleano che, quando viene impostato su true , abilita una transizione temporanea dalla corrispondenza entità eseguita da questo componente a un altro stato. Questa proprietà non è più supportata. Per ottenere questa funzionalità, utilizzare un gestore di eventi entità |
No |
cancelPolicy |
Determina i tempi della transizione cancel :
maxPromptsReached a livello di elemento o evento. |
No |
Di seguito è riportata la YAML per uno stato di esempio basato sul componente System.CommonResponse
.
AskPizzaSize:
component: "System.CommonResponse"
properties:
variable: "pizzaSize"
nlpResultVariable: "iresult"
maxPrompts: 2
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
actions:
- label: "${enumValue}"
type: "postback"
payload:
action: ""
variables:
pizzaSize: "${enumValue}"
name: "size"
iteratorVariable: "pizzaSize.type.enumValues"
processUserMessage: true
transitions:
actions:
cancel: "Intent"
next: "AskLocation"
Suggerimento
La proprietàtext
in questo snippet viene definita mediante Apache FreeMarker Template Language (FTL). Per informazioni su come aggiungere espressioni FTL e utilizzare le operazioni incorporate FreeMarker per trasformare i valori delle variabili, vedere Sintassi del linguaggio del modello FreeMarker di Apache.
Transizioni per il componente System.CommonResponse
Transition | descrizione; |
---|---|
cancel |
Attivato quando un utente supera i tentativi assegnati impostati dalla proprietà maxAttempts oppure reindirizza il flusso.
|
textReceived |
Attivato quando un utente invia testo o emoji invece di toccare un pulsante di azione o un collegamento. |
attachmentReceived |
Attivato quando un utente invia un'immagine, un audio, un video o un allegato file. |
locationReceived |
Attivato quando l'utente invia una posizione. |
system.outOfOrderMessage |
Impostare questa opzione per aggirare il comportamento imprevisto dell'utente. In particolare, quando un utente non tocca un elemento azione nel messaggio corrente, ma tocca invece un'azione appartenente a un messaggio precedente nella sessione di chat. |
Transizioni sacchetto composito nel componente System.CommonResponse
System.CommonResponse
attivano le azioni match
e cancel
in base ai valori corrispondenti dall'input utente e alla configurazione della proprietà cancelPolicy
.
Azione | descrizione; | Richiesto? |
---|---|---|
match |
Il componente attiva questa azione per passare allo stato specificato quando almeno un'entità nel sacchetto corrisponde all'input utente. | No |
cancel |
Il componente attiva questa azione per passare allo stato specificato in base all'impostazione per la proprietà cancelPolicy .
|
No |
System.Webview
In questo argomento viene descritto l'uso di questo componente in modalità YAML. Per informazioni sull'utilizzo in Visual Flow Designer, vedere Componente vista Web.
Il componente System.Webview
apre una vista Web all'interno dello skill o per gli skill eseguiti in un canale Web in una scheda del browser.
System.WebView Proprietà componente
Proprietà | descrizione; | Richiesto? |
---|---|---|
sourceVariableList |
Lista separata da virgole di nomi di variabili di contesto o utente. Questi nomi di variabile sono i parametri che vengono inviati alla webview; sono i parametri di input dal bot. È possibile impostare ogni variabile aggiungendo una serie di stati System.SetVariable prima dello stato System.Webview .
|
Sì |
variable |
Nome della variabile (un valore stringa) che identifica il payload della vista Web restituito al bot dopo che l'utente ha completato le interazioni all'interno della vista Web.
Poiché il payload viene memorizzato in questa variabile, a cui è possibile accedere in un secondo momento nella definizione del flusso della finestra di dialogo. Ad esempio, è possibile fare riferimento a questo in un componente di output. |
Sì |
prompt |
Stringa di testo simile a "Toccare per continuare". | No |
service |
Il nome del servizio del componente vista Web. | No |
imageUrl |
L'URL dell'immagine che accompagna un prompt. | No |
linkLabel |
Etichetta del pulsante che richiama l'applicazione Web. | No |
cancelLabel |
Etichetta del pulsante Annulla che consente agli utenti di lasciare lo stato senza richiamare l'applicazione Web. | No |
autoNumberPostbackActions |
Abilita l'input utente nei canali SMS, che non supportano i pulsanti, aggiungendo equivalenti di numeri agli elementi dell'interfaccia utente.
|
No |
translate |
Utilizzare questa proprietà per sostituire il valore booleano impostato per la variabile di contesto autotranslate . Se questa variabile non è stata impostata oppure se è stata impostata su false , è possibile impostare questa proprietà su true per abilitare la traduzione automatica solo per questo componente. Se si imposta la variabile autotranslation su true , è possibile impostare questa proprietà su false per escludere questo componente dalla traduzione automatica. Vedere Translation Services in Skills.
|
No |
Transizioni per il componente System.Webview
Transizioni | descrizione; |
---|---|
next |
Assegna un nome allo stato successivo nel flusso della finestra di dialogo dopo il callback riuscito dall'applicazione Web. |
return |
Chiude la conversazione dopo il callback riuscito dall'applicazione Web. |
error |
Assegna un nome allo stato che gestisce gli errori. |
actions |
|
System.IncidentCreation
È possibile utilizzare il componente System.IncidentCreation
per creare un incidente in una sede del servizio clienti. Si noti che è necessario creare un'integrazione del servizio clienti dalla pagina Impostazioni > Servizi aggiuntivi > Integrazione del servizio clienti prima di poter utilizzare questo componente nell'istanza.
In questo argomento viene descritto l'uso di questo componente in modalità YAML. Per informazioni sull'utilizzo in Visual Flow Designer, vedere Creazione di incidenti.
Di seguito è riportato un esempio di utilizzo di questo componente per trasferire la conversazione in un sito di Oracle B2C Service.
component: "System.IncidentCreation"
properties:
serviceName: "IncidentService"
subject: "${incident.value.subject}"
attachmentUrl: <#if (incident.value.Attachment.url)??>${incident.value.Attachment.url}<#else></#if>
customFields:
description: "${incident.value.description}"
contactInfo: "<#if (profile.contactInfo)??>${profile.contactInfo}<#else></#if>"
contactProperties:
firstName: "${profile.firstName}"
lastName: "${profile.lastName}"
email: "${incident.value.email}"
incidentNumberVariable: "incidentNumber"
transitions:
error: "incidentError"
next: "exitIncident"
Ecco un esempio di Oracle Fusion Service:
component: "System.IncidentCreation"
properties:
serviceName: "IncidentServiceB2BEndUserAuth"
subject: "${service.value.subject}"
attachmentUrl: <#if (service.value.Attachment.url)??>${service.value.Attachment.url}<#else></#if>
agentReportFilter: "ODAQueue"
addChatTranscript: "true"
customFields:
description: "${service.value.description}"
contactInfo: "<#if (profile.contactInfo)??>${profile.contactInfo}<#else></#if>"
contactProperties:
firstName: "${profile.firstName}"
lastName: "${profile.lastName}"
email: "<#if (profile.email)??>${profile.email}<#else></#if>"
incidentNumberVariable: "incidentNumber"
transitions:
error: "incidentError"
next: "exitIncident"
Proprietà | descrizione; | Richiesto? | |
---|---|---|---|
serviceName |
Il nome dell'integrazione come configurato in Impostazioni > Servizi aggiuntivi > Integrazione servizio clienti. | Sì | |
subject |
Il testo dell'oggetto del caso. | Sì | |
attachmentUrl |
L'URL di un documento o di un'immagine correlata al caso. L'aggiunta di allegati non è supportata per DA come skill agente. | No | |
agentReportFilter |
(Per gli incidenti di Oracle Fusion Service), testo per filtrare gli incidenti. Il valore predefinito è ODA .
|
No | |
addChatTranscript |
(Solo per incidenti di Oracle Fusion Service). Se impostato su true, la trascrizione della chat viene aggiunta all'incidente. Il valore predefinito è false.
Per rendere disponibile la trascrizione della chat, è necessario abilitare gli approfondimenti per lo skill. È possibile aggiungere una trascrizione all'incidente solo quando si utilizza un DA come integrazione agente in combinazione con Web Chat for Service o inlay di Oracle Inlay Toolkit. |
No | |
customFields |
Una mappa che contiene description e, facoltativamente, contactInfo , che può contenere dettagli aggiuntivi sull'incidente.
La mappa viene passata non convalidata come versione di testo dell'oggetto e inserita nel messaggio di incidente come nota privata. |
No | |
contactProperties |
Mappa di coppie nome/valore che contiene le informazioni necessarie per cercare o creare le informazioni di contatto del servizio clienti. Deve contenere email e, facoltativamente, può contenere firstName e lastName .
Se |
Solo per Oracle B2C Service | |
incidentNumberVariable |
Nome della variabile di contesto stringa in cui memorizzare il numero di incidente. | No |
System.IntelligentAdvisor
Utilizzare questo componente per accedere a un'intervista Oracle Intelligent Advisor da uno skill.
In questo argomento viene descritto l'uso di questo componente in modalità YAML. Per informazioni sull'utilizzo in Visual Flow Designer, vedere Intelligent Advisor.
Per poter utilizzare questo componente, è necessario creare un'integrazione del servizio di Intelligent Advisor. Vedere Aggiungere un servizio Intelligent Advisor. Inoltre, l'intervista deve essere stata distribuita in Intelligent Advisor Hub e attivata nel canale del servizio di chat. L'intervista deve essere per utenti anonimi. Impossibile accedere alle interviste per gli utenti del portale o degli agenti.
È possibile utilizzare le proprietà del componente per specificare le impostazioni dell'intervista riportate di seguito.
- Se visualizzare i titoli e la spiegazione
- Le etichette per i pulsanti Sì, No e Non certo
- Le stringhe immesse dall'utente per reimpostare, tornare alla domanda precedente (annullare) e uscire dall'intervista
- Il testo da visualizzare alla fine dell'intervista
- Come esprimere la domanda se visualizzare la spiegazione
- La stringa immessa dall'utente per indicare che il caricamento dei file è stato completato
- Valori degli attributi e parametri del connettore da passare all'intervista
- Impostazioni nazionali progetto da utilizzare
Esempio:
loanAdvisorIA:
component: "System.IntelligentAdvisor"
properties:
intelligentAdvisorService: "myService"
deployment: "Loan Advisor"
# default yesLabel: "yes"
# default noLabel: "no"
uncertainLabel: "not sure"
endLabel: "You can ask me another question if there's something else that I can help
you with."
# default doneLabel: "/done"
# default undoLabel: "/back"
# default resetLabel: "/reset"
# default exitLabel: "/exit"
showExplanation: "ask"
# default explanationAskLabel: "Do you want to see the explanation?"
# default removeHtml: false
transitions:
error: "handleIAError"
next: "endOfFlow"
handleIAError:
component: "System.Output"
properties:
text: |
We are having a problem with a connection.
Can you please send email to
contact@example.com to let them know that
the loan advisor isn't working? Thank you.
transitions:
next: "endOfFlow"
Per un esempio che utilizza il componente in un flusso di finestre di dialogo, vedere Utilizzare il componente di Intelligent Advisor nella competenza.
Suggerimento
I valori predefiniti per tutte le proprietà dell'etichetta vengono memorizzati nel bundle di risorse dello skill. Per modificare un'impostazione predefinita, aprire la pagina Bundle delle risorse della competenza, fare clic su
The configuration resource bundle also allows you to change the IntelligentAdvisor - defaultValue, IntelligentAdvisor - doneHelp, IntelligentAdvisor - maskLabel, IntelligentAdvisor - outOfOrderMessage, IntelligentAdvisor - resumeSessionPrompt, IntelligentAdvisor - numberMinMax, IntelligentAdvisor - outOfOrderMessage, IntelligentAdvisor - resumeSessionPrompt, and IntelligentAdvisor - yesNoMessage messages. Ad esempio, il messaggio IntelligentAdvisor - doneHelp viene restituito per i campi allegato e per impostazione predefinita viene utilizzato When you are done with the upload, say {0}.
Potrebbe essere necessario cambiarlo in qualcosa come Say {0} to let me know that you are done uploading.
Proprietà | descrizione; | Richiesto? |
---|---|---|
currency |
Codice valuta ISO-4217 per la valuta utilizzata nell'intervista. Quando si specifica questo codice, l'utente può inserire solo valori di valuta nei formati consentiti per tale valuta. È possibile impostare questa proprietà su vuoto o escluderla se l'intervista non richiede importi in valuta o se non prevede alcuna valuta specifica. | No |
deployment |
Nome del progetto di distribuzione attivo nell'hub di Intelligent Advisor Hub. | Sì |
doneLabel |
Testo digitato dagli utenti per indicare che il caricamento di un file è stato completato.
L'impostazione predefinita è |
No |
endLabel |
Testo da visualizzare nella chat alla fine dell'intervista.
L'impostazione predefinita è |
No |
exitLabel |
Testo digitato dagli utenti per indicare di voler uscire dall'intervista.
L'impostazione predefinita è |
No |
explanationAskLabel |
La domanda da porre quando showExplanation è impostato su ask .
L'impostazione predefinita è |
No |
hideScreenTitle |
Indica se nascondere tutti i titoli delle schermate nell'intervista.
L'impostazione predefinita è |
No |
intelligentAdvisorService |
Il nome del servizio Intelligent Advisor configurato in Impostazioni > Servizi aggiuntivi. | Sì |
interviewAttributes |
Nome di una variabile di contesto di tipo stringa in cui memorizzare i valori degli attributi dell'intervista. I valori degli attributi vengono memorizzati come array di coppie chiave/valore. | No |
locale |
Questa proprietà interessa sia l'intervista target che la risoluzione della data e del numero. Il componente avvia la versione dell'intervista denominata (distribuzione) associata alla lingua specificata dalla proprietà Per l'input di data e numero, i valori vengono risolti in base alle impostazioni delle entità DATE e NUMBER. Quando l'opzione Considera impostazioni nazionali utente finale viene impostata su Attivo per l'entità, il valore viene risolto per le impostazioni nazionali specificate da questa proprietà (o per l'impostazione predefinita se non specificata). Vedere Risoluzione delle entità basata sulle impostazioni nazionali. Per impostazione predefinita, questa proprietà utilizza il valore |
No |
noLabel |
Etichetta da utilizzare per rappresentare i valori booleani FALSE.
L'impostazione predefinita è |
No |
params |
Mappa dei parametri di connessione chiave-valore da passare all'inizio dell'intervista. Ciò è in genere necessario per le interviste con l'integrazione dei dati esterni. | No |
removeHtml |
Indica se rimuovere il markup HTML dal testo. L'impostazione predefinita è false .
|
No |
resetLabel |
Testo digitato dagli utenti per indicare di voler tornare alla prima domanda.
L'impostazione predefinita è |
No |
seedData |
Mappa dei nomi e dei valori degli attributi di Intelligent Advisor da passare all'intervista. Per gli attributi di data e ora, utilizzare i formati di data e ora standard di Intelligent Advisor. Ad esempio: start_date: "2010-01-31" .
L'attributo a cui si sta passando il valore deve avere l'opzione Popola da parametro URL abilitata in Policy Modeling. |
No |
showExplanation |
Specifica se visualizzare la spiegazione di Intelligent Advisor. I valori consentiti sono never , always e ask .
Se si imposta L'impostazione predefinita è |
No |
uncertainLabel |
Etichetta che l'utente può digitare se non conosce il valore. Questa etichetta viene visualizzata per i pulsanti di opzione booleani facoltativi.
L'impostazione predefinita è |
No |
undoLabel |
Testo digitato dagli utenti per indicare di voler tornare alla domanda precedente.
L'impostazione predefinita è |
No |
yesLabel |
Etichetta da utilizzare per rappresentare i valori booleani TRUE.
L'impostazione predefinita è |
No |
Esempio: utilizzare il componente Intelligent Advisor nella propria competenza
####################
# Loan Advisor
####################
loanAdvisorStart:
component: "System.Output"
properties:
keepTurn: true
text: |
OK, I can initiate a loan request for you.
But first I'll transfer you to an
automated advisor that will ask some
questions about the loan that you want,
your assets, your liabilities, and your
financial history. It shouldn't take
more than 5 minutes.
<#if (user.notFirstTime)??><#else>
At any time, you can say
/back to go to the previous question,
/reset to start over or
/exit to stop the questions.</#if>
transitions:
next: "setNotFirstTime"
setNotFirstTime:
component: "System.SetVariable"
properties:
variable: "user.notFirstTime"
value: true
transitions:
next: "loanAdvisorIA"
loanAdvisorIA:
component: "System.IntelligentAdvisor"
properties:
intelligentAdvisorService: "myService"
deployment: "Loan Qualifier"
# default yesLabel: "yes"
# default noLabel: "no"
uncertainLabel: "not sure"
endLabel: " "
# default doneLabel: "/done"
# default undoLabel: "/back"
# default resetLabel: "/reset"
# default exitLabel: "/exit"
showExplanation: "ask"
# default explanationAskLabel: "Do you want to see the explanation?"
interviewAttributes: "interviewDetails"
transitions:
error: "handleIAError"
next: "handleEligibility"
handleEligibility:
component: "System.Switch"
properties:
source: <#list interviewDetails.value as i><#if i.key = 'eligibility'>${i.val}</#if></#list>
# The values that are matched against the value of the variable or source property. The value that matches is set as transition action
values:
- "eligible"
- "noteligible"
transitions:
actions:
eligible: "initiateLoan"
noteligible: "suggestNextSteps"
NONE: "handleUnexpectedAttributeValue" # the attribute value was other than eligible or noteligible or the user exited interview
error: "handleAttributeNotSet" # the attribute wasn't set during the interview or the key is incorrect
handleIAError:
component: "System.Output"
properties:
text: |
We are having a problem with a connection.
Can you please send email to
contact@example.com to let them know that
the loan advisor isn't working? Thank you.
transitions:
next: "endOfFlow"
...
Esempio: Accedi ad attributi colloquio
Di seguito è riportato un semplice esempio di accesso ai valori degli attributi di un'intervista.
context:
variables:
iResult: "nlpresult"
interviewDetails: "string"
states:
...
loanAdvisorIA:
component: "System.IntelligentAdvisor"
properties:
intelligentAdvisorService: "myService"
deployment: "Loan Qualifier"
# default yesLabel: "yes"
# default noLabel: "no"
uncertainLabel: "not sure"
endLabel: " "
# default doneLabel: "/done"
# default undoLabel: "/back"
# default resetLabel: "/reset"
# default exitLabel: "/exit"
showExplanation: "ask"
# default explanationAskLabel: "Do you want to see the explanation?"
interviewAttributes: "interviewDetails"
transitions:
error: "handleIAError"
next: "handleEligibility"
handleEligibility:
component: "System.Switch"
properties:
source: <#list interviewDetails.value as i><#if i.key = 'eligibility'>${i.val}</#if></#list>
# the values that are matched against the value of the variable or source property. The value that matches is set as transition action
values:
- "eligible"
- "noteligible"
transitions:
actions:
eligible: "initiateLoan"
noteligible: "suggestNextSteps"
NONE: "handleUnexpectedAttributeValue" # the attribute value was other than eligible or noteligible or the user exited interview
error: "handleAttributeNotSet" # the attribute wasn't set during the interview or the key is incorrect
...
System.KnowledgeSearch
In questo argomento viene descritto l'uso di questo componente in modalità YAML. Per informazioni sull'utilizzo in Visual Flow Designer, vedere Ricerca knowledge.
Utilizzare questo componente per cercare informazioni su un determinato termine di ricerca in Oracle B2C Service Knowledge Foundation o Oracle Fusion Service Knowledge Management e visualizzare i risultati.
Per Oracle B2C Service, i risultati restituiti dal servizio dipendono dal fatto che le risposte siano pubbliche e dalle impostazioni del livello di accesso, del prodotto o della categoria.
Si noti che è necessario creare un servizio di ricerca knowledge prima di poter utilizzare questo componente. Vedere Aggiungere un servizio di ricerca knowledge.
Di seguito è riportato un esempio di utilizzo di questo componente. Cerca in un servizio Knowledge Management tutte le informazioni correlate all'ultima espressione dell'utente. Per ulteriori esempi, vedere Utilizzare il componente Ricerca knowledge.
searchFor: knowledgeSearch:
component: "System.KnowledgeSearch"
properties:
searchServiceName: "myKnowledgeSearch"
searchTerm: "${iResult.value.query}"
searchPrelude: "I don't know the answer for that. Let me search for an answer."
resultSizeLimit: 5
resultVersion: "Special Response"
resultVersionExclusive: true
resultLinkLabel: "Show More"
searchLinkLabel: "Open Page with All Answers" # For B2B set to "Go to search home page"
noResultText: "I don't have an answer for that. Try rephrasing your question."
transitions:
actions:
resultSent: "reset"
noResult: "reset"
serverError: "handleSearchServerProblem"
error: "handleSearchError"
next: "reset"
Suggerimento
I valori predefiniti per le proprietàdefaultAttachmentLabel
, noResultText
e resultLinkLabel
vengono memorizzati nel bundle di risorse dello skill. Per modificare un'impostazione predefinita, aprire la pagina Bundle delle risorse della competenza, fare clic su 
Proprietà | descrizione; | Richiesto? |
---|---|---|
cardLayout |
Specifica se visualizzare le schede dei risultati in senso verticale o orizzontale. L'impostazione predefinita è horizontal .
|
No |
customFilters |
Una lista di filtri dei risultati della ricerca presentati come coppie nome-valore. I nomi di filtro consentiti sono product e category . Ciascuno di essi consente una sola dichiarazione di filtro. Vedere Filtra risultati per prodotto e categoria.
|
No |
customProperties |
Solo Oracle B2C Service: mappa di coppie chiave/valore da inviare al servizio di ricerca. Al momento, questa proprietà supporta solo la chiave word_connector . Utilizzare la proprietà word_connector impostata su AND per anteporre ogni parola nel termine di ricerca a + .
|
No |
defaultAttachmentLabel |
Etichetta predefinita da utilizzare per l'azione URL della scheda dei risultati collegata a un allegato ogni volta che l'allegato non dispone di un nome visualizzato configurato. Se utilizzato, viene aggiunto da un numero di indice. Ad esempio, se il secondo allegato non ha un nome visualizzato, l'etichetta predefinita dell'allegato viene aggiunta con L'impostazione predefinita è |
No |
locale |
L'impostazione predefinita è il valore della variabile profile.locale .
Per i servizi di integrazione knowledge multiinterfaccia di Oracle B2C Service, il codice della versione locale ISO o BCP di cinque caratteri che specifica l'interfaccia da utilizzare per eseguire la ricerca (ad esempio, en_GB). Se non esiste un'interfaccia che supporta le impostazioni nazionali, viene utilizzata l'interfaccia predefinita. Vedere Implementare la ricerca di knowledge multilingue. Per Oracle Fusion Service recupera gli articoli associati alle impostazioni nazionali specificate. Se per le impostazioni nazionali non esistono articoli corrispondenti, viene restituito |
No |
noResultText |
Testo da restituire quando non è disponibile alcun risultato della ricerca. Il valore predefinito è il testo della voce del bundle di risorse KnowledgeSearch - noResultText |
No |
resultLinkLabel |
Etichetta da utilizzare per l'azione (pulsante) URL della scheda dei risultati che collega alla versione Web delle informazioni. Il valore predefinito è il testo della voce del bundle di risorse KnowledgeSearch - resultLinkLabel Se si imposta questa proprietà su |
No |
resultSizeLimit |
Il numero massimo di risultati da visualizzare. L'impostazione predefinita è |
No |
resultVersion |
Solo Oracle B2C Service: la versione preferita da restituire quando sono presenti più versioni per un risultato. È possibile impostare questa proprietà su È possibile utilizzare risposte speciali per visualizzare l'output specifico per le conversazioni in chat anziché per le pagine Web. La versione predefinita è |
No |
resultVersionExclusive |
Solo Oracle B2C Service: specifica se devono essere visualizzati solo i risultati disponibili nella versione preferita. Quando si utilizza L'impostazione predefinita è |
No |
searchLinkLabel |
Oracle B2C Service: l'etichetta da utilizzare per l'azione del payload del messaggio della scheda collegata alla pagina Web con la lista completa dei risultati della ricerca. Oracle Fusion Service: l'etichetta da utilizzare per l'azione del payload del messaggio della scheda collegata alla home page di ricerca. Se questa proprietà non è impostata, il payload del messaggio della scheda non visualizza l'azione. |
No |
searchPrelude |
Il testo da restituire prima della visualizzazione dei risultati della ricerca. Se questa proprietà non è impostata, viene restituito il testo della voce del bundle di risorse KnowledgeSearch - searchPrelude. Se non si desidera visualizzare il preludio della ricerca, impostare questa proprietà su |
No |
searchServiceName |
Nome dell'integrazione della ricerca knowledge configurato in Impostazioni. | Sì |
searchTerm |
Testo da utilizzare come termine di ricerca per il richiamo della ricerca knowledge. Per Oracle Fusion Service Knowledge Management è necessario un termine di ricerca. Per Oracle B2C Service Knowledge Foundation, restituisce gli articoli più popolari se non viene fornito alcun termine di ricerca.
Per le tecniche dei termini di ricerca, vedere Utilizzare il componente Ricerca knowledge. |
Sì |
System.KnowledgeSearch Transizioni
Azione | descrizione; |
---|---|
resultSent |
La ricerca ha restituito almeno un risultato. |
noResult |
Nessun risultato per il termine di ricerca. |
serverError |
Si è verificato un errore sul server del servizio di ricerca knowledge durante il richiamo, ad esempio un errore del server o un errore imprevisto.
Quando si verifica questo errore, il messaggio di errore viene memorizzato in |
Esempio: Associa domande correlate a un termine di ricerca in un flusso di finestre di dialogo YAML
Il diagramma seguente illustra come implementare il metodo a stato singolo se il flusso della finestra di dialogo viene creato in modalità YAML. 1) Utilizzare una variabile di contesto mappa per associare gli intenti knowledge ai termini di ricerca. 2) Impostare gli intenti knowledge base azione nello stato Intent
per eseguire la transizione a un flusso di dati che utilizza la mappa per impostare la variabile di contesto searchTerm
sul termine di ricerca dell'intento. 3) Si passa quindi a uno stato che cerca il valore searchTerm
nella knowledge base.
Descrizione dell'illustrazione kf-assoc-intent-term.png
Di seguito è riportato un esempio di flusso di una finestra di dialogo in cui sono presenti singoli intenti per ogni risposta della knowledge base.
context:
variables:
iResult: "nlpresult"
intentName: "string"
searchTerm: "string"
searchTerms: "map"
someVariable: "string" # For the reset state
states:
#
# Set search term for each knowledge intent
#
setSearchTerms:
component: "System.SetVariable"
properties:
variable: "searchTerms"
value:
knowledge.Shipping Return Costs: "Shipping Return Costs"
knowledge.Locate Service Tag or Serial: "Locating Your Service Tag or Asset Serial Number"
knowledge.Support Account: "My Support Account"
knowledge.Product Registration: "How do I register my product?" # (1)
knowledge.Noncontiguous Delivery Time: "What is the delivery time to Alaska, Hawaii and the U.S. Territories?"
knowledge.Return Policy: "What is your return policy?"
transitions:
next: "intent"
intent:
component: "System.Intent"
properties:
variable: "iResult"
transitions:
actions:
system.Greeting: "welcome"
system.Unsatisfactory Response: "transferToAgent"
system.Request Agent: "transferToAgent"
knowledge.Shipping Return Costs: "startIntentKnowledgeSearch"
knowledge.Locate Service Tag or Serial: "startIntentKnowledgeSearch"
knowledge.Support Account: "startIntentKnowledgeSearch"
knowledge.Product Registration: "startIntentKnowledgeSearch" # (2)
knowledge.Noncontiguous Delivery Time: "startIntentKnowledgeSearch"
knowledge.Return Policy: "startIntentKnowledgeSearch"
unresolvedIntent: "genericKnowledgeSearch"
#
# Start knowledge search for a knowledge intent's search term
# based on searchTerms context variable
#
# First, reset variables
#
startIntentKnowledgeSearch: # (2)
component: "System.ResetVariables"
properties:
variableList: "searchTerm, intentName"
transitions:
next: "setIntentName"
#
# Set the intentName context variable
#
setIntentName:
component: "System.SetVariable"
properties:
variable: "intentName"
value: "${iResult.value.intentMatches.summary[0].intent}"
transitions:
next: "setSearchTerm"
#
# Get the search term to use for the intent
#
setSearchTerm:
component: "System.SetVariable"
properties:
variable: "searchTerm"
value: "${searchTerms.value[intentName.value]}"
transitions:
next: "knowledgeSearchForGivenSearchTerm" # (3)
#
# This state searches for the searchTerm variable's value
#
knowledgeSearchForGivenSearchTerm:
component: "System.KnowledgeSearch"
properties:
# Set to the name of the search service that is configured in Settings
searchServiceName: "KnowledgeSearch"
searchTerm: "${searchTerm.value}" # put the search term here (3)
# searchPrelude: Optional property. If missing, there's no search prelude.
resultSizeLimit: 1 # Change to how many articles to show.
# resultVersion: Optional property. Defaults to "Answer".
# resultVersionExclusive: Optional property. Defaults to false.
resultLinkLabel: "Show More"
# defaultAttachmentLabel: Optional property. Defaults to "Download"
searchLinkLabel: "Search for Similar Answers"
noResultText: >
I don't have an answer for that. Try rephrasing your question
(or you can ask to speak to a live agent).
# cardLayout: Optional property. Defaults to "horizontal"
transitions:
actions:
resultSent: "offerMoreHelp"
noResult: "reset"
serverError: "handleSearchServerProblem"
error: "handleSearchError"
next: "reset"
#
# This state is called after knowledge search returns its results.
#
offerMoreHelp:
component: "System.Output"
properties:
text: >
You can ask me another question if there's something
else that I can help you with.
transitions:
return: "offerMoreHelp"
#
# This state is called when there's a problem accessing the knowledge base such
# as a server error fault or an unexpected error fault. When this error occurs,
# the error message is stored in system.state.<state-name>.serverError.message.
#
handleSearchServerProblem:
component: "System.Output"
properties:
text: >
I'm not able to get an answer for that question. Let me know
if there's anything else I can help you with.
transitions:
return: "handleSearchServerProblem"
#
# This state is called when there's a problem using the knowledge search component
# such as when there's a problem with the knowledge search integration configuration
#
handleSearchError:
component: "System.Output"
properties:
text: >
Oops, my answer mechanism for that isn't working properly.
You can ask a different question or ask to speak to an agent?
transitions:
return: "handleSearchError"
#
# This state ends the conversation
#
reset:
component: "System.SetVariable"
properties:
variable: "someVariable"
value: "x"
transitions:
return: "reset"
Esempio: impiego termine utente come termine di ricerca
L'esempio seguente mostra come impostare searchTerm
sull'espressione dell'utente in una competenza della finestra di dialogo YAML. Per una finestra di dialogo visiva, utilizzare invece ${skill.system.nlpresult.value.query}
.
context:
variables:
iResult: "nlpresult"
someVariable: "string" # For the reset state
states:
intent:
component: "System.Intent"
properties:
variable: "iResult"
transitions:
actions:
system.Greeting: "welcome"
system.Unsatisfactory Response: "transferToAgent"
...
unresolvedIntent: "genericKnowledgeSearch"
#
# This state searches the knowledge base with the user input as the search term.
#
genericKnowledgeSearch:
component: "System.KnowledgeSearch"
properties:
# Set to the name of the search service that is configured in Settings
searchServiceName: "KnowledgeSearch"
searchTerm: "${iResult.value.query}"
searchPrelude: "I don't know the answer offhand. Let's see what articles we have..."
resultSizeLimit: 3 # Change to how many articles to show. Defaults to 10.
# resultVersion: Optional property. Defaults to "Answer".
# resultVersionExclusive: Optional property. Defaults to false.
resultLinkLabel: "Show More"
# defaultAttachmentLabel: Optional property. Defaults to "Download"
searchLinkLabel: "Open Page with All Answers"
noResultText: >
I couldn't find any articles about that. Try rephrasing your
question (or you can ask to speak to a live agent).
# cardLayout: Optional property. Defaults to "horizontal"
transitions:
actions:
resultSent: "offerMoreHelp"
noResult: "reset"
serverError: "handleSearchServerProblem"
error: "handleSearchError"
next: "reset"
#
# This state is called after knowledge search returns its results.
#
offerMoreHelp:
component: "System.Output"
properties:
text: >
You can ask me another question if there's something
else that I can help you with.
transitions:
return: "offerMoreHelp"
#
# This state is called when there's a problem accessing the knowledge base such
# as a server error fault or an unexpected error fault. When this error occurs,
# the error message is stored in system.state.<state-name>.serverError.message.
#
handleSearchServerProblem:
component: "System.Output"
properties:
text: >
I'm not able to get an answer for that question. Let me know
if there's anything else I can help you with.
transitions:
return: "handleSearchServerProblem"
#
# This state is called when there's a problem using the knowledge search component
# such as when there's a problem with the knowledge search integration configuration
#
handleSearchError:
component: "System.Output"
properties:
text: >
Oops, my answer mechanism for that isn't working properly.
You can ask a different question or ask to speak to an agent?
transitions:
return: "handleSearchError"
#
# This state ends the conversation
#
reset:
component: "System.SetVariable"
properties:
variable: "someVariable"
value: "x"
transitions:
return: "reset"
System.AgentTransfer
Il componente System.AgentTransfer
viene utilizzato negli assistenti digitali DA-as-agent per trasferire la conversazione al servizio chat. La conversazione verrà instradata a un agente reale in base alle regole di chat configurate nel servizio chat.
In questo argomento viene descritto l'uso di questo componente in modalità YAML. Per informazioni sull'utilizzo in Visual Flow Designer, vedere Trasferimento agente.
Questo componente si riferisce alle conversazioni che hanno origine in una chat di servizio, come descritto in Digital Assistant come framework agente in azione. Per le conversazioni che hanno origine nella competenza, utilizzare invece System.AgentConversation.
Di seguito è riportato un esempio di utilizzo di questo componente per il trasferimento della conversazione al servizio chat.
transferToAgent:
component: "System.AgentTransfer"
properties:
maxEngagementsInQueue: "8"
maxWaitSeconds: "300"
waitingMessage: "Let me see if a human agent is available to help you. Hold tight."
rejectedMessage: "No agents are available at this time. Please try again later."
errorMessage: "We're unable to transfer you to a human agent because there was a system error."
transitions:
actions:
accepted: "reset"
rejected: "handleRejected"
error: "offerMoreHelp"
next:
"reset"
Suggerimento
Nelle competenze con versione piattaforma 21.04 e successive, i valori predefiniti per le proprietàacceptedMessage
, errorMessage
, rejectedMessage
e waitingMessage
vengono memorizzati nel bundle di risorse dello skill. Per modificare un'impostazione predefinita, aprire la pagina Bundle delle risorse della competenza, fare clic su 
Proprietà | descrizione; | Richiesto? | |
---|---|---|---|
agentStatusVariable |
Nome della variabile di contesto di tipo mappa da utilizzare per memorizzare le informazioni sullo stato di disponibilità dell'agente. Se la proprietà non viene specificata, non viene memorizzata alcuna informazione. Per fare riferimento a una variabile mappa, utilizzare un'espressione di valore simile alla seguente: ${<mapVariableName>.value.<key>} . Ad esempio, agentStatus.value.expectedWaitMinutes .
Per informazioni sui valori restituiti in questa variabile, vedere System.AgentTransferCondition. |
No | |
allowTransferIf |
Specifica le condizioni in base alle quali lo skill deve trasferire la sessione di chat.
Se le condizioni specificate non vengono soddisfatte, viene eseguita l'azione |
No | |
customProperties |
Mappa che contiene le informazioni da passare al servizio. Vedere Passa informazioni al servizio. | No | |
errorMessage |
Messaggio visualizzato all'utente quando si verifica un errore di sistema durante il trasferimento della sessione di chat a un agente. L'impostazione predefinita è We were unable to transfer you because there was a system error . È possibile impostare la proprietà su una stringa vuota o vuota per eliminare l'output del messaggio.
|
No | |
maxEngagementsInQueue |
Il numero massimo consentito di impegni in attesa nella coda di destinazione. Quando viene inviata la richiesta di chat, il servizio di chat risponde con il numero corrente di impegni in attesa nella coda. Se questo valore supera maxEngagementsInQueue , viene eseguita l'azione rejected . L'impostazione predefinita è -1 , ovvero non è previsto alcun limite di coinvolgimento.
Tenere presente che per Oracle Fusion Service Chat la risposta è sempre pari a 0, pertanto questa proprietà non ha alcun valore per Oracle Fusion Service. |
No | |
maxWaitSeconds |
Il numero massimo di secondi di attesa stimati consentiti. Quando il servizio di chat riceve la richiesta di trasferimento, risponde con il tempo di attesa stimato. Se questo valore supera maxWaitSeconds , viene eseguita l'azione rejected . L'impostazione predefinita di questa proprietà è -1 , ovvero non è previsto un tempo di attesa massimo. Se impostato su -1 , l'assistente digitale trasferisce l'utente a un agente umano indipendentemente dal tempo di attesa stimato.
Si noti che l'azione |
No | |
rejectedMessage |
Il messaggio visualizzato agli utenti ogni volta che si verifica una delle condizioni riportate di seguito.
Agent rejected . È possibile impostare la proprietà su una stringa vuota o vuota per eliminare l'output del messaggio.
|
No | |
waitingMessage |
Messaggio visualizzato agli utenti quando vengono trasferiti in una coda. L'impostazione predefinita è Agent chat session established. Waiting for agent to join . È possibile impostare la proprietà su una stringa vuota o vuota per eliminare l'output del messaggio.
|
No |
Questo componente può restituire le seguenti azioni:
Azione | descrizione; |
---|---|
accepted |
La transizione accepted viene impostata quando la chat viene trasferita correttamente in una coda.
Tenere presente che dopo l'accettazione di una richiesta di chat, la conversazione deve terminare con un
|
rejected |
La transizione rejected viene impostata quando si verifica una delle condizioni riportate di seguito.
|
error |
La transizione error viene impostata quando si verifica un errore di sistema che impedisce il trasferimento a un agente umano.
|
Esempio: trasferimento a un agente umano
Di seguito è riportato un esempio di flusso di dialogo che viene trasferito a un agente quando il cliente chiede di parlare con un agente.
metadata:
platformVersion: "1.1"
main: true
name: "AutomatedAgentConversation"
context:
variables:
iResult: "nlpresult"
someVariable: "string"
states:
intent:
component: "System.Intent"
properties:
variable: "iResult"
transitions:
actions:
...
system.Unsatisfactory Response: "transferToAgent"
system.Request Agent: "transferToAgent"
...
#
# This state tries to transfer the user to another agent when the user explicitly requests for it.
#
transferToAgent:
component: "System.AgentTransfer"
properties:
maxWaitSeconds: "300"
waitingMessage: "I'm transferring you to a human agent. Hold tight."
rejectedMessage: "I wasn't able to transfer you to a human agent. Please try again later."
errorMessage: "We're unable to transfer you to a human agent because there was a system error."
transitions:
actions:
accepted: "reset"
rejected: "handleRejected"
error: "offerMoreHelp"
next: "reset"
#
# This state is called when an agent transfer is rejected.
# It lets the customer know they can ask for something else.
#
handleRejected:
component: "System.Output"
properties:
text: "Meanwhile, let me know if there's anything else I can help you with."
transitions:
return: "handleRejected"
#
# This state is called when an agent transfer encounters a system error.
# It lets the customer know they can ask for something else.
#
offerMoreHelp:
component: "System.Output"
properties:
text: >
You can ask me another question if there's something
else that I can help you with.
transitions:
return: "offerMoreHelp"
#
# This state ends the conversation with a return transition for insights purposes,
# after the user has been transferred to another agent.
#
reset:
component: "System.SetVariable"
properties:
variable: "someVariable"
value: "x"
transitions:
return: "reset"
Esempio: passare le informazioni al servizio
Quando si trasferisce una conversazione da un assistente digitale a un agente reale, è possibile utilizzare le proprietà personalizzate nel componente System.AgentTransfer
per passare queste informazioni.
Di seguito è riportata la struttura per Oracle B2C Service.
customProperties:
- name:
value:
type:
La proprietà type
è obbligatoria per i campi personalizzati, altrimenti è facoltativa.
Di seguito è riportata la struttura per Oracle Fusion Service.
customProperties:
- name:
value:
Di seguito è riportata un'impostazione customProperties
di esempio per Oracle Fusion Service.
doTransfer:
component: "System.AgentTransfer"
properties:
maxWaitSeconds: "300"
allowTransferIf: "agentSessionsAreAvailable"
# Example of passing a custom property to Oracle Fusion
Service
customProperties:
# This is a checkbox custom field in the Universal Work Object.
# Checkboxes take the value of Y (selected) or N (unselected).
- name: "TriagedByODA_c"
value: "Y"
acceptedMessage: "The conversation has been transferred to a live agent."
waitingMessage: "I'm transferring you to a human. Hold tight"
rejectedMessage: "Looks like no one is available. Please try later"
errorMessage: "We're unable to transfer you to a live agent because there was a system error."
transitions:
actions:
accepted: "reset"
rejected: "handleRejected"
error: "offerMoreHelp"
next: "reset"
Suggerimento
Per Oracle Fusion Service, la valutazione delle regole si interrompe alla prima regola in cui vengono soddisfatte tutte le condizioni. Quando si configurano le regole, assicurarsi che la conversazione trasferita non venga instradata di nuovo all'agente assistente digitale. Nell'esempiodoTransfer
, la proprietà personalizzata TriagedByODA_c
è impostata su Y
e le regole possono utilizzare questa proprietà personalizzata per assicurarsi che, quando è impostata su Y
, la conversazione non venga instradata all'agente assistente digitale. Per Oracle B2C Service, la configurazione Stato e arresto transizione determina l'instradamento.
System.AgentTransferCondition
È possibile utilizzare il componente System.AgentTransferCondition
negli assistenti digitali DA-as-agent per determinare se gli agenti sono disponibili e, in caso affermativo, il tempo di attesa previsto.
In questo argomento viene descritto l'uso di questo componente in modalità YAML. Per informazioni sull'utilizzo in Visual Flow Designer, vedere Condizione di trasferimento agente.
Le proprietà del componente vengono utilizzate per specificare le condizioni di trasferimento e restituisce un'azione che indica se le condizioni sono state soddisfatte. Inoltre, imposta i valori della variabile mappa contesto denominata come indicato di seguito.
queueId (integer, optional): The engagement queue ID,
expectedTotalWaitSeconds (integer, optional): Expected wait time in the queue in seconds
( -1 if there's inadequate information, zero or greater otherwise ).,
expectedWaitSeconds (integer, optional): The number representing the "ss" segment of the expected wait time of format mm:ss
( -1 if there's inadequate information, zero or greater otherwise ).,
expectedWaitMinutes (integer, optional): The number representing the "mm" segment of the expected wait time of format mm:ss
( -1 if there's inadequate information, zero or greater otherwise ).,
availableAgentSessions (integer, optional): Total number of sessions available across all agents.,
totalAvailableAgents (integer, optional): Total number of agents whose status is available.,
totalUnavailableAgents (integer, optional): Total number of agents whose status is unavailable.,
totalAgentsRequestingNewEngagement (integer, optional): Total number of agents who are available and have capacity.,
outsideOperatingHours (boolean, optional): True if outside operating hours. False if inside operating hours.,
engagementsInQueue (integer, optional): The number of engagements currently in the queue.,
sessionId (string, optional): The session ID.,
clientId (integer, optional): The client ID.
Ecco un esempio di utilizzo di questo componente per scoprire se gli agenti sono disponibili, segnalare il tempo di attesa e consentire agli utenti di annullare la richiesta di trasferimento se non desiderano attendere così a lungo.
handleAgentRequest:
component: "System.CommonResponse"
properties:
keepTurn: true
metadata:
responseItems:
- type: "text"
text: "I understand. Give me a moment while I see who might be available to help you."
transitions:
next: "evaluateAgentTransferCondition"
############################
# Agent Transfer
############################
# See if there are any agents available
evaluateAgentTransferCondition:
component: "System.AgentTransferCondition"
properties:
maxWaitSeconds: 300
maxEngagementsInQueue: 20
allowTransferIf: "agentsAreAvailable"
agentStatusVariable: "agentStatus"
transitions:
actions:
conditionsMet: "askIfWillWait"
conditionsNotMet: "handleRejected"
error: "handleTransferError"
next: "done"
askIfWillWait:
component: "System.CommonResponse"
properties:
processUserMessage: true
metadata:
responseItems:
- type: "text"
text: "${rb('promptTextForTransferDecision','minutes,seconds',agentStatus.value.expectedWaitMinutes,agentStatus.value.expectedWaitSeconds)}"
separateBubbles: true
actions:
- label: "Yes, I'll wait"
type: "postback"
keyword: "yes"
payload:
action: "yes"
name: "Yes"
- label: "No, nevermind"
keyword: "no"
type: "postback"
payload:
action: "no"
name: "No"
transitions:
actions:
yes: "transferToAgent"
no: "handleCancelled"
textReceived: "intent"
next: "handleCancelled"
# Perform the actual transfer
#
# The maxWaitSeconds, maxEngagementsInQueue, allowTransferIf,
# and customProperties, if any, should match those used for
# System.AgentTransferCondition
transferToAgent:
component: "System.AgentTransfer"
properties:
maxWaitSeconds: 300
maxEngagementsInQueue: 20
allowTransferIf: "agentsAreAvailable"
transitions:
actions:
accepted: "done"
rejected: "handleRejected"
error: "handleTransferError"
next: "handleTransferError"
Suggerimento
Di seguito è riportata una definizione di bundle di risorse suggerita che è possibile utilizzare per visualizzare il tempo di attesa previsto.This might take {minutes, plural,
=-1 {}
=0 {}
=1 {1 minute and }
other {# minutes and }
}{seconds, plural,
=-1 {a while}
=0 {{minutes, plural,
=0 {a short wait time}
other {0 seconds}
}}
=1 {1 second}
other {# seconds}
} to connect. Are you willing to wait?
Proprietà | descrizione; | Richiesto? | |
---|---|---|---|
agentStatusVariable |
Nome della variabile di contesto di tipo mappa da utilizzare per memorizzare le informazioni sullo stato di disponibilità dell'agente. Se la proprietà non viene specificata, non viene memorizzata alcuna informazione. Per fare riferimento a una variabile mappa, utilizzare un'espressione di valore simile alla seguente: ${<mapVariableName>.value.<key>} . Ad esempio, agentStatus.value.expectedWaitMinutes .
|
No | |
allowTransferIf |
Specifica il set di base di condizioni che devono essere soddisfatte.
Se le condizioni specificate non vengono soddisfatte, viene eseguita l'azione |
No | |
customProperties |
Mappa che contiene le informazioni da passare al servizio. Vedere Passa informazioni al servizio. Questa proprietà è supportata nella versione 21.04 e successive. | No | |
errorMessage |
Messaggio visualizzato all'utente quando Digital Assistant presenta problemi con il servizio di chat dell'agente. Il valore predefinito è We were unable to check the agent transfer conditions because there was a system error. Questa stringa predefinita viene memorizzata nel bundle di risorse di configurazione sotto la chiave systemComponent_AgentTransferCondition_errorMessage. È possibile impostare la proprietà su una stringa vuota o vuota per eliminare l'output del messaggio.
|
No | |
maxEngagementsInQueue |
Il numero massimo consentito di impegni in attesa nella coda di destinazione. Quando la richiesta viene inviata, il servizio di chat risponde con il numero corrente di impegni in attesa nella coda. Se questo valore supera maxEngagementsInQueue , viene eseguita l'azione conditionsNotMet . L'impostazione predefinita è -1 , ovvero non è previsto alcun limite di coinvolgimento.
|
No | |
maxWaitSeconds |
Il numero massimo di secondi di attesa stimati consentiti. Quando il servizio di chat riceve la richiesta, risponde con il tempo di attesa stimato. Se questo valore supera maxWaitSeconds , viene eseguita l'azione conditionsNotMet . L'impostazione predefinita di questa proprietà è -1 , ovvero non è previsto un tempo di attesa massimo.
Si noti che l'azione |
No |
Questo componente può restituire le seguenti azioni:
Azione | descrizione; |
---|---|
conditionsMet |
La transizione conditionsMet viene impostata quando è compresa nell'orario di lavoro e quando vengono soddisfatte le condizioni maxWaitSeconds , maxEngagementsInQueue e allowTransferIf .
|
conditionsNotMet |
La transizione conditionsNotMet viene impostata quando si verifica una delle condizioni riportate di seguito.
|
error |
La transizione error viene impostata quando si verifica un problema con la connessione al servizio di chat dell'agente durante il controllo delle condizioni dell'agente.
|
Esempio: recupero della disponibilità e del tempo di attesa dell'agente
Di seguito è riportato un esempio di flusso di una finestra di dialogo che richiama il componente, visualizza il tempo di attesa e offre all'utente la possibilità di annullare la richiesta di trasferimento.
############################
# Agent Transfer
############################
# See if there are any agents available
evaluateAgentTransferCondition:
component: "System.AgentTransferCondition"
properties:
maxWaitSeconds: 300
maxEngagementsInQueue: 20
allowTransferIf: "agentsAreAvailable"
agentStatusVariable: "agentStatus"
transitions:
actions:
conditionsMet: "askIfWillWait"
conditionsNotMet: "setInsightsCustomMetricsConditionsNotMet"
error: "handleTransferError"
next: "done"
# Measure when agents aren't available
setInsightsCustomMetricsConditionsNotMet:
component: "System.SetCustomMetrics"
properties:
dimensions:
- name: "Agent Transfer Choice"
value: "No agents available for new chats"
transitions:
next: "handleRejected"
askIfWillWait:
component: "System.CommonResponse"
properties:
processUserMessage: true
metadata:
responseItems:
- type: "text"
text: "${rb('promptTextForTransferDecision','minutes,seconds',agentStatus.value.expectedWaitMinutes,agentStatus.value.expectedWaitSeconds)}"
separateBubbles: true
actions:
- label: "Yes, I'll wait"
type: "postback"
keyword: "yes"
payload:
action: "yes"
name: "Yes"
- label: "No, nevermind"
keyword: "no"
type: "postback"
payload:
action: "no"
name: "No"
transitions:
actions:
yes: "setInsightsCustomMetricsAgentTransferInitiated"
no: "setInsightsCustomMetricsAgentTransferCancelled"
textReceived: "intent"
next: "handleCancelled"
# Measure when user chooses to wait for transfer
setInsightsCustomMetricsAgentTransferInitiated:
component: "System.SetCustomMetrics"
properties:
dimensions:
- name: "Agent Transfer Choice"
value: "User chose to wait"
transitions:
next: "transferToAgent"
# Measure when user chooses to not wait for transfer
setInsightsCustomMetricsAgentTransferCancelled:
component: "System.SetCustomMetrics"
properties:
dimensions:
- name: "Agent Transfer Choice"
value: "User didn't want to wait"
transitions:
next: "handleCancelled"
# Perform the actual transfer
#
# The maxWaitSeconds, maxEngagementsInQueue, allowTransferIf,
# and customProperties, if any, should match those used for
# System.AgentTransferCondition
transferToAgent:
component: "System.AgentTransfer"
properties:
maxWaitSeconds: 300
maxEngagementsInQueue: 20
allowTransferIf: "agentsAreAvailable"
transitions:
actions:
accepted: "done"
rejected: "handleRejected"
error: "handleTransferError"
next: "handleTransferError"
############################
# All done
############################
done:
component: "System.Output"
properties:
text: "Let me know if you need help on anything else."
transitions:
return: "done"
handleRejected:
component: "System.CommonResponse"
properties:
keepTurn: true
metadata:
responseItems:
- type: "text"
text: >
Unfortunately, none of my colleagues are currently available to assist with this.
Still, we’d love to see this through for you.
Please feel free to reach us through email@example.com.
transitions:
next: "done"
handleCancelled:
component: "System.CommonResponse"
properties:
keepTurn: true
metadata:
responseItems:
- type: "text"
text: "OK. Maybe some other time. Please feel free to reach us through email@example.com."
transitions:
next: "done"
handleTransferError:
component: "System.CommonResponse"
properties:
keepTurn: true
metadata:
responseItems:
- type: "text"
text: "Unfortunately, we can't transfer you at this time. Please try again later."
transitions:
next: "done"
############################
# Global error handler
############################
globalErrorHandler:
component: "System.Output"
properties:
text: "Sorry, we were unable to do the action that you requested."
transitions:
next: "done"
Lo stato askIfWillWait
utilizza una voce di bundle di risorse per formare il messaggio del tempo di attesa in modo che il messaggio abbia senso se l'ora è più o meno di un minuto e se un numero è 0, uno o più.
There are some experts online. But it might take {minutes, plural,
=-1 {}
=0 {}
=1 {1 minute and }
other {# minutes and }
}{seconds, plural,
=-1 {a while}
=0 {{minutes, plural,
=0 {a very short wait time}
other {0 seconds}
}}
=1 {1 second}
other {# seconds}
} for one to join. Are you willing to wait?
In questo esempio viene utilizzato System.SetCustomMetrics per tenere traccia della disponibilità degli agenti e, in tal caso, del numero di utenti che hanno scelto di attendere e del numero di utenti che hanno annullato la richiesta di trasferimento.
Componenti Live-Agent-Transfer
System.AgentInitiation
Se si desidera trasferire la conversazione di una skill a un agente di Oracle B2C Service, aggiungere questo componente al flusso della finestra di dialogo per avviare l'handshake con il canale di integrazione agente specificato dalla proprietà agentChannel
. È necessario chiamare questo componente prima di chiamare il componente System.AgentConversation
.
Questo componente si riferisce alle conversazioni che hanno origine nello skill. Non utilizzare questo componente per le conversazioni che hanno origine nella chat di Oracle B2C Service, come descritto in L'assistente digitale come struttura agente in azione.
Di seguito è riportato un esempio di utilizzo di questo componente per avviare l'handshake con l'istanza di Oracle B2C Service definita dal canale di integrazione dell'agente denominato ServiceCloudIntegration
.
agentInitiation:
component: "System.AgentInitiation"
properties:
agentChannel: "ServiceCloudIntegration"
nlpResultVariable: "iResult"
waitingMessage: "Waiting for an agent..."
rejectedMessage: "Agents are not available right now."
resumedMessage: "We're connecting you to an agent..."
errorMessage: "Oops! We're having system issues. We're sorry, but we can't connect you with an agent right now."
transitions:
actions:
accepted: "agentConversation"
rejected: "tryAgain"
error: "tryAgain"
agentConversation:
component: "System.AgentConversation"
properties:
agentChannel: "ServiceCloudIntegration"
nlpResultVariable: "iResult"
exitKeywords: "bye, exit, take care, goodbye, quit"
expiryMessage: "Your chat with the agent timed out."
conclusionMessage: "Your chat with the agent has ended."
waitMessage: "You are number ${system.message.messagePayload.position} in the queue. Your waiting time is ${(system.message.messagePayload.waitTime>60)?then('${(system.message.messagePayload.waitTime/60)?int} mins','${system.message.messagePayload.waitTime} seconds')}."
transitions:
next: "endPrompt"
actions:
agentLeft: "endPrompt"
expired: "sessionExpired"
error" "agentConversationError"
Suggerimento
Nelle competenze con versione piattaforma 21.04 e successive, i valori predefiniti per le proprietàagentActionsMessage
, errorMessage
, rejectedMessage
, resumedMessage
e waitingMessage
vengono memorizzati nel bundle di risorse dello skill. Per modificare un'impostazione predefinita, aprire la pagina Bundle delle risorse della competenza, fare clic su 
Proprietà | descrizione; | Richiesto? | |
---|---|---|---|
agentActions |
Lista di azioni che l'agente può attivare per terminare la chat e spostare il flusso nello stato definito per l'azione di transizione. Nella console del rappresentante dell'assistenza clienti, queste azioni vengono visualizzate come comandi barra quando viene avviata la conversazione con l'agente, come mostrato nell'esempio riportato di seguito.
I nomi delle azioni devono corrispondere alle proprietà
È possibile definire gli elementi della lista
|
No | |
agentActionsMessage |
Se la proprietà agentActions è impostata, la console dell'agente visualizza questo valore anziché il messaggio predefinito. Ad esempio:
|
No | |
agentChannel |
Assegna un nome al canale di integrazione agente. Questo valore, il nome del canale di integrazione dell'agente e la proprietà agentChannel definita per il componente System.AgentConversation devono corrispondere.
|
Sì | |
allowTransferIf |
Specifica le condizioni in base alle quali lo skill deve trasferire la sessione di chat. Il componente utilizza il valore queueId per identificare la coda da cui ottenere le statistiche. È necessario verificare che le regole di chat trasferiscano effettivamente la conversazione nella coda identificata e non in un'altra coda.
Se la condizione specificata non viene soddisfatta, il componente restituisce Quando si include questa proprietà, è necessario includere anche la proprietà Questa proprietà è disponibile solo nelle istanze di Oracle Digital Assistant di cui è stato eseguito il provisioning su Oracle Cloud Infrastructure (a volte indicata come infrastruttura cloud di generazione 2). |
No | |
chatResponseVariable |
Assegna un nome alla variabile mappa che contiene le informazioni sulla risposta dell'agente. Dopo la connessione riuscita del componente System.AgentInitiation , la mappa contiene le proprietà riportate di seguito.
|
No | |
customProperties |
Una mappa che contiene l'ID incidente, l'interfaccia, il contatto o i campi personalizzati (o una combinazione di questi) da passare al servizio. Per fare riferimento a una variabile mappa, utilizzare un'espressione di valore simile alla seguente: ${mapVariableName.value} . Vedere Passa informazioni cliente a una chat attiva.
|
No | |
errorMessage |
Messaggio da visualizzare quando si verifica un problema durante la connessione a Oracle B2C Service. Ad esempio, la password nel canale Integrazione agente non è più valida o si è verificato un problema con il server. | No | |
nlpResultVariable |
Variabile che memorizza il messaggio di query del cliente. | No | |
rejectedMessage |
Messaggio che viene visualizzato se l'handshake AgentInitiation è stato rifiutato, ad esempio se non rientra nelle ore operative configurate. Ad esempio:
|
No | |
resumedMessage |
Un messaggio, ad esempio Solo un minuto... ti stiamo connettendo a un agente., che viene visualizzato quando viene ripresa la chat del cliente con il rappresentante dell'assistenza clienti. L'aggiunta di questa proprietà impedisce ai clienti le cui richieste sono già state accodate di ricevere un messaggio ripresa della chat con l'agente fuorviante quando richiedono ripetutamente una chat dal vivo. | No | |
subject |
Riga dell'oggetto visualizzata nella console dell'agente dopo la consegna alla piattaforma dell'agente. Per impostazione predefinita, questo è l'ultimo messaggio cliente memorizzato nella proprietà nlpResultVariable , ma è anche possibile definirlo utilizzando una variabile impostata in precedenza nella definizione del flusso della finestra di dialogo. Ad esempio, è possibile definire una variabile di contesto di tipo string il cui valore viene impostato prima del componente System.AgentInitiation :
|
No | |
queueId |
L'ID della coda che il componente deve utilizzare per determinare se la condizione allowTransferIf specificata viene soddisfatta. Deve essere l'ID della coda alla quale le regole di chat di Oracle B2C Service instraderanno la conversazione.
Questa proprietà viene ignorata se la proprietà |
Obbligatorio quando è presente la proprietà allowTransferIf .
|
|
transcriptDateTimeFormat |
Il formato della data e dell'ora nei messaggi di trascrizione della conversazione inoltrati all'agente. Per i pattern validi, fare riferimento alla classe Java DateTimeFormatter . Esempio: dd/MM/yyyy HH:mm . L'impostazione predefinita è yyyy-mmm-ddThh:mm:ssZ .
|
No | |
transcriptTimezoneName |
Nome IANA (Internet Assigned Numbers Authority) del fuso orario da utilizzare per formattare la trascrizione della conversazione utilizzando la proprietà transcriptDateTimeFormat . Esempio: America/Sao_Paulo . L'impostazione predefinita è Europe/London . Se non si include la proprietà transcriptDateTimeFormat , questa proprietà viene ignorata.
|
No | |
waitingMessage |
Messaggio visualizzato mentre i clienti attendono la connessione a un agente. Ad esempio:
|
No |
System.AgentInitiation Transizioni
System.AgentInitiation
restituisce le azioni accepted
, rejected
e error
. Queste azioni possono puntare a uno stato diverso, con l'azione accepted
che in genere denomina lo stato per il componente System.AgentConversation
: agentInitiation:
component: "System.AgentInitiation"
properties:
agentChannel: "ServiceCloudIntegration"
...
transitions:
actions:
accepted: "agentConversation"
rejected: "noAgentsAvailable"
error: "handshakeError"
Azione | descrizione; |
---|---|
accepted |
L'handshake è stato completato correttamente e lo stato può passare allo stato con il componente System.AgentConversation .
|
error |
Si è verificato un problema durante il tentativo di stabilire una connessione con Oracle B2C Service. Ad esempio, la password nel canale Integrazione agente non è più valida o si è verificato un problema con il server Service Cloud. |
rejected |
Oracle B2C Service ha rifiutato la richiesta di connessione. Di seguito sono riportati alcuni dei motivi per il rifiuto di una richiesta di connessione.
Tenere presente che se non si imposta |
Esempio: gestire il rifiuto dell'avvio dell'agente ed errori di sistema
Di seguito è riportato un esempio di gestione degli errori di sistema e delle azioni error
e rejected
.
agentInitiation:
component: "System.AgentInitiation"
properties:
agentChannel: "B2CServiceIntegration"
nlpResultVariable: "iResult"
waitingMessage: "Let me connect you with someone who can further assist you."
resumedMessage: "Someone will be with you shortly."
errorMessage: "Oops! We're having system issues and we can't connect you with an agent right now."
rejectedMessage: "Unfortunately, no one's available right now."
transitions:
actions:
accepted: "agentConversation"
rejected: "initiationRejected"
error: "tryAgain"
error: "agentInitiationSystemError"
initiationRejected:
component: "System.Output"
properties:
text: "Perhaps it's outside their working hours or it's a holiday."
transitions:
return: "initiationRejected"
tryAgain:
component: "System.Output"
properties:
text: "Please try again later."
transitions:
return: "tryAgain"
agentInitiationSystemError:
component: "System.Output"
properties:
text: "I seem to be having a connection problem. Can you please email email@example.com to let them know?"
transitions:
return: "done"
Esempio: la proprietà incidentID
context:
variables:
liveChatInfo: "map"
customerTicketId: "int"
...
setCustomFields:
component: "System.SetVariable"
properties:
variable: "liveChatInfo"
value:
incidentID: "${customerTicketId}" # long value
...
agentInitiation:
component: "System.AgentInitiation"
properties:
...
customProperties: "${liveChatInfo.value}"
Esempio: oggetto customerInformation standard
In questo esempio viene impostato il valore contactID
.
context:
variables:
liveChatInfo: "map"
contactId: "int"
...
setCustomFields:
component: "System.SetVariable"
properties:
variable: "liveChatInfo"
value:
customerInformation:
contactID:
id: "${customerId}"
...
agentInitiation:
component: "System.AgentInitiation"
properties:
...
customProperties: "${liveChatInfo.value}"
Esempio: l'oggetto customerInformation precedente
In questo esempio vengono impostati interfaceID
e contactID
.
Suggerimento
Poiché il WSDL specifica cheinterfaceID
è di tipo NamedID
, sarebbe stato possibile utilizzare name: "myInterfaceName"
anziché id: id: "${interfaceId}"
.
context:
variables:
liveChatInfo: "map"
interfaceId: "int"
contactId: "int"
...
setCustomFields:
component: "System.SetVariable"
properties:
variable: "liveChatInfo"
value:
customerInformation:
interfaceID:
id:
id: "${interfaceId}"
contactID:
id: "${customerId}"
...
agentInitiation:
component: "System.AgentInitiation"
properties:
...
customProperties: "${liveChatInfo.value}"
Esempio: oggetto customFields standard
context:
variables:
liveChatInfo: "map"
...
setupCustomFields:
component: "System.SetVariable"
properties:
variable: "liveChatInfo"
value:
customFields:
- name: "c$text_field" # text field
type: "STRING"
value: "SILVER"
- name: "c$text_area" # text area
type: "STRING"
value: "My package arrived but there were no contents in the box. Just bubble wrap."
- name: "c$integer" # integer
type: "INTEGER"
value: 21
- name: "c$yes_no" # yes/no (1=yes and 0=no)
type: "BOOLEAN"
value: 1
- name: "c$date_field" # date (yyyy-MM-dd'T'00:00:00. Use 0 for time)
type: "DATE"
value: "2020-02-04T00:00:00+00:00"
- name: "c$date_time" # datetime (yyyy-MM-dd'T'HH:mm:ssXXX)
type: "DATETIME"
value: "2020-02-04T21:24:18+00:00"
- name: "c$menu" # menu (no type property, you can pass the string or the ID for the value property)
value: "12"
transitions:
...
...
agentInitiation:
component: "System.AgentInitiation"
properties:
...
customProperties: "${liveChatInfo.value}"
Esempio: l'oggetto customFields precedente
context:
variables:
liveChatInfo: "map"
skillType: "string"
...
setupCustomFields:
component: "System.SetVariable"
properties:
variable: "liveChatInfo"
value:
customerInformation:
interfaceID:
id:
id: 1
customFields:
# Text Field
- name: "c$da_text_field"
dataType: "STRING"
dataValue:
stringValue: "SILVER"
# Text Area
- name: "c$da_text_area"
dataType: "STRING"
dataValue:
stringValue: "This is a very long string that is more than 32 characters."
# Integer
- name: "c$da_integer"
dataType: "INTEGER"
dataValue:
integerValue: 21
# Menu
- name: "c$da_menu"
dataType: "NAMED_ID"
dataValue:
namedIDValue:
name: "Item 1"
# Instead of name, you can use
# id:
# id: 1
#
# Yes/No
- name: "c$da_is_from_skill"
dataType: "BOOLEAN"
dataValue:
booleanValue: true
# Date (XML Schema Date)
- name: "c$da_date"
dataType: "DATE"
dataValue:
dateValue: "2019-10-26"
# DateTime (XML Schema DateTime)
- name: "c$da_datetime"
dataType: "DATETIME"
dataValue:
dateTimeValue: "2019-10-26T21:32:52"
transitions:
...
...
agentInitiation:
component: "System.AgentInitiation"
properties:
...
customProperties: "${liveChatInfo.value}"
Esempio: assemblare l'oggetto Proprietà personalizzate
In questi passaggi viene descritto come dichiarare l'oggetto customProperties
e impostarne i vari valori.
Passo 1: dichiarare la variabile delle proprietà personalizzate
customProperties
nel componente System.AgentInitiation
. Si tratta di un oggetto JSON che può contenere le informazioni sul cliente della chat e i valori dei campi personalizzati. Nell'esempio seguente, questa variabile viene dichiarata come liveChatInfo
:context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
interfaceId: "string"
categoryId: "string"
skillType: "string"
liveChatInfo: "map"
Passo 2: impostare i valori per la variabile mappa customProperties
customProperties
nel componente System.AgentInitiation
. Si tratta di un oggetto JSON che può contenere le informazioni sul cliente della chat e i valori dei campi personalizzati. Nell'esempio seguente, questa variabile viene dichiarata come liveChatInfo
:context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
interfaceId: "string"
categoryId: "string"
skillType: "string"
liveChatInfo: "map"
Passo 3: definire i campi per la variabile mappa customProperties
setLiveChatInfo:
component: "System.SetVariable"
properties:
variable: "liveChatInfo"
value:
customerInformation:
categoryID:
id: "${categoryId}"
customFields:
- name: "c$skilltype"
type: "STRING"
value: "${skillType}"
transitions:
next: "agentInitiation"
Passo 4: aggiungere customProperties al componente System.AgentInitiation
customProperties
al componente System.AgentInitiation
e definirla utilizzando un'espressione che accede al valore della variabile mappa. agentInitiation:
component: "System.AgentInitiation"
properties:
subject: "A customer needs help regarding ${skillType}."
agentChannel: "ServiceCloudIntegration"
waitingMessage: "Let me connect you with someone who can further assist you."
resumedMessage: "Please wait, someone will be with you shortly."
rejectedMessage: "Sorry no one is available now."
errorMessage: "We're sorry! We're having system issues and we can't connect you with an agent."
customProperties: "${liveChatInfo.value}"
transitions:
actions:
accepted: "agentConversation"
rejected: "initiationRejected"
error: "tryAgain"
initiationRejected:
component: "System.Output"
properties:
text: "Perhaps it's outside their working hours or it's a holiday."
transitions:
return: "tryAgain"
tryAgain:
component: "System.Output"
properties:
text: "Please try again later."
transitions:
return: "tryAgain"
System.AgentConversation
Utilizzare questo componente per trasferire la conversazione di uno skill a un agente reale di Oracle B2C Service e per gestire l'interscambio agente live delle competenze. Prima di poter utilizzare questo componente, è necessario chiamare il componente System.AgentInitiation
.
System.AgentConversation
si riferisce alle conversazioni che hanno origine nella competenza. Non utilizzare questo componente per le conversazioni che hanno origine nella chat di Oracle B2C Service, come descritto in L'assistente digitale come struttura agente in azione.
Di seguito è riportato un esempio di utilizzo di questo componente per trasferire la conversazione all'istanza di Oracle B2C Service definita dal canale di integrazione dell'agente denominato ServiceCloudIntegration
.
agentConversation:
component: "System.AgentConversation"
properties:
agentChannel: "ServiceCloudIntegration"
nlpResultVariable: "iResult"
errorMessage: "Oops, we lost connection with the agent. If you need further help, please call customer support."
exitKeywords: "bye, exit, take care, goodbye, quit"
expiryMessage: "Your chat with the agent timed out"
waitExpiryMessage: "The chat expired while waiting for an agent"
conclusionMessage: "Your chat with the agent has ended."
waitMessage: "You are number ${system.message.messagePayload.position} in the queue. Your waiting time is ${(system.message.messagePayload.waitTime>60)?then('${(system.message.messagePayload.waitTime/60)?int} mins','${system.message.messagePayload.waitTime} seconds')}."
transitions:
next: "endPrompt"
actions:
agentLeft: "endPrompt"
expired: "sessionExpired"
waitExpired: "expiredWhileWaiting"
error: "handleConnectionError"
Proprietà | descrizione; | Richiesto? |
---|---|---|
agentChannel |
Assegna un nome al canale di integrazione agente. Questo valore, il nome del canale di integrazione dell'agente e la proprietà agentChannel definita per il componente System.AgentInitiation devono corrispondere.
|
Sì |
conclusionMessage |
Messaggio automatico inviato al cliente quando l'utente immette una parola chiave exit, l'azione agentLeft viene attivata o l'agente interrompe la conversazione senza inviare una delle parole chiave agentActions . Ad esempio, Your chat with the agent has ended .
|
No |
errorMessage |
Messaggio visualizzato dalla chat in caso di problemi di connessione a Oracle B2C Service.
Il messaggio predefinito è Questa proprietà funziona solo con le istanze di Oracle Digital Assistant di cui è stato eseguito il provisioning su Oracle Cloud Infrastructure (a volte indicata come infrastruttura cloud di generazione 2). |
No |
exitKeywords |
Lista delimitata da virgole di parole di uscita tipiche utilizzate da un cliente per terminare la conversazione con l'agente reale. Ad esempio:
Il valore predefinito della proprietà è |
No |
expiryMessage |
Messaggio che viene visualizzato quando viene attivata l'azione expired . Il messaggio predefinito è Chat session expired. Thanks for chatting with us .
Tenere presente che Il messaggio di scadenza non viene restituito al termine della conversazione perché Service Cloud |
No |
nlpResultVariable |
Variabile nlpResultVariable che contiene il messaggio di query del cliente.
|
No |
waitExpiryMessage |
Messaggio visualizzato all'utente alla scadenza della chat durante l'attesa di un agente. Il messaggio predefinito è The request for live chat expired while waiting for an agent. |
No |
waitMessage |
Per impostazione predefinita, dopo l'avvio del trasferimento della conversazione, lo skill visualizza il messaggio di attesa che il servizio di chat in tempo reale invia allo skill, ad esempio la posizione della coda e il tempo di attesa. Utilizzare questa proprietà per personalizzare il messaggio. Ad esempio:
|
No |
System.AgentConversation Transizioni
L'azione System.AgentConversation
può attivare l'azione expired
, agentLeft
, error
o waitExpired
. Inoltre, può attivare qualsiasi azione dalla proprietà agentActions
del componente System.AgentInitiation
. È necessario aggiungere anche una transizione next
, poiché un cliente potrebbe immettere una delle opzioni exitKeywords
per uscire dalla chat prima che una di queste azioni possa essere attivata.
agentConversation:
component: "System.AgentConversation"
properties:
agentChannel: "ServiceCloudIntegration"
nlpResultVariable: "iResult"
exitKeywords: "bye, adios, take care, goodbye"
...
transitions:
next: "endPrompt"
actions:
agentLeft: "endPrompt"
expired: "endPrompt"
waitExpired: "endPrompt"
error: "agentConversationError"
...
endPrompt:
component: "System.List"
properties:
prompt: "Your session has ended. What would you like to do?"
options:
- label: "Order a Pizza"
value: "OrderPizza"
- label: "Nothing. I'm done here."
value: "Finished"
autoNumberPostbackActions: true
transitions:
actions:
OrderPizza: "resolvePizzaSize"
Finished: "done"
...
Azione | descrizione; |
---|---|
agentActions |
Se il componente System.AgentInitiation dispone di una proprietà agentActions , questo componente deve avere un'azione di transizione per ogni azione supportata specificata da agentActions .
|
agentLeft |
L'agente ha terminato la sessione senza utilizzare un'azione barra (ad esempio, /Order). In alternativa, la sessione si è conclusa perché non è stata eseguita alcuna attività entro il tempo specificato dalla configurazione CS_IDLE_TIMEOUT di Oracle B2C Service e tale configurazione è inferiore all'impostazione Scadenza sessione per il canale di integrazione agente. Per ulteriori informazioni, vedere l'azione expired .
Si noti che questa azione non viene restituita quando l'utente lascia la conversazione immettendo una parola chiave di uscita. In tal caso, il flusso passa allo stato denominato dalla transizione |
error |
Si è verificato un problema durante la connessione al servizio agente reale. Questa azione funziona solo con le istanze di Oracle Digital Assistant di cui è stato eseguito il provisioning su Oracle Cloud Infrastructure (a volte indicata come infrastruttura cloud di generazione 2). |
expired |
Se Oracle B2C Service Per impostazione predefinita, L'azione Per visualizzare o modificare le impostazioni dell'istanza di Oracle B2C Service, aprire la console del desktop, fare clic su Navigazione, fare clic sulla prima voce Configurazione nel menu e fare clic su Impostazioni configurazione. Cercare quindi l'impostazione nella cartella Chat. |
waitExpired |
La richiesta di chat è scaduta durante l'attesa di un agente. Ciò si verifica quando il tempo di attesa supera il valore nell'impostazione USER_WAIT_QUEUE_TIMEOUT del client di chat.
|
Esempio: configurazione del flusso della finestra di dialogo Trasferimento agente
In questo esempio, l'intento GetAgent
viene addestrato per comprendere le chiamate di soccorso come help me please!
intent:
component: "System.Intent"
properties:
variable: "iResult"
transitions:
actions:
OrderPizza: "resolvesize"
CancelPizza: "cancelorder"
GetAgent: "agentInitiation"
unresolvedIntent: "agentInitiation"
Di seguito sono riportati i passi di base per la configurazione del flusso della finestra di dialogo.
-
Avviare il trasferimento dell'agente attivo.
-
Aggiungere uno stato per il componente
System.AgentInitiation
. -
Impostare la proprietà
agentChannel
dello stato sul nome del canale di integrazione agente configurato per il sistema live-agent.
Dopo che il canale di integrazione dell'agente ha stabilito una connessione e Oracle B2C Service ha inviato la richiesta di chat alla relativa coda (ovvero dopo la creazione di un ticket di assistenza), il componenteSystem.AgentInitiation
consente la transizione allo stato successivo, in genere definito per il componenteSystem.AgentConversation
(agentConversation
nell'esempio seguente).agentInitiation: component: "System.AgentInitiation" properties: agentChannel: "ServiceCloudIntegration" nlpResultVariable: "iResult" waitingMessage: "Waiting for an agent..." rejectedMessage: "Agents are not available right now." resumedMessage: "We're connecting you to an agent..." errorMessage: "Oops! We're having system issues. We're sorry, but we can't connect you with an agent right now." transitions: actions: accepted: "agentConversation" rejected: "tryAgain" error: "tryAgain" tryAgain: component: "System.Output" properties: text: "Please try again later." transitions: return: "tryAgain"
Suggerimento
I clienti possono richiedere ripetutamente una chat live anche se le loro richieste sono già state accodate nella console di chat dell'agente. Aggiungere una proprietàresumedMessage
allo statoSystem.AgentInitiation
per impedire a tali clienti di ricevere un messaggio ripresa della chat con l'agente fuorviante. -
-
Aggiungere e configurare il componente
System.AgentConversation
. Mentre il motore della finestra di dialogo si trova nello stato definito per questo componente, lo skill passa i messaggi avanti e indietro tra il cliente e l'agente. La competenza ascolta le parole chiave di uscita nell'input del cliente, ad esempiobye
. Quando lo skill rileva una di queste parole chiave, il componenteSystem.AgentConversation
termina la sessione di live chat e attiva la transizionenext
.Esempio:
agentConversation: component: "System.AgentConversation" properties: agentChannel: "ServiceCloudIntegration" nlpResultVariable: "iResult" errorMessage: "Oops, we lost connection with the agent. If you need further help, please call customer support." exitKeywords: "bye, exit, take care, goodbye, quit" expiryMessage: "Your chat with the agent timed out." conclusionMessage: "Your chat with the agent has ended." waitMessage: "You are number ${system.message.messagePayload.position} in the queue. Your waiting time is ${(system.message.messagePayload.waitTime>60)?then('${(system.message.messagePayload.waitTime/60)?int} mins','${system.message.messagePayload.waitTime} seconds')}." transitions: next: "endPrompt" actions: agentLeft: "endPrompt" expired: "endPrompt" error: "endPrompt" endPrompt: component: "System.Output" properties: text: "Returning you to your bot." transitions: return: "endPrompt"
Esempio: recupero informazioni sondaggio
Nell'esempio seguente che utilizza il formato standard, il componente AgentConversation
restituisce un collegamento al sondaggio al termine della conversazione con l'agente. Il collegamento include la sessione e l'ID coinvolgimento dalla mappa denominata dalla proprietà chatResponseVariable
.
context:
variables:
agentSystemResponse: "map" # chat request response is stored in this variable.
...
states:
...
agentInitiation:
component: "System.AgentInitiation"
properties:
agentChannel: "B2CServiceIntegration"
nlpResultVariable: "iResult"
chatResponseVariable: "agentSystemResponse"
transitions:
actions:
accepted: "agentConversation"
rejected: "tryAgain"
error: "tryAgain"
agentConversation:
component: "System.AgentConversation"
properties:
agentChannel: "B2CServiceIntegration"
nlpResultVariable: "iResult"
exitKeywords: "bye, exit, take care, goodbye, quit"
expiryMessage: "Your chat with the agent timed out."
conclusionMessage: "Can you please fill out this survey: <PUT SURVEY URL HERE>?session=${agentSystemResponse.value.sessionId}&surveyid=${agentSystemResponse.value.engagementId}"
transitions:
next: "endPrompt"
actions:
agentLeft: "endPrompt"
expired: "sessionExpired"
error: "agentConversationError"
Esempio: trasferimento della chat a una coda specifica di Oracle B2C Service
-
Se non è già stata definita nel nodo di contesto una variabile di mappa da utilizzare con la proprietà
customProperties
del componenteSystem.AgentInitiation
. Ad esempio:context: variables: greeting: "string" name: "string" liveChatInfo: "map"
-
Definire i campi per la variabile mappa.
Di seguito è riportato un esempio del formato standard per i canali di integrazione degli agenti creati nella versione 20.01 o successiva e che si connettono a Oracle B2C Service versione 19A o successiva.
setLiveChatInfo: component: "System.SetVariable" properties: variable: "liveChatInfo" value: customFields: - name: "c$frombot" type: "BOOLEAN" value: 1 transitions: next: "agentInitiation"
Di seguito è riportato un esempio del formato legacy per i canali di integrazione degli agenti creati prima della versione 20.01 o che si connettono a una versione precedente a Oracle B2C Service versione 19A.
setLiveChatInfo: component: "System.SetVariable" properties: variable: "liveChatInfo" value: customFields: - name: "c$frombot" dataType: "BOOLEAN" dataValue: booleanValue: true transitions: next: "agentInitiation"
-
Aggiungere la proprietà
customProperties
al componenteSystem.AgentInitiation
e impostarla sul valore della variabile mappa. Ad esempio:agentInitiation: component: "System.AgentInitiation" properties: agentChannel: "B2CServiceIntegration" nlpResultVariable: "iResult" customProperties: "${liveChatInfo.value}" waitingMessage: "Waiting for an agent..." rejectedMessage: "Agents are not available right now." resumedMessage: "We're connecting you to an agent..." errorMessage: "Oops! We're having system issues. We're sorry, but we can't connect you with an agent right now." transitions: actions: accepted: "agentConversation" rejected: "tryAgain" error: "tryAgain" tryAgain: component: "System.Output" properties: text: "Please try again later." transitions: return: "tryAgain"
System.ResolveEntities
In questo argomento viene descritto l'uso di questo componente in modalità YAML. Per informazioni sull'utilizzo in Visual Flow Designer, vedere Risolvi entità.
Itera tutti i campi entità nel sacchetto composito, conversa con l'utente e risolve tutti i campi. Il componente sceglie in modo casuale i prompt forniti per ogni entità durante la risoluzione di tale entità.
Proprietà | descrizione; | Richiesto | |
---|---|---|---|
variable |
Si riferisce alla variabile di contesto dell'entità sacchetto composito popolata da questo componente. Se tutte le entità figlio della variabile entità composta hanno già un valore, il flusso della finestra di dialogo passa allo stato successivo senza inviare un messaggio all'utente. | Sì | |
nlpResultVariable |
Popola la proprietà variable (che fa riferimento alla variabile entità bag composta) utilizzando i valori memorizzati nella variabile di contesto nlpresult . È possibile definire questa proprietà denominando la variabile nlpresult (in genere, iResult ). Quando il framework risolve una singola entità figlio, la proprietà variable viene popolata solo con quel valore di entità. Quando la variabile nlpresult contiene valori per tutte le entità figlio, il flusso della finestra di dialogo passa allo stato successivo. È possibile utilizzare questa proprietà al posto degli stati SetVariable che popolano i valori di entità figlio.
|
No | |
maxPrompts |
Specifica il numero di tentativi assegnati all'utente per immettere un valore valido corrispondente al tipo di entità figlio. Se viene superato il numero massimo di tentativi per la prima entità figlio, questa proprietà viene reimpostata su 0 e il bot restituisce il prompt per l'entità figlio successiva. Come descritto in Crea un'entità sacchetto composto, le singole entità nel sacchetto composto possono sostituire questa impostazione quando è impostata l'opzione Numero massimo di tentativi di input utente. | No | |
autoNumberPostbackActions |
Quando si imposta true , questa opzione antepone i numeri alle opzioni. Anche se questa opzione non è stata impostata su true , la numerazione automatica può essere applicata alle voci dell'elenco quando la configurazione di Abilita numerazione automatica su azioni postback dell'assistente digitale è impostata su true . La numerazione automatica specifica del canale può essere applicata a qualsiasi bot di competenze registrato a un assistente digitale:
|
No | |
useFullEntityMatches |
Se impostato su true , i valori di entità personalizzati vengono memorizzati come oggetti JSON (simili ai valori di entità built-in). Ciò consente di creare espressioni per accedere a proprietà quali value , primaryLanguageValue e originalString , particolarmente importanti per le competenze che attualmente o eventualmente potrebbero diventare multilingue.
|
||
footerText |
Migliora 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 | |
headerText |
Un messaggio visualizzato prima che il componente richieda all'utente l'elemento successivo nel sacchetto. È possibile utilizzare questa intestazione per fornire feedback sulle entità precedenti del sacchetto che sono state abbinate (o aggiornate).
|
No | |
transitionAfterMatch |
Valore booleano che, quando viene impostato su true , abilita una transizione temporanea dalla corrispondenza entità eseguita da questo componente a un componente personalizzato. L'impostazione predefinita è false . Questa proprietà viene ignorata (e la transizione match non viene attivata) se è stato registrato un gestore di eventi entità.
|
No | |
cancelPolicy |
Determina i tempi della transizione cancel :
maxPromptsReached a livello di elemento o evento. |
No |
Componenti calendario
Utilizzare questi componenti del calendario per interagire con i calendari di Outlook e Google:
-
System.CreateCalendarEvent: crea un evento
-
System.DeleteCalendarEvent: consente di annullare un evento
-
System.GetCalendarEventDetails: maggiori dettagli su un evento
-
System.ListCalendarEvents: recupera i dati per un set filtrato di eventi
-
System.SelectCalendarEvent: selezionare un evento da una lista filtrata
-
System.SendInviteResponse: modificare lo stato della risposta di un evento
-
System.UpdateCalendarEvent: consente di modificare un evento
Autorizzazione calendario
Per abilitare l'interazione tra uno skill e un provider di calendario, è necessario impostare un servizio e modificare lo skill e il flusso di finestre di dialogo per consentire all'utente di accedere al proprio calendario tramite tale servizio.
Prima di utilizzare qualsiasi componente di calendario, è necessario registrare un'applicazione presso il fornitore del calendario e creare un servizio di codici di autorizzazione. Per ulteriori informazioni, vedere questi argomenti:
Nel flusso della finestra di dialogo, utilizzare il componente System.OAuth2AccountLink
per richiedere all'utente di accedere al proprio calendario tramite il servizio di codici di autorizzazione creato. Tenere presente che non è possibile impostare la proprietà enableSingleSignOn
del componente su true
quando si utilizza il componente per l'autorizzazione del componente calendario.
È possibile utilizzare la funzione "richiede autorizzazione" per assicurarsi automaticamente che l'utente abbia eseguito l'accesso (ottenuto un token di accesso) prima di richiamare qualsiasi componente del calendario. Questa funzione richiede all'utente di accedere solo se non dispone ancora di un token di accesso o se è scaduto e non può essere aggiornato. È possibile utilizzare la configurazione Richiede autorizzazione dello skill per impostare l'impostazione predefinita per l'intera skill, quindi utilizzare l'impostazione requiresAuthorization
a livello di stato per sostituire l'impostazione predefinita. In altre parole, si utilizza l'impostazione della competenza per impostare l'impostazione predefinita e quindi includere solo l'impostazione del componente requiresAuthorization
negli stati per i quali l'impostazione predefinita non si applica.
Per utilizzare la funzione di autorizzazione obbligatoria, è necessario aggiungere un'azione system.authorizeUser
al nodo defaultTransitions
per assegnare un nome allo stato che avvia il flusso di autorizzazione. Ad esempio:
defaultTransitions:
error: "globalErrorHandler"
actions:
system.authorizeUser: "userAuthN.performOAuth"
Prima che uno skill passi a uno stato che richiede l'autorizzazione, verifica se esiste un token di accesso valido per il servizio Calendar. In caso contrario, vengono eseguite le seguenti azioni:
-
Richiama lo stato definito per l'azione
system.authorizedUser
nel nododefaultTransitions
. -
Chiede all'utente di accedere.
-
Esegue la transizione allo stato che richiede l'autorizzazione, ovvero lo stato definito da
${system.requestedState}
.
Di seguito è riportato un esempio di flusso della finestra di dialogo di autorizzazione.
defaultTransitions:
error: "globalErrorHandler"
actions:
system.authorizeUser: "userAuthN.performOAuth"
...
############################
# Authenticate
############################
userAuthN.performOAuth:
component: "System.OAuth2AccountLink"
properties:
prompt: "User Authentication"
variable: "code"
linkLabel: "Sign into ${system.config.calendarProvider}"
authenticationService: "${system.config.authService}"
accessTokenVariableName: "user.accessToken"
authenticatedUserVariableName: "user.authenticatedUser"
enableSingleSignOn: false # SSO not supported for calendar components
transitions:
actions:
pass : "${system.requestedState}"
fail : "handleFailedLogin"
textReceived: "intent"
handleFailedLogin:
component: "System.Output"
requiresAuthorization: false
properties:
text: "Sorry, you aren't authorized to do that"
transitions:
return: "doneHandleFailedLogin"
Per uno skill incentrato principalmente sui componenti del calendario, considerare di impostare la configurazione Richiede autorizzazione dello skill su true
, quindi impostare il valore su falso solo per gli stati che non richiedono autorizzazione. In questo esempio, qualsiasi utente può eseguire gli stati initTimezoneOffset
e intent
. Pertanto, requiresAuthorization
è impostato su false
per tali stati. Gli stati che funzionano con i componenti del calendario non devono includere requiresAuthorization
perché l'impostazione predefinita è true
.
initTimezoneOffset:
requiresAuthorization: false
component: "System.SetVariable"
properties:
variable: "timezoneOffset"
value: <#attempt>${profile.timezoneOffset}<#recover>0</#attempt>
transitions:
next: "intent"
intent:
component: "System.Intent"
requiresAuthorization: false
properties:
variable: "iResult"
transitions:
actions:
SetupMeeting: "setUpMeeting"
CancelMeeting: "cancelMeeting"
ListMeetings: "listMeetings"
UpdateMeeting: "updateMeeting"
ListInvites: "listInvites"
RespondInvites: "respondInvites"
LogoutUser: "logoutUser"
unresolvedIntent: "greeting"
...
cancelMeeting.performDelete:
component: "System.DeleteCalendarEvent"
properties:
eventId: "${eventId}"
provider: "${system.config.calendarProvider}"
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
transitions:
next: "cancelMeeting.printSuccessMessage"
cancelMeeting.printSuccessMessage:
component: "System.Output"
properties:
text: "I've cancelled the meeting"
transitions:
return: "doneCancel"
Gestione delle date e delle ore del calendario
Quando si utilizzano i componenti del calendario, è importante comprendere la relazione tra le ore di inizio e di fine del calendario, le entità DATA e ORA e il fuso orario locale.
Quando si creano, si aggiornano o si recuperano eventi, si utilizza la data/ora locale per i valori start
e end
e si utilizza la proprietà timezoneOffset
o timezone
per indicare al componente come calcolare l'ora universale (UTC).
Il valore timezoneOffset
dei componenti del calendario è diverso dal valore profile.timezoneOffset
. Per i componenti calendario, timezoneOffset
è il valore che il componente deve aggiungere ai valori start
e end
per ottenere il valore UTC. È possibile derivare il valore della proprietà timezoneOffset
di un componente calendario moltiplicando profile.timezoneOffset
per -1.
È possibile che profile.timezoneOffset
non sia sempre disponibile. Ciò dipende dal fatto che il client abbia fornito l'offset. Ad esempio, qualcuno potrebbe creare un'applicazione Web Oracle che non imposta profile.timezoneOffset
. Pertanto, è consigliabile creare un fuso orario predefinito per i casi in cui l' profile.timezoneOffset
non è stato impostato. Ad esempio:
initTimezoneOffset:
requiresAuthorization: false
component: "System.SetVariable"
properties:
variable: "timezoneOffset"
value: <#attempt>${profile.timezoneOffset}<#recover>${system.config.defaultTimezoneOffset}</#attempt>
transitions:
next: "intent
Quando si recupera un evento, il componente restituisce i valori di data e ora in formato UTC. Ad esempio, 2021-04-15T22:00:00.000Z
. Lo skill deve convertire il valore nell'ora locale.
updateMeeting.printEventDetails:
component: "System.Output"
properties:
keepTurn: true
text: |
You selected:
${eventDetails.value.subject}
${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['MMM d']}
${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}-${(eventDetails.value.end?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}
Location: ${eventDetails.value.location}
Attendees: ${eventDetails.value.attendees?join(', ')}
transitions:
next: "updateMeeting.selectItemToChange"
Quando si utilizzano le entità DATA e ORA, ecco alcune cose da considerare:
-
Se si utilizza un sacchetto composto con un'entità DATE e una o più entità TIME, è necessario disabilitare Estrazione fuori ordine. In caso contrario, quando le entità vengono risolte, non si dispone del controllo su quali valori vengono risolti nell'entità DATE e quali valori vengono risolti nell'entità TIME (o in entrambi). Ad esempio, quando l'ora viene risolta, potrebbe cambiare il valore dell'entità DATA.
-
Quando un enunciato contiene testo come "ieri", "oggi" o "domani", il parser non prende in considerazione il fuso orario locale. Pertanto, è possibile che, al mattino presto e nel tardo pomeriggio, venga utilizzata la data sbagliata. Per questo motivo, è consigliabile riecheggiare la data risolta in modo che l'utente possa verificarla prima che l'abilità aggiunga un evento o aggiorni l'ora di inizio o di fine di un evento.
-
Per impostare i valori delle proprietà
start
eend
di un calendario, è necessario utilizzare la data dell'entità DATE e l'ora dell'entità TIME. Ad esempio:start: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.startTime.date?number_to_date?string['HH:mm:ss']}" end: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.endTime.date?number_to_date?string['HH:mm:ss']}"
Gestione degli errori del calendario
Il fornitore del calendario può rifiutare una richiesta di evento. Ad esempio, potrebbe essere restituito un errore se l'utente tenta di creare un evento con un'ora di fine precedente all'ora di inizio. Nella maggior parte dei casi, il provider del calendario restituisce un errore 400 che, a sua volta, esegue la transizione della competenza all'handler di errori globale.
Valutare la possibilità di convalidare i valori per evitare che si verifichino questi errori. Di seguito sono riportati alcuni esempi di convalide delle entità sacchetto composito.
-
Entità data: per le riunioni nuove e aggiornate, verificare che la data sia uguale o successiva alla data corrente.
${(meetingSlot.value.date.date?number?long gte ((.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd']+'T00:00:00')?datetime.iso?long)?then('true','false')}
-
entità TEMPO: per le riunioni nuove e aggiornate, verificare che la data e l'ora di inizio corrispondano o siano successive alla data/ora corrente.
${(((meetingSlot.value.date.date?number_to_date?string['yyyy-MM-dd']+'T'+meetingSlot.value.startTime.date?number_to_date?string['HH:mm:ss'])?datetime.iso?long) gte (.now?date?long - timezoneOffset?number))?then('true','false')}
Per tutte le ore di fine, verificare che l'ora di fine sia successiva all'ora di inizio.
${(newEvent.value.startTime.date?number_to_time < newEvent.value.endTime.date?number_to_time)?then('true','false')}
Per gestire in modo corretto i rifiuti del provider di calendario, aggiungere il proprio handler di errori globale. Ad esempio:
defaultTransitions:
error: "globalErrorHandler"
actions:
system.authorizeUser: "userAuthN.performOAuth"
...
globalErrorHandler:
requiresAuthorization: false
component: "System.Output"
properties:
text: "Sorry, we were unable to do the action that you requested."
transitions:
return: "done"
In alternativa, è possibile utilizzare la transizione di errore per creare handler di errori appropriati per ogni caso:
setUpMeeting.performSchedule:
component: "System.CreateCalendarEvent"
properties:
start: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.startTime.date?number_to_date?string['HH:mm:ss']}"
end: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.endTime.date?number_to_date?string['HH:mm:ss']}"
subject: "${newEvent.value.subject}"
location: "${newEvent.value.location}"
attendees: "${newEvent.value.attendees}"
provider: "${system.config.calendarProvider}"
timezoneOffset: ${timezoneOffset?number * -1}
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
transitions:
next: "setUpMeeting.printResults"
error: "handleCreateEventError"
...
handleCreateEventError:
requiresAuthorization: false
component: "System.Output"
properties:
text: "Sorry, there's a problem with the event that you wanted to create."
transitions:
return: "done"
System.CreateCalendarEvent
Utilizzare questo componente per aggiungere un evento a un calendario di Outlook o Google. Tenere presente che non è possibile creare eventi ricorrenti o di tutti i giorni.
Per accedere a questo componente, è necessario che l'utente abbia effettuato l'accesso al provider del calendario. È possibile utilizzare la funzione "richiede autorizzazione" per gestire l'accesso utente, come descritto in Autorizzazione calendario.
Per informazioni su come impostare i valori start
e end
, vedere Utilizzo di date e ore del calendario.
Di seguito è riportato un esempio di utilizzo di questo componente. In questo esempio, un'entità sacchetto composito viene utilizzata per ottenere la data, l'ora di inizio e di fine, l'oggetto, la posizione e i partecipanti.
####################
# Create Meeting
####################
setUpMeeting:
component: "System.CommonResponse"
properties:
keepTurn: true
processUserMessage: true
variable: "newEvent"
nlpResultVariable: "iResult"
cancelPolicy: "immediate"
transitionAfterMatch: "false"
metadata:
responseItems:
- type: "text"
text: "${system.entityToResolve.value.prompt}"
actions:
- label: "${enumValue}"
type: "postback"
iteratorVariable: "system.entityToResolve.value.enumValues"
payload:
variables:
newEvent: "${enumValue}"
globalActions:
- label: "Cancel"
type: "postback"
visible:
onInvalidUserInput: false
payload:
action: "cancel"
transitions:
actions:
cancel: "allDone"
next: "setUpMeeting.askConfirm"
setUpMeeting.askConfirm:
component: "System.CommonResponse"
properties:
processUserMessage: true
metadata:
responseItems:
- type: "text"
text: |
Create ${newEvent.value.subject} meeting on ${newEvent.value.date.date?number_to_date?string['MMM d']}
from ${newEvent.value.startTime.date?number_to_date?string['hh:mm a']} to ${newEvent.value.endTime.date?number_to_date?string['hh:mm a']}
at ${newEvent.value.location} with ${newEvent.value.attendees}?
name: "confirmCreate"
separateBubbles: true
actions:
- label: "Yes"
type: "postback"
keyword: "yes"
payload:
action: "yes"
name: "Yes"
- label: "No"
keyword: "no"
type: "postback"
payload:
action: "no"
name: "No"
transitions:
next: "intent"
actions:
yes: "setUpMeeting.performSchedule"
no: "allDone"
textReceived: "intent"
setUpMeeting.performSchedule:
component: "System.CreateCalendarEvent"
properties:
start: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.startTime.date?number_to_date?string['HH:mm:ss']}"
end: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.endTime.date?number_to_date?string['HH:mm:ss']}"
subject: "${newEvent.value.subject}"
location: "${newEvent.value.location}"
attendees: "${newEvent.value.attendees}"
provider: "${system.config.calendarProvider}"
timezoneOffset: ${timezoneOffset?number * -1}
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
transitions:
next: "setUpMeeting.printResults"
error: "handleCreateCalendarError"
setUpMeeting.printResults:
component: "System.Output"
properties:
text: "The ${newEvent.value.date.date?number_to_date?string['MMM d']} meeting is now on your calendar."
keepTurn: true
transitions:
next: "setUpMeeting.getMeetings"
...
Questo componente è supportato in Oracle Digital Assistant versione 21.02 e successive.
Proprietà | descrizione; | Richiesto? |
---|---|---|
provider |
Il fornitore del calendario. I valori consentiti sono Google e Outlook .
|
Sì |
calendarOwner |
L'ID utente del proprietario del calendario. Deve essere un ID account valido per il provider di calendario, ad esempio il valore della variabile identificata dalla proprietà authenticatedUserVariable del componente System.OAuth2AccountLink , impostata quando l'utente esegue l'autenticazione.
|
Sì |
calendarId |
Nome del calendario. Per il calendario predefinito dell'utente, impostare lo stesso valore della proprietà calendarOwner .
|
Sì |
credential |
Token di accesso del provider. Si tratta del valore della variabile identificata dalla proprietà accessTokenVariableName del componente System.OAuth2AccountLink , impostata quando l'utente esegue l'autenticazione.
|
Sì |
start |
Data e ora di inizio della riunione nel formato yyyy-MM-dd'T'HH:mm:ss . Ad esempio, 2021-02-26T09:55:00 .
|
Sì |
end |
Data e ora di fine della riunione nel formato yyyy-MM-dd'T'HH:mm:ss . Ad esempio, 2021-02-26T09:55:00 .
|
Sì |
subject |
Oggetto della riunione. | Sì |
attendees |
Lista separata da virgole di partecipanti. Tenere presente che il fornitore del calendario non può inviare una notifica a un partecipante se l'ID non è un ID account valido per tale fornitore. | Sì |
timezoneOffset |
Il periodo di tempo in millisecondi da aggiungere al tempo universale (UTC) per ottenere l'ora standard nel fuso orario dell'utente. Ad esempio, se il fuso orario locale è UTC-2, timezoneOffset è -7200000 . Il valore predefinito è zero.
Nota
È possibile derivare la proprietà timezoneOffset per l'utente corrente in base al valore della variabile di contesto utente profile.timezoneOffset . In tal caso, tuttavia, è necessario moltiplicare profile.timezoneOffset per -1.
È possibile specificare |
No |
timezone |
ID del fuso orario locale identificato da https://www.iana.org/time-zones. Anche denominato nome del database del fuso orario. Ad esempio: |
No |
System.DeleteCalendarEvent
Utilizzare questo componente per eliminare un evento da un calendario di Outlook o Google. Tenere presente che non è possibile eliminare gli eventi ricorrenti o di tutti i giorni.
Per accedere a questo componente, è necessario che l'utente abbia effettuato l'accesso al provider del calendario. È possibile utilizzare la funzione "richiede autorizzazione" per gestire l'accesso utente, come descritto in Autorizzazione calendario.
Di seguito è riportato un esempio di utilizzo di questo componente.
####################
# Cancel Meeting
####################
# Want to select from deletable meetings
cancelMeeting:
component: "System.SetVariable"
properties:
variable: "stateAfterList"
value: "cancelMeeting.confirmCancel"
transitions:
next: "cancelMeeting.setListType"
cancelMeeting.setListType:
component: "System.SetVariable"
properties:
variable: "listType"
# Only show deletable meetings
value: "DELETE"
transitions:
next: "cancelMeeting.setListPrompt"
cancelMeeting.setListPrompt:
component: "System.SetVariable"
properties:
variable: "listPrompt"
value: "to cancel"
transitions:
next: "listMeetings.commonEntryPoint"
# List meetings common code returns to this state
cancelMeeting.confirmCancel:
component: "System.ResetVariables"
properties:
variableList: "confirmAction"
transitions:
next: "cancelMeeting.askConfirm"
cancelMeeting.askConfirm:
component: "System.CommonResponse"
properties:
processUserMessage: true
metadata:
responseItems:
- type: "text"
text: "Are you sure you want to cancel this meeting?"
name: "confirmCcancel"
separateBubbles: true
actions:
- label: "Yes"
type: "postback"
keyword: "yes"
payload:
action: "yes"
name: "Yes"
- label: "No"
keyword: "no"
type: "postback"
payload:
action: "no"
name: "No"
transitions:
next: "intent"
actions:
yes: "cancelMeeting.performDelete"
no: "allDone"
textReceived: "intent"
cancelMeeting.performDelete:
component: "System.DeleteCalendarEvent"
properties:
eventId: "${eventId}"
provider: "${system.config.calendarProvider}"
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
transitions:
next: "cancelMeeting.printSuccessMessage"
cancelMeeting.printSuccessMessage:
component: "System.Output"
properties:
text: "I've cancelled the meeting"
transitions:
return: "doneCancel"
...
############################
# List Meetings Shared Code
############################
listMeetings.commonEntryPoint:
component: "System.SetVariable"
properties:
variable: "inputDate"
value: "${iResult.value.entityMatches['DATE'][0]}"
transitions:
next: "listMeetings.setDate"
listMeetings.setDate:
component: "System.SetVariable"
properties:
variable: "start"
value: "${inputDate.value?has_content?then(inputDate.value.date?number_to_date?string['yyyy-MM-dd'], (.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd'])}T00:00:00"
transitions:
next: "listMeetings.clearInputDate"
listMeetings.clearInputDate:
component: "System.ResetVariables"
properties:
variableList: "inputDate"
transitions:
next: "listMeetings.filterByAttendees"
listMeetings.filterByAttendees:
component: "System.CommonResponse"
properties:
processUserMessage: true
metadata:
responseItems:
- type: "text"
text: "Do you want to list only meetings with a particular attendee?"
name: "confirmFilter"
separateBubbles: true
actions:
- label: "Yes"
type: "postback"
keyword: "yes"
payload:
action: "yes"
name: "Yes"
- label: "No"
keyword: "no"
type: "postback"
payload:
action: "no"
name: "No"
transitions:
next: "intent"
actions:
yes: "listMeetings.resolveAttendeesFilter"
no: "listMeetings.clearAttendeesFilter"
textReceived: "intent"
# clear filter
listMeetings.clearAttendeesFilter:
component: "System.ResetVariables"
properties:
variableList: "attendees"
transitions:
next: "listMeetings.performList"
# resolve filter
listMeetings.resolveAttendeesFilter:
component: "System.CommonResponse"
properties:
keepTurn: true
processUserMessage: true
variable: "attendees"
nlpResultVariable: "iResult"
metadata:
responseItems:
- type: "text"
text: "Who is the attendee?"
transitions:
next: "listMeetings.performAttendeesList"
actions:
textReceived: "listMeetings.performAttendeesList"
# perform attendees list
listMeetings.performAttendeesList:
component: "System.SelectCalendarEvent"
properties:
listType: "${listType}"
start: "${start}"
attendees: "${attendees}"
prompt: "Choose the ${start?datetime.iso?long?number_to_date?string['MMM d']} meeting ${listPrompt}:"
eventIdVariableName: "eventId"
provider: "${system.config.calendarProvider}"
timezoneOffset: ${timezoneOffset?number * -1}
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
transitions:
actions:
found: "${stateAfterList}"
notfound: "listMeetings.printNotFoundMessage"
next: "globalErrorHandler"
# perform list
listMeetings.performList:
component: "System.SelectCalendarEvent"
properties:
listType: "${listType}"
start: "${start}"
prompt: "Choose the ${start?datetime.iso?long?number_to_date?string['MMM d']} meeting ${listPrompt}:"
eventIdVariableName: "eventId"
provider: "${system.config.calendarProvider}"
timezoneOffset: ${timezoneOffset?number * -1}
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
transitions:
actions:
found: "${stateAfterList}"
notfound: "listMeetings.printNotFoundMessage"
next: "globalErrorHandler"
listMeetings.printNotFoundMessage:
component: "System.Output"
properties:
text: "There are no meetings on ${start?datetime.iso?long?number_to_date?string['MMM d']}"
transitions:
return: "doneListMeetings"
...
Questo componente è supportato in Oracle Digital Assistant versione 21.02 e successive.
Proprietà | descrizione; | Richiesto? |
---|---|---|
provider |
Il fornitore del calendario. I valori consentiti sono Google e Outlook .
|
Sì |
calendarOwner |
L'ID utente del proprietario del calendario. Deve essere un ID account valido per il provider di calendario, ad esempio il valore della variabile identificata dalla proprietà authenticatedUserVariable del componente System.OAuth2AccountLink , impostata quando l'utente esegue l'autenticazione.
|
Sì |
calendarId |
Nome del calendario. Per il calendario predefinito dell'utente, impostare lo stesso valore della proprietà calendarOwner .
|
Sì |
credential |
Token di accesso del provider. Si tratta del valore della variabile identificata dalla proprietà accessTokenVariableName del componente System.OAuth2AccountLink , impostata quando l'utente esegue l'autenticazione.
|
Sì |
eventId |
ID dell'evento da eliminare. È possibile utilizzare System.ListCalendarEvents o System.SelectCalendarEvent per ottenere un eventId .
|
Sì |
System.GetCalendarEventDetails
Utilizzare questo componente per ottenere i dettagli di un evento da un calendario di Outlook o Google.
Per accedere a questo componente, è necessario che l'utente abbia effettuato l'accesso al provider del calendario. È possibile utilizzare la funzione "richiede autorizzazione" per gestire l'accesso utente, come descritto in Autorizzazione calendario.
I dettagli vengono restituiti nella variabile specificata dalla proprietà eventDetailsVariableName
nel seguente formato JSON:
{
"isAllDay": boolean,
"subject": string,
"inviteResponse": string,
"attendees": [
"string",
...
],
"start": format yyyy-MM-dd'T'HH:mm:ss.SSSZ,
"end": format yyyy-MM-dd'T'HH:mm:ss.SSSZ,
"location": string,
"isRecurring": boolean,
"id": string
}
Le proprietà start
e end
sono valori UTC. Per informazioni su come convertire i valori start
e end
in ora locale, vedere Utilizzo di date e ore del calendario.
Di seguito è riportato un esempio di utilizzo di questo componente.
listMeetings.performGetDetails:
component: "System.GetCalendarEventDetails"
properties:
eventId: "${eventId}"
eventDetailsVariableName: "eventDetails"
provider: "${system.config.calendarProvider}"
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
transitions:
next: "listMeetings.checkIfResults"
# In case the eventId is no longer valid
listMeetings.checkIfResults:
component: "System.ConditionExists"
properties:
variable: "eventDetails"
transitions:
actions:
exists: "listMeetings.printEventDetails"
notexists: "globalErrorHandler"
listMeetings.printEventDetails:
component: "System.Output"
properties:
text: |
${eventDetails.value.subject}
${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['MMM d']}
${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}-${(eventDetails.value.end?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}
Location: ${eventDetails.value.location}
Attendees: ${eventDetails.value.attendees?join(', ')}
transitions:
return: "doneGetDetails"
Questo componente è supportato in Oracle Digital Assistant versione 21.02 e successive.
Proprietà | descrizione; | Richiesto? |
---|---|---|
provider |
Il fornitore del calendario. I valori consentiti sono Google e Outlook .
|
Sì |
calendarOwner |
L'ID utente del proprietario del calendario. Deve essere un ID account valido per il provider di calendario, ad esempio il valore della variabile identificata dalla proprietà authenticatedUserVariable del componente System.OAuth2AccountLink , impostata quando l'utente esegue l'autenticazione.
|
Sì |
calendarId |
Nome del calendario. Per il calendario predefinito dell'utente, impostare lo stesso valore della proprietà calendarOwner .
|
Sì |
credential |
Token di accesso del provider. Si tratta del valore della variabile identificata dalla proprietà accessTokenVariableName del componente System.OAuth2AccountLink , impostata quando l'utente esegue l'autenticazione.
|
Sì |
eventId |
ID dell'evento da recuperare. È possibile utilizzare System.ListCalendarEvents o System.SelectCalendarEvent per ottenere un eventId .
|
Sì |
eventDetailsVariableName |
Nome della variabile di contesto in cui memorizzare i dettagli. | Sì |
System.ListCalendarEvents
Utilizzare questo componente per ottenere una serie di eventi di Outlook o Google per un proprietario di calendario denominato. È possibile filtrare l'elenco in base ai seguenti attributi:
- L'evento può essere eliminato
- L'evento può essere aggiornato
- L'utente è stato invitato all'evento
- Modalità di risposta dell'utente a un invito
- L'evento include uno o più partecipanti denominati
- La riunione inizia dopo una data e un'ora
- La riunione termina prima di una data e un'ora
Per accedere a questo componente, è necessario che l'utente abbia effettuato l'accesso al provider del calendario. È possibile utilizzare la funzione "richiede autorizzazione" per gestire l'accesso utente, come descritto in Autorizzazione calendario.
La lista viene restituita nella variabile specificata dalla proprietà eventListVariableName
nel seguente formato JSON:
[{
"isAllDay": boolean,
"subject": string,
"inviteResponse": string,
"start": format yyyy-MM-dd'T'HH:mm:ss.SSSZ,
"end": format yyyy-MM-dd'T'HH:mm:ss.SSSZ,
"isRecurring": boolean,
"id": string
}, …]
Per informazioni su come impostare i valori start
e end
, vedere Utilizzo di date e ore del calendario. In questo argomento viene inoltre illustrato come convertire i valori delle proprietà JSON start
e end
in ora locale.
Di seguito è riportato un esempio di utilizzo di questo componente.
############################
# List Invites
############################
listInvites:
component: "System.ListCalendarEvents"
properties:
provider: "${system.config.calendarProvider}"
timezoneOffset: ${timezoneOffset?number * -1}
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
listType: "INVITED"
response: "PENDING,ACCEPTED,TENTATIVE,DECLINED"
eventListVariableName: "eventList"
start: "${(.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd']}T00:00:00"
transitions:
next: "globalErrorHandler"
actions:
found: "listInvites.printMeetings"
notfound: "listInvites.notFound"
listInvites.printMeetings:
component: "System.CommonResponse"
properties:
keepTurn: true
metadata:
responseItems:
- type: "text"
# display the local time
text: |
${eventList.subject} [${eventList.inviteResponse}]
${(eventList.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['MMM d hh:mm a']} to ${(eventList.end?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}
name: "event"
separateBubbles: true
iteratorVariable: "eventList"
processUserMessage: false
transitions:
return: "listInvitesDone"
listInvites.notFound:
component: "System.Output"
properties:
keepTurn: true
text: "You don't have any invitations for the next 14 days"
transitions:
return: "listInvitesDone"
Questo componente è supportato in Oracle Digital Assistant versione 21.02 e successive.
Proprietà | descrizione; | Richiesto? |
---|---|---|
provider |
Il fornitore del calendario. I valori consentiti sono Google e Outlook .
|
Sì |
calendarOwner |
L'ID utente del proprietario del calendario. Deve essere un ID account valido per il provider di calendario, ad esempio il valore della variabile identificata dalla proprietà authenticatedUserVariable del componente System.OAuth2AccountLink , impostata quando l'utente esegue l'autenticazione.
|
Sì |
calendarId |
Nome del calendario. Per il calendario predefinito dell'utente, impostare lo stesso valore della proprietà calendarOwner .
|
Sì |
credential |
Token di accesso del provider. Si tratta del valore della variabile identificata dalla proprietà accessTokenVariableName del componente System.OAuth2AccountLink , impostata quando l'utente esegue l'autenticazione.
|
Sì |
listType |
Indica il tipo di elenco. Deve essere uno dei seguenti:
|
Sì |
eventListVariableName |
Nome della variabile di contesto in cui memorizzare l'elenco di eventi. | Sì |
start |
La prima data e ora in cui le riunioni devono essere incluse nell'elenco (formato: yyyy-MM-dd'T'HH:mm:ss ). Ad esempio, 2021-02-26T09:55:00 .
|
Sì |
end |
L'ultima data e ora per le quali le riunioni devono essere incluse nell'elenco (formato: yyyy-MM-dd'T'HH:mm:ss ). Ad esempio, 2021-02-26T09:55:00 .
Per il tipo di elenco |
No |
attendees |
Elenco separato da virgole e senza distinzione tra maiuscole e minuscole delle stringhe da utilizzare per filtrare la lista in base ai partecipanti. Nell'output vengono incluse solo le riunioni in cui uno o più valori partecipante contengono una o più stringhe nell'elenco. | No |
response |
Una lista separata da virgole di stati di invito per filtrare la lista quando listType è INVITED . Gli stati consentiti sono descritti di seguito.
L'impostazione predefinita è |
No |
timezoneOffset |
Il periodo di tempo in millisecondi da aggiungere al tempo universale (UTC) per ottenere l'ora standard nel fuso orario dell'utente. Ad esempio, se il fuso orario locale è UTC-2, timezoneOffset è -7200000 . Il valore predefinito è zero.
Nota
È possibile derivare la proprietà timezoneOffset per l'utente corrente in base al valore della variabile di contesto utente profile.timezoneOffset . In tal caso, tuttavia, è necessario moltiplicare profile.timezoneOffset per -1.
È possibile specificare |
No |
timezone |
ID del fuso orario locale identificato da https://www.iana.org/time-zones. Anche denominato nome del database del fuso orario. Ad esempio: America/Los_Angeles . L'impostazione predefinita è UTC . È possibile specificare timezoneOffset o timezone , ma non entrambi.
|
No |
Questo componente può restituire le seguenti azioni:
Azione | descrizione; |
---|---|
found |
Sono stati restituiti uno o più eventi. |
notfound |
Non ci sono eventi corrispondenti. |
System.SelectCalendarEvent
Utilizzare questo componente per visualizzare un elenco di eventi di Outlook o Google tra cui l'utente può effettuare la selezione. Il componente salva l'ID dell'evento selezionato nella variabile specificata dalla proprietà eventIdVariableName
.
È possibile filtrare l'elenco in base ai seguenti attributi:
- L'evento può essere eliminato
- L'evento può essere aggiornato
- L'utente è stato invitato all'evento
- Modalità di risposta dell'utente a un invito
- L'evento include uno o più partecipanti denominati
- La riunione inizia dopo una data e un'ora
- La riunione termina prima di una data e un'ora
Per accedere a questo componente, è necessario che l'utente abbia effettuato l'accesso al provider del calendario. È possibile utilizzare la funzione "richiede autorizzazione" per gestire l'accesso utente, come descritto in Autorizzazione calendario.
Per informazioni su come impostare i valori start
e end
, vedere Utilizzo di date e ore del calendario.
Di seguito è riportato un esempio di utilizzo di questo componente.
############################
# Respond Invites
############################
respondInvites.performList:
component: "System.SelectCalendarEvent"
properties:
listType: "INVITED"
response: "${inviteFilter}"
# Note: For list type INVITED the default end date is 14 days after the start date and time.
start: "${(.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd']}T00:00:00"
prompt: "Select the invitation to send the response to:"
eventIdVariableName: "eventId"
provider: "${system.config.calendarProvider}"
timezoneOffset: ${timezoneOffset?number * -1}
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
transitions:
next: "globalErrorHandler"
actions:
found: "respondInvites.resolveInviteResponse"
notfound: "respondInvites.printNotFoundMessage"
respondInvites.printNotFoundMessage:
component: "System.Output"
properties:
text: "There are no meeting invites."
transitions:
return: "allDone"
...
Questo componente è supportato in Oracle Digital Assistant versione 21.02 e successive.
Proprietà | descrizione; | Richiesto? |
---|---|---|
provider |
Il fornitore del calendario. I valori consentiti sono Google e Outlook .
|
Sì |
calendarOwner |
L'ID utente del proprietario del calendario. Deve essere un ID account valido per il provider di calendario, ad esempio il valore della variabile identificata dalla proprietà authenticatedUserVariable del componente System.OAuth2AccountLink , impostata quando l'utente esegue l'autenticazione.
|
Sì |
calendarId |
Nome del calendario. Per il calendario predefinito dell'utente, impostare lo stesso valore della proprietà calendarOwner .
|
Sì |
credential |
Token di accesso del provider. Si tratta del valore della variabile identificata dalla proprietà accessTokenVariableName del componente System.OAuth2AccountLink , impostata quando l'utente esegue l'autenticazione.
|
Sì |
listType |
Indica il tipo di elenco. Deve essere uno dei seguenti:
|
Sì |
eventIdVariableName |
Nome della variabile di contesto in cui memorizzare l'ID dell'evento. | Sì |
start |
La prima data e ora in cui le riunioni devono essere incluse nell'elenco (formato: yyyy-MM-dd'T'HH:mm:ss ). Ad esempio, 2021-02-26T09:55:00 .
|
Sì |
end |
L'ultima data e ora per le quali le riunioni devono essere incluse nell'elenco (formato: yyyy-MM-dd'T'HH:mm:ss ). Ad esempio, 2021-02-26T09:55:00 .
Per il tipo di elenco |
No |
attendees |
Elenco separato da virgole e senza distinzione tra maiuscole e minuscole delle stringhe da utilizzare per filtrare la lista in base ai partecipanti. Nell'output vengono incluse solo le riunioni in cui uno o più valori partecipante contengono una o più stringhe nell'elenco. | No |
response |
Una lista separata da virgole di stati di invito per filtrare la lista quando listType è INVITED . Gli stati consentiti sono descritti di seguito.
L'impostazione predefinita è |
No |
prompt |
Il testo visualizzato prima dell'elenco. L'impostazione predefinita è You have the following meeting(s): Non è necessario includere questa proprietà a meno che non si desideri eseguire l'override dell'impostazione predefinita.
Suggerimento Negli skill con versione piattaforma 21.04 e successive, il valore predefinito viene memorizzato nel bundle di risorse dello skill. Per modificare l'impostazione predefinita, aprire la pagina Bundle delle risorse dello skill, fare clic su![]() |
No |
allDayLabel |
Testo per indicare gli eventi di tutto il giorno. Il valore predefinito è All day .
|
No |
recurringLabel |
Testo per indicare un evento ricorrente. L'impostazione predefinita è Recurring .
|
No |
acceptedLabel |
Testo che indica che il proprietario del calendario ha accettato l'invito. L'impostazione predefinita è Accepted .
|
No |
tentativeLabel |
Testo che indica che il proprietario del calendario ha accettato provvisoriamente l'invito. L'impostazione predefinita è Tentative .
|
No |
declinedLabel |
Testo che indica che il proprietario del calendario ha rifiutato l'invito. L'impostazione predefinita è Declined .
|
No |
pendingLabel |
Testo che indica che il proprietario del calendario non ha risposto all'invito. L'impostazione predefinita è Pending .
|
No |
timezoneOffset |
Il periodo di tempo in millisecondi da aggiungere al tempo universale (UTC) per ottenere l'ora standard nel fuso orario dell'utente. Ad esempio, se il fuso orario locale è UTC-2, timezoneOffset è -7200000 . Il valore predefinito è zero.
Nota
È possibile derivare la proprietà timezoneOffset per l'utente corrente in base al valore della variabile di contesto utente profile.timezoneOffset . In tal caso, tuttavia, è necessario moltiplicare profile.timezoneOffset per -1.
È possibile specificare |
No |
timezone |
ID del fuso orario locale identificato da https://www.iana.org/time-zones. Anche denominato nome del database del fuso orario. Ad esempio: America/Los_Angeles . L'impostazione predefinita è UTC . È possibile specificare timezoneOffset o timezone , ma non entrambi.
|
No |
Questo componente può restituire le seguenti azioni:
Azione | descrizione; |
---|---|
found |
Sono stati restituiti uno o più eventi. |
notfound |
Non ci sono eventi corrispondenti. |
System.SendInviteResponse
Utilizzare questo componente per accettare, accettare provvisoriamente o rifiutare un invito per un evento di calendario di Outlook o Google.
Per accedere a questo componente, è necessario che l'utente abbia effettuato l'accesso al provider del calendario. È possibile utilizzare la funzione "richiede autorizzazione" per gestire l'accesso utente, come descritto in Autorizzazione calendario.
Di seguito è riportato un esempio di utilizzo di questo componente.
############################
# Respond Invites
############################
respondInvites:
component: "System.CommonResponse"
properties:
processUserMessage: true
metadata:
responseItems:
- type: "text"
text: "Which types of meeting invitations do you want to respond to?"
name: "getInviteFilter"
separateBubbles: true
actions:
- label: "Pending and tentatively accepted invitations"
type: "postback"
keyword: "PENDING,TENTATIVE"
payload:
variables:
inviteFilter: "PENDING,TENTATIVE"
- label: "All invitations"
keyword: "PENDING,ACCEPTED,TENTATIVE,DECLINED"
type: "postback"
payload:
variables:
inviteFilter: "PENDING,ACCEPTED,TENTATIVE,DECLINED"
- label: "Cancel"
keyword: "cancel"
type: "postback"
payload:
action: "allDone"
transitions:
actions:
allDone: "allDone"
textReceived: "intent"
next: "respondInvites.performList"
respondInvites.performList:
component: "System.SelectCalendarEvent"
properties:
listType: "INVITED"
response: "${inviteFilter}"
# Note: For list type INVITED the default end date is 14 days after the start date and time.
start: "${(.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd']}T00:00:00"
prompt: "Select the invitation to send the response to:"
eventIdVariableName: "eventId"
provider: "${system.config.calendarProvider}"
timezoneOffset: ${timezoneOffset?number * -1}
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
transitions:
next: "globalErrorHandler"
actions:
found: "respondInvites.resolveInviteResponse"
notfound: "respondInvites.printNotFoundMessage"
respondInvites.printNotFoundMessage:
component: "System.Output"
properties:
text: "There are no meeting invites."
transitions:
return: "allDone"
############################
# Invite Response
############################
respondInvites.resolveInviteResponse:
component: "System.CommonResponse"
properties:
processUserMessage: true
metadata:
responseItems:
- type: "text"
text: "Choose a response:"
name: "getInviteResponse"
separateBubbles: true
actions:
- label: "Accept"
type: "postback"
keyword: "ACCEPTED"
payload:
variables:
inviteResponse: "ACCEPTED"
- label: "Tentatively accept"
keyword: "TENTATIVE"
type: "postback"
payload:
variables:
inviteResponse: "TENTATIVE"
- label: "Decline"
keyword: "DECLINED"
type: "postback"
payload:
variables:
inviteResponse: "DECLINED"
- label: "Don't send a response"
keyword: "CANCEL"
type: "postback"
payload:
action: "allDone"
transitions:
actions:
allDone: "allDone"
textReceived: "intent"
next: "respondInvites.performRespond"
respondInvites.performRespond:
component: "System.SendInviteResponse"
properties:
eventId: "${eventId}"
response: "${inviteResponse}"
provider: "${system.config.calendarProvider}"
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
transitions:
next: "respondInvites.printSuccessMessage"
respondInvites.printSuccessMessage:
component: "System.Output"
properties:
text: "I've sent the meeting invitation response"
transitions:
return: "doneSendInviteResponse"
Questo componente è supportato in Oracle Digital Assistant versione 21.02 e successive.
Proprietà | descrizione; | Richiesto? |
---|---|---|
provider |
Il fornitore del calendario. I valori consentiti sono Google e Outlook .
|
Sì |
calendarOwner |
L'ID utente del proprietario del calendario. Deve essere un ID account valido per il provider di calendario, ad esempio il valore della variabile identificata dalla proprietà authenticatedUserVariable del componente System.OAuth2AccountLink , impostata quando l'utente esegue l'autenticazione.
|
Sì |
calendarId |
Nome del calendario. Per il calendario predefinito dell'utente, impostare lo stesso valore della proprietà calendarOwner .
|
Sì |
credential |
Token di accesso del provider. Si tratta del valore della variabile identificata dalla proprietà accessTokenVariableName del componente System.OAuth2AccountLink , impostata quando l'utente esegue l'autenticazione.
|
Sì |
eventId |
ID dell'evento a cui inviare la risposta. È possibile utilizzare System.ListCalendarEvents o System.SelectCalendarEvent per ottenere l'ID degli eventi di calendario a cui è stato invitato il proprietario del calendario.
|
Sì |
response |
La risposta da inviare. Le risposte consentite sono:
|
Sì |
System.UpdateCalendarEvent
Utilizzare questo componente per apportare modifiche a un evento di calendario di Outlook o Google. Tenere presente che non è possibile aggiornare gli eventi ricorrenti o di tutti i giorni.
Per accedere a questo componente, è necessario che l'utente abbia effettuato l'accesso al provider del calendario. È possibile utilizzare la funzione "richiede autorizzazione" per gestire l'accesso utente, come descritto in Autorizzazione calendario.
Per informazioni su come impostare i valori start
e end
, vedere Utilizzo di date e ore del calendario.
Di seguito è riportato un esempio di utilizzo di questo componente. In questo esempio, un'entità sacchetto composito viene utilizzata per ottenere la data, l'ora di inizio e l'ora di fine.
####################
# Update Meeting
####################
updateMeeting:
component: "System.SetVariable"
properties:
variable: "stateAfterList"
value: "updateMeeting.performGetDetails"
transitions:
next: "updateMeeting.setListType"
updateMeeting.setListType:
component: "System.SetVariable"
properties:
variable: "listType"
# Only show updateable meetings
value: "UPDATE"
transitions:
next: "updateMeeting.setListPrompt"
updateMeeting.setListPrompt:
component: "System.SetVariable"
properties:
variable: "listPrompt"
value: "to update"
transitions:
next: "listMeetings.commonEntryPoint"
# List meetings common code returns to this state
updateMeeting.performGetDetails:
component: "System.GetCalendarEventDetails"
properties:
eventId: "${eventId}"
eventDetailsVariableName: "eventDetails"
provider: "${system.config.calendarProvider}"
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
transitions:
next: "updateMeeting.checkIfResults"
updateMeeting.checkIfResults:
component: "System.ConditionExists"
properties:
variable: "eventDetails"
transitions:
actions:
exists: "updateMeeting.printEventDetails"
notexists: "globalErrorHandler"
updateMeeting.printEventDetails:
component: "System.Output"
properties:
keepTurn: true
text: |
You selected:
${eventDetails.value.subject}
${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['MMM d']}
${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}-${(eventDetails.value.end?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}
Location: ${eventDetails.value.location}
Attendees: ${eventDetails.value.attendees?join(', ')}
transitions:
next: "updateMeeting.updateTime"
# Change meeting time
updateMeeting.updateTime:
component: "System.ResolveEntities"
properties:
variable: "meetingSlot"
nlpResultVariable: "iResult"
maxPrompts: 5
cancelPolicy: "immediate"
transitions:
actions:
cancel: "allDone"
next: "updateMeeting.setStart"
updateMeeting.setStart:
component: "System.SetVariable"
properties:
variable: "start"
value: "${meetingSlot.value.date.date?number_to_date?string['yyyy-MM-dd']}T${meetingSlot.value.startTime.date?number_to_date?string['HH:mm:ss']}"
transitions:
next: "updateMeeting.setEnd"
updateMeeting.setEnd:
component: "System.SetVariable"
properties:
variable: "end"
value: "${meetingSlot.value.date.date?number_to_date?string['yyyy-MM-dd']}T${meetingSlot.value.endTime.date?number_to_date?string['HH:mm:ss']}"
transitions:
next: "updateMeeting.updateTime.performUpdate"
updateMeeting.updateTime.performUpdate:
component: "System.UpdateCalendarEvent"
properties:
eventId: "${eventId}"
start: "${start}"
end: "${end}"
provider: "${system.config.calendarProvider}"
#timezone: "${system.config.timezoneID}"
timezoneOffset: ${timezoneOffset?number * -1}
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
transitions:
next: "updateMeeting.printSuccessMessage"
error: "handleUpdateCalendarError"
...
############################
# List Meetings Shared Code
############################
listMeetings.commonEntryPoint:
component: "System.SetVariable"
properties:
variable: "inputDate"
value: "${iResult.value.entityMatches['DATE'][0]}"
transitions:
next: "listMeetings.setDate"
listMeetings.setDate:
component: "System.SetVariable"
properties:
variable: "start"
value: "${inputDate.value?has_content?then(inputDate.value.date?number_to_date?string['yyyy-MM-dd'], (.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd'])}T00:00:00"
transitions:
next: "listMeetings.clearInputDate"
listMeetings.clearInputDate:
component: "System.ResetVariables"
properties:
variableList: "inputDate"
transitions:
next: "listMeetings.filterByAttendees"
listMeetings.filterByAttendees:
component: "System.CommonResponse"
properties:
processUserMessage: true
metadata:
responseItems:
- type: "text"
text: "Do you want to list only meetings with a particular attendee?"
name: "confirmFilter"
separateBubbles: true
actions:
- label: "Yes"
type: "postback"
keyword: "yes"
payload:
action: "yes"
name: "Yes"
- label: "No"
keyword: "no"
type: "postback"
payload:
action: "no"
name: "No"
transitions:
next: "intent"
actions:
yes: "listMeetings.resolveAttendeesFilter"
no: "listMeetings.clearAttendeesFilter"
textReceived: "intent"
# clear filter
listMeetings.clearAttendeesFilter:
component: "System.ResetVariables"
properties:
variableList: "attendees"
transitions:
next: "listMeetings.performList"
# resolve filter
listMeetings.resolveAttendeesFilter:
component: "System.CommonResponse"
properties:
keepTurn: true
processUserMessage: true
variable: "attendees"
nlpResultVariable: "iResult"
metadata:
responseItems:
- type: "text"
text: "Who is the attendee?"
transitions:
next: "listMeetings.performAttendeesList"
actions:
textReceived: "listMeetings.performAttendeesList"
# perform attendees list
listMeetings.performAttendeesList:
component: "System.SelectCalendarEvent"
properties:
listType: "${listType}"
start: "${start}"
attendees: "${attendees}"
prompt: "Choose the ${start?datetime.iso?long?number_to_date?string['MMM d']} meeting ${listPrompt}:"
eventIdVariableName: "eventId"
provider: "${system.config.calendarProvider}"
timezoneOffset: ${timezoneOffset?number * -1}
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
transitions:
actions:
found: "${stateAfterList}"
notfound: "listMeetings.printNotFoundMessage"
next: "globalErrorHandler"
# perform list
listMeetings.performList:
component: "System.SelectCalendarEvent"
properties:
listType: "${listType}"
start: "${start}"
prompt: "Choose the ${start?datetime.iso?long?number_to_date?string['MMM d']} meeting ${listPrompt}:"
eventIdVariableName: "eventId"
provider: "${system.config.calendarProvider}"
timezoneOffset: ${timezoneOffset?number * -1}
calendarOwner: "${user.authenticatedUser}"
calendarId: "${user.authenticatedUser}"
credential: "${user.accessToken}"
transitions:
actions:
found: "${stateAfterList}"
notfound: "listMeetings.printNotFoundMessage"
next: "globalErrorHandler"
listMeetings.printNotFoundMessage:
component: "System.Output"
properties:
text: "There are no meetings on ${start?datetime.iso?long?number_to_date?string['MMM d']}"
transitions:
return: "doneListMeetings"
...
Questo componente è supportato in Oracle Digital Assistant versione 21.02 e successive.
Proprietà | descrizione; | Richiesto? |
---|---|---|
provider |
Il fornitore del calendario. I valori consentiti sono Google e Outlook .
|
Sì |
calendarOwner |
L'ID utente del proprietario del calendario. Deve essere un ID account valido per il provider di calendario, ad esempio il valore della variabile identificata dalla proprietà authenticatedUserVariable del componente System.OAuth2AccountLink , impostata quando l'utente esegue l'autenticazione.
|
Sì |
calendarId |
Nome del calendario. Per il calendario predefinito dell'utente, impostare lo stesso valore della proprietà calendarOwner .
|
Sì |
credential |
Token di accesso del provider. Si tratta del valore della variabile identificata dalla proprietà accessTokenVariableName del componente System.OAuth2AccountLink , impostata quando l'utente esegue l'autenticazione.
|
Sì |
eventId |
ID dell'evento da aggiornare. È possibile utilizzare System.ListCalendarEvents o System.SelectCalendarEvent per ottenere un eventId .
|
Sì |
start |
La nuova data e ora di inizio nel formato yyyy-MM-dd'T'HH:mm:ss Ad esempio, 2021-02-26T09:55:00 .
|
No |
end |
La nuova data e ora di fine nel formato yyyy-MM-dd'T'HH:mm:ss Ad esempio, 2021-02-26T09:55:00 .
|
No |
subject |
Il nuovo tema della riunione. | Sì |
attendees |
Lista separata da virgole di partecipanti. Questo elenco sostituisce l'elenco precedente. Tenere presente che il fornitore del calendario non può inviare una notifica a un partecipante se l'ID non è un ID account valido per tale fornitore. | Sì |
timezoneOffset |
Il periodo di tempo in millisecondi da aggiungere al tempo universale (UTC) per ottenere l'ora standard nel fuso orario dell'utente. Ad esempio, se il fuso orario locale è UTC-2, timezoneOffset è -7200000 . Il valore predefinito è zero.
Nota
È possibile derivare la proprietà timezoneOffset per l'utente corrente in base al valore della variabile di contesto utente profile.timezoneOffset . In tal caso, tuttavia, è necessario moltiplicare profile.timezoneOffset per -1.
È possibile specificare |
No |
timezone |
ID del fuso orario locale identificato da https://www.iana.org/time-zones. Anche denominato nome del database del fuso orario. Ad esempio: America/Los_Angeles . L'impostazione predefinita è UTC . È possibile specificare timezoneOffset o timezone , ma non entrambi.
|
No |
Piè di pagina

Questo piè di pagina viene visualizzato su tutti i canali, anche quelli che supportano pulsanti come Facebook. È tuttavia possibile configurare il rendering specifico del canale per il piè di pagina. A questo scopo:
-
Definire la variabile
autoNumberPostbackActions
utilizzando l'espressionesystem.message
.setAutoNumbering: component: "System.SetVariable" properties: variable: "autoNumberPostbackActions" value: "${(system.channelType=='facebook')?then('true','false')}"
-
Definire la definizione
footerText
con una direttiva FreeMarkerif
di Apache per visualizzare o nascondere il piè di pagina in base al tipo di canale.footerText: <#if autoNumberPostbackActions.value>"Make your choice by entering the menu option number."</#if>
In Facebook, System.CommonResponse visualizza il testo del piè di pagina nella propria bolla di testo visualizzata poco prima delle azioni globali (le risposte rapide). Il piè di pagina non può essere visualizzato dopo queste azioni, poiché richiede una bolla di testo del secondo piè di pagina che causa la scomparsa delle azioni.
Proprietà Traduci
translate
che sostituisce l'impostazione della variabile autoTranslate
globale:
-
Se si imposta la variabile
autoTranslate
sufalse
(impostazione predefinita), nel componente non viene eseguita alcuna traduzione automatica a meno che non si imposti la proprietàtranslate
sutrue
. -
Se si imposta la variabile
autoTranslate
sutrue
, anche la proprietàtranslate
viene impostata in modo implicito sutrue
, il che significa che le stringhe di etichetta, titolo, descrizione, prompt e testo verranno tradotte.
autotranslate
impostandolo su true
, l'impostazione della proprietà translate
di un componente su false
esclude dalla traduzione le stringhe di prompt, titolo, descrizione, etichetta e testo. Al contrario, se non si abilita autotranslate
, ma la proprietà translate
di un componente è impostata su true
, il prompt, il titolo, la descrizione, l'etichetta e la stringa di testo del componente vengono tradotti nella lingua dell'utente rilevata utilizzando il servizio di traduzione configurato. I componenti di input traducono l'input utente in inglese.
autoTranslate è impostato su... | ...e la proprietà di traduzione del componente è impostata su... | ...quindi l'input, il prompt, l'etichetta, il testo, il titolo e la descrizione dell'utente vengono tradotti |
---|---|---|
true |
non impostato | sì |
true |
true |
sì |
true |
false |
no |
false |
non impostato | no |
false |
false |
no |
false |
true |
sì |
I flussi progettati con Visual Flow Designer non dispongono della proprietà
translate
o della variabile di contesto autoTranslate
. Per configurare la traduzione per gli skill utilizzati, utilizzare le proprietà Traduci messaggio di input utente e Traduci messaggio di risposta bot.
System.Feedback
In questo argomento viene descritto l'uso di questo componente in modalità YAML. Per informazioni sull'utilizzo in Visual Flow Designer, vedere Feedback utente.
Il componente System.Feedback
consente di raccogliere i dati di feedback per Insights presentando agli utenti una scala di rating dopo che hanno completato un flusso transazionale. Se si utilizza l'SDK 21.10 o versione successiva, questo componente genera un sistema di classificazione a stelle orizzontale. Se si utilizza un SDK precedente, il componente emette questa scala di valutazione come un semplice elenco che consente agli utenti di toccare il pulsante che corrisponde alla loro valutazione.
Sebbene sia possibile modificare il funzionamento di questo componente utilizzando le proprietà del componente, è possibile modificarne l'aspetto quando si utilizza SDK (versione 21.10 o successiva). Ad esempio, è possibile sostituire le icone a stella predefinite utilizzate per i pulsanti di feedback con un'altra icona.
System.Feedback Proprietà componente
Proprietà | descrizione; |
---|---|
maxRating |
La valutazione massima che un utente può sottomettere. Per impostazione predefinita, il valore massimo è 5 . È possibile modificare questo valore verso il basso.
|
enableTextFeedback |
Un valore booleano che, se impostato su true , consente all'utente di inviare un feedback di testo se il rating è minore o uguale al valore threshold . L'impostazione predefinita di questa proprietà è false (nessun feedback abilitato).
|
threshold |
Valore per la valutazione della transizione tra le azioni above e below . Per impostazione predefinita, la soglia tra feedback positivo e negativo è impostata su 2 per il valore predefinito maxRating , ovvero 5 .
|
footerText |
Il testo visualizzato nella parte inferiore della finestra di dialogo del feedback. |
System.Feedback Transizioni componente
return: "done"
.
Azione | descrizione; |
---|---|
above |
Impostare quando l'input utente è un valore valido superiore al valore threshold .
|
below |
Impostare quando l'input utente è un valore valido uguale o inferiore al valore threshold . ).
|
cancel |
Impostare quando gli utenti rifiutano la valutazione facendo clic su Ignora. |
system.userFeedbackRating
: restituisce la valutazione dell'utente.system.userFeedbackText
: quandoenableTextFeedback
è impostato sutrue
, lo skill può richiedere un feedback quando i rating sono inferiori al valorethreshold
.system.userFeedbackText
restituisce l'input dell'utente (${system.userFeedbackText.value}
).
...
getUserFeedback:
component: "System.Feedback"
properties:
threshold: 2
maxRating: 5
enableTextFeedback: true
transitions:
actions:
above: "positiveFeedback"
below: "negativeFeedback"
cancel: "cancelFeedback"
positiveFeedback:
component: "System.Output"
properties:
text: "Thank you for your rating of ${system.userFeedbackRating.value}."
transitions:
return: "done"
negativeFeedback:
component: "System.Output"
properties:
text: "You gave us a score of ${system.userFeedbackRating.value} and entered ${system.userFeedbackText.value}. We appreciate your feedback."
transitions:
return: "done"
cancelFeedback:
component: "System.Output"
properties:
text: "Feedback canceled."
transitions:
return: "done"
...
System.Text
Questo componente non è più valido e non è più disponibile un modello per esso. In alternativa, è possibile utilizzare uno dei numerosi modelli basati sul componente Risposta comune disponibile nella sezione Messaggistica utente della finestra di dialogo Aggiungi componente.
Il componente System.Text
consente al bot di impostare un contesto o una variabile utente chiedendo all'utente di immettere del testo.
System.Text
, viene richiesto all'utente di immettere del testo. Quando l'utente immette un valore, il motore finestre di dialogo torna a questo stato. Il componente elabora la risposta utente e, se è possibile convertire l'input utente nel tipo di variabile, memorizza il valore nella variabile. Il motore di dialogo passa a un altro stato quando questa variabile ha un valore.
Il motore della finestra di dialogo ignora lo stato
System.Text
della variabile con un valore già presente.
Proprietà | descrizione; | Richiesto? |
---|---|---|
prompt |
Stringa di testo che descrive l'input richiesto dall'utente. È possibile aggiungere in modo dinamico valori utilizzando un'espressione di valore. Ad esempio: Hello ${profile.firstName}, how many pizzas do you want? |
Sì |
variable |
Il nome della variabile, che può essere una variabile utente o una delle variabili dichiarate nel nodo context .
|
Sì |
nlpResultVariable |
Imposta la proprietà variable con un valore entità (quando tale valore entità non è già stato impostato per la variabile di riferimento). È possibile abilitare nlpResultVariable per restituire un valore quando viene definito utilizzando una variabile che contiene i risultati NLP, ad esempio iresult: "nlpresult" utilizzato nei bot di esempio. In questo modo, la proprietà nlpResultVariable può comunque popolare il valore quando è nullo se trova un'entità risolta che corrisponde a quella a cui fa riferimento la variabile. La finestra di dialogo passa allo stato successivo quando il valore nlpResultVariable viene impostato. È possibile utilizzare questa proprietà al posto del componente System.SetVariable.
|
No |
maxPrompts |
Numero di volte in cui il componente richiede all'utente un input valido. Vedere Limitazione del numero di prompt utente. | No |
translate |
Utilizzare questa proprietà per sostituire il valore booleano impostato per la variabile di contesto autotranslate . Se questa variabile non è stata impostata oppure se è stata impostata su false , è possibile impostare questa proprietà su true per abilitare la traduzione automatica solo per questo componente. Se si imposta la variabile autotranslation su true , è possibile impostare questa proprietà su false per escludere questo componente dalla traduzione automatica. Vedere Translation Services in Skills.
|
No |
Per i tipi di azione predefiniti che è possibile utilizzare con questo componente, vedere Transizioni per componenti di risposta comuni.
Come usare il componente System.Text
In questo esempio, la variabile type
contiene i valori previsti dall'entità PizzaType
, ad esempio cheese
, Veggie Lover
e Hawaiian
. Quando queste informazioni non sono presenti nell'input utente, il bot può comunque ottenerle perché il relativo flusso di finestre di dialogo passa allo stato type
, il cui componente System.Text
richiede loro di indicare in modo esplicito ciò che desiderano. Tenere presente che anche a questo punto, l'input utente deve ancora essere risolto nell'entità PizzaType
per passare allo stato successivo.
main: true
name: "PizzaBot"
parameters:
age: 18
context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
...
type:
component: "System.Text"
properties:
prompt: "What Type of Pizza do you want?"
variable: "type"
transitions:
...
System.List
Questo componente non è più valido e non è più disponibile un modello per esso. In alternativa, è possibile utilizzare uno dei numerosi modelli basati sul componente Risposta comune disponibile nella sezione Messaggistica utente della finestra di dialogo Aggiungi componente.
Il componente System.List
è progettato per generare un elenco di opzioni. A seconda che sia stato impostato o addirittura definito un valore di variabile per questo componente, la navigazione dal componente può essere attivata dalla scelta dell'utente o dal set di valori per l'utente o la variabile di contesto.
Proprietà | descrizione; | Richiesto? |
---|---|---|
options |
È possibile specificare il valore options utilizzando stringhe di testo separate da virgole, espressioni FreeMarker Apache e come lista di mappe. Le opzioni Proprietà ed Elenchi azioni forniscono entrambi esempi di quest'ultimo approccio.
|
Sì |
prompt |
La stringa di testo che richiede l'utente. | Sì |
variable |
Nome della variabile il cui valore viene popolato dall'input utente. Il motore finestre di dialogo ignora questo stato se il valore della variabile è già stato impostato e non restituisce le opzioni di elenco per l'utente. | No |
nlpResultVariable |
Imposta la proprietà variable con un valore entità (quando tale valore entità non è già stato impostato per la variabile di riferimento). È possibile abilitare nlpResultVariable per restituire un valore quando lo si definisce con la variabile che contiene i risultati NLP, ad esempio iResult: "nlpresult" utilizzato nelle nostre competenze di esempio. In questo modo, la proprietà nlpResultVariable può comunque popolare il valore quando è nullo se trova un'entità risolta che corrisponde a quella a cui fa riferimento la variabile. La finestra di dialogo passa allo stato successivo quando il valore nlpResultVariable viene impostato. È possibile utilizzare questa proprietà al posto del componente System.SetVariable. In Elenchi azioni viene descritto come utilizzare le proprietà variable e nlpResultVariable per modificare il funzionamento della visualizzazione della lista.
|
No: utilizzare questa proprietà quando la proprietà della variabile assegna un nome a una variabile di tipo entità. |
maxPrompts |
Numero di volte in cui il componente richiede all'utente un input valido. Vedere Limitazione del numero di prompt utente. | No |
translate |
Utilizzare questa proprietà per sostituire il valore booleano impostato per la variabile di contesto autotranslate . Se questa variabile non è stata impostata oppure se è stata impostata su false , è possibile impostare questa proprietà su true per abilitare la traduzione automatica solo per questo componente. Se si imposta la variabile autotranslation su true , è possibile impostare questa proprietà su false per escludere questo componente dalla traduzione automatica. Vedere Translation Services in Skills.
|
No |
autoNumberPostbackActions |
Quando è impostata su true , questa opzione antepone i numeri alle opzioni. Anche se questa opzione non è stata impostata su true , la numerazione automatica può essere applicata alle voci dell'elenco quando la configurazione di Abilita numerazione automatica su azioni postback dell'assistente digitale è impostata su true . La numerazione automatica specifica del canale può essere applicata a qualsiasi skill registrato a un assistente digitale:${(system.channelType=='twilio')?then('true','false')} |
No |
footerText |
Migliora 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 |
Elenchi valori
È possibile utilizzare il componente System.List
per restituire un valore che soddisfa una variabile di contesto definita come primitiva (ad esempio greeting: "string"
nel modello di flusso della finestra di dialogo) o come entità, come mostrato nello snippet seguente. In questo flusso di dialogo, la definizione options: "Thick,Thin,Stuffed,Pan"
restituisce un valore che corrisponde alla variabile crust
. La proprietà options
definita per la dimensione è un'espressione di valore (${size.type.enumValues}
) che restituisce i valori degli elenchi Grande, Medio, Piccolo e Personale come opzioni. Vedere Apache FreeMarker Template Language Syntax.
iResult
della proprietà nlpResultVariable
consenta al componente di impostare i valori di entità per le proprietà variable
per gli stati crust
e size
quando questi valori non sono stati impostati in precedenza. Analogamente al componente Text
, il componente System.List
non richiede transizioni.
main: true
name: "PizzaBot"
...
context:
variables:
size: "PizzaSize"
crust: "PizzaCrust"
iResult: "nlpresult"
...
states:
...
crust:
component: "System.List"
properties:
options: "Thick,Thin,Stuffed,Pan"
prompt: "What crust do you want for your pizza?"
variable: "crust"
main: true
name: "PizzaBot"
...
context:
variables:
size: "PizzaSize"
crust: "PizzaCrust"
iResult: "nlpresult"
...
states:
...
crust:
component: "System.List"
properties:
options: "Thick,Thin,Stuffed,Pan"
prompt: "What crust do you want for your pizza?"
variable: "crust"
nlpResultVariable: "iresult"
transitions:
next: "size"
size:
component: "System.List"
properties:
options: "${size.type.enumValues}"
prompt: "What size Pizza do you want?"
variable: "size"
nlpResultVariable: "iresult"
transitions:
...

Gli utenti non sono limitati alle opzioni visualizzate nell'elenco. Possono risolvere l'entità inserendo una parola che l'entità riconosce, come un sinonimo. Anziché scegliere tra le opzioni relative alle dimensioni della pizza nell'elenco, ad esempio, gli utenti possono immettere grande, sinonimo definito per l'opzione grande dell'entità
PizzaSize
. Vedere Entità personalizzate.
Le opzioni Proprietà
options
utilizzando uno dei metodi indicati di seguito.
-
Una lista di mappe: sebbene sia possibile impostare la proprietà options come stringa di testo o espressione di valore, è anche possibile configurare la proprietà
options
come lista di mappe. Ognuno ha una proprietàlabel
, una proprietàvalue
e una proprietàkeyword
facoltativa. È possibile localizzare le opzioni di elenco quando si segue questo approccio poiché, come indicato nell'esempio riportato di seguito, è possibile fare riferimento a un bundle di risorse. Per ulteriori informazioni sull'utilizzo della notazione punto, vedere Bundle di risorse per skill. Quando gli utenti immettono un valore che corrisponde a uno dei valori specificati nella proprietàkeyword
, il bot reagisce allo stesso modo in cui lo farebbe se l'utente toccasse l'opzione elenco stessa.askPizzaSize: component: "System.List" properties: prompt: What size do you want?" options: - value: "small" label: "${rb.pizza_size_small}" keyword: "1" - value: "medium" label: "${rb.pizza_size_medium}" keyword: "2" - value: "large" label: "${rb.pizza_size_large}" keyword: "3" variable: "pizzaSize"
-
Stringa di testo di opzioni separate da virgole, come
"small, medium, large"
, nel seguente snippet. Impossibile aggiungere le proprietàlabel
evalue
quando si definisceoptions
come stringa.askPizzaSize: component: "System.List" properties: prompt: "What size do you want?" options: "small, medium, large" variable: "pizzaSize"
-
Un'espressione di valore FreeMarker di Apache che esegue il loop su una lista di stringhe o su una lista di mappe, in cui ogni mappa deve contenere sia le proprietà
label
chevalue
e, facoltativamente, una proprietàkeyword
.askPizzaSize: component: "System.List" properties: prompt: "What size do you want?" options: "${pizzaSize.value.enumValues}" variable: "pizzaSize"
Elenchi azioni
System.Switch
per la navigazione condizionale, è possibile utilizzare le liste di azioni. Le proprietà facoltative variable
e nlpResultVariable
di System.List
impostano il comportamento di visualizzazione della lista e la transizione successiva in base all'input dell'utente.
- Quando non si configurano queste proprietà, l'azione di transizione si basa sull'opzione selezionata dall'utente skill:
showMenu: component: "System.List" properties: prompt: "Hello, this is our menu today" options: - value: "pasta" label: "Pasta" - value: "pizza" label: "Pizza" transitions: actions: pasta: "orderPasta" pizza: "orderPizza"
- Quando si aggiungono le proprietà
variable
enlpResultVariable
, la visualizzazione della lista viene ignorata quando viene trovata una corrispondenza con l'input dell'utente. Nello snippet seguente, la lista di opzioni viene ignorata quandonlpResultVariable
imposta la variabilesize
dall'input utente come Voglio ordinare una pizza di grandi dimensioni. Viene quindi attivata la transizione appropriata al valore.getPizzaSize: component: "System.List" properties: prompt: "What size of pizza" variable: "size" nlpResultVariable: "iResult" options: - label: "Small" value: "Small" - label: "Large" value: "Large" transitions: actions: Large: "Large" Small: "Small"
System.Output
System.Output
per generare un messaggio che non richiede una risposta da parte dell'utente o che non richiede la propria competenza per elaborare la risposta dell'utente.
Questo componente non è più valido e non è più disponibile un modello per esso. In alternativa, è possibile utilizzare uno dei numerosi modelli basati su
System.CommonResponse
disponibili nella sezione Messaggistica utente della finestra di dialogo Aggiungi componente.
Proprietà | descrizione; | Richiesto? |
---|---|---|
text |
Una stringa di testo | Sì - questo campo richiede un valore. |
keepTurn |
Valore booleano per la rinuncia (false ) o il mantenimento del controllo dello skill del flusso della finestra di dialogo (true ). Utilizzare keepTurn: true quando si desidera generare una sequenza ininterrotta di messaggi di skill in cui non vengono accettate interiezioni dall'utente.
|
No |
translate |
Utilizzare questa proprietà per sostituire il valore booleano impostato per la variabile di contesto autotranslate . Se la variabile non è stata impostata oppure se è stata impostata su false , è possibile impostare questa proprietà su true per abilitare la traduzione automatica solo per questo componente. Se si imposta la variabile autotranslation su true , è possibile impostare questa proprietà su false per escludere questo componente dalla traduzione automatica. Vedere Translation Services in Skills.
|
No |
Come usare il componente System.Output
System.Output
richiede la definizione di stringa per la proprietà text
. Come illustrato nel seguente esempio di messaggio di conferma, è possibile aggiungere espressioni di valore a questa stringa.done:
component: "System.Output"
properties:
text: "Your ${size.value}, ${type.value} pizza with ${crust.value} crust is on its way. Thank you for your order."
Per impostazione predefinita, il motore di dialogo attende l'input dell'utente dopo l'output di un'istruzione dallo skill. Se si esegue l'override di questo comportamento, aggiungere la proprietà keepTurn
facoltativa e impostarla su true
per indirizzare il motore di dialogo allo stato successivo definito dalla proprietà transitions
. Quando non viene definita alcuna transizione, il motore di dialogo passa allo stato successivo nella sequenza.
wait:
component: "System.Output"
properties:
text: "Please wait, we're reviewing your order"
keepTurn: true
transitions:
next: "ready"
waitmore:
component: "System.Output"
properties:
text: "Almost done..."
keepTurn: true
transitions:
next: "done"
done:
component: "System.Output"
properties:
text: "Your ${size.value}, ${type.value} pizza with ${crust.value} crust is on its way. Thank you for your order."
transitions:
return: "done"
Definizione delle espressioni di valore per il componente System.Output
text
. Ad esempio, lo snippet seguente utilizza espressioni diverse per l'output del testo per una conferma dell'ordine (dimensione e tipo della pizza).confirmation:
component: "System.Output"
properties:
text: "Your ${size.value} ${type.value} pizza is on its way."
transitions:
return: "done"
Ogni espressione deve sempre restituire un valore. Se anche un'espressione restituisce un valore nullo, lo skill restituisce testo non elaborato per ogni espressione nella stringa, lasciando gli utenti con un output simile al seguente: Your ${size.value} ${type.value} is on its way.
È tutto o niente. Per assicurarsi che la competenza restituisca sempre testo comprensibile agli utenti, sostituire un valore predefinito con un valore nullo utilizzando l'operatore del valore predefinito Apache Freemarker: ${size.value!\”piping\”} ${type.value!\”hot\”}
. Le virgolette indicano che il valore predefinito non è un riferimento variabile, ma è invece il valore costante previsto dall'operatore. Ad esempio:text: "Your ${size.value!\"piping\"} ${type.value!\"hot\"} pizza is on its way."
Utilizzare sempre le virgolette (
\"...\"
) che racchiudono il valore predefinito quando si utilizza l'operatore Freemarker. La sintassi OBotML del flusso della finestra di dialogo non sarà valida a meno che non si utilizzi questa sequenza di escape ogni volta che si definisce un'operazione di valore predefinito o si imposti il testo di output con le virgolette doppie. Ad esempio, la seguente definizione di componente System.Output
consente agli utenti di leggere il messaggio come Si è detto "Annulla questo ordine".confirmCancel:
component: "System.Output"
properties:
text: "You said, \"Cancel this order.\""
transitions:
return: "cancelOrder"
Conversione del testo di output
System.Output
in base al singolo componente utilizzando la proprietà translate
. Impostandolo su false
, come nel seguente snippet, i componenti restituiscono il testo così com'è, senza traduzione. Se si imposta questa proprietà su true
, è possibile abilitare la traduzione automatica quando la variabile autoTranslate
è impostata su false
o non è definita. Vedere Translation Services in Skills.
In genere, la variabile
autoTranslate
non viene impostata su true
se si sta traducendo testo con bundle di risorse. Non raccomandiamo questo approccio.
setAutoTranslate:
component: "System.SetVariable"
properties:
variable: "autoTranslate"
value: "true"
transitions:
...
...
pizzaType:
component: "System.Output"
properties:
text: "What type of pizza do you want?"
translate: false
transitions:
...