Componenti interfaccia utente

Questi sono i componenti disponibili nella categoria Interfaccia utente dell'editor di flusso della finestra di dialogo basata su YAML.

Utilizzare i seguenti componenti per visualizzare testo e interfaccia con l'utente:

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.

Nota

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.

La modalità di creazione dei messaggi basati su questo componente dipende dalla modalità di dialogo dello skill. In modalità YAML è possibile modificare i modelli di stato del componente OBotML. Il processo è semplificato in modalità Visual, in cui è possibile creare questi messaggi Rich UI semplicemente aggiornando i campi e i metadati degli elementi di risposta nella finestra delle proprietà dei modelli di messaggistica utente basati su componenti di risposta comune. Per le competenze basate su YAML, è possibile vedere un esempio di utilizzo del 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).

Nota

È 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.
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 true quando si imposta una posizione.

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 System.CommonResponse passa all'azione cancel. Vedere Limitazione del numero di prompt utente.

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:
  • immediate: immediatamente dopo il raggiungimento del valore impostato per i numero massimo di tentativi di input utente dell'elemento del carrello. Se questo valore non è stato impostato, il componente avvia questa transizione quando viene raggiunto il valore maxPrompts a livello di componente.

  • lastEntity: quando l'ultima entità del sacchetto viene abbinata al valore.

Questa proprietà viene ignorata se è stato registrato un handler di eventi entità con un handler 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

I componenti di risposta comune utilizzano le seguenti transizioni.
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

Questi componenti 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

Nota

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.
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.

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.
  • false: esegue l'override della variabile autoNumberPostbackActions globale.

  • true

    Prefissa il pulsante Annulla con un numero di sequenza che, una volta immesso, esegue il payload di postback del pulsante come se l'utente avesse premuto il pulsante anziché immetterne l'equivalente numerico.
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
  • cancel: assegna un nome allo stato che gestisce lo scenario "user taps cancel".
  • textReceived: assegna un nome allo stato quando gli utenti immettono testo anziché toccare uno dei pulsanti.

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.

Nota

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.
subject Il testo dell'oggetto del caso.
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 email non viene fornito, è necessario fornire sia firstName che lastName.

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.

Nota

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 Icona Bundle risorse, selezionare la scheda Configurazione e modificare il messaggio per la chiave IntelligentAdvisor - <property name>. Se si utilizza il bundle di risorse dello skill per modificare l'impostazione predefinita, non è necessario includere la proprietà etichetta nel componente a meno che non si desideri eseguire l'override dell'impostazione predefinita.

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.
doneLabel Testo digitato dagli utenti per indicare che il caricamento di un file è stato completato.

L'impostazione predefinita è /done.

No
endLabel Testo da visualizzare nella chat alla fine dell'intervista.

L'impostazione predefinita è Interview ended. È possibile impostare la proprietà su "" per impedire la visualizzazione del testo.

No
exitLabel Testo digitato dagli utenti per indicare di voler uscire dall'intervista.

L'impostazione predefinita è /exit.

No
explanationAskLabel La domanda da porre quando showExplanation è impostato su ask.

L'impostazione predefinita è Do you want to see the explanation?

No
hideScreenTitle Indica se nascondere tutti i titoli delle schermate nell'intervista.

L'impostazione predefinita è false, ovvero è necessario visualizzare i titoli delle schermate.

No
intelligentAdvisorService Il nome del servizio Intelligent Advisor configurato in Impostazioni > Servizi aggiuntivi.
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à locale del componente. Se non esiste una distribuzione dell'hub per le impostazioni nazionali specificate, il componente utilizza le impostazioni nazionali predefinite associate alla distribuzione.

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 profile.locale. Se profile.locale non dispone di un valore, viene utilizzata la versione locale del canale.

No
noLabel Etichetta da utilizzare per rappresentare i valori booleani FALSE.

L'impostazione predefinita è No.

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 è /reset.

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 ask, utilizzare la proprietà explanationAskLabel per specificare il testo da richiedere se l'utente desidera visualizzare la spiegazione.

L'impostazione predefinita è never.

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 è Uncertain.

No
undoLabel Testo digitato dagli utenti per indicare di voler tornare alla domanda precedente.

L'impostazione predefinita è /back.

No
yesLabel Etichetta da utilizzare per rappresentare i valori booleani TRUE.

L'impostazione predefinita è Yes.

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

Nota

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 Icona Bundle risorse, selezionare la scheda Configurazione e modificare il messaggio per la chiave KnowledgeSearch - <property name>. Se si utilizza il bundle di risorse dello skill per modificare l'impostazione predefinita, non è necessario includere la proprietà nel componente a meno che non si desideri sostituire l'impostazione predefinita.
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 2.

L'impostazione predefinita è Download.

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 noResult.

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 ${r""}, il pulsante di collegamento dei risultati non viene visualizzato e viene restituito il testo completo. Questo non è consigliato se si dispone di articoli molto lunghi che sarebbero difficili da leggere in un widget di abilità di dimensioni standard.

No
resultSizeLimit

Il numero massimo di risultati da visualizzare.

L'impostazione predefinita è 10.

No
resultVersion

Solo Oracle B2C Service: la versione preferita da restituire quando sono presenti più versioni per un risultato.

È possibile impostare questa proprietà su Answer o Special Response.

È possibile utilizzare risposte speciali per visualizzare l'output specifico per le conversazioni in chat anziché per le pagine Web.

La versione predefinita è Answer. L'impostazione predefinita potrebbe cambiare in una release successiva.

No
resultVersionExclusive

Solo Oracle B2C Service: specifica se devono essere visualizzati solo i risultati disponibili nella versione preferita.

Quando si utilizza false, include innanzitutto tutte le risposte corrispondenti disponibili con la versione preferita (resultVersion). Se il numero di risposte incluse è inferiore al limite, continua a includere le risposte nella versione non preferita fino al raggiungimento del limite.

L'impostazione predefinita è false.

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 ${r""}.

No
searchServiceName Nome dell'integrazione della ricerca knowledge configurato in Impostazioni.
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.

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 system.state.<state-name>.serverError.message.

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.

Segue la descrizione dell'immagine kf-assoc-intent-term.png
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.

Nota

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 Icona Bundle risorse, selezionare la scheda Configurazione e modificare il messaggio per la chiave AgentTransfer - <property name>. Se si utilizza il bundle di risorse dello skill per modificare il messaggio predefinito, non è necessario includere la proprietà del messaggio nel componente a meno che non si desideri eseguire l'override dell'impostazione predefinita.
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.
  • agentsAreRequestingNewEngagements: (predefinito) per gli agenti di Oracle B2C Service che devono eseguire il pull delle chat (richiedere nuovi impegni), si tratta del set di condizioni più restrittivo e l'utente non deve attendere troppo tempo prima di parlare con un agente. Lo skill tenta di trasferire la conversazione solo se sono presenti agenti che hanno richiesto nuovi impegni. In tutti gli altri casi, questa opzione ha lo stesso comportamento di agentSessionsAreAvailable. Non utilizzare questa opzione forOracle Chat del servizio Fusion, poiché il totale degli agenti di Oracle Fusion Service che richiedono nuovi impegni è sempre pari a 0.
  • agentSessionsAreAvailable: la competenza tenta di trasferire la conversazione se uno qualsiasi degli agenti disponibili non ha raggiunto il numero massimo di chat che possono avere contemporaneamente. L'utente potrebbe dover attendere se gli agenti sono coinvolti in conversazioni di lunga durata o stanno eseguendo un follow-up post-chat.
  • agentsAreAvailable: la competenza tenta di trasferire la conversazione se sono presenti agenti online, indipendentemente dal fatto che abbiano raggiunto il numero massimo di chat o richiedano nuovi impegni. Con questa opzione, gli utenti possono avere lunghe attese.

Se le condizioni specificate non vengono soddisfatte, viene eseguita l'azione rejected.

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 rejected si basa sul tempo di attesa stimato e non sul tempo di attesa effettivo. Dopo il trasferimento della conversazione, l'assistente digitale non ha il controllo sulla conversazione, né ha accesso alle informazioni su di essa. Pertanto, è possibile che il tempo di attesa effettivo superi il tempo di attesa stimato.

No
rejectedMessage Il messaggio visualizzato agli utenti ogni volta che si verifica una delle condizioni riportate di seguito.
  • Le condizioni allowTransferIf non sono state soddisfatte.
  • Il tempo di attesa stimato supera maxWaitSeconds.
  • Il numero di impegni nella coda supera maxEngagementsInQueue.
L'impostazione predefinita è 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 return. Ad esempio, è possibile passare a uno stato che restituisce una stringa (non visibile dall'utente) o impostare una variabile.

    transitions:
      actions:
        accepted: "reset"
        rejected: "handleRejected"
        error: "offerMoreHelp"
      next: "reset"
rejected La transizione rejected viene impostata quando si verifica una delle condizioni riportate di seguito.
  • Le condizioni allowTransferIf non sono state soddisfatte.
  • Il tempo di attesa stimato supera maxWaitSeconds
  • Il numero di impegni nella coda supera maxEngagementsInQueue.
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'esempio doTransfer, 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.

Nota

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.
  • agentsAreRequestingNewEngagements: (impostazione predefinita) per gli agenti B2C che devono eseguire il pull delle chat (richiedere nuovi impegni), è necessario che gli agenti abbiano estratto le chat. In tutti gli altri casi, questa opzione ha lo stesso comportamento di agentSessionsAreAvailable.
  • agentSessionsAreAvailable: richiede che gli agenti richiedano le chat.
  • agentsAreAvailable: richiede che almeno un agente sia attivo, indipendentemente dal fatto che abbia raggiunto il numero massimo di chat o richieda nuovi impegni.

Se le condizioni specificate non vengono soddisfatte, viene eseguita l'azione conditionsNotMet.

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 conditionsNotMet si basa sul tempo di attesa stimato e non sul tempo di attesa effettivo.

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.
  • È fuori dall'orario di lavoro.
  • Le condizioni allowTransferIf non sono state soddisfatte.
  • Il tempo di attesa stimato supera maxWaitSeconds
  • Il numero di impegni nella coda supera maxEngagementsInQueue.
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 Icona Bundle risorse, selezionare la scheda Configurazione e modificare il messaggio per la chiave AgentInitiation - <property name>. Se si utilizza il bundle di risorse dello skill per modificare il messaggio predefinito, non è necessario includere la proprietà del messaggio nel componente a meno che non si desideri eseguire l'override dell'impostazione predefinita.
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.
Here are the available actions that you can send to transfer the conversation
back to the bot. Prepend the action with a forward slash (for example, /actionName).
/OrderPizza : Order Pizza : Order a pizza.
/ShowMenu : Show Menu : Show order options.

I nomi delle azioni devono corrispondere alle proprietà actions del System.AgentConversation. Ad esempio, nello stato agentInitiation seguente, le voci ShowMenu e OrderPizza nella proprietà agentActions corrispondono alle azioni definite per lo stato agentConversation:

  agentInitiation:
    component: "System.AgentInitiation"
    ...
    properties:
      agentChannel: "ServiceCloudIntegration"
      agentActions:
      - action: "OrderPizza"
        label: "Order Pizza"
        description: "Order a pizza."
      - action: "ShowMenu"
        label: "Show Menu"
        description: "Show order options. "
      …
  agentConversation:
    component: "System.AgentConversation"
    ...
    transitions:
      next: "terminatedWithoutAction"
      actions:
        ShowMenu: "ShowMenu"
        OrderPizza: "OrderPizza"

È possibile definire gli elementi della lista agentActions in diversi modi:

  • Come elenco di mappe, in cui ogni mappa deve contenere una proprietà azione, una proprietà valore e, facoltativamente, una proprietà descrizione. Ad esempio:
          - action: "action1"
            label: "label1"
            description: "description1"
          - action: "action2" 
            label: "label2"
            description: "description2"
  • Come array JSON, in cui ogni oggetto nell'array deve contenere una proprietà azione, una proprietà valore e, facoltativamente, una proprietà descrizione. Ad esempio:
          [
          {action: "action1",
          label: "label1",
          description: "description1"},
          {action: "action2",
          label: "label2",
          description: "description2"}      
          ]
  • Stringa di valori azione delimitata da virgole. L'etichetta e la descrizione sono uguali al valore dell'azione. Ad esempio:
    "action1, action2"
No
agentActionsMessage Se la proprietà agentActions è impostata, la console dell'agente visualizza questo valore anziché il messaggio predefinito. Ad esempio:

agentActionsMessage: "\nYou can terminate when done or send one of these actions.\n"

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.
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.
  • agentsAreRequestingNewEngagements: si tratta del set di condizioni più restrittivo. Lo skill tenta di trasferire la conversazione solo se ci sono agenti che hanno richiesto nuovi impegni (chat estratte) e sono assegnati alla coda specificata oppure, se il server chat esegue automaticamente il push delle chat agli agenti, ci sono agenti disponibili per ricevere chat, non hanno raggiunto il numero massimo di chat e sono assegnati alla coda specificata. Con questa opzione, l'utente non deve attendere troppo tempo prima di parlare con l'agente.
  • agentSessionsAreAvailable: la competenza tenta di trasferire la conversazione se sono disponibili agenti che non hanno raggiunto il numero massimo di chat e sono assegnati alla coda specificata. L'utente potrebbe dover attendere se gli agenti sono coinvolti in conversazioni di lunga durata o stanno eseguendo un follow-up post-chat.
  • agentsAreAvailable: lo skill tenta di trasferire la conversazione se alla coda specificata sono assegnati agenti in linea, indipendentemente dal fatto che abbiano raggiunto il numero massimo di chat o richiedano nuovi impegni. Con questa opzione, gli utenti possono avere lunghe attese.

Se la condizione specificata non viene soddisfatta, il componente restituisce rejected.

Quando si include questa proprietà, è necessario includere anche la proprietà queueId.

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.
{
  "sessionID": "string", // agent session id

  "completedSurveyID": {
    "id": "int"
  },

  "engagementID": { // survey id
    "id": "int"
  },

  "cancelledSurveyID": {
    "id": "int"
  }
}
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:

rejectedMessaage: "Sorry, no agents are available at this time."

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:

subject: "A customer needs help regarding ${context_variable.value}"

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à allowTransferIf non è presente.

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:

waitingMessage: "You’ve joined the chat session. An agent will be right with you.

No

System.AgentInitiation Transizioni

Il componente 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.
  • Nessun agente disponibile (richiede le proprietà allowTransferIf e queueId)
  • Non rientra nelle ore operative configurate
  • È una vacanza
  • Si è verificato un problema con il server di chat

Tenere presente che se non si imposta allowTransferIf e queueId, l'azione rifiutata non verrà eseguita quando non sono disponibili agenti, ma il trasferimento rimarrà in una condizione di attesa.

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 che interfaceID è 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
Nel nodo di contesto definire una variabile di mappa per la proprietà 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
Nel nodo di contesto definire una variabile di mappa per la proprietà 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
Se si impostano i valori della mappa tramite un componente personalizzato o tramite il flusso della finestra di dialogo, è necessario strutturare l'oggetto mappa. Utilizzare i formati oggetto standard a meno che il canale di integrazione dell'agente non sia stato creato prima della versione 20.1 oppure il canale non si connetta a una versione di Oracle B2C Service precedente a 19A. Ecco un esempio del formato standard:

  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
Infine, aggiungere la proprietà 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.
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 è Chat session error. The reason is {cause}.

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:

exitKeywords: "bye, exit, take care, goodbye, quit"

Il valore predefinito della proprietà è bye, take care, see you, goodbye.

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 conclusionMessage non viene restituito se l'output è expiryMessage.

Il messaggio di scadenza non viene restituito al termine della conversazione perché Service Cloud USER_WAIT_QUEUE_TIMEOUT è stato superato.

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:

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')}."

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 next o, se non esiste una transizione next, allo stato successivo nel flusso.

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 CS_IDLE_TIMEOUT è maggiore o uguale all'impostazione Scadenza sessione per il canale di integrazione agente, questa azione viene attivata quando né l'utente finale né l'agente inviano un messaggio entro il limite di scadenza della sessione. Se CS_IDLE_TIMEOUT è minore dell'impostazione Scadenza sessione per il canale di integrazione agente e non è presente alcuna attività, Oracle B2C Service termina la chat e viene attivata l'azione agentLeft.

Per impostazione predefinita, CS_IDLE_TIMEOUT ha una durata di 10 minuti.

L'azione expired non viene restituita al termine della conversazione perché Service Cloud USER_WAIT_QUEUE_TIMEOUT è stato superato. Considerare la possibilità di impostare questa configurazione su un valore elevato, ad esempio 7200 secondi (2 ore).

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.

  1. Avviare il trasferimento dell'agente attivo.

    1. Aggiungere uno stato per il componente System.AgentInitiation.

    2. 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 componente System.AgentInitiation consente la transizione allo stato successivo, in genere definito per il componente System.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 stato System.AgentInitiation per impedire a tali clienti di ricevere un messaggio ripresa della chat con l'agente fuorviante.
  2. 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 esempio bye. Quando lo skill rileva una di queste parole chiave, il componente System.AgentConversation termina la sessione di live chat e attiva la transizione next.

    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

  1. Se non è già stata definita nel nodo di contesto una variabile di mappa da utilizzare con la proprietà customProperties del componente System.AgentInitiation. Ad esempio:

    context:
      variables:
        greeting: "string"
        name: "string"
        liveChatInfo: "map"
    
  2. 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"
  3. Aggiungere la proprietà customProperties al componente System.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

Nota

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.
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:
${(system.channelType=='twilio')?then('true','false')}
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).
headerText: "<#list system.entityToResolve.value.updatedEntities>I have updated <#items as ent>${ent.description}<#sep> and </#items>. </#list><#list system.entityToResolve.value.outOfOrderMatches>I got <#items as ent>${ent.description}<#sep> and </#items>. </#list>"
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:
  • immediate: subito dopo che sono stati soddisfatti i tentativi maxPrompts assegnati per un'entità nel bag.

  • lastEntity: quando l'ultima entità del sacchetto è stata abbinata a un valore.

Questa proprietà viene ignorata se è stato registrato un handler di eventi entità con un handler maxPromptsReached a livello di elemento o evento.
No

Componenti calendario

Utilizzare questi componenti del calendario per interagire con i calendari di Outlook e Google:

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:

  1. Richiama lo stato definito per l'azione system.authorizedUser nel nodo defaultTransitions.

  2. Chiede all'utente di accedere.

  3. 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 e end 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"
...
Nota

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.
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.
calendarId Nome del calendario. Per il calendario predefinito dell'utente, impostare lo stesso valore della proprietà calendarOwner.
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.
start Data e ora di inizio della riunione nel formato yyyy-MM-dd'T'HH:mm:ss. Ad esempio, 2021-02-26T09:55:00.
end Data e ora di fine della riunione nel formato yyyy-MM-dd'T'HH:mm:ss. Ad esempio, 2021-02-26T09:55:00.
subject Oggetto della riunione.
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.
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 timezoneOffset o timezone, ma non entrambi.

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

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"
...
Nota

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.
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.
calendarId Nome del calendario. Per il calendario predefinito dell'utente, impostare lo stesso valore della proprietà calendarOwner.
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.
eventId ID dell'evento da eliminare. È possibile utilizzare System.ListCalendarEvents o System.SelectCalendarEvent per ottenere un eventId.

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"
Nota

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.
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.
calendarId Nome del calendario. Per il calendario predefinito dell'utente, impostare lo stesso valore della proprietà calendarOwner.
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.
eventId ID dell'evento da recuperare. È possibile utilizzare System.ListCalendarEvents o System.SelectCalendarEvent per ottenere un eventId.
eventDetailsVariableName Nome della variabile di contesto in cui memorizzare i dettagli.

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"      
Nota

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.
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.
calendarId Nome del calendario. Per il calendario predefinito dell'utente, impostare lo stesso valore della proprietà calendarOwner.
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.
listType Indica il tipo di elenco. Deve essere uno dei seguenti:
  • ALL: tutti i tipi di riunioni del proprietario del calendario
  • DELETE: tutte le riunioni che il proprietario del calendario può eliminare
  • UPDATE: tutte le riunioni che il proprietario del calendario può aggiornare
  • INVITED: tutte le riunioni a cui è stato invitato il proprietario del calendario
eventListVariableName Nome della variabile di contesto in cui memorizzare l'elenco di eventi.
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.
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 INVITED, l'impostazione predefinita è 14 giorni dopo la data e l'ora di inizio. Per tutti gli altri tipi, l'impostazione predefinita è 24 ore dopo la data e l'ora di inizio.

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.
  • ACCEPTED
  • TENTATIVE
  • DECLINED
  • PENDING

L'impostazione predefinita è PENDING,TENTATIVE, che restituisce solo gli inviti che sono in attesa di una risposta o che sono stati accettati provvisoriamente.

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 timezoneOffset o timezone, ma non entrambi.

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"
  ...

Nota

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.
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.
calendarId Nome del calendario. Per il calendario predefinito dell'utente, impostare lo stesso valore della proprietà calendarOwner.
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.
listType Indica il tipo di elenco. Deve essere uno dei seguenti:
  • ALL: tutti i tipi di riunioni del proprietario del calendario
  • DELETE: tutte le riunioni che il proprietario del calendario può eliminare
  • UPDATE: tutte le riunioni che il proprietario del calendario può aggiornare
  • INVITED: Tutte le riunioni che non sono organizzate dal proprietario del calendario ma il proprietario è invitato a partecipare.
eventIdVariableName Nome della variabile di contesto in cui memorizzare l'ID dell'evento.
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.
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 INVITED, l'impostazione predefinita è 14 giorni dopo la data e l'ora di inizio. Per tutti gli altri tipi, l'impostazione predefinita è 24 ore dopo la data e l'ora di inizio.

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.
  • ACCEPTED
  • TENTATIVE
  • DECLINED
  • PENDING

L'impostazione predefinita è PENDING,TENTATIVE, che restituisce solo gli inviti che sono in attesa di una risposta o che sono stati accettati provvisoriamente.

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 Icona Bundle risorse, selezionare la scheda Configurazione e modificare il messaggio per la chiave SelectCalendarEvent - prompt.
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 timezoneOffset o timezone, ma non entrambi.

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"
Nota

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.
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.
calendarId Nome del calendario. Per il calendario predefinito dell'utente, impostare lo stesso valore della proprietà calendarOwner.
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.
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.
response La risposta da inviare. Le risposte consentite sono:
  • ACCEPTED
  • TENTATIVE
  • DECLINED

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"
...
Nota

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.
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.
calendarId Nome del calendario. Per il calendario predefinito dell'utente, impostare lo stesso valore della proprietà calendarOwner.
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.
eventId ID dell'evento da aggiornare. È possibile utilizzare System.ListCalendarEvents o System.SelectCalendarEvent per ottenere un eventId.
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.
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.
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 timezoneOffset o timezone, ma non entrambi.

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

Utilizzare i piè di pagina in System.List e System.CommonResponse per ulteriori indicazioni utente quando il bot viene eseguito su canali di solo testo.
Immagine di runtime del testo del 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'espressione system.message.
    setAutoNumbering:
      component: "System.SetVariable"
      properties:
        variable: "autoNumberPostbackActions" 
        value: "${(system.channelType=='facebook')?then('true','false')}" 
  • Definire la definizione footerText con una direttiva FreeMarker if 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>
Nota

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

L'interfaccia utente e i componenti di input basati su YAML dispongono tutti di una proprietà translate che sostituisce l'impostazione della variabile autoTranslate globale:
  • Se si imposta la variabile autoTranslate su false (impostazione predefinita), nel componente non viene eseguita alcuna traduzione automatica a meno che non si imposti la proprietà translate su true.

  • Se si imposta la variabile autoTranslate su true, anche la proprietà translate viene impostata in modo implicito su true, il che significa che le stringhe di etichetta, titolo, descrizione, prompt e testo verranno tradotte.

Ad esempio, se è stato abilitato 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
true true
true false no
false non impostato no
false false no
false true
Nota

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

Nota

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

Ogni azione di transizione deve assegnare un nome a uno stato nel flusso della finestra di dialogo che termina la conversazione con una transizione 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.
Per i messaggi generati dagli stati di transizione è possibile utilizzare le variabili di sistema indicate di seguito.
  • system.userFeedbackRating: restituisce la valutazione dell'utente.
  • system.userFeedbackText: quando enableTextFeedback è impostato su true, lo skill può richiedere un feedback quando i rating sono inferiori al valore threshold. 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

Nota

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.

Quando il motore delle finestre di dialogo immette per la prima volta uno stato 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.
Nota

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?
variable Il nome della variabile, che può essere una variabile utente o una delle variabili dichiarate nel nodo context.
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

Nota

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.
prompt La stringa di testo che richiede l'utente.
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
Per i tipi di azione predefiniti che è possibile utilizzare con questo componente, vedere Transizioni per componenti di risposta comuni.

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.

In questo esempio viene inoltre illustrato come la definizione 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:
      ...

Componente elenco in una chat attiva.
Nota

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.
Componente elenco con input utente.

Le opzioni Proprietà

È possibile impostare la 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 e value quando si definisce options 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 che value e, facoltativamente, una proprietà keyword.
    askPizzaSize:
      component: "System.List" 
      properties:
        prompt: "What size do you want?"
        options: "${pizzaSize.value.enumValues}"
        variable: "pizzaSize"
Per ulteriori informazioni sulla sintassi, consultare il manuale Apache FreeMarker.

Elenchi azioni

Anziché utilizzare il componente 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 e nlpResultVariable, 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 quando nlpResultVariable imposta la variabile size 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

Utilizzare il componente 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.
Nota

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

Il componente 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

È possibile definire una o più espressioni di valore per la proprietà 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."
Nota

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

È possibile sopprimere o abilitare il testo tradotto automaticamente del componente 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.
Nota

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:
     ...