Benutzeroberflächenkomponenten

Diese Komponenten sind in der Kategorie "Benutzeroberfläche" des YAML-basierten Dialogablaufeditors verfügbar.

Mit diesen Komponenten können Sie Text anzeigen und mit dem Benutzer interagieren:

System.CommonResponse

Mit der Komponente System.CommonResponse können Sie Nachrichten mit umfangreichen UI-Features wie Kartenkarussellen mit Bildern und Aktionsschaltflächen oder Formularen mit Tabellen und Eingabefeldern erstellen.

Hinweis

In diesem Thema wird die Verwendung dieser Komponente im YAML-Modus behandelt. Informationen zur Verwendung im Visual Flow Designer finden Sie unter Allgemeine Antwortkomponentenvorlagen.

Vorlagen für System.CommonResponse sind im Abschnitt User Messaging des Dialogfelds Komponente hinzufügen verfügbar.

Wie Sie Nachrichten basierend auf dieser Komponente erstellen, hängt vom Dialogmodus des Skills ab. Im YAML-Modus bearbeiten Sie die Zustandsvorlagen der Komponente OBotML. Der Prozess wird im visuellen Modus vereinfacht. Hier können Sie diese Rich UI-Nachrichten erstellen, indem Sie einfach die Felder und Antwortelementmetadaten im Eigenschaftsfenster der Komponentenbasierten Benutzermeldungsvorlagen für gemeinsame Antworten aktualisieren. Bei YAML-basierten Skills finden Sie ein Beispiel für die Verwendung der Komponente System.CommonResponse in der CrcPizzaBot, einem der Beispielbots. In diesem Spin in der PizzaBot können Sie ein bildreiches Menü mit Schnellaktionsschaltflächen anzeigen. Im Kontext der Komponente System.CommonResponse werden die verschiedenen Nachrichtentypen als Antworttypen bezeichnet. In CrcPizzaBot wird unter anderem gezeigt, wie die Benutzer mit den Aktionsschaltflächen auf Eingabeaufforderungen reagieren und das Pizza-Menü als kaskadenförmige Kartenelemente anzeigen können.

Im Menü Komponente hinzufügen können Sie verschiedene System.CommonResponse-Vorlagen für Karten, Text, Anhangsreaktionen und Mischentitys auswählen (wie in CbPizzaBot dargestellt). Diese Vorlagen umfassen beide Eigenschaften, die bei all diesen Antworttypeigenschaften üblich und für die einzelnen Antworttypen spezifisch sind. Während das Menü Komponente hinzufügen separate Status für jeden Reaktionstyp hinfügt, können Sie einen oder mehrere Reaktionstypen in einem einzigen Status kombinieren. In CrcPizzaBot werden Beispiele für die Status ShowMenu (Textantwort) und OrderPizza (Text- und Kartenantworten) veranschaulicht.

Hinweis

Sie sollten jeden Skill in den Zielkanälen frühzeitig im Entwicklungszyklus testen, um sicherzustellen, dass die Komponenten wie gewünscht gerendert werden.

Die Eigenschaften der Komponente

Die Konfiguration von System.CommonResponse-Komponenten beinhaltet das Festlegen von Eigenschaften, die Dialog-Engine zusammen mit Metadateneigenschaften leiten, die nicht nur beschreiben, wie die Komponente Nachrichten zustellt (als Texteingabeaufforderungen, Karten oder Anhänge), sondern auch den Inhalt und das Verhalten für die Nachrichten selbst festlegen.

Name Beschreibung Erforderlich?
metadata Die von dieser Komponente erstellte Chatantwort wird durch den Inhalt der Eigenschaft metadata gesteuert. Siehe Die Metadateneigenschaft in gemeinsamen Antwortkomponenten. Ja
processUserMessage Setzen Sie diese Eigenschaft auf true, um die Dialog-Engine so anzuweisen, dass sie in den Status zurückkehrt, nachdem der Benutzer Text eingibt oder auf eine Schaltfläche tippt. Setzen Sie diese Eigenschaft auf false, wenn keine Benutzereingabe erforderlich (oder erwartet) ist.

Setzen Sie diese Eigenschaft auf true, wenn Sie einen Standort festlegen.

Ja
autoNumberPostbackActions Diese Eigenschaft wird für Mischentitys, Textantworten und Kartenantworten verwendet. Wenn dies auf true gesetzt ist, stellt diese Option den Optionen Zahlen voran. Selbst wenn Sie diese Option nicht auf true gesetzt haben, kann die automatische Nummerierung für Kartenelemente erzwungen werden, wenn die Konfiguration Automatische Nummerierung bei Postback-Aktionen aktivieren des digitalen Assistenten auf true gesetzt ist. Wie durch die Standardkonfiguration demonstriert, kann die kanalspezifische automatische Nummerierung auf alle Skillbots angewendet werden, die bei einem digitalen Assistenten registriert sind (${(system.channelType=='twilio')?then('true','false')}): Nein
variable

Diese Variable enthält den Namen des Kontexts oder der Benutzervariablen, die aufgefüllt wird, wenn ein Benutzer antwortet, indem er freien Text eingibt, anstatt auf eine Schaltfläche zu tippen. Diese Eigenschaft wird ignoriert, wenn ein Benutzer auf eine Schaltfläche tippt, da die Payload der Schaltfläche bestimmt, welche Variablenwerte festgelegt werden. Wenn die Eigenschaft "variable" bereits festgelegt wurde, wenn die Dialog-Engine in diesen Status wechselt, wird der Status übersprungen.

Referenzieren Sie bei Mischentitys die Mischentityvariable. Benutzer werden in der Mischentity zur Eingabe der einzelnen Entitywerte aufgefordert. Wenn alle Entitywerte festgelegt sind, geht die Komponente in den nächsten Status über.

Nein
nlpResultVariable Legt die Eigenschaft variable mit einem Entitywert fest (wenn dieser Entitywert noch nicht für die referenzierte Variable festgelegt wurde). Sie können nlpResultVariable aktivieren, um einen Wert zurückzugeben, wenn Sie diesen mit einer Variablen definieren, die die NLP-Ergebnisse enthält (wie iResult: "nlpresult" in den Beispielbots). In diesem Fall kann die Eigenschaft nlpResultVariable den Wert bei Null dennoch auffüllen, wenn sie eine aufgelöste Entity findet, die mit der von der Variablen referenzierten Entity übereinstimmt. Der Dialog geht in den nächsten Status über, wenn nlpResultVariable den Wert festlegt. Sie können diese Eigenschaft anstelle der Komponente System.SetVariable verwenden. Nein
useFullEntityMatches Wenn dieser Wert auf true gesetzt ist, werden benutzerdefinierte Entitywerte als JSON-Objekte gespeichert (ähnlich wie integrierte Entitywerte). Auf diese Weise können Sie Ausdrücke für den Zugriff auf Eigenschaften wie value, primaryLanguageValue und originalString erstellen. Diese sind besonders wichtig für Skills, die derzeit mehrsprachig sind oder das noch werden können. Nein
maxPrompts Bevor die Komponente System.CommonResponse den Variablenwert auffüllen kann, den Sie für die Eigenschaft variable aus dem vom Benutzer eingegebenen Text angegeben haben, validiert sie den Wert mit dem Variablentyp. Dies kann eine Entitytypvalidierung oder bei einem primitiven Typ ein Wert sein, der in den primitiven Typ umgewandelt werden kann.

Wenn die Komponente den Wert nicht validieren kann, sendet die Dialog-Engine den Nachrichtentext und die Optionen erneut. (Sie können diese Nachricht ändern, um den Validierungsfehler wiederzugeben.) Um eine Endlosschleife zu vermeiden, wenn ein Benutzer fortlaufend einen ungültigen Wert eingibt, legen Sie mit dieser Eigenschaft einen Grenzwert für die Anzahl von Versuchen fest, die der Benutzer hat. Wenn der Benutzer diese Anzahl überschreitet, geht die Komponente System.CommonResponse in die Aktion cancel über. Siehe Anzahl der Eingabeaufforderungen einschränken.

Wie in Mischentity erstellen beschrieben, können einzelne Entitys in der Mischentity diese Einstellung außer Kraft setzen, wenn die Option Maximale Benutzereingabeversuche festgelegt ist.

Nein
keepTurn Die Eigenschaft keepTurn gilt nur, wenn Sie die Eigenschaft processUserMessage auf false setzen. Informationen zum Festlegen dieser Eigenschaft finden Sie unter System.Output. Nein
translate Mit dieser Eigenschaft können Sie den booleschen Wert außer Kraft setzen, den Sie für die Kontextvariable autotranslate festgelegt haben. Wenn Sie diese Variable nicht festgelegt oder auf false gesetzt haben, können Sie diese Eigenschaft auf true setzen, um die automatische Übersetzung nur für diese Komponente zu aktivieren. Wenn die Variable autotranslation auf true gesetzt ist, können Sie diese Eigenschaft auf false setzen, um diese Komponente von der automatischen Übersetzung auszuschließen. Siehe Übersetzungsservices in Skills. Nein
footerText Erweitert die Ausgabe auf textbasierten Kanälen. Wie unter Footer beschrieben, können Sie FreeMarker-Ausdrücke verwenden, um den Footertext für Nur-Text-Kanäle bedingt zu formatieren. Nein
transitionAfterMatch (veraltet) Ein boolescher Wert, der bei true einen temporären Übergang vom Entityabgleich, der von dieser Komponente ausgeführt wird, zu einem anderen Status ermöglicht. Diese Eigenschaft wird nicht mehr unterstützt. Um diese Funktionalität abzurufen, verwenden Sie einen Entity Event Handler Nein
cancelPolicy Bestimmt den Zeitpunkt des cancel-Übergangs:
  • immediate - Unmittelbar nachdem der Wert erreicht wurde, der für Maximale Benutzereingabeversuche des Mischentityelements festgelegt ist. Wenn dieser Wert nicht festgelegt wurde, löst die Komponente diesen Übergang aus, wenn der komponentenweite maxPrompts-Wert erfüllt wurde.

  • lastEntity - Wenn die letzte Entity in der Mischentity mit dem Wert übereinstimmt.

Diese Eigenschaft wird ignoriert, wenn Sie einen Entity-Event-Handler bei einem maxPromptsReached-Handler auf Element- oder Ereignisebene registriert haben.
Nein

Im Folgenden finden Sie die YAML für einen Beispielstatus basierend auf der Komponente 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" 

Tipp:

Die Eigenschaft text in diesem Snippet wird mit Apache FreeMarker Template Language (FTL) definiert. Weitere Informationen zum Hinzufügen von FTL-Ausdrücken und Verwenden von in FreeMarker integrierten Vorgängen zum Transformieren von Variablenwerten finden Sie unter Apache FreeMarker Template Language-Syntax.

Übergänge für die Komponente System.CommonResponse

Gemeinsame Antwortkomponenten verwenden die folgenden Übergänge.
Übergang Beschreibung
cancel Wird ausgelöst, wenn ein Benutzer die von der Eigenschaft maxAttempts zugewiesenen Versuche überschreitet, oder wenn er den Ablauf umleitet.
textReceived Wird ausgelöst, wenn ein Benutzer Text oder Emojis sendet, anstatt auf eine Aktionsschaltfläche oder einen Link zu tippen.
attachmentReceived Wird ausgelöst, wenn ein Benutzer einen Bild-, Audio-, Video- oder Dateianhang sendet.
locationReceived Wird ausgelöst, wenn der Benutzer einen Standort sendet.
system.outOfOrderMessage Legen Sie diese Option fest, um unerwartetes Benutzerverhalten zu umgehen. Dies ist insbesondere der Fall, wenn ein Benutzer nicht in der aktuellen Nachricht auf ein Aktionselement tippt, sondern stattdessen auf eine Aktion tippt, die zu einer älteren Nachricht in der Chatsession gehört.

Mischentityübergänge in der Komponente System.CommonResponse

Diese System.CommonResponse-Komponenten lösen die Aktionen match und cancel basierend auf den Werten aus, die mit der Benutzereingabe und Ihrer Konfiguration der Eigenschaft cancelPolicy übereinstimmen.
Aktion Beschreibung Erforderlich?
match Die Komponente löst diese Aktion aus, um in den angegebenen Status zu navigieren, wenn mindestens eine Entity in der Mischentity mit der Benutzereingabe übereinstimmt. Nein
cancel Die Komponente löst diese Aktion aus, um basierend auf der Einstellung für die Eigenschaft cancelPolicy zum angegebenen Status zu wechseln. Nein

System.Webview

Hinweis

In diesem Thema wird die Verwendung dieser Komponente im YAML-Modus behandelt. Informationen zur Verwendung im Visual Flow Designer finden Sie unter Webview-Komponente.

Die Komponente System.Webview öffnet eine Webview in Ihrem Skill oder für Skills, die in einem Webkanal ausgeführt werden, auf einer Browserregisterkarte.

System.WebView Komponenteneigenschaften

Eigenschaft Beschreibung Erforderlich?
sourceVariableList Eine durch Komma getrennte Liste mit Kontext- oder Benutzervariablennamen. Diese Variablennamen sind die Parameter, die an die Webview gesendet werden. Sie sind die Eingabeparameter aus Ihrem Bot. Sie können jede Variable festlegen, indem Sie eine Reihe von System.SetVariable-Status vor dem Status System.Webview hinzufügen. Ja
variable Der Name der Variablen (ein Zeichenfolgenwert), mit der die Webview-Payload identifiziert wird, die an den Bot zurückgegeben wird, nachdem der Benutzer seine Interaktionen innerhalb der Webview abgeschlossen hat.

Die Payload ist in dieser Variablen gespeichert, auf die Sie zu einem späteren Zeitpunkt in der Definition des Dialogablaufs zugreifen können. Sie können dies beispielsweise in einer Ausgabekomponente referenzieren.

Ja
prompt Eine Textzeichenfolge wie "Tippen, um fortzufahren". Nein
service Der Name des Webview-Komponentenservice. Nein
imageUrl Die URL zu dem Bild für einen Prompt. Nein
linkLabel Das Label für die Schaltfläche, die die Webanwendung aufruft. Nein
cancelLabel Das Label für die Schaltfläche "Abbrechen", mit der Benutzer den Status verlassen können, ohne die Webanwendung aufzurufen. Nein
autoNumberPostbackActions Aktiviert die Benutzereingabe in SMS-Kanälen, die keine Schaltflächen unterstützen, indem Zahlenäquivalente zu den UI-Elementen hinzugefügt werden.
  • false - Setzt die globale Variable autoNumberPostbackActions außer Kraft.

  • true

    Stellt der Schaltfläche "Abbrechen" eine Folgenummer voran, die bei Eingabe die Postback-Payload ausführt, als würde der Benutzer auf die Schaltfläche tippen, statt die entsprechende Zahl einzugeben.
Nein
translate Mit dieser Eigenschaft können Sie den booleschen Wert außer Kraft setzen, den Sie für die Kontextvariable autotranslate festgelegt haben. Wenn Sie diese Variable nicht festgelegt oder auf false gesetzt haben, können Sie diese Eigenschaft auf true setzen, um die automatische Übersetzung nur für diese Komponente zu aktivieren. Wenn die Variable autotranslation auf true gesetzt ist, können Sie diese Eigenschaft auf false setzen, um diese Komponente von der automatischen Übersetzung auszuschließen. Siehe Übersetzungsservices in Skills. Nein

Übergänge für die Komponente "System.Webview"

Wechsel Beschreibung
next Benennt den nächsten Status im Dialogablauf nach dem erfolgreichen Callback von der Webanwendung.
return Beendet die Unterhaltung nach dem erfolgreichen Callback von der Webanwendung.
error Benennt den Status, der Fehler verarbeitet.
actions
  • cancel - Benennt den Status, der das Szenario "Benutzer tippt auf Abbrechen" verarbeitet.
  • textReceived - Benennt den Status, wenn Benutzer Text eingeben, anstatt auf eine der Schaltflächen zu tippen.

System.IncidentCreation

Mit der Komponente System.IncidentCreation können Sie einen Vorfall auf einer Kundenservice-Site erstellen. Beachten Sie, dass Sie eine Kundenserviceintegration auf der Seite Einstellungen > Zusätzliche Services > Kundenserviceintegration erstellen müssen, bevor Sie diese Komponente in Ihrer Instanz verwenden können.

Hinweis

In diesem Thema wird die Verwendung dieser Komponente im YAML-Modus behandelt. Informationen zur Verwendung im Visual Flow Designer finden Sie unter Vorfallerstellung.

Nachfolgend finden Sie ein Beispiel für die Verwendung dieser Komponente, um die Unterhaltung wieder an eine Oracle B2C Service-Site zu übertragen.

  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"

Und hier ist ein Beispiel für 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"
Eigenschaft Beschreibung Erforderlich?
serviceName Der Name der Integration gemäß der Konfiguration unter Einstellungen > Zusätzliche Services > Kundenserviceintegration. Ja
subject Der Text für den Betreff des Vorgangs. Ja
attachmentUrl Die URL eines Dokuments oder Bilds, das sich auf den Vorfall bezieht. Beachten Sie, dass das Hinzufügen von Anhängen für DA-Agent-Skills nicht unterstützt wird. Nein
agentReportFilter (Bei Vorfällen mit Oracle Fusion Service) Text zum Filtern der Vorfälle. Der Standardwert ist ODA. Nein
addChatTranscript (Nur für Oracle Fusion Service-Vorfälle.) Bei 'Wahr' wird dem Vorgang ein Chattranskript hinzugefügt. Der Standardwert ist false.

Insights müssen für den Skill aktiviert sein, damit das Chattranskript verfügbar gemacht werden kann.

Ein Transkript kann dem Vorfall nur hinzugefügt werden, wenn eine DA-Agent-Integration in Kombination mit Webchat for Service- oder Oracle Inlay Toolkit-Inlays verwendet wird.

Nein
customFields Eine Map, die description und optional contactInfo enthält, die zusätzliche Details zum Vorfall enthalten können.

Die Zuordnung wird unvalidiert als Textversion des Objekts übergeben und als private Notiz in die Vorfallnachricht eingefügt.

Nein
contactProperties Eine Zuordnung von Name/Wert-Paaren, die Informationen enthält, die zum Suchen oder Erstellen von Kontaktinformationen für den Kundenservice erforderlich sind. Er muss email enthalten und kann optional firstName und lastName enthalten.

Wenn email nicht angegeben wird, müssen Sie sowohl firstName als auch lastName angeben.

Nur für Oracle B2C Service
incidentNumberVariable Der Name der Zeichenfolgenkontextvariable, in der die Vorfallnummer gespeichert werden soll. Nein

System.IntelligentAdvisor

Mit dieser Komponente können Sie von einem Skill aus auf ein Oracle Intelligent Advisor-Interview zugreifen.

Hinweis

In diesem Thema wird die Verwendung dieser Komponente im YAML-Modus behandelt. Informationen zur Verwendung im Visual Flow Designer finden Sie unter Intelligent Advisor.

Sie müssen eine Intelligent Advisor-Serviceintegration erstellen, bevor Sie diese Komponente verwenden können. Siehe Intelligent Advisor-Service hinzufügen. Außerdem muss das Interview im Intelligent Advisor Hub bereitgestellt und im Chatservicekanal aktiviert worden sein. Das Interview muss für anonyme Benutzer gelten. Sie können nicht auf Interviews für Portalbenutzer oder Agent-Benutzer zugreifen.

Mit den Eigenschaften der Komponente können Sie die folgenden Intervieweinstellungen angeben:

  • Anzeige der Titel und Erläuterungen
  • Die Labels für die Schaltflächen "Ja", "Nein" und "Weiß nicht"
  • Die Zeichenfolgen, die der Benutzer zum Zurücksetzen, zum Zurückkehren zur vorherigen Frage (Rückgängig) und zum Beenden des Interviews eingibt
  • Der Text, der am Ende des Interviews angezeigt werden soll
  • Formulierung der Frage, ob die Erklärung angezeigt werden soll
  • Die Zeichenfolge, mit der Benutzer angeben, dass Dateien vollständig hochgeladen wurden
  • Die Attributwerte und Connector-Parameter, die an das Interview übergeben werden
  • Das zu verwendende Projektgebietsschema

Beispiel:

  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"
      

Ein Beispiel, das die Komponente in einem Dialogablauf verwendet, finden Sie unter Intelligent Advisor-Komponente im Skill verwenden.

Tipp:

Die Standardwerte für alle Beschriftungseigenschaften werden im Resource Bundle des Skills gespeichert. Um einen Standardwert zu ändern, öffnen Sie die Seite Resource Bundle des Skills, klicken Sie auf Symbol für Resource Bundles, wählen Sie die Registerkarte Konfiguration aus, und ändern Sie die Nachricht für den Schlüssel IntelligentAdvisor - <Eigenschaftsname>. Wenn Sie das Resource Bundle des Skills verwenden, um den Standardwert zu ändern, müssen Sie die Labeleigenschaft nur in die Komponente aufnehmen, wenn Sie den Standardwert außer Kraft setzen möchten.

Mit dem Konfigurations-Resource Bundle können Sie auch die folgenden Nachrichten ändern: IntelligentAdvisor - defaultValue, IntelligentAdvisor - doneHelp, IntelligentAdvisor - maskLabel, IntelligentAdvisor - outOfOrderMessage, IntelligentAdvisor - resumeSessionPrompt, IntelligentAdvisor - numberMinMax, IntelligentAdvisor - outOfOrderMessage, IntelligentAdvisor - resumeSessionPrompt und IntelligentAdvisor - yesNoMessage. Beispiel: Die Nachricht IntelligentAdvisor - doneHelp wird für Anhangsfelder ausgegeben. Sie wird standardmäßig auf When you are done with the upload, say {0}. gesetzt. Möglicherweise sollten Sie es in Say {0} to let me know that you are done uploading. ändern.

Eigenschaft Beschreibung Erforderlich?
currency Der ISO-4217-Währungscode für die im Interview verwendete Währung. Wenn dieser Schlüssel angegeben ist, kann der Benutzer nur Währungswerte in den für diese Währung zulässigen Formaten eingeben. Sie können diese Eigenschaft auf leer setzen oder ausschließen, wenn das Interview keine Währungsbeträge anfordert oder keine bestimmte Währung erwartet. Nein
deployment Der Name des aktiven Deployment-Projekts im Intelligent Advisor Hub. Ja
doneLabel Der Text, den die Benutzer eingeben, um anzugeben, dass sie eine Datei hochgeladen haben.

Der Standardwert ist /done.

Nein
endLabel Text, der am Ende des Interviews im Chat angezeigt wird.

Der Standardwert ist Interview ended. Sie können die Eigenschaft auf "" setzen, um zu verhindern, dass Text angezeigt wird.

Nein
exitLabel Der Text, den die Benutzer eingeben, um anzugeben, dass sie das Interview beenden möchten.

Der Standardwert ist /exit.

Nein
explanationAskLabel Die Frage, die gestellt werden soll, wenn showExplanation auf ask gesetzt ist.

Der Standardwert ist Do you want to see the explanation?

Nein
hideScreenTitle Gibt an, ob alle Bildschirmtitel im Interview ausgeblendet werden sollen.

Der Standardwert ist false, d.h. die Bildschirmtitel müssen angezeigt werden.

Nein
intelligentAdvisorService Der Name des Intelligent Advisor-Service, der in Einstellungen > Zusätzliche Services konfiguriert ist. Ja
interviewAttributes Der Name einer Kontextvariablen des Typs "Zeichenfolge", in der die Attributwerte des Interviews gespeichert werden sollen. Die Attributwerte werden als Array von Schlüssel/Wert-Paaren gespeichert. Nein
locale

Diese Eigenschaft wirkt sich sowohl auf das Zielinterview als auch auf die Datums- und Zahlenauflösung aus.

Die Komponente initiiert die Version des benannten Interviews (Deployments), das mit der Sprache verknüpft ist, die durch die Eigenschaft locale der Komponente angegeben wird. Wenn für das angegebene Gebietsschema kein Hub-Deployment vorhanden ist, verwendet die Komponente das Standardgebietsschema, das mit dem Deployment verknüpft ist.

Bei der Datums- und Zahleneingabe werden die Werte gemäß den Entityeinstellungen DATE und NUMBER berechnet. Wenn Gebietsschema des Endbenutzers berücksichtigen für die Entity auf "Ein" gesetzt ist, wird der Wert für das Gebietsschema aufgelöst, das von dieser Eigenschaft (oder dem Standardwert, wenn nicht angegeben) angegeben wird. Siehe Gebietsschemabasierte Entityauflösung.

Diese Eigenschaft wird standardmäßig auf den Wert profile.locale gesetzt. Wenn profile.locale keinen Wert enthält, wird das Gebietsschema des Kanals verwendet.

Nein
noLabel Das Label für boolesche FALSE-Werte.

Der Standardwert ist Nein.

Nein
params Eine Zuordnung von Schlüssel/Wert-Verbindungsparametern, die beim Start des Interviews übergeben werden sollen. Dies ist in der Regel für Interviews mit externer Datenintegration erforderlich. Nein
removeHtml Gibt an, ob das HTML-Markup aus dem Text entfernt werden soll. Der Standard ist false. Nein
resetLabel Der Text, den Benutzer eingeben, um anzugeben, dass sie zur ersten Frage zurückkehren möchten.

Der Standardwert ist /reset.

Nein
seedData Eine Map der Attributnamen und -werte von Intelligent Advisor, die an das Interview übergeben werden. Verwenden Sie für Datums- und Uhrzeitattribute die standardmäßigen Datums- und Uhrzeitformate von Intelligent Advisor. Beispiel: start_date: "2010-01-31".

Für das Attribut, an das Sie den Wert übergeben, muss die Option Von URL-Parameter vordefinieren in Policy Modeling aktiviert sein.

Nein
showExplanation Gibt an, ob die Intelligent Advisor-Erläuterung angezeigt werden soll. Die zulässigen Werte sind never, always und ask.

Geben Sie bei ask mit der Eigenschaft explanationAskLabel den Text zum Fragen an, ob der Benutzer die Erläuterung sehen möchte.

Der Standard ist never.

Nein
uncertainLabel Das Label, das der Benutzer eingeben kann, wenn er den Wert nicht kennt. Dieses Label wird für optionale boolesche Optionsfelder angezeigt.

Der Standardwert ist Uncertain.

Nein
undoLabel Der Text, den die Benutzer eingeben, um anzugeben, dass sie zur vorherigen Frage zurückkehren möchten.

Der Standardwert ist /back.

Nein
yesLabel Das Label für die Darstellung boolescher TRUE-Werte.

Standardwert ist Ja.

Nein

Beispiel: Intelligent Advisor-Komponente im Skill verwenden

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

Beispiel: Auf Interviewattribute zugreifen

Im Folgenden finden Sie ein einfaches Beispiel für den Zugriff auf die Attributwerte eines Interviews:

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

Hinweis

In diesem Thema wird die Verwendung dieser Komponente im YAML-Modus behandelt. Informationen zur Verwendung im Visual Flow Designer finden Sie unter Knowledge Search.

Mit dieser Komponente können Sie in Oracle B2C Service Knowledge Foundation oder Oracle Fusion Service Knowledge Management nach Informationen über einen bestimmten Suchbegriff suchen und die Ergebnisse anzeigen.

Bei Oracle B2C Service hängen die Ergebnisse, die der Service zurückgibt, davon ab, ob die Antworten öffentlich sind und welche Zugriffsebene, welches Produkt und welche Kategorieeinstellungen ausgewählt sind.

Sie müssen einen Knowledge-Suchservice erstellen, bevor Sie diese Komponente verwenden können. Siehe Knowledge-Suchservice hinzufügen.

Nachfolgend finden Sie ein Beispiel für die Verwendung dieser Komponente. Dabei wird ein Knowledge Management-Service nach allen Informationen durchsucht, die sich auf die letzte Äußerung des Benutzers beziehen. Weitere Beispiele finden Sie unter Knowledge-Suchkomponente verwenden.

  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"  

Tipp:

Die Standardwerte für die Eigenschaften defaultAttachmentLabel, noResultText und resultLinkLabel werden im Resource Bundle des Skills gespeichert. Um einen Standardwert zu ändern, öffnen Sie die Seite Resource Bundle des Skills, klicken Sie auf Symbol für Resource Bundles, wählen Sie die Registerkarte Konfiguration aus, und ändern Sie die Nachricht für den Schlüssel KnowledgeSearch - <Eigenschaftsname>. Wenn Sie das Resource Bundle des Skills verwenden, um den Standardwert zu ändern, müssen Sie die Eigenschaft nur in die Komponente aufnehmen, wenn Sie den Standardwert außer Kraft setzen möchten.
Eigenschaft Beschreibung Erforderlich?
cardLayout Gibt an, ob die Ergebniskarten vertikal oder horizontal angezeigt werden sollen. Der Standardwert ist horizontal. Nein
customFilters Eine Liste der Suchergebnisfilter, die als Name/Wert-Paare dargestellt werden. Die zulässigen Filternamen sind product und category. Jeder von ihnen erlaubt nur eine Filterdeklaration. Siehe Ergebnisse nach Produkt und Kategorie filtern. Nein
customProperties Nur Oracle B2C Service: Eine Zuordnung von Schlüssel/Wert-Paaren, die an den Suchservice gesendet werden sollen. Derzeit unterstützt diese Eigenschaft nur den Schlüssel word_connector. Mit der Eigenschaft word_connector, die auf AND gesetzt ist, stellen Sie jedem Wort im Suchbegriff + voran. Nein
defaultAttachmentLabel

Das Standardlabel, das für die URL-Aktion der Ergebniskarte verwendet wird, die mit einem Anhang verknüpft ist, wenn der Anhang keinen konfigurierten Anzeigenamen aufweist. Bei Verwendung wird eine Indexnummer angehängt. Beispiel: Wenn der zweite Anhang keinen Anzeigenamen hat, wird an das Standardanhangslabel 2 angehängt.

Der Standardwert ist Download.

Nein
locale Der Standardwert ist der Wert der Variable profile.locale.

Bei Knowledge Integration Services für Oracle B2C Service mit mehreren Schnittstellen ist dies der aus fünf Zeichen bestehende ISO- oder BCP-Gebietsschemacode, der angibt, welche Schnittstelle für die Suche verwendet werden soll (Beispiel: en_GB). Wenn keine Schnittstelle das Gebietsschema unterstützt, wird die Standardschnittstelle verwendet. Siehe Mehrsprachige Knowledge-Suche implementieren.

Bei Oracle Fusion Service werden die Artikel abgerufen, die dem angegebenen Gebietsschema zugeordnet sind. Wenn keine übereinstimmenden Artikel für das Gebietsschema vorhanden sind, wird noResult zurückgegeben.

Nein
noResultText

Der Text, der ausgegeben werden soll, wenn kein Suchergebnis verfügbar ist.

Standardmäßig wird der Text aus dem Resource Bundle-Eintrag KnowledgeSearch - noResultText angezeigt.

Nein
resultLinkLabel

Das Label, das für die URL-Aktion (Schaltfläche) der Ergebniskarte verwendet werden soll, die mit der Webversion der Informationen verknüpft wird.

Standardmäßig wird der Text aus dem Resource Bundle-Eintrag KnowledgeSearch - resultLinkLabel angezeigt.

Wenn Sie diese Eigenschaft auf ${r""} setzen, wird die Schaltfläche für den Ergebnislink nicht angezeigt, und der vollständige Text wird ausgegeben. Dies wird nicht empfohlen, wenn Sie sehr lange Artikel haben, die in einem Skillwidget in typischer Größe schwer zu lesen sind.

Nein
resultSizeLimit

Die maximale Anzahl anzuzeigender Ergebnisse.

Der Standard lautet 10.

Nein
resultVersion

Nur Oracle B2C Service: Die bevorzugte Version, die zurückgegeben werden soll, wenn mehrere Versionen für ein Ergebnis vorhanden sind.

Sie können diese Eigenschaft auf Answer oder Special Response setzen.

Sie können spezielle Antworten nutzen, um Ausgaben anzuzeigen, die speziell auf Chatunterhaltungen und nicht auf Webseiten zugeschnitten sind.

Die Standardversion ist Answer. Der Standardwert kann sich in einem späteren Release ändern.

Nein
resultVersionExclusive

Nur Oracle B2C Service: Gibt an, ob nur Ergebnisse angezeigt werden sollen, die in der bevorzugten Version verfügbar sind.

Bei false werden zunächst alle übereinstimmenden Antworten aufgenommen, die mit der bevorzugten Version (resultVersion) verfügbar sind. Wenn die Anzahl der enthaltenen Antworten kleiner als der Grenzwert ist, werden weiterhin Antworten in der nicht bevorzugten Version aufgenommen, bis der Grenzwert erreicht ist.

Der Standard ist false.

Nein
searchLinkLabel

Oracle B2C Service: Das Label, das für die Payload-Aktion der Kartennachricht verwendet werden soll, die mit der Webseite mit der vollständigen Suchergebnisliste verknüpft ist.

Oracle Fusion Service: Das Label, das für die Payload-Aktion für Kartennachrichten verwendet werden soll, die mit der Homepage für die Suche verknüpft ist.

Wenn diese Eigenschaft nicht festgelegt ist, zeigt die Payload der Kartennachricht die Aktion nicht an.

Nein
searchPrelude

Der Text, der vor der Anzeige des Suchergebnisses ausgegeben werden soll.

Wenn diese Eigenschaft nicht festgelegt ist, wird der Text aus dem Resource-Bundle-Eintrag KnowledgeSearch - searchPrelude ausgegeben.

Wenn der Suchauftakt nicht angezeigt werden soll, setzen Sie diese Eigenschaft auf ${r""}.

Nein
searchServiceName Der Name der Knowledge-Suchintegration, wie in den Einstellungen konfiguriert. Ja
searchTerm Der Text, der als Suchbegriff für den Knowledge-Suchaufruf verwendet werden soll. Für Oracle Fusion Service Knowledge Management ist ein Suchbegriff erforderlich. Für Oracle B2C Service Knowledge Foundation werden die beliebtesten Artikel zurückgegeben, wenn kein Suchbegriff angegeben wird.

Techniken für Suchbegriffe finden Sie unter Knowledge-Suchkomponente verwenden.

Ja

System.KnowledgeSearch-Übergänge

Aktion Beschreibung
resultSent Die Suche hat mindestens ein Ergebnis zurückgegeben.
noResult Für den Suchbegriff gab es keine Ergebnisse.
serverError Während des Aufrufs ist auf dem Server des Knowledge-Suchservice ein Fehler aufgetreten, wie z.B. ein Serverfehler oder ein unerwarteter Fehler.

Wenn dieser Fehler auftritt, wird die Fehlermeldung in system.state.<state-name>.serverError.message gespeichert.

Beispiel: Zugehörige Fragen einem Suchbegriff in einem YAML-Dialogablauf zuordnen

Das folgende Diagramm veranschaulicht, wie Sie die Single State-Methode implementieren, wenn Ihr Dialogablauf im YAML-Modus erstellt wird. 1) Sie verwenden eine Map-Kontextvariable, um die Knowledge Intents mit Suchbegriffen zu verknüpfen. 2) Sie legen die Aktion im Status Intent, um zu einem Datenfluss zu wechseln, der die Zuordnung verwendet, um die Kontextvariable searchTerm auf den Suchbegriff des Intents festzulegen. 3) Sie wechseln dann zu einem Status, der die Wissensdatenbank nach dem Wert searchTerm durchsucht.

Eine Beschreibung von kf-assoc-intent-term.png folgt.
Beschreibung der Abbildung kf-assoc-intent-term.png

Im Folgenden finden Sie ein Beispiel für einen Dialogablauf, in dem für jede Knowledge-Base-Antwort individuelle Intents vorhanden sind.

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"

Beispiel: Benutzeräußerung als Suchbegriff verwenden

Das folgende Beispiel zeigt, wie Sie die searchTerm auf die Äußerung des Benutzers in einem YAML-Dialogskill festlegen. Bei einem visuellen Dialogskill verwenden Sie stattdessen ${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

Mit der Komponente System.AgentTransfer können Sie in digitalen DA-Agents die Unterhaltung zurück an den Chatservice übertragen. Die Unterhaltung wird gemäß den im Chatservice konfigurierten Chatregeln an einen Live-Agent weitergeleitet.

Hinweis

In diesem Thema wird die Verwendung dieser Komponente im YAML-Modus behandelt. Informationen zur Verwendung im Visual Flow Designer finden Sie unter Agent-Transfer.

Diese Komponente ist für Unterhaltungen bestimmt, die aus einem Servicechat stammen, wie in Digital Assistant-Agent-Framework in Aktion beschrieben. Verwenden Sie stattdessen System.AgentConversation für Unterhaltungen, die aus dem Skill stammen.

Nachfolgend finden Sie ein Beispiel für die Verwendung dieser Komponente, um die Unterhaltung wieder an den Chatservice zu übertragen.

  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"

Tipp:

In Skills mit Plattformversion 21.04 und höher werden die Standardwerte für die Eigenschaften acceptedMessage, errorMessage, rejectedMessage und waitingMessage im Resource Bundle des Skills gespeichert. Um einen Standardwert zu ändern, öffnen Sie die Seite Resource Bundle des Skills, klicken Sie auf Symbol für Resource Bundles, wählen Sie die Registerkarte Konfiguration aus, und ändern Sie die Nachricht für den Schlüssel AgentTransfer - <Eigenschaftsname>. Wenn Sie das Resource Bundle des Skills verwenden, um die Standardnachricht zu ändern, müssen Sie die Nachrichteneigenschaft nur in die Komponente aufnehmen, wenn Sie den Standardwert außer Kraft setzen möchten.
Eigenschaft Beschreibung Erforderlich?
agentStatusVariable Der Name der Kontextvariablen der Typzuordnung, die zum Speichern der Informationen zum Agent-Verfügbarkeitsstatus verwendet werden soll. Wenn die Eigenschaft nicht angegeben ist, werden keine Informationen gespeichert. Um eine Mapvariable zu referenzieren, verwenden Sie einen Wertausdruck wie: ${<mapVariableName>.value.<key>}. Beispiel: agentStatus.value.expectedWaitMinutes.

Informationen zu den in dieser Variablen zurückgegebenen Werten finden Sie unter System.AgentTransferCondition.

Nein
allowTransferIf Gibt die Bedingungen an, unter denen der Skill die Chatsession übertragen soll.
  • agentsAreRequestingNewEngagements: (Standard) Für Oracle B2C Service-Agents, die Chats abrufen (neue Interaktionen anfordern) müssen, ist das die restriktivste Gruppe von Bedingungen. Benutzer müssen dabei nicht zu lange warten, bis sie mit einem Agent sprechen. Der Skill versucht, die Unterhaltung nur zu übertragen, wenn Agents neue Interaktionen angefordert haben. In allen anderen Fällen hat diese Option dasselbe Verhalten wie agentSessionsAreAvailable. Verwenden Sie diese Option nicht forOracle Fusion Service Chat, da die Gesamtanzahl der Oracle Fusion Service-Agents, die neue Engagements anfordern, immer 0 beträgt.
  • agentSessionsAreAvailable: Der Skill versucht, die Unterhaltung zu übertragen, wenn einer der verfügbaren Agents die maximale Anzahl an gleichzeitigen Chats nicht erreicht hat. Der Benutzer muss möglicherweise warten, wenn die Agents an längeren Unterhaltungen beteiligt sind oder eine Nachverfolgung nach einem Chat durchführen.
  • agentsAreAvailable: Der Skill versucht, die Unterhaltung zu übertragen, wenn Agents online vorhanden sind, unabhängig davon, ob sie ihre maximale Anzahl an Chats erreicht haben oder neue Engagements anfordern. Mit dieser Option kann es für die Benutzer zu langen Wartezeiten kommen.

Wenn die angegebenen Bedingungen nicht erfüllt sind, wird die rejected-Aktion ausgeführt.

Nein
customProperties Eine Map, die Informationen zum Übergeben an den Service enthält. Siehe Informationen an den Service übergeben. Nein
errorMessage Die Nachricht, die dem Benutzer angezeigt wird, wenn beim Übertragen der Chatsession an einen Agenten ein Systemfehler auftritt. Der Standardwert ist Wir konnten Sie aufgrund eines Systemfehlers nicht übertragen. Sie können die Eigenschaft auf eine leere oder leere Zeichenfolge setzen, um die Nachrichtenausgabe zu unterdrücken. Nein
maxEngagementsInQueue Die maximal zulässige Anzahl an Interaktionen, die in der Zielqueue warten. Wenn die Chatanforderung gesendet wird, antwortet der Chatservice mit der aktuellen Anzahl an Interaktionen, die in der Queue warten. Wenn dieser Wert maxEngagementsInQueue überschreitet, wird die rejected-Aktion ausgeführt. Der Standardwert ist -1. Das bedeutet, dass die Interaktionen unbegrenzt sind.

Beachten Sie, dass die Antwort für Oracle Fusion Service Chat immer 0 lautet. Daher hat diese Eigenschaft keinen Wert für Oracle Fusion Service.

Nein
maxWaitSeconds Die maximal zulässige Anzahl der geschätzten Wartezeit in Sekunden. Wenn der Chatservice die Übertragungsanforderung empfängt, antwortet er mit der geschätzten Wartezeit. Wenn dieser Wert maxWaitSeconds überschreitet, wird die Aktion rejected ausgeführt. Diese Eigenschaft entspricht standardmäßig -1, d.h., es gibt keine maximale Wartezeit. Wenn dies auf -1 gesetzt ist, überträgt der digitale Assistent den Benutzer unabhängig von der geschätzten Wartezeit an einen menschlichen Agenten.

Beachten Sie, dass die Aktion rejected auf der geschätzten Wartezeit und nicht auf der tatsächlichen Wartezeit basiert. Nachdem die Unterhaltung übertragen wurde, hat der digitale Assistent keine Kontrolle mehr über die Unterhaltung. Außerdem hat er keinen Zugriff auf Informationen über die Unterhaltung. Deshalb kann die tatsächliche Wartezeit die geschätzte Wartezeit überschreiten.

Nein
rejectedMessage Die Nachricht, die den Benutzern angezeigt wird, wenn einer der folgenden Fälle auftritt:
  • Die allowTransferIf-Bedingungen wurden nicht erfüllt.
  • Die geschätzte Wartezeit überschreitet maxWaitSeconds.
  • Die Anzahl der Interaktionen in der Queue überschreitet maxEngagementsInQueue.
Der Standardwert ist Agent hat abgelehnt. Sie können die Eigenschaft auf eine leere oder leere Zeichenfolge setzen, um die Nachrichtenausgabe zu unterdrücken.
Nein
waitingMessage Die Nachricht, die Benutzern angezeigt wird, wenn sie in eine Queue übertragen werden. Der Standardwert ist Agent-Chatsession gestartet. Warten auf Beitritt des Agent. Sie können die Eigenschaft auf eine leere oder leere Zeichenfolge setzen, um die Nachrichtenausgabe zu unterdrücken. Nein

Diese Komponente kann folgende Aktionen zurückgeben:

Aktion Beschreibung
accepted Der accepted-Übergang wird festgelegt, wenn der Chat erfolgreich in eine Queue übertragen wird.

Beachten Sie, dass die Unterhaltung nach Annahme einer Chatanfrage mit einem return enden muss. Beispiel: Sie können zu einem Status navigieren, der eine Zeichenfolge ausgibt (die für den Benutzer nicht sichtbar ist) oder eine Variable festlegt.

    transitions:
      actions:
        accepted: "reset"
        rejected: "handleRejected"
        error: "offerMoreHelp"
      next: "reset"
rejected Der rejected-Übergang wird festgelegt, wenn einer der folgenden Fälle auftritt:
  • Die allowTransferIf-Bedingungen wurden nicht erfüllt.
  • Die geschätzte Wartezeit überschreitet maxWaitSeconds.
  • Die Anzahl der Interaktionen in der Queue überschreitet maxEngagementsInQueue.
error Der Übergang error wird festgelegt, wenn ein Systemfehler auftritt, der die Übertragung an einen menschlichen Agenten verhindert.

Beispiel: An einen menschlichen Agent übertragen

Nachfolgend finden Sie ein Beispiel für einen Dialogablauf, bei dem der Chat an einen Agent übertragen wird, wenn der Kunde mit einem Agent sprechen möchte:

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"

Beispiel: Informationen an den Service übergeben

Wenn Sie eine Unterhaltung von einem digitalen Assistenten an einen Live-Agent übertragen, können Sie diese Informationen mit benutzerdefinierten Eigenschaften in der Komponente System.AgentTransfer übergeben.

Struktur für Oracle B2C Service:


      customProperties:
        - name: 
          value: 
          type:

Die Eigenschaft type ist für benutzerdefinierte Felder erforderlich. Andernfalls ist sie optional.

Die Struktur von Oracle Fusion Service lautet wie folgt:


      customProperties:
        - name: 
          value:

Beispiel für die Einstellung customProperties für 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"

Tipp:

Bei Oracle Fusion Service wird die Regelauswertung bei der ersten Regel gestoppt, wenn alle Bedingungen erfüllt sind. Stellen Sie beim Konfigurieren der Regeln sicher, dass die übertragene Unterhaltung nicht wieder zum Digital Assistant-Agent umgeleitet wird. Im Beispiel doTransfer ist die benutzerdefinierte Eigenschaft TriagedByODA_c auf Y gesetzt. Die Regeln können diese benutzerdefinierte Eigenschaft verwenden, um sicherzustellen, dass die Unterhaltung nicht an den Digital Assistant-Agent weitergeleitet wird, wenn sie auf Y gesetzt ist. (Bei Oracle B2C Service bestimmt die Konfiguration Übergangsstatus und Stopp das Routing.)

System.AgentTransferCondition

Mit der Komponente System.AgentTransferCondition in digitalen Assistenten des Typs DA-as-agent können Sie bestimmen, ob Agents verfügbar sind und, falls ja, die erwartete Wartezeit.

Hinweis

In diesem Thema wird die Verwendung dieser Komponente im YAML-Modus behandelt. Informationen zur Verwendung im Visual Flow Designer finden Sie unter Bedingung für Agent-Transfer.

Mit den Eigenschaften der Komponente können Sie die Übertragungsbedingungen angeben. Außerdem wird eine Aktion zurückgegeben, die angibt, ob die Bedingungen erfüllt wurden. Darüber hinaus werden die Werte der benannten Kontextzuordnungsvariablen wie folgt festgelegt:

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.

Im Folgenden finden Sie ein Beispiel für die Verwendung dieser Komponente, um herauszufinden, ob Agents verfügbar sind, die Wartezeit zu melden und den Benutzern das Abbrechen der Transferanforderung zu ermöglichen, wenn sie nicht so lange warten möchten.

  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"

Tipp:

Im Folgenden finden Sie eine vorgeschlagene Resource Bundle-Definition, mit der Sie die erwartete Wartezeit anzeigen können:
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?
Eigenschaft Beschreibung Erforderlich?
agentStatusVariable Der Name der Kontextvariablen der Typzuordnung, die zum Speichern der Informationen zum Agent-Verfügbarkeitsstatus verwendet werden soll. Wenn die Eigenschaft nicht angegeben ist, werden keine Informationen gespeichert. Um eine Mapvariable zu referenzieren, verwenden Sie einen Wertausdruck wie: ${<mapVariableName>.value.<key>}. Beispiel: agentStatus.value.expectedWaitMinutes. Nein
allowTransferIf Gibt das Basisset von Bedingungen an, die erfüllt werden müssen.
  • agentsAreRequestingNewEngagements: (Standard) Für B2C-Agents, die Chats abrufen müssen (neue Engagements anfordern), müssen Agents Chats abgerufen haben. In allen anderen Fällen hat diese Option dasselbe Verhalten wie agentSessionsAreAvailable.
  • agentSessionsAreAvailable: Erfordert, dass Agents Chats anfordern.
  • agentsAreAvailable: Erfordert, dass mindestens ein Agent aktiv ist, unabhängig davon, ob er seine maximale Anzahl an Chats erreicht hat oder neue Engagements anfordert.

Wenn die angegebenen Bedingungen nicht erfüllt sind, wird die conditionsNotMet-Aktion ausgeführt.

Nein
customProperties Eine Map, die Informationen zum Übergeben an den Service enthält. Siehe Informationen an den Service übergeben. Diese Eigenschaft wird in Version 21.04 und höher unterstützt. Nein
errorMessage Die Nachricht, die dem Benutzer angezeigt wird, wenn der digitale Assistent Probleme mit dem Agent-Chat-Service hat. Standard ist We were unable to check the agent transfer conditions because there was a system error.. Diese Standardzeichenfolge wird im Konfigurationsressourcen-Bundle unter dem Schlüssel systemComponent_AgentTransferCondition_errorMessage gespeichert. Sie können die Eigenschaft auf eine leere oder leere Zeichenfolge setzen, um die Nachrichtenausgabe zu unterdrücken. Nein
maxEngagementsInQueue Die maximal zulässige Anzahl an Interaktionen, die in der Zielqueue warten. Wenn die Anforderung gesendet wird, antwortet der Chatservice mit der aktuellen Anzahl an Interaktionen, die in der Queue warten. Wenn dieser Wert maxEngagementsInQueue überschreitet, wird die conditionsNotMet-Aktion ausgeführt. Der Standardwert ist -1. Das bedeutet, dass die Interaktionen unbegrenzt sind. Nein
maxWaitSeconds Die maximal zulässige Anzahl der geschätzten Wartezeit in Sekunden. Wenn der Chatservice die Anforderung empfängt, antwortet er mit der geschätzten Wartezeit. Wenn dieser Wert maxWaitSeconds überschreitet, wird die Aktion conditionsNotMet ausgeführt. Diese Eigenschaft entspricht standardmäßig -1, d.h., es gibt keine maximale Wartezeit.

Beachten Sie, dass die Aktion conditionsNotMet auf der geschätzten Wartezeit und nicht auf der tatsächlichen Wartezeit basiert.

Nein

Diese Komponente kann folgende Aktionen zurückgeben:

Aktion Beschreibung
conditionsMet Der Übergang conditionsMet wird festgelegt, wenn er innerhalb der Geschäftszeiten liegt und die Bedingungen maxWaitSeconds, maxEngagementsInQueue und allowTransferIf erfüllt sind.
conditionsNotMet Der conditionsNotMet-Übergang wird festgelegt, wenn einer der folgenden Fälle auftritt:
  • Es ist außerhalb der Geschäftszeiten.
  • Die allowTransferIf-Bedingungen wurden nicht erfüllt.
  • Die geschätzte Wartezeit überschreitet maxWaitSeconds.
  • Die Anzahl der Interaktionen in der Queue überschreitet maxEngagementsInQueue.
error Der error-Übergang wird festgelegt, wenn bei der Prüfung der Agent-Bedingungen ein Problem mit der Verbindung zum Agent-Chatservice auftritt.

Beispiel: Agent-Verfügbarkeit und Wartezeit abrufen

Im Folgenden finden Sie ein Beispiel für einen Dialogablauf, der die Komponente aufruft, die Wartezeit anzeigt und dem Benutzer die Möglichkeit gibt, seine Transferanforderung abzubrechen.

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

Der Status askIfWillWait verwendet einen Resource Bundle-Eintrag, um die Wartezeitnachricht zu bilden, sodass die Nachricht sinnvoll ist, ob die Zeit mehr oder weniger als eine Minute beträgt und ob eine Zahl 0, eine oder mehrere ist.

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?

Beachten Sie, dass in diesem Beispiel System.SetCustomMetrics verwendet wird, um zu verfolgen, ob Agents verfügbar waren, und wenn ja, wie viele Benutzer gewartet haben und wie viele die Transferanforderung abgebrochen haben.

Live-Agent - Komponenten übertragen

System.AgentInitiation

Wenn Sie die Unterhaltung eines Skills an einen Oracle B2C Service-Agent übertragen möchten, fügen Sie diese Komponente dem Dialogablauf hinzu, um den Handshake mit dem Agent-Integrationskanal zu starten, der mit der Eigenschaft agentChannel angegeben wird. Sie müssen diese Komponente aufrufen, bevor Sie die Komponente System.AgentConversation aufrufen können.

Diese Komponente ist für Unterhaltungen bestimmt, die aus dem Skill stammen. Verwenden Sie diese Komponente nicht für Unterhaltungen, die aus einem Oracle B2C Service-Chat stammen, wie in Digital Assistant-Agent-Framework in Aktion beschrieben.

Nachfolgend finden Sie ein Beispiel für die Verwendung dieser Komponente, um den Handshake mit der Oracle B2C Service-Instanz zu initiieren, die vom Agent-Integrationskanal mit dem Namen ServiceCloudIntegration definiert wird.

  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"

Tipp:

In Skills mit Plattformversion 21.04 und höher werden die Standardwerte für die Eigenschaften agentActionsMessage, errorMessage, rejectedMessage, resumedMessage und waitingMessage im Resource Bundle des Skills gespeichert. Um einen Standardwert zu ändern, öffnen Sie die Seite Resource Bundle des Skills, klicken Sie auf Symbol für Resource Bundles, wählen Sie die Registerkarte Konfiguration aus, und ändern Sie die Nachricht für den Schlüssel AgentInitiation - <Eigenschaftsname>. Wenn Sie das Resource Bundle des Skills verwenden, um die Standardnachricht zu ändern, müssen Sie die Nachrichteneigenschaft nur in die Komponente aufnehmen, wenn Sie den Standardwert außer Kraft setzen möchten.
Eigenschaft Beschreibung Erforderlich?
agentActions Eine Liste der Aktionen, die der Agent auslösen kann, um den Chat zu beenden und den Ablauf in den für die Übergangsaktion definierten Status weiterzuleiten. In der Konsole des Kundenservicemitarbeiters werden diese Aktionen als Schrägstrichbefehle angezeigt, wenn die Agent-Unterhaltung initiiert wird, wie in diesem Beispiel gezeigt:
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.

Die Aktionsnamen müssen den actions-Eigenschaften der System.AgentConversation entsprechen. Beispiel: Im folgenden Status agentInitiation entsprechen die Einträge ShowMenu und OrderPizza in der Eigenschaft agentActions den Aktionen, die für den Status agentConversation definiert sind:

  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"

Sie können die agentActions-Listenelemente auf verschiedene Arten definieren:

  • Als Liste von Zuordnungen, bei denen jede Zuordnung eine Aktionseigenschaft, eine Werteigenschaft und optional eine Beschreibungseigenschaft enthalten muss. Beispiel:
          - action: "action1"
            label: "label1"
            description: "description1"
          - action: "action2" 
            label: "label2"
            description: "description2"
  • Als JSON-Array, wobei jedes Objekt im Array eine Aktionseigenschaft, eine Werteigenschaft und optional eine Beschreibungseigenschaft enthalten muss. Beispiel:
          [
          {action: "action1",
          label: "label1",
          description: "description1"},
          {action: "action2",
          label: "label2",
          description: "description2"}      
          ]
  • Als durch Komma getrennte Zeichenfolge mit Aktionswerten Das Label und die Beschreibung sind mit dem Aktionswert identisch. Beispiel:
    "action1, action2"
Nein
agentActionsMessage Wenn die Eigenschaft agentActions festgelegt ist, zeigt die Agent-Konsole diesen Wert anstelle der Standardnachricht an. Beispiel:

agentActionsMessage: "\nWenn Sie fertig sind, können Sie entweder beenden oder eine dieser Aktionen senden.\n"

Nein
agentChannel Benennt den Agent-Integrationskanal. Dieser Wert, der Name des Agentenintegrationskanals und die für die Komponente System.AgentConversation definierte Eigenschaft agentChannel müssen übereinstimmen. Ja
allowTransferIf Gibt die Bedingungen an, unter denen der Skill die Chatsession übertragen soll. Die Komponente verwendet den queueId-Wert, um die Queue zu identifizieren, von der die Statistiken abgerufen werden. Sie sollten sicherstellen, dass die Chatregeln die Unterhaltung tatsächlich in die angegebene Queue übertragen und nicht in eine andere Queue.
  • agentsAreRequestingNewEngagements: Das ist das restriktivste Bedingungsset. Der Skill versucht nur dann, die Unterhaltung zu übertragen, wenn Agents neue Interaktionen angefordert (Chats abgerufen) haben und der angegebenen Queue zugewiesen sind oder wenn der Chatserver Chats automatisch an Agents weiterleitet und Agents vorhanden sind, die Chats empfangen können, ihre maximale Anzahl an Chats noch nicht erreicht haben und der angegebenen Queue zugewiesen sind. Mit dieser Option muss der Benutzer nicht allzu lange warten, bevor er mit dem Agent spricht.
  • agentSessionsAreAvailable: Der Skill versucht, die Unterhaltung zu übertragen, wenn Agents verfügbar sind, die ihre maximale Anzahl an Chats noch nicht erreicht haben und der angegebenen Queue zugewiesen sind. Der Benutzer muss möglicherweise warten, wenn die Agents an längeren Unterhaltungen beteiligt sind oder eine Nachverfolgung nach einem Chat durchführen.
  • agentsAreAvailable: Der Skill versucht, die Unterhaltung zu übertragen, wenn Agents online sind, die der angegebenen Queue zugewiesen wurden, unabhängig davon, ob sie ihre maximale Anzahl an Chats erreicht haben oder neue Interaktionen anfordern. Mit dieser Option kann es für die Benutzer zu langen Wartezeiten kommen.

Wenn die angegebene Bedingung nicht erfüllt wird, gibt die Komponente rejected zurück.

Wenn Sie diese Eigenschaft aufnehmen, müssen Sie auch die Eigenschaft queueId aufnehmen.

Diese Eigenschaft ist nur in Instanzen von Oracle Digital Assistant verfügbar, die auf Oracle Cloud Infrastructure bereitgestellt wurden (auch als Cloud-Infrastruktur der 2. Generation bezeichnet).

Nein
chatResponseVariable Benennt die Zuordnungsvariable, die die Agent-Antwortinformationen enthält. Nachdem die Komponente System.AgentInitiation erfolgreich verbunden wurde, enthält die Zuordnung die folgenden Eigenschaften:
{
  "sessionID": "string", // agent session id

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

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

  "cancelledSurveyID": {
    "id": "int"
  }
}
Nein
customProperties Eine Map, die die Vorfalls-ID, die Schnittstelle, den Kontakt oder benutzerdefinierte Felder (oder eine Kombination daraus) zum Übergeben an den Service enthält. Um eine Mapvariable zu referenzieren, verwenden Sie einen Wertausdruck wie: ${mapVariableName.value}. Siehe Kundeninformationen an einen Livechat übergeben. Nein
errorMessage Die Nachricht, die angezeigt werden soll, wenn beim Herstellen der Verbindung mit Oracle B2C Service ein Problem aufgetreten ist. Beispiel: Das Kennwort im Agent-Integrationskanal ist nicht mehr gültig, oder es ist ein Problem mit dem Server aufgetreten. Nein
nlpResultVariable Die Variable, die die Abfragenachricht des Kunden speichert. Nein
rejectedMessage Eine Nachricht, die angezeigt wird, wenn das AgentInitiation-Handshake abgelehnt wurde, z.B. wenn es außerhalb der konfigurierten Geschäftszeiten liegt. Beispiel:

rejectedMessaage: "Im Moment sind leider keine Agents verfügbar."

Nein
resumedMessage Eine Nachricht (z.B. Einen Moment bitte, wir verbinden Sie mit einem Agent.), die angezeigt wird, wenn der Chat des Kunden mit dem Kundenservicemitarbeiter wiederaufgenommen wird. Durch das Hinzufügen dieser Eigenschaft wird verhindert, dass Kunden, deren Anforderungen bereits in die Queue gestellt wurden, eine irreführende Nachricht Chat mit Agent wird wiederaufgenommen erhalten, wenn sie wiederholt einen Livechat anfordern. Nein
subject Die Betreffzeile, die in der Konsole des Agent nach der Übergabe an die Agent-Plattform angezeigt wird. Standardmäßig ist dies die letzte Kundennachricht, die in der Eigenschaft nlpResultVariable gespeichert wurde. Sie können dies jedoch auch mit einer Variablen definieren, die Sie vorher in der Dialogablaufdefinition festgelegt haben. Beispiel: Sie können eine Kontextvariable des Typs string definieren, deren Wert vor der Komponente System.AgentInitiation festgelegt wird:

subject: "Ein Kunde benötigt Hilfe zu: ${context_variable.value}"

Nein
queueId Die ID der Queue, mit der die Komponente bestimmen muss, ob die angegebene allowTransferIf-Bedingung erfüllt ist. Diese muss die ID der Queue sein, an die die Oracle B2C Service-Chatregeln diese Unterhaltung weiterleiten.

Diese Eigenschaft wird ignoriert, wenn die Eigenschaft allowTransferIf nicht vorhanden ist.

Erforderlich, wenn die Eigenschaft allowTransferIf vorhanden ist.
transcriptDateTimeFormat Das Format für Datum und Uhrzeit in den Transkriptnachrichten der Unterhaltung, die an den Agent weitergeleitet werden. Gültige Muster finden Sie in der Java-Klasse DateTimeFormatter. Beispiel: dd/MM/yyyy HH:mm. Der Standardwert ist yyyy-mmm-ddThh:mm:ssZ. Nein
transcriptTimezoneName Der Internet Assigned Numbers Authority-(IANA-)Name der Zeitzone, die zur Formatierung des Unterhaltungstranskripts mit der Eigenschaft transcriptDateTimeFormat verwendet wird. Beispiel: America/Sao_Paulo. Der Standardwert ist Europe/London. Wenn Sie die Eigenschaft transcriptDateTimeFormat nicht aufnehmen, wird diese Eigenschaft ignoriert. Nein
waitingMessage Eine Nachricht, die angezeigt wird, während Kunden auf die Verbindung mit einem Agent warten. Beispiel:

waitingMessage: "Sie sind der Chatsession beigetreten. Ein Agent ist gleich für Sie da.

Nein

System.AgentInitiation-Übergänge

Die Komponente System.AgentInitiation gibt die Aktionen accepted, rejected und error zurück. Diese Aktionen können jeweils auf einen anderen Status zeigen, wobei die Aktion accepted normalerweise den Status für die Komponente System.AgentConversation benennt:
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      agentChannel: "ServiceCloudIntegration"
      ...
    transitions:
      actions:
        accepted: "agentConversation"
        rejected: "noAgentsAvailable"
        error: "handshakeError"
Aktion Beschreibung
accepted Der Handshake wurde erfolgreich abgeschlossen, und der Status kann in den Status mit der Komponente System.AgentConversation wechseln.
error Beim Herstellen der Verbindung mit Oracle B2C Service ist ein Problem aufgetreten. Beispiel: Das Kennwort im Agent-Integrationskanal ist nicht mehr gültig, oder es ist ein Problem mit dem Service Cloud-Server aufgetreten.
rejected Oracle B2C Service hat die Verbindungsanforderung abgelehnt. Einige Gründe für die Ablehnung einer Verbindungsanforderung:
  • Keine Agents verfügbar (erfordert die Eigenschaften allowTransferIf und queueId)
  • Sie liegt außerhalb der konfigurierten Geschäftszeiten.
  • Es ist ein Feiertag.
  • Es liegt ein Problem mit dem Chatserver vor.

Wenn Sie allowTransferIf und queueId nicht festlegen, wird die abgelehnte Aktion nicht ausgeführt, wenn keine Agents verfügbar sind. Stattdessen bleibt die Übertragung in einer Wartebedingung.

Beispiel: Ablehnung der Agent-Initiierung und Systemfehler verarbeiten

Nachfolgend finden Sie ein Beispiel für die Verarbeitung von Systemfehlern und der error- und rejected-Aktionen.

  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"

Beispiel: Die Eigenschaft 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}"

Beispiel: Das Standardobjekt customerInformation

In diesem Beispiel wird contactID festgelegt.

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

Beispiel: Das Legacy-Objekt customerInformation

In diesem Beispiel werden interfaceID und contactID festgelegt.

Tipp:

Da die WSDL angibt, dass interfaceID vom Typ NamedID ist, hätten wir name: "myInterfaceName" anstelle von id: id: "${interfaceId}" verwenden können.
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}"

Beispiel: Das Standardobjekt customFields

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

Beispiel: Das Legacy-Objekt customFields

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

Beispiel: Benutzerdefiniertes Eigenschaftsobjekt assemblieren

In diesen Schritten wird beschrieben, wie Sie das Objekt customProperties deklarieren und die verschiedenen Werte festlegen können.

Schritt 1: Variable "customProperties" deklarieren
Definieren Sie im Kontextknoten eine Zuordnungsvariable für die Eigenschaft customProperties in der Komponente System.AgentInitiation. Dabei handelt es sich um ein JSON-Objekt, das die Kundeninformationen des Chats und benutzerdefinierte Feldwerte enthalten kann. Im folgenden Beispiel wird diese Variable als liveChatInfo deklariert:
context:
  variables:
    size: "PizzaSize"
    type: "PizzaType"
    crust: "PizzaCrust"
    iResult: "nlpresult"
    interfaceId: "string"
    categoryId: "string"
    skillType: "string"
    liveChatInfo: "map"
Schritt 2: Werte für die Zuordnungsvariable "customProperties" festlegen
Definieren Sie im Kontextknoten eine Zuordnungsvariable für die Eigenschaft customProperties in der Komponente System.AgentInitiation. Dabei handelt es sich um ein JSON-Objekt, das die Kundeninformationen des Chats und benutzerdefinierte Feldwerte enthalten kann. Im folgenden Beispiel wird diese Variable als liveChatInfo deklariert:
context:
  variables:
    size: "PizzaSize"
    type: "PizzaType"
    crust: "PizzaCrust"
    iResult: "nlpresult"
    interfaceId: "string"
    categoryId: "string"
    skillType: "string"
    liveChatInfo: "map"
Schritt 3: Felder für die Zuordnungsvariable "customProperties" definieren
Unabhängig davon, ob Sie die Mapwerte über eine benutzerdefinierte Komponente oder den Dialogablauf festlegen, müssen Sie das Mapobjekt strukturieren. Verwenden Sie die Standardobjektformate, es sei denn, der Agent-Integrationskanal wurde vor Version 20.1 erstellt, oder der Kanal stellt eine Verbindung zu einer Oracle B2C Service-Version vor 19A her. Beispiel für das Standardformat:

  setLiveChatInfo:
    component: "System.SetVariable"
    properties:
      variable: "liveChatInfo"
      value:
        customerInformation: 
          categoryID:
            id: "${categoryId}"             
        customFields: 
          - name: "c$skilltype"
            type: "STRING"
            value: "${skillType}"
    transitions:
      next: "agentInitiation"
Schritt 4: customProperties zur Komponente "System.AgentInitiation" hinzufügen
Im letzten Schritt fügen Sie die Eigenschaft customProperties der Komponente System.AgentInitiation hinzu und definieren sie mit einem Ausdruck, der auf den Wert der Zuordnungsvariablen zugreift.
  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

Mit dieser Komponente können Sie die Unterhaltung eines Skills an einen Oracle B2C Service-Live-Agent übertragen und den Austausch zwischen Skill und Live-Agent verwalten. Beachten Sie, dass Sie die Komponente System.AgentInitiation aufrufen müssen, bevor Sie diese Komponente verwenden können.

System.AgentConversation ist für Unterhaltungen bestimmt, die aus dem Skill stammen. Verwenden Sie diese Komponente nicht für Unterhaltungen, die aus einem Oracle B2C Service-Chat stammen, wie in Digital Assistant-Agent-Framework in Aktion beschrieben.

Nachfolgend finden Sie ein Beispiel für die Verwendung dieser Komponente zur Übertragung der Unterhaltung an die Oracle B2C Service-Instanz, die vom Agent-Integrationskanal mit dem Namen ServiceCloudIntegration definiert wird.

  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"
Eigenschaft Beschreibung Erforderlich?
agentChannel Benennt den Agent-Integrationskanal. Dieser Wert, der Name des Agentenintegrationskanals und die für die Komponente System.AgentInitiation definierte Eigenschaft agentChannel müssen übereinstimmen. Ja
conclusionMessage Eine automatisierte Nachricht, die an den Kunden gesendet wird, wenn entweder der Benutzer ein Beendigungsschlüsselwort eingibt, die Aktion agentLeft ausgelöst wird oder der Agent die Unterhaltung beendet, ohne eine der agentActions zu senden. Beispiel: Ihr Chat mit dem Agent wurde beendet. Nein
errorMessage Die Nachricht, die der Chat anzeigt, wenn ein Problem mit der Verbindung zu Oracle B2C Service vorliegt.

Die Standardnachricht lautet Chat session error. The reason is {cause}.

Diese Eigenschaft kann nur mit Instanzen von Oracle Digital Assistant verwendet werden, die auf Oracle Cloud Infrastructure bereitgestellt wurden (auch als Cloud-Infrastruktur der 2. Generation bezeichnet).

Nein
exitKeywords Eine durch Komma getrennte Liste typischer Beendigungswörter, die von einem Kunden verwendet werden, um die Unterhaltung mit dem Live-Agent zu beenden. Beispiel:

exitKeywords: "tschüss, beenden, alles Gute, auf Wiedersehen, Ende"

Der Eigenschaftswert lautet standardmäßig bye, take care, see you, goodbye.

Nein
expiryMessage Eine Nachricht, die angezeigt wird, wenn die Aktion expired ausgelöst wird. Die Standardnachricht ist Chatsession abgelaufen. Vielen Dank, dass Sie mit uns gechattet haben.

Beachten Sie, dass conclusionMessage nicht ausgegeben wird, wenn expiryMessage ausgegeben wird.

Die Ablaufnachricht wird nicht ausgegeben, wenn die Unterhaltung beendet wird, weil die Service Cloud-Eigenschaft USER_WAIT_QUEUE_TIMEOUT überschritten wurde.

Nein
nlpResultVariable Die Variable nlpResultVariable, die die Abfragenachricht des Kunden enthält. Nein
waitExpiryMessage Die Nachricht, die dem Benutzer angezeigt wird, wenn der Chat beim Warten auf einen Agent abläuft. Die Standardnachricht lautet The request for live chat expired while waiting for an agent. Nein
waitMessage Standardmäßig zeigt der Skill nach dem Initiieren der Dialogübertragung die Wartenachricht an, die der Livechatservice an den Skill sendet, wie die Queueposition und die Wartezeit. Mit dieser Eigenschaft können Sie die Nachricht anpassen. Beispiel:

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

Nein

System.AgentConversation-Übergänge

Die Aktion System.AgentConversation kann die Aktion expired, agentLeft, error oder waitExpired auslösen. Außerdem kann sie jede Aktion aus der Eigenschaft agentActions der Komponente System.AgentInitiation auslösen. Sie müssen auch einen next-Übergang hinzufügen, da ein Kunde möglicherweise eines der exitKeywords eingeben kann, um den Chat zu verlassen, bevor diese Aktionen ausgelöst werden können.


  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"
...
      
    
Aktion Beschreibung
agentActions Wenn die Komponente System.AgentInitiation eine Eigenschaft agentActions aufweist, muss diese Komponente eine Übergangsaktion für jede unterstützte Aktion aufweisen, die von agentActions angegeben wird.
agentLeft Der Agent hat die Session beendet, ohne eine Schrägstrichaktion zu verwenden (z.B. /Order). Alternativ wurde die Session beendet, weil es innerhalb der von der Oracle B2C Service-Konfiguration CS_IDLE_TIMEOUT angegebenen Zeit keine Aktivität gab und diese Konfiguration kleiner ist als die Einstellung Sessionablauf für den Agent-Integrationskanal. Weitere Informationen finden Sie in der Aktion expired.

Beachten Sie, dass diese Aktion nicht zurückgegeben wird, wenn der Benutzer die Unterhaltung durch Eingabe eines Beendigungsschlüsselworts verlässt. In diesem Fall wechselt der Ablauf in den Status, der durch den next-Übergang benannt ist, oder, falls kein next-Übergang vorhanden ist, in den nächsten Status im Ablauf.

error

Beim Verbinden mit dem Live-Agent-Service ist ein Problem aufgetreten.

Diese Aktion kann nur mit Instanzen von Oracle Digital Assistant verwendet werden, die auf Oracle Cloud Infrastructure bereitgestellt wurden (auch als Cloud-Infrastruktur der 2. Generation bezeichnet).

expired

Wenn die Oracle B2C Service-Einstellung CS_IDLE_TIMEOUT größer oder gleich der Einstellung Sessionablauf für den Agent-Integrationskanal ist, wird diese Aktion ausgelöst, wenn weder der Endbenutzer noch der Agent eine Nachricht innerhalb des Grenzwerts für den Sessionablauf sendet. Wenn CS_IDLE_TIMEOUT kleiner als die Einstellung Sessionablauf für den Agent-Integrationskanal ist und es keine Aktivität gibt, beendet Oracle B2C Service den Chat, und die agentLeft-Aktion wird stattdessen ausgelöst.

Standardmäßig beträgt CS_IDLE_TIMEOUT 10 Minuten.

Die expired-Aktion wird nicht zurückgegeben, wenn die Unterhaltung beendet wird, weil die Service Cloud-Eigenschaft USER_WAIT_QUEUE_TIMEOUT überschritten wurde. Setzen Sie diese Konfiguration auf einen hohen Wert, z.B. 7200 Sekunden (2 Stunden).

Um die Einstellungen Ihrer Oracle B2C Service-Instanz anzuzeigen oder zu ändern, öffnen Sie die Desktopkonsole, klicken Sie auf Navigation, klicken Sie im Menü auf die erste Option unter Konfiguration, und klicken Sie dann auf Konfigurationseinstellungen. Suchen Sie dann nach der Einstellung im Ordner Chat.

waitExpired Die Chatanfrage ist beim Warten auf einen Agent abgelaufen. Das geschieht, wenn die Wartezeit den Wert in der Einstellung USER_WAIT_QUEUE_TIMEOUT des Chatclients überschreitet.

Beispiel: Dialogablauf für Agent-Übertragung konfigurieren

In diesem Beispiel wird das Intent GetAgent darauf trainiert, Hilferufe wie Helfen Sie mir bitte! zu verstehen.

intent:
    component: "System.Intent"
    properties:
      variable: "iResult"
    transitions:
      actions:
        OrderPizza: "resolvesize"
        CancelPizza: "cancelorder"
        GetAgent: "agentInitiation"
        unresolvedIntent: "agentInitiation"

Grundlegende Schritte beim Konfigurieren des Dialogablaufs:

  1. Starten Sie die Live-Agent-Übertragung:

    1. Fügen Sie einen Status für die Komponente System.AgentInitiation hinzu.

    2. Setzen Sie die Eigenschaft agentChannel des Status auf den Namen des Agent-Integrationskanals, den Sie für das Live-Agent-System konfiguriert haben.

    Nachdem der Agent-Integrationskanal eine Verbindung aufgebaut und Oracle B2C Service die Chatanfrage an seine Queue gesendet hat (d.h. nachdem ein Hilfeticket erstellt wurde), lässt die Komponente System.AgentInitiation den Übergang zum nächsten Status zu. Dieser ist typischerweise für die Komponente System.AgentConversation definiert (AgentConversation im folgenden Beispiel).
    
      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"

    Tipp:

    Kunden können wiederholt einen Livechat anfordern, auch wenn ihre Anforderungen bereits in der Agent-Chatkonsole in die Queue gestellt wurden. Fügen Sie dem Status System.AgentInitiation eine Eigenschaft resumedMessage hinzu, um zu verhindern, dass Kunden die irreführende Nachricht Wiederaufnahme des Chats mit dem Agent erhalten.
  2. Fügen Sie die Komponente System.AgentConversation hinzu, und konfigurieren Sie sie. Während sich die Dialog-Engine in dem für diese Komponente definierten Status befindet, übergibt der Skill Nachrichten zwischen Kunden und Agent. Der Skill überwacht die Kundeneingabe auf Beendigungsschlüsselwörter wie Tschüss. Wenn der Skill eines dieser Schlüsselwörter erkennt, beendet die Komponente System.AgentConversation die Livechatsession und löst den Übergang next aus.

    Beispiel:

      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"

Beispiel: Umfrageinformationen abrufen

Im folgenden Beispiel für das Standardformat gibt die Komponente AgentConversation einen Umfragelink aus, nachdem die Agent-Unterhaltung beendet wurde. Der Link umfasst die Session- und Engagement-ID aus der Zuordnung, die mit der Eigenschaft chatResponseVariable benannt wurde.

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"

Beispiel: Chat an eine bestimmte Oracle B2C Service-Queue übertragen

  1. Falls noch nicht geschehen, definieren Sie im Kontextknoten eine Zuordnungsvariable, die mit der Eigenschaft customProperties der Komponente System.AgentInitiation verwendet werden soll. Beispiel:

    context:
      variables:
        greeting: "string"
        name: "string"
        liveChatInfo: "map"
    
  2. Definieren Sie die Felder für die Zuordnungsvariable.

    Im Folgenden finden Sie ein Beispiel für das Standardformat für Agent-Integrationskanäle, die in Version 20.01 oder höher erstellt wurden und eine Verbindung zu Oracle B2C Service Version 19A oder höher herstellen.

      setLiveChatInfo:
        component: "System.SetVariable"
        properties:
          variable: "liveChatInfo"
          value:
            customFields: 
              - name: "c$frombot"
                type: "BOOLEAN"
                value: 1
        transitions:
          next: "agentInitiation"

    Im Folgenden finden Sie ein Beispiel für das Legacy-Format für Agent-Integrationskanäle, die vor Version 20.01 erstellt wurden oder die eine Verbindung zu einer Version vor Oracle B2C Service Version 19A herstellen.

      setLiveChatInfo:
        component: "System.SetVariable"
        properties:
          variable: "liveChatInfo"
          value:
            customFields: 
              - name: "c$frombot"
                dataType: "BOOLEAN"
                dataValue:
                  booleanValue: true
        transitions:
          next: "agentInitiation"
  3. Fügen Sie die Eigenschaft customProperties der Komponente System.AgentInitiation hinzu, und setzen Sie sie auf den Wert der Zuordnungsvariablen. Beispiel:

      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

Hinweis

In diesem Thema wird die Verwendung dieser Komponente im YAML-Modus behandelt. Informationen zur Verwendung im Visual Flow Designer finden Sie unter Entity auflösen.

Iteriert durch alle Entityfelder in der Mischentity, unterhält sich mit dem Benutzer und löst alle Felder auf. Die Komponente wählt die für jede Entity angegebenen Prompts zufällig aus, während diese Entity aufgelöst wird.

Eigenschaft Beschreibung Erforderlich
variable Bezieht sich auf die Kontextvariable der Mischentity, die von dieser Komponente aufgefüllt wird. Wenn alle untergeordneten Entitys der zusammengesetzten Entityvariable bereits einen Wert haben, geht der Dialogablauf in den nächsten Status über, ohne dass dem Benutzer eine Nachricht gesendet wird. Ja
nlpResultVariable Füllt die Eigenschaft variable (die auf die Mischentityvariable verweist) mit den in der Kontextvariablen nlpresult gespeicherten Werten auf. Sie können diese Eigenschaft definieren, indem Sie die Variable nlpresult (normalerweise iResult) benennen. Wenn das Framework eine einzelne untergeordnete Entity auflöst, wird die Eigenschaft variable nur mit diesem Entitywert aufgefüllt. Wenn die Variable nlpresult Werte für alle untergeordneten Entitys enthält, geht der Dialogablauf in den nächsten Status über. Sie können diese Eigenschaft anstelle der SetVariable-Status verwenden, die die untergeordneten Entitywerte auffüllen. Nein
maxPrompts Gibt die Anzahl der dem Benutzer zugeteilten Versuche an, einen gültigen Wert einzugeben, der dem untergeordneten Entitytyp entspricht. Wenn die maximale Anzahl an Versuchen für die erste untergeordnete Entity überschritten wird, wird diese Eigenschaft auf 0 zurückgesetzt, und der Bot gibt den Prompt für die nächste untergeordnete Entity aus. Wie in Mischentity erstellen beschrieben, können einzelne Entitys in der Mischentity diese Einstellung außer Kraft setzen, wenn die Option Maximale Benutzereingabeversuche festgelegt ist. Nein
autoNumberPostbackActions Wenn Sie dies auf true setzen, stellt diese Option den Optionen Zahlen voran. Selbst wenn Sie diese Option nicht auf true gesetzt haben, kann die automatische Nummerierung für Listenelemente erzwungen werden, wenn die Konfiguration Automatische Nummerierung bei Postback-Aktionen aktivieren des digitalen Assistenten auf true gesetzt ist. Kanalspezifische automatische Nummerierung kann auf alle bei einem digitalen Assistenten registrierten Skillbots angewendet werden:
${(system.channelType=='twilio')?then('true','false')}
Nein
useFullEntityMatches Wenn dieser Wert auf true gesetzt ist, werden benutzerdefinierte Entitywerte als JSON-Objekte gespeichert (ähnlich wie integrierte Entitywerte). Auf diese Weise können Sie Ausdrücke für den Zugriff auf Eigenschaften wie value, primaryLanguageValue und originalString erstellen. Diese sind besonders wichtig für Skills, die derzeit mehrsprachig sind oder das noch werden können.  
footerText Erweitert die Ausgabe auf textbasierten Kanälen. Wie unter Footer beschrieben, können Sie FreeMarker-Ausdrücke verwenden, um den Footertext für Nur-Text-Kanäle bedingt zu formatieren. Nein
headerText Eine Nachricht, die angezeigt wird, bevor die Komponente den Benutzer zur Eingabe des nächsten Elements in der Mischentity auffordert. Mit diesem Header können Sie Feedback zu den vorherigen Entitys in der Mischentity abgeben, die abgeglichen (oder aktualisiert) wurden.
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>"
Nein
transitionAfterMatch Ein boolescher Wert, der, wenn Sie ihn auf true setzen, einen temporären Übergang von der Entityübereinstimmung, die von dieser Komponente ausgeführt wird, zu einer benutzerdefinierten Komponente ermöglicht. Standardmäßig ist diese Einstellung false. Diese Eigenschaft wird ignoriert (und der match-Übergang wird nicht ausgelöst), wenn Sie einen Entityereignis-Handler registriert haben. Nein
cancelPolicy Bestimmt den Zeitpunkt des cancel-Übergangs:
  • immediate - Unmittelbar nachdem die zugewiesenen maxPrompts-Versuche für eine Entity in der Mischentity erreicht wurden.

  • lastEntity - Wenn die letzte Entity in der Mischentity mit einem Wert abgeglichen wurde.

Diese Eigenschaft wird ignoriert, wenn Sie einen Entity-Event-Handler bei einem maxPromptsReached-Handler auf Element- oder Ereignisebene registriert haben.
Nein

Kalenderkomponenten

Verwenden Sie die folgenden Kalenderkomponenten, um mit Outlook- und Google-Kalendern zu interagieren:

Kalenderautorisierung

Um die Interaktion zwischen einem Skill und einem Kalenderprovider zu ermöglichen, müssen Sie einen Service einrichten und den Skill und Dialogablauf ändern, damit der Benutzer sich über diesen Service bei seinem Kalender anmelden kann.

Bevor Sie eine Kalenderkomponente verwenden, müssen Sie eine Anwendung beim Kalenderprovider registrieren und einen Autorisierungscodeservice erstellen. In diesen Themen werden die jeweiligen Schritte beschrieben:

Verwenden Sie im Dialogablauf die Komponente System.OAuth2AccountLink, um den Benutzer zur Anmeldung bei seinem Kalender über den von Ihnen erstellten Autorisierungscodeservice aufzufordern. Beachten Sie, dass Sie die Eigenschaft enableSingleSignOn der Komponente nicht auf true setzen können, wenn Sie die Komponente zur Kalenderkomponentenautorisierung verwenden.

Sie können das Feature "Autorisierung erforderlich" nutzen, um vor dem Aufrufen von Kalenderkomponenten automatisch sicherzustellen, dass sich der Benutzer angemeldet (einen Zugriffstoken erhalten) hat. Dieses Feature fordert den Benutzer nur dann zur Anmeldung auf, wenn er noch kein Zugriffstoken hat oder dieses abgelaufen ist und nicht aktualisiert werden kann. Sie können die Einstellung Autorisierung erforderlich des Skills verwenden, um den Standardwert für den gesamten Skill festzulegen. Verwenden Sie dann die Einstellung requiresAuthorization auf Statusebene, um den Standardwert außer Kraft zu setzen. Das heißt, Sie verwenden die Skilleinstellung, um den Standardwert festzulegen, und nehmen dann die Einstellung requiresAuthorization der Komponente nur in die Statusangaben auf, für die der Standardwert nicht gilt.

Um das Feature "Autorisierung erforderlich" zu verwenden, müssen Sie dem Knoten defaultTransitions eine system.authorizeUser-Aktion hinzufügen, um den Status zu benennen, der den Autorisierungsablauf startet. Beispiel:

defaultTransitions:
  error: "globalErrorHandler"
  actions:
    system.authorizeUser: "userAuthN.performOAuth"

Bevor ein Skill in einen Status übergeht, für den eine Autorisierung erforderlich ist, wird geprüft, ob ein gültiges Zugriffstoken für den Kalenderservice vorhanden ist. Wenn nicht, werden folgende Aktionen ausgeführt:

  1. Der Skill ruft den Status auf, den Sie für die system.authorizedUser-Aktion im Knoten defaultTransitions definiert haben.

  2. Der Benutzer wird aufgefordert, sich anzumelden.

  3. Der Skill wechselt zum Status, für den die Autorisierung erforderlich war (also der durch ${system.requestedState} definierte Status).

Beispiel für einen Autorisierungsdialogablauf:

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" 

Bei einem Skill, der sich hauptsächlich auf Kalenderkomponenten bezieht, sollten Sie die Konfiguration Autorisierung erforderlich des Skills auf true setzen und dann den Wert nur für die Statusangaben auf "false" setzen, die keine Autorisierung erfordern. In diesem Beispiel kann jeder Benutzer die Status initTimezoneOffset und intent ausführen. Daher ist requiresAuthorization für diese Status auf false gesetzt. Die Status, die mit den Kalenderkomponenten verwendet werden, müssen nicht requiresAuthorization enthalten, da der Standardwert true ist.

  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"

Mit Kalenderdatumsangaben und -zeiten arbeiten

Bei der Arbeit mit den Kalenderkomponenten müssen Sie sich mit dem Zusammenhang zwischen den Start- und Endzeiten des Kalenders, DATE- und TIME-Entitys und der lokalen Zeitzone vertraut machen.

Wenn Sie Ereignisse erstellen, aktualisieren oder abrufen, verwenden Sie den lokalen Datums-/Uhrzeitwert für die Werte start und end. Mit der Eigenschaft timezoneOffset oder timezone teilen Sie der Komponente mit, wie die Universalzeit (UTC) berechnet werden soll.

timezoneOffset der Kalenderkomponenten unterscheidet sich von profile.timezoneOffset. Bei Kalenderkomponenten ist timezoneOffset der Wert, den die Komponente den Werten start und end hinzufügen muss, um die UTC abzurufen. Sie können den Eigenschaftswert timezoneOffset einer Kalenderkomponente ableiten, indem Sie profile.timezoneOffset mit -1 multiplizieren.

profile.timezoneOffset ist möglicherweise nicht immer verfügbar. Das hängt davon ab, ob der Client den Offset bereitgestellt hat. Beispiel: Ein Benutzer kann eine Oracle-Web-App erstellen, die profile.timezoneOffset nicht festlegt. Daher ist es empfehlenswert, eine Standardzeitzone für Fälle zu erstellen, in denen profile.timezoneOffset nicht festgelegt wurde. Beispiel:

  initTimezoneOffset:
    requiresAuthorization: false
    component: "System.SetVariable"
    properties:
      variable: "timezoneOffset"
      value: <#attempt>${profile.timezoneOffset}<#recover>${system.config.defaultTimezoneOffset}</#attempt>      
    transitions:
      next: "intent

Wenn Sie ein Ereignis abrufen, gibt die Komponente die Datums-/Uhrzeitwerte im UTC-Format zurück. Beispiel: 2021-04-15T22:00:00.000Z. Der Skill muss den Wert in die Ortszeit konvertieren.

  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"

Berücksichtigen Sie folgende Punkte bei Verwendung der Entitys DATE und TIME:

  • Wenn Sie eine Mischentity verwenden, die sowohl eine DATE- Entity als auch eine oder mehrere TIME-Entitys enthält, müssen Sie Out-of-Order-Extraktion deaktivieren. Wenn die Entitys aufgelöst werden, haben Sie andernfalls keine Kontrolle darüber, welche Werte als DATE-Entity und welche Werte als TIME-Entity (oder beides) aufgelöst werden. Beispiel: Wenn TIME aufgelöst wird, kann der Wert der DATE-Entity dadurch geändert werden.

  • Wenn eine Äußerung Text wie "gestern", "heute" oder "morgen" enthält, berücksichtigt der Parser die lokale Zeitzone nicht. Daher ist es möglich, dass am frühen Morgen und am späten Nachmittag das falsche Datum verwendet wird. Aus diesem Grund empfiehlt es sich, das aufgelöste Datum erneut anzuzeigen, damit der Benutzer es prüfen kann, bevor der Skill ein Ereignis hinzufügt oder die Start- oder Endzeit eines Ereignisses aktualisiert.

  • Um die Eigenschaftswerte start und end eines Kalenders festzulegen, müssen Sie das Datum aus der DATE-Entity und die Uhrzeit aus der TIME-Entity verwenden. Beispiel:

          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']}"

Kalenderfehler verarbeiten

Der Kalenderprovider kann eine Ereignisanforderung ablehnen. Beispiel: Es kann ein Fehler zurückgegeben werden, wenn der Benutzer versucht, ein Ereignis zu erstellen, dessen Endzeit vor der Startzeit liegt. In den meisten Fällen gibt der Kalenderprovider einen 400-Fehler zurück, der wiederum den Skill an den globalen Error Handler überträgt.

Validieren Sie die Werte, um zu verhindern, dass diese Fehler auftreten. Beispiele für Validierungen von Mischentitys:

  • DATE-Entity: Validieren Sie bei neuen und aktualisierten Besprechungen, ob das Datum am oder nach dem aktuellen Datum liegt.

    ${(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')}
  • TIME-Entity: Prüfen Sie bei neuen und aktualisierten Besprechungen, ob Datum und Startzeit am oder nach dem aktuellen Datums-/Uhrzeitwert liegen.

    ${(((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')}

    Prüfen Sie für alle Endzeiten, ob die Endzeit nach der Startzeit liegt.

    ${(newEvent.value.startTime.date?number_to_time < newEvent.value.endTime.date?number_to_time)?then('true','false')}

Um die Ablehnungen von Kalenderprovidern ordnungsgemäß zu verarbeiten, fügen Sie Ihren eigenen globalen Error Handler hinzu. Beispiel:

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"

Alternativ dazu können Sie den Fehlerübergang verwenden, um Error Handler zu erstellen, die für jeden Fall geeignet sind:

  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

Verwenden Sie diese Komponente, um ein Ereignis zu einem Outlook- oder Google-Kalender hinzuzufügen. Beachten Sie, dass Sie keine wiederkehrenden oder ganztägigen Ereignisse erstellen können.

Der Benutzer muss beim Kalenderprovider angemeldet sein, um auf diese Komponente zugreifen zu können. Sie können die Funktion "Autorisierung erforderlich" verwenden, um die Benutzeranmeldung zu verwalten, wie unter Kalenderautorisierung beschrieben.

Informationen zum Festlegen der Werte start und end finden Sie unter Mit Kalenderdaten und -zeiten arbeiten.

Nachfolgend finden Sie ein Beispiel für die Verwendung dieser Komponente. In diesem Beispiel wird eine Mischentity zum Abrufen von Datum, Start- und Endzeit, Betreff, Standort und Teilnehmern verwendet.


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

Diese Komponente wird in Oracle Digital Assistant Version 21.02 und höher unterstützt.
Eigenschaft Beschreibung Erforderlich?
provider Der Kalenderprovider. Die zulässigen Werte sind Google und Outlook. Ja
calendarOwner Die Benutzer-ID des Kalendereigentümers. Das muss eine gültige Account-ID für den Kalenderprovider sein, wie z.B. der Wert der Variable, die mit der Eigenschaft authenticatedUserVariable der Komponente System.OAuth2AccountLink identifiziert wird. Diese wird bei der Authentifizierung des Benutzers festgelegt. Ja
calendarId Der Name des Kalenders. Legen Sie diese Eigenschaft für den Standardkalender des Benutzers auf denselben Wert wie die Eigenschaft calendarOwner. Ja
credential Das Zugriffstoken des Providers. Das ist der Wert der Variable, die mit der Eigenschaft accessTokenVariableName der Komponente System.OAuth2AccountLink identifiziert wird. Diese wird bei der Authentifizierung des Benutzers festgelegt. Ja
start Startdatum und -uhrzeit der Besprechung im Format yyyy-MM-dd'T'HH:mm:ss. Beispiel: 2021-02-26T09:55:00. Ja
end Enddatum und -uhrzeit der Besprechung im Format yyyy-MM-dd'T'HH:mm:ss. Beispiel: 2021-02-26T09:55:00. Ja
subject Das Thema der Besprechung. Ja
attendees Eine durch Komma getrennte Liste mit Teilnehmern. Beachten Sie, dass der Kalenderprovider keine Benachrichtigung an einen Teilnehmer senden kann, wenn die ID keine gültige Account-ID für diesen Provider ist. Ja
timezoneOffset Die Zeit in Millisekunden, die der koordinierten Weltzeit (UTC) hinzugefügt werden muss, um die Normalzeit in der Zeitzone des Benutzers abzurufen. Beispiel: Wenn die lokale Zeitzone UTC-2 ist, lautet timezoneOffset -7200000. Der Standardwert ist 0.
Hinweis

Sie können die Eigenschaft timezoneOffset für den aktuellen Benutzer basierend auf dem Wert der Benutzerkontextvariable profile.timezoneOffset ableiten. In diesem Fall müssen Sie jedoch profile.timezoneOffset mit -1 multiplizieren.

Sie können timezoneOffset oder timezone angeben, aber nicht beides.

Nein
timezone

Die ID der lokalen Zeitzone gemäß https://www.iana.org/time-zones. Wird auch als TZ-Datenbankname bezeichnet. Beispiel: America/Los_Angeles. Der Standardwert lautet UTC. Sie können timezoneOffset oder timezone angeben, aber nicht beides.

Nein

System.DeleteCalendarEvent

Mit dieser Komponente können Sie ein Ereignis aus einem Outlook- oder Google-Kalender löschen. Beachten Sie, dass Sie keine wiederkehrenden oder ganztägigen Ereignisse löschen können.

Der Benutzer muss beim Kalenderprovider angemeldet sein, um auf diese Komponente zugreifen zu können. Sie können die Funktion "Autorisierung erforderlich" verwenden, um die Benutzeranmeldung zu verwalten, wie unter Kalenderautorisierung beschrieben.

Nachfolgend finden Sie ein Beispiel für die Verwendung dieser Komponente.


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

Diese Komponente wird in Oracle Digital Assistant Version 21.02 und höher unterstützt.
Eigenschaft Beschreibung Erforderlich?
provider Der Kalenderprovider. Die zulässigen Werte sind Google und Outlook. Ja
calendarOwner Die Benutzer-ID des Kalendereigentümers. Das muss eine gültige Account-ID für den Kalenderprovider sein, wie z.B. der Wert der Variable, die mit der Eigenschaft authenticatedUserVariable der Komponente System.OAuth2AccountLink identifiziert wird. Diese wird bei der Authentifizierung des Benutzers festgelegt. Ja
calendarId Der Name des Kalenders. Legen Sie diese Eigenschaft für den Standardkalender des Benutzers auf denselben Wert wie die Eigenschaft calendarOwner. Ja
credential Das Zugriffstoken des Providers. Das ist der Wert der Variable, die mit der Eigenschaft accessTokenVariableName der Komponente System.OAuth2AccountLink identifiziert wird. Diese wird bei der Authentifizierung des Benutzers festgelegt. Ja
eventId Die ID des zu löschenden Ereignisses. Sie können System.ListCalendarEvents oder System.SelectCalendarEvent verwenden, um eine eventId abzurufen. Ja

System.GetCalendarEventDetails

Mit dieser Komponente können Sie die Details eines Ereignisses aus einem Outlook- oder Google-Kalender abrufen.

Der Benutzer muss beim Kalenderprovider angemeldet sein, um auf diese Komponente zugreifen zu können. Sie können die Funktion "Autorisierung erforderlich" verwenden, um die Benutzeranmeldung zu verwalten, wie unter Kalenderautorisierung beschrieben.

Die Details werden in der Variable zurückgegeben, die von der Eigenschaft eventDetailsVariableName im folgenden JSON-Format angegeben wird:

{
  "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
}

Die Eigenschaften start und end sind UTC-Werte. Informationen zum Konvertieren der Werte start und end in Ortszeit finden Sie unter Mit Kalenderdaten und -zeiten arbeiten.

Nachfolgend finden Sie ein Beispiel für die Verwendung dieser Komponente.

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

Diese Komponente wird in Oracle Digital Assistant Version 21.02 und höher unterstützt.
Eigenschaft Beschreibung Erforderlich?
provider Der Kalenderprovider. Die zulässigen Werte sind Google und Outlook. Ja
calendarOwner Die Benutzer-ID des Kalendereigentümers. Das muss eine gültige Account-ID für den Kalenderprovider sein, wie z.B. der Wert der Variable, die mit der Eigenschaft authenticatedUserVariable der Komponente System.OAuth2AccountLink identifiziert wird. Diese wird bei der Authentifizierung des Benutzers festgelegt. Ja
calendarId Der Name des Kalenders. Legen Sie diese Eigenschaft für den Standardkalender des Benutzers auf denselben Wert wie die Eigenschaft calendarOwner. Ja
credential Das Zugriffstoken des Providers. Das ist der Wert der Variable, die mit der Eigenschaft accessTokenVariableName der Komponente System.OAuth2AccountLink identifiziert wird. Diese wird bei der Authentifizierung des Benutzers festgelegt. Ja
eventId Die ID des abzurufenden Ereignisses. Sie können System.ListCalendarEvents oder System.SelectCalendarEvent verwenden, um eine eventId abzurufen. Ja
eventDetailsVariableName Der Name der Kontextvariable, in der die Details gespeichert werden sollen. Ja

System.ListCalendarEvents

Mit dieser Komponente können Sie ein Array von Outlook- oder Google-Ereignissen für einen benannten Kalendereigentümer abrufen. Sie können die Liste nach folgenden Attributen filtern:

  • Das Ereignis kann gelöscht werden.
  • Das Ereignis kann aktualisiert werden.
  • Der Benutzer wurde zum Ereignis eingeladen.
  • Wie der Benutzer auf eine Einladung reagiert hat.
  • Das Ereignis enthält mindestens einen benannten Teilnehmer.
  • Die Besprechung beginnt nach einem Datum und einer Uhrzeit.
  • Die Besprechung endet vor einem Datum und einer Uhrzeit.

Der Benutzer muss beim Kalenderprovider angemeldet sein, um auf diese Komponente zugreifen zu können. Sie können die Funktion "Autorisierung erforderlich" verwenden, um die Benutzeranmeldung zu verwalten, wie unter Kalenderautorisierung beschrieben.

Die Liste wird in der Variable zurückgegeben, die von der Eigenschaft eventListVariableName im folgenden JSON-Format angegeben wird:

[{
  "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
}, …]

Informationen zum Festlegen der Werte start und end finden Sie unter Mit Kalenderdaten und -zeiten arbeiten. In diesem Thema wird auch beschrieben, wie die Eigenschaftswerte JSON start und end in Ortszeit konvertiert werden.

Nachfolgend finden Sie ein Beispiel für die Verwendung dieser Komponente.

  ############################
  # 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"      
Hinweis

Diese Komponente wird in Oracle Digital Assistant Version 21.02 und höher unterstützt.
Eigenschaft Beschreibung Erforderlich?
provider Der Kalenderprovider. Die zulässigen Werte sind Google und Outlook. Ja
calendarOwner Die Benutzer-ID des Kalendereigentümers. Das muss eine gültige Account-ID für den Kalenderprovider sein, wie z.B. der Wert der Variable, die mit der Eigenschaft authenticatedUserVariable der Komponente System.OAuth2AccountLink identifiziert wird. Diese wird bei der Authentifizierung des Benutzers festgelegt. Ja
calendarId Der Name des Kalenders. Legen Sie diese Eigenschaft für den Standardkalender des Benutzers auf denselben Wert wie die Eigenschaft calendarOwner. Ja
credential Das Zugriffstoken des Providers. Das ist der Wert der Variable, die mit der Eigenschaft accessTokenVariableName der Komponente System.OAuth2AccountLink identifiziert wird. Diese wird bei der Authentifizierung des Benutzers festgelegt. Ja
listType Gibt den Typ der Liste an. Dieser muss einer der Folgenden sein:
  • ALL: Alle Typen der Besprechungen des Kalendereigentümers
  • DELETE: Alle Besprechungen, die der Kalendereigentümer löschen kann
  • UPDATE: Alle Besprechungen, die der Kalendereigentümer aktualisieren kann
  • INVITED: Alle Besprechungen, zu denen der Kalendereigentümer eingeladen wurde
Ja
eventListVariableName Der Name der Kontextvariable, in der die Ereignisliste gespeichert werden soll. Ja
start Die früheste Datums-/Uhrzeitangabe, zu der Besprechungen in die Liste aufgenommen werden sollen (Format: yyyy-MM-dd'T'HH:mm:ss). Beispiel: 2021-02-26T09:55:00. Ja
end Die späteste Datums-/Uhrzeitangabe, zu der Besprechungen in die Liste aufgenommen werden sollen (Format: yyyy-MM-dd'T'HH:mm:ss). Beispiel: 2021-02-26T09:55:00.

Für den Listentyp INVITED lautet der Standardwert 14 Tage nach Startdatum und -zeit. Bei allen anderen Typen ist der Standardwert 24 Stunden nach Startdatum und -zeit.

Nein
attendees Eine durch Komma getrennte Liste mit Zeichenfolgen (ohne Beachtung der Groß-/Kleinschreibung), mit denen die Liste nach Teilnehmern gefiltert werden soll. Nur Besprechungen, bei denen mindestens ein Teilnehmerwert mindestens eine Zeichenfolge in der Liste enthält, werden in die Ausgabe aufgenommen. Nein
response Eine durch Komma getrennte Liste mit Einladungsstatuswerten, nach denen die Liste gefiltert wird, wenn listType INVITED ist. Zulässige Statuswerte:
  • ACCEPTED
  • TENTATIVE
  • DECLINED
  • PENDING

Der Standardwert ist PENDING,TENTATIVE. Damit werden nur Einladungen ausgegeben, die auf eine Antwort warten oder vorläufig angenommen wurden.

Nein
timezoneOffset Die Zeit in Millisekunden, die der koordinierten Weltzeit (UTC) hinzugefügt werden muss, um die Normalzeit in der Zeitzone des Benutzers abzurufen. Beispiel: Wenn die lokale Zeitzone UTC-2 ist, lautet timezoneOffset -7200000. Der Standardwert ist 0.
Hinweis

Sie können die Eigenschaft timezoneOffset für den aktuellen Benutzer basierend auf dem Wert der Benutzerkontextvariable profile.timezoneOffset ableiten. In diesem Fall müssen Sie jedoch profile.timezoneOffset mit -1 multiplizieren.

Sie können timezoneOffset oder timezone angeben, aber nicht beides.

Nein
timezone Die ID der lokalen Zeitzone gemäß https://www.iana.org/time-zones. Wird auch als TZ-Datenbankname bezeichnet. Beispiel: America/Los_Angeles. Der Standardwert lautet UTC. Sie können timezoneOffset oder timezone angeben, aber nicht beides. Nein

Diese Komponente kann folgende Aktionen zurückgeben:

Aktion Beschreibung
found Mindestens ein Ereignis wurde zurückgegeben.
notfound Es sind keine übereinstimmenden Ereignisse vorhanden.

System.SelectCalendarEvent

Mit dieser Komponente können Sie eine Liste von Outlook- oder Google-Ereignissen anzeigen, zwischen denen der Benutzer wählen kann. Die Komponente speichert die ID des ausgewählten Ereignisses in der Variable, die mit der Eigenschaft eventIdVariableName angegeben wird.

Sie können die Liste für die Auswahl nach folgenden Attributen filtern:

  • Das Ereignis kann gelöscht werden.
  • Das Ereignis kann aktualisiert werden.
  • Der Benutzer wurde zum Ereignis eingeladen.
  • Wie der Benutzer auf eine Einladung reagiert hat.
  • Das Ereignis enthält mindestens einen benannten Teilnehmer.
  • Die Besprechung beginnt nach einem Datum und einer Uhrzeit.
  • Die Besprechung endet vor einem Datum und einer Uhrzeit.

Der Benutzer muss beim Kalenderprovider angemeldet sein, um auf diese Komponente zugreifen zu können. Sie können die Funktion "Autorisierung erforderlich" verwenden, um die Benutzeranmeldung zu verwalten, wie unter Kalenderautorisierung beschrieben.

Informationen zum Festlegen der Werte start und end finden Sie unter Mit Kalenderdaten und -zeiten arbeiten.

Nachfolgend finden Sie ein Beispiel für die Verwendung dieser Komponente.

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

Hinweis

Diese Komponente wird in Oracle Digital Assistant Version 21.02 und höher unterstützt.
Eigenschaft Beschreibung Erforderlich?
provider Der Kalenderprovider. Die zulässigen Werte sind Google und Outlook. Ja
calendarOwner Die Benutzer-ID des Kalendereigentümers. Das muss eine gültige Account-ID für den Kalenderprovider sein, wie z.B. der Wert der Variable, die mit der Eigenschaft authenticatedUserVariable der Komponente System.OAuth2AccountLink identifiziert wird. Diese wird bei der Authentifizierung des Benutzers festgelegt. Ja
calendarId Der Name des Kalenders. Legen Sie diese Eigenschaft für den Standardkalender des Benutzers auf denselben Wert wie die Eigenschaft calendarOwner. Ja
credential Das Zugriffstoken des Providers. Das ist der Wert der Variable, die mit der Eigenschaft accessTokenVariableName der Komponente System.OAuth2AccountLink identifiziert wird. Diese wird bei der Authentifizierung des Benutzers festgelegt. Ja
listType Gibt den Typ der Liste an. Dieser muss einer der Folgenden sein:
  • ALL: Alle Typen der Besprechungen des Kalendereigentümers
  • DELETE: Alle Besprechungen, die der Kalendereigentümer löschen kann
  • UPDATE: Alle Besprechungen, die der Kalendereigentümer aktualisieren kann
  • INVITED: Alle Besprechungen, die nicht vom Kalendereigentümer organisiert werden, aber zu denen der Eigentümer eingeladen wurde.
Ja
eventIdVariableName Der Name der Kontextvariable, in der die Ereignis-ID gespeichert werden soll. Ja
start Die früheste Datums-/Uhrzeitangabe, zu der Besprechungen in die Liste aufgenommen werden sollen (Format: yyyy-MM-dd'T'HH:mm:ss). Beispiel: 2021-02-26T09:55:00. Ja
end Die späteste Datums-/Uhrzeitangabe, zu der Besprechungen in die Liste aufgenommen werden sollen (Format: yyyy-MM-dd'T'HH:mm:ss). Beispiel: 2021-02-26T09:55:00.

Für den Listentyp INVITED lautet der Standardwert 14 Tage nach Startdatum und -zeit. Bei allen anderen Typen ist der Standardwert 24 Stunden nach Startdatum und -zeit.

Nein
attendees Eine durch Komma getrennte Liste mit Zeichenfolgen (ohne Beachtung der Groß-/Kleinschreibung), mit denen die Liste nach Teilnehmern gefiltert werden soll. Nur Besprechungen, bei denen mindestens ein Teilnehmerwert mindestens eine Zeichenfolge in der Liste enthält, werden in die Ausgabe aufgenommen. Nein
response Eine durch Komma getrennte Liste mit Einladungsstatuswerten, nach denen die Liste gefiltert wird, wenn listType INVITED ist. Zulässige Statuswerte:
  • ACCEPTED
  • TENTATIVE
  • DECLINED
  • PENDING

Der Standardwert ist PENDING,TENTATIVE. Damit werden nur Einladungen ausgegeben, die auf eine Antwort warten oder vorläufig angenommen wurden.

Nein
prompt Der Text, der vor der Liste angezeigt wird. Der Standardwert ist You have the following meeting(s): Sie müssen diese Eigenschaft nur dann aufnehmen, wenn Sie den Standardwert außer Kraft setzen möchten.

Tipp:

In Skills mit Plattformversion 21.04 und höher wird der Standardwert im Resource Bundle des Skills gespeichert. Um den Standardwert zu ändern, öffnen Sie die Seite Resource Bundle des Skills, klicken Sie auf Symbol für Resource Bundles, wählen Sie die Registerkarte Konfiguration aus, und ändern Sie die Nachricht für den Schlüssel SelectCalendarEvent - prompt.
Nein
allDayLabel Der Text zur Angabe ganztägiger Ereignisse. Der Standardwert ist All day. Nein
recurringLabel Der Text zur Angabe eines wiederkehrenden Ereignisses. Der Standardwert ist Recurring. Nein
acceptedLabel Der Text, der angibt, dass der Kalendereigentümer die Einladung angenommen hat. Der Standardwert ist Accepted. Nein
tentativeLabel Der Text, der angibt, dass der Kalendereigentümer die Einladung vorläufig angenommen hat. Der Standardwert ist Tentative. Nein
declinedLabel Der Text, der angibt, dass der Kalendereigentümer die Einladung abgelehnt hat. Der Standardwert ist Declined. Nein
pendingLabel Der Text, der angibt, dass der Kalendereigentümer nicht auf die Einladung reagiert hat. Der Standardwert ist Pending. Nein
timezoneOffset Die Zeit in Millisekunden, die der koordinierten Weltzeit (UTC) hinzugefügt werden muss, um die Normalzeit in der Zeitzone des Benutzers abzurufen. Beispiel: Wenn die lokale Zeitzone UTC-2 ist, lautet timezoneOffset -7200000. Der Standardwert ist 0.
Hinweis

Sie können die Eigenschaft timezoneOffset für den aktuellen Benutzer basierend auf dem Wert der Benutzerkontextvariable profile.timezoneOffset ableiten. In diesem Fall müssen Sie jedoch profile.timezoneOffset mit -1 multiplizieren.

Sie können timezoneOffset oder timezone angeben, aber nicht beides.

Nein
timezone Die ID der lokalen Zeitzone gemäß https://www.iana.org/time-zones. Wird auch als TZ-Datenbankname bezeichnet. Beispiel: America/Los_Angeles. Der Standardwert lautet UTC. Sie können timezoneOffset oder timezone angeben, aber nicht beides. Nein

Diese Komponente kann folgende Aktionen zurückgeben:

Aktion Beschreibung
found Mindestens ein Ereignis wurde zurückgegeben.
notfound Es sind keine übereinstimmenden Ereignisse vorhanden.

System.SendInviteResponse

Mit dieser Komponente können Sie eine Einladung für ein Outlook- oder Google-Kalenderereignis annehmen, vorläufig annehmen oder ablehnen.

Der Benutzer muss beim Kalenderprovider angemeldet sein, um auf diese Komponente zugreifen zu können. Sie können die Funktion "Autorisierung erforderlich" verwenden, um die Benutzeranmeldung zu verwalten, wie unter Kalenderautorisierung beschrieben.

Nachfolgend finden Sie ein Beispiel für die Verwendung dieser Komponente.


  ############################
  # 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"
Hinweis

Diese Komponente wird in Oracle Digital Assistant Version 21.02 und höher unterstützt.
Eigenschaft Beschreibung Erforderlich?
provider Der Kalenderprovider. Die zulässigen Werte sind Google und Outlook. Ja
calendarOwner Die Benutzer-ID des Kalendereigentümers. Das muss eine gültige Account-ID für den Kalenderprovider sein, wie z.B. der Wert der Variable, die mit der Eigenschaft authenticatedUserVariable der Komponente System.OAuth2AccountLink identifiziert wird. Diese wird bei der Authentifizierung des Benutzers festgelegt. Ja
calendarId Der Name des Kalenders. Legen Sie diese Eigenschaft für den Standardkalender des Benutzers auf denselben Wert wie die Eigenschaft calendarOwner. Ja
credential Das Zugriffstoken des Providers. Das ist der Wert der Variable, die mit der Eigenschaft accessTokenVariableName der Komponente System.OAuth2AccountLink identifiziert wird. Diese wird bei der Authentifizierung des Benutzers festgelegt. Ja
eventId Die ID des Ereignisses, an das die Antwort gesendet werden soll. Mit System.ListCalendarEvents oder System.SelectCalendarEvent können Sie die ID der Kalenderereignisse abrufen, zu denen der Kalendereigentümer eingeladen wurde. Ja
response Die zu sendende Antwort. Zulässige Antworten:
  • ACCEPTED
  • TENTATIVE
  • DECLINED
Ja

System.UpdateCalendarEvent

Verwenden Sie diese Komponente, um Änderungen an einem Outlook- oder Google-Kalenderereignis vorzunehmen. Beachten Sie, dass Sie keine wiederkehrenden oder ganztägigen Ereignisse aktualisieren können.

Der Benutzer muss beim Kalenderprovider angemeldet sein, um auf diese Komponente zugreifen zu können. Sie können die Funktion "Autorisierung erforderlich" verwenden, um die Benutzeranmeldung zu verwalten, wie unter Kalenderautorisierung beschrieben.

Informationen zum Festlegen der Werte start und end finden Sie unter Mit Kalenderdaten und -zeiten arbeiten.

Nachfolgend finden Sie ein Beispiel für die Verwendung dieser Komponente. In diesem Beispiel wird eine Mischentity zum Abrufen des Datums, der Startzeit und der Endzeit verwendet.


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

Diese Komponente wird in Oracle Digital Assistant Version 21.02 und höher unterstützt.
Eigenschaft Beschreibung Erforderlich?
provider Der Kalenderprovider. Die zulässigen Werte sind Google und Outlook. Ja
calendarOwner Die Benutzer-ID des Kalendereigentümers. Das muss eine gültige Account-ID für den Kalenderprovider sein, wie z.B. der Wert der Variable, die mit der Eigenschaft authenticatedUserVariable der Komponente System.OAuth2AccountLink identifiziert wird. Diese wird bei der Authentifizierung des Benutzers festgelegt. Ja
calendarId Der Name des Kalenders. Legen Sie diese Eigenschaft für den Standardkalender des Benutzers auf denselben Wert wie die Eigenschaft calendarOwner. Ja
credential Das Zugriffstoken des Providers. Das ist der Wert der Variable, die mit der Eigenschaft accessTokenVariableName der Komponente System.OAuth2AccountLink identifiziert wird. Diese wird bei der Authentifizierung des Benutzers festgelegt. Ja
eventId Die ID des zu aktualisierenden Ereignisses. Sie können System.ListCalendarEvents oder System.SelectCalendarEvent verwenden, um eine eventId abzurufen. Ja
start Das neue Startdatum und die neue Startzeit im Format yyyy-MM-dd'T'HH:mm:ss. Beispiel: 2021-02-26T09:55:00. Nein
end Das neue Enddatum und die neue Endzeit im Format yyyy-MM-dd'T'HH:mm:ss. Beispiel: 2021-02-26T09:55:00. Nein
subject Das neue Thema der Besprechung. Ja
attendees Eine durch Komma getrennte Liste mit Teilnehmern. Diese Liste ersetzt die vorherige Liste. Beachten Sie, dass der Kalenderprovider keine Benachrichtigung an einen Teilnehmer senden kann, wenn die ID keine gültige Account-ID für diesen Provider ist. Ja
timezoneOffset Die Zeit in Millisekunden, die der koordinierten Weltzeit (UTC) hinzugefügt werden muss, um die Normalzeit in der Zeitzone des Benutzers abzurufen. Beispiel: Wenn die lokale Zeitzone UTC-2 ist, lautet timezoneOffset -7200000. Der Standardwert ist 0.
Hinweis

Sie können die Eigenschaft timezoneOffset für den aktuellen Benutzer basierend auf dem Wert der Benutzerkontextvariable profile.timezoneOffset ableiten. In diesem Fall müssen Sie jedoch profile.timezoneOffset mit -1 multiplizieren.

Sie können timezoneOffset oder timezone angeben, aber nicht beides.

Nein
timezone Die ID der lokalen Zeitzone gemäß https://www.iana.org/time-zones. Wird auch als TZ-Datenbankname bezeichnet. Beispiel: America/Los_Angeles. Der Standardwert lautet UTC. Sie können timezoneOffset oder timezone angeben, aber nicht beides. Nein

Footer

Verwenden Sie Footer in System.List und System.CommonResponse für zusätzliche Benutzerführung, wenn Ihr Bot in Nur-Text-Kanälen ausgeführt wird.
Laufzeitbild des Footertextes.
Dieser Footer wird in allen Kanälen angezeigt, auch wenn Schaltflächen unterstützt werden, wie z.B. bei Facebook. Sie können jedoch eine kanalspezifische Anzeige für den Footer konfigurieren. Gehen Sie dazu wie folgt vor:
  • Definieren Sie die Variable autoNumberPostbackActions mit dem Ausdruck system.message.
    setAutoNumbering:
      component: "System.SetVariable"
      properties:
        variable: "autoNumberPostbackActions" 
        value: "${(system.channelType=='facebook')?then('true','false')}" 
  • Definieren Sie footerText mit einer Apache FreeMarker-Anweisung if, um den Footer basierend auf dem Kanaltyp anzuzeigen oder auszublenden.
    footerText: <#if autoNumberPostbackActions.value>"Make your choice by entering the menu option number."</#if>
Hinweis

Bei Facebook rendert System.CommonResponse den Footertext in einer eigenen Textsprechblase, die direkt vor den globalen Aktionen (den Schnellantworten) angezeigt wird. Nach diesen Aktionen kann der Footer nicht mehr angezeigt werden, da dies eine zweite Footertextblase erfordert, die dazu führt, dass die Aktionen nicht mehr angezeigt werden.

Die Translate-Eigenschaft

Die YAML-basierte Benutzeroberfläche und die Eingabekomponenten verfügen über eine Eigenschaft translate, die die Einstellung der Variablen autoTranslate überschreibt:
  • Wenn Sie die Variable autoTranslate auf false (Standard) setzen, erfolgt keine automatische Übersetzung für die Komponente, es sei denn, Sie setzen die Eigenschaft translate auf true.

  • Wenn Sie die Variable autoTranslate auf true setzen, wird die Eigenschaft translate ebenfalls auf true gesetzt. Dies bedeutet, dass Label, Titel, Beschreibung, Prompt und Textzeichenfolgen übersetzt werden.

Beispiel: Wenn Sie autotranslate aktiviert haben, indem Sie es auf true setzen, werden Prompts, Titel, Beschreibungen, Label und Textzeichenfolgen der Komponente aus der Übersetzung ausgeschlossen, wenn deren Eigenschaft translate auf false gesetzt ist. Wenn Sie hingegen autotranslate nicht aktivieren, die Eigenschaft translate einer Komponente jedoch auf true setzen, werden Prompts, Titel, Beschreibungen, Label und Textzeichenfolgen der Komponente anhand des konfigurierten Übersetzungsservice in die ermittelte Benutzersprache übersetzt. (Eingabekomponenten übersetzen die Benutzereingabe ins Englische.)
Einstellung von "autoTranslate" Einstellung der Komponenteneigenschaft "translate" Benutzereingabe, Prompt, Label, Text, Titel und Beschreibung werden übersetzt
true nicht festgelegt ja
true true ja
true false nein
false nicht festgelegt nein
false false nein
false true ja
Hinweis

Abläufe, die mit dem Visual Flow Designer entworfen wurden, haben nicht die Eigenschaft translate oder die Kontextvariable autoTranslate. Um die Übersetzung für diese Skills zu konfigurieren, verwenden Sie die Eigenschaften Benutzereingabemeldung übersetzen und Botantwortnachricht übersetzen.

System.Feedback

Hinweis

In diesem Thema wird die Verwendung dieser Komponente im YAML-Modus behandelt. Informationen zur Verwendung im Visual Flow Designer finden Sie unter Benutzerfeedback.

Mit der Komponente System.Feedback können Sie Feedbackdaten für Insights erfassen, indem Sie Benutzern eine Bewertungsskala anzeigen, nachdem sie einen Transaktionsablauf abgeschlossen haben. Wenn Sie das SDK 21.10 oder höher verwenden, gibt diese Komponente ein horizontales Sternenbewertungssystem aus. Wenn Sie ein früheres SDK verwenden, gibt die Komponente diese Bewertungsskala als einfache Liste aus, mit der Benutzer auf die Schaltfläche tippen können, die ihrer Bewertung entspricht.

Während Sie das Verhalten dieser Komponente mit den Komponenteneigenschaften ändern können, können Sie ihr Look-and-Feel ändern, wenn Sie das SDK (Version 21.10 oder höher) verwenden. Beispiel: Sie können die Standardsternsymbole für die Feedbackschaltflächen durch ein anderes Symbol ersetzen.

System.Feedback-Komponenteneigenschaften

Eigenschaft Beschreibung
maxRating Die maximale Bewertung, die ein Benutzer weiterleiten kann. Standardmäßig ist der Höchstwert 5. Sie können diesen Wert nach unten anpassen.
enableTextFeedback Ein boolescher Wert, der, wenn er auf true gesetzt ist, es dem Benutzer ermöglicht, Textfeedback weiterzuleiten, wenn die Bewertung kleiner oder gleich dem Wert threshold ist. Diese Eigenschaft ist standardmäßig auf false (kein Feedback aktiviert) gesetzt.
threshold Der Wert für die Auswertung des Übergangs zwischen den Aktionen above und below. Standardmäßig wird der Schwellenwert zwischen positivem und negativem Feedback als 2 für den Standardwert maxRating festgelegt, der 5 ist.
footerText Der Text, der unten im Feedbackdialogfeld angezeigt wird.

System.Feedback-Komponentenübergänge

Jede Übergangsaktion muss einen Status im Dialogablauf benennen, der die Unterhaltung mit einem return: "done"-Übergang beendet.
Aktion Beschreibung
above Legen Sie fest, wenn die Benutzereingabe ein gültiger Wert über dem Wert threshold ist.
below Legen Sie fest, wenn die Benutzereingabe ein gültiger Wert ist, der dem Wert threshold oder darunter entspricht. ).
cancel Legen Sie fest, wann Benutzer die Bewertung ablehnen, indem Sie auf Überspringen klicken.
Sie können die folgenden Systemvariablen für die Nachrichten verwenden, die von den Übergangszuständen ausgegeben werden:
  • system.userFeedbackRating - Gibt die Bewertung des Benutzers zurück.
  • system.userFeedbackText: Wenn enableTextFeedback auf true gesetzt ist, kann Ihr Skill zur Eingabe von Feedback auffordern, wenn die Bewertungen den Wert threshold unterschreiten. system.userFeedbackText gibt die Benutzereingabe (${system.userFeedbackText.value}) zurück.
...
  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

Hinweis

Diese Komponente ist veraltet, und es ist keine Vorlage mehr verfügbar. Stattdessen können Sie eine der vielen Vorlagen basierend auf der Komponente "Allgemeine Antwort" verwenden, die im Abschnitt User Messaging des Dialogfelds Komponente hinzufügen angeboten wird.

Mit der Komponente System.Text kann Ihr Bot einen Kontext oder eine Benutzervariable festlegen, indem er den Benutzer auffordert, Text einzugeben.

Wenn die Dialog-Engine zum ersten Mal in den Status System.Text wechselt, fordert sie den Benutzer auf, Text einzugeben. Wenn der Benutzer einen Wert eingibt, kehrt die Dialog-Engine zu diesem Status zurück. Die Komponente verarbeitet die Benutzerantwort und speichert den Wert in der Variablen, wenn die Benutzereingabe in den Variablentyp konvertiert werden kann. Die Dialog-Engine wechselt in einen anderen Status, wenn diese Variable einen Wert hat.
Hinweis

Die Dialog-Engine überspringt den Status System.Text, wenn die Variable bereits einen Wert enthält.
Eigenschaft Beschreibung Erforderlich?
prompt Eine Textzeichenfolge, die die vom Benutzer erforderliche Eingabe beschreibt. Sie können ihr mit einem Wertausdruck dynamisch Werte hinzufügen. Beispiel: Hallo ${profile.firstName}, wie viele Pizzas möchten Sie? Ja
variable Der Name der Variablen. Dabei kann es sich um eine Benutzervariable oder eine der im Knoten context deklarierten Variablen handeln. Ja
nlpResultVariable Legt die Eigenschaft variable mit einem Entitywert fest (wenn dieser Entitywert noch nicht für die referenzierte Variable festgelegt wurde). Sie können nlpResultVariable aktivieren, um einen Wert zurückzugeben, wenn Sie ihn mit einer Variablen definieren, die die NLP-Ergebnisse enthält (wie iresult: "nlpresult" in den Beispielbots). In diesem Fall kann die Eigenschaft nlpResultVariable den Wert bei Null dennoch auffüllen, wenn sie eine aufgelöste Entity findet, die mit der von der Variablen referenzierten Entity übereinstimmt. Der Dialog geht in den nächsten Status über, wenn nlpResultVariable den Wert festlegt. Sie können diese Eigenschaft anstelle der Komponente System.SetVariable verwenden. Nein
maxPrompts Gibt an, wie oft die Komponente den Benutzer zur Eingabe auffordert, wenn die letzte Eingabe ungültig war. Siehe Anzahl der Eingabeaufforderungen einschränken. Nein
translate Mit dieser Eigenschaft können Sie den booleschen Wert außer Kraft setzen, den Sie für die Kontextvariable autotranslate festgelegt haben. Wenn Sie diese Variable nicht festgelegt oder auf false gesetzt haben, können Sie diese Eigenschaft auf true setzen, um die automatische Übersetzung nur für diese Komponente zu aktivieren. Wenn die Variable autotranslation auf true gesetzt ist, können Sie diese Eigenschaft auf false setzen, um diese Komponente von der automatischen Übersetzung auszuschließen. Siehe Übersetzungsservices in Skills. Nein

Die vordefinierten Aktionstypen, die Sie mit dieser Komponente verwenden können, finden Sie unter Übergänge für gemeinsame Antwortkomponenten.

Wie verwende ich die Komponente "System.Text"?

In diesem Beispiel enthält die Variable type die Werte, die von der Entity PizzaType erwartet werden, wie Käse, Veggie Lover und Hawaii. Wenn diese Informationen in der Benutzereingabe fehlen, kann der Bot sie dennoch abrufen, weil der Dialogablauf in den Status type übergeht, dessen Komponente System.Text den Benutzer dazu auffordert, den gewünschten Status explizit anzugeben. Beachten Sie, dass die Benutzereingabe dennoch als PizzaType-Entity aufgelöst werden muss, um in den nächsten Status zu wechseln.

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

Hinweis

Diese Komponente ist veraltet, und es ist keine Vorlage mehr verfügbar. Stattdessen können Sie eine der vielen Vorlagen basierend auf der Komponente "Allgemeine Antwort" verwenden, die im Abschnitt User Messaging des Dialogfelds Komponente hinzufügen angeboten wird.

Die Komponente System.List dient zur Ausgabe einer Liste von Optionen. Je nachdem, ob ein Variablenwert festgelegt (oder sogar für diese Komponente definiert) wurde, kann die Navigation von der Komponente durch die Benutzerauswahl oder durch den für den Benutzer oder die Kontextvariable festgelegten Wert ausgelöst werden.

Eigenschaft Beschreibung Erforderlich?
options Sie können options mit durch Komma getrennten Textzeichenfolgen, Apache FreeMarker-Ausdrücken und als Liste mit Zuordnungen angeben. Die Eigenschaft "options" und Aktionslisten enthalten beide Beispiele für den zweiten Ansatz. Ja
prompt Die Textzeichenfolge der Eingabeaufforderung. Ja
variable Der Name der Variablen, deren Wert von der Benutzereingabe gefüllt wird. Die Dialog-Engine überspringt diesen Status, wenn der Variablenwert bereits festgelegt wurde, und gibt keine Listenoptionen für den Benutzer aus. Nein
nlpResultVariable Legt die Eigenschaft variable mit einem Entitywert fest (wenn dieser Entitywert noch nicht für die referenzierte Variable festgelegt wurde). Sie können nlpResultVariable aktivieren, um einen Wert zurückzugeben, wenn Sie diesen mit der Variable definieren, die die NLP-Ergebnisse enthält (wie iResult: "nlpresult" in den Beispielskills). In diesem Fall kann die Eigenschaft nlpResultVariable den Wert bei Null dennoch auffüllen, wenn sie eine aufgelöste Entity findet, die mit der von der Variablen referenzierten Entity übereinstimmt. Der Dialog geht in den nächsten Status über, wenn nlpResultVariable den Wert festlegt. Sie können diese Eigenschaft anstelle der Komponente System.SetVariable verwenden. In Aktionslisten wird beschrieben, wie Sie die Eigenschaften variable und nlpResultVariable verwenden können, um das Listenanzeigeverhalten zu ändern. Nein - Verwenden Sie diese Eigenschaft, wenn die Variable eine Entitytyp-Variable benennt.
maxPrompts Gibt an, wie oft die Komponente den Benutzer zur Eingabe auffordert, wenn die letzte Eingabe ungültig war. Siehe Anzahl der Eingabeaufforderungen einschränken. Nein
translate Mit dieser Eigenschaft können Sie den booleschen Wert außer Kraft setzen, den Sie für die Kontextvariable autotranslate festgelegt haben. Wenn Sie diese Variable nicht festgelegt oder auf false gesetzt haben, können Sie diese Eigenschaft auf true setzen, um die automatische Übersetzung nur für diese Komponente zu aktivieren. Wenn die Variable autotranslation auf true gesetzt ist, können Sie diese Eigenschaft auf false setzen, um diese Komponente von der automatischen Übersetzung auszuschließen. Siehe Übersetzungsservices in Skills. Nein
autoNumberPostbackActions Wenn dies auf true gesetzt ist, stellt diese Option den Optionen Zahlen voran. Selbst wenn Sie diese Option nicht auf true gesetzt haben, kann die automatische Nummerierung für Listenelemente erzwungen werden, wenn die Konfiguration Automatische Nummerierung bei Postback-Aktionen aktivieren des digitalen Assistenten auf true gesetzt ist. Kanalspezifische automatische Nummerierung kann auf jeden Skill angewendet werden, der bei einem digitalen Assistenten registriert ist: ${(system.channelType=='twilio')?then('true','false')} Nein
footerText Erweitert die Ausgabe auf textbasierten Kanälen. Wie unter Footer beschrieben, können Sie FreeMarker-Ausdrücke verwenden, um den Footertext für Nur-Text-Kanäle bedingt zu formatieren. Nein
Die vordefinierten Aktionstypen, die Sie mit dieser Komponente verwenden können, finden Sie unter Übergänge für gemeinsame Antwortkomponenten.

Werteliste

Mit der Komponente System.List können Sie einen Wert zurückgeben, der einer Kontextvariablen entspricht, die als Primitive (wie greeting: "string" in der Dialogablaufvorlage) oder als Entity definiert ist, wie im folgenden Snippet dargestellt. In diesem Dialogablauf gibt die Definition options: "Dick,Dünn,Gefüllt,Pan" einen Wert zurück, der mit der Variablen crust übereinstimmt. Die für die Größe definierte Eigenschaft options ist ein Wertausdruck (${size.type.enumValues}), der die Listenwerte "Groß", "Mittel", "Klein" und "Persönlich" als Optionen zurückgibt. Siehe Apache FreeMarker Template Language-Syntax.

Dieses Beispiel zeigt außerdem, wie mit der Definition iResult der Eigenschaft nlpResultVariable die Komponente die Entitywerte für die Eigenschaften variable für die Status crust und size festlegen kann, wenn diese Werte zuvor nicht festgelegt wurden. Wie die Komponente Text erfordert auch die Komponente System.List keine Übergänge.
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:
      ...

Die Listenkomponente in einem Livechat.
Hinweis

Benutzer sind nicht auf die in der Liste angezeigten Optionen eingeschränkt. Sie können die Entity auflösen, indem sie ein Wort eingeben, das die Entity erkennt, wie ein Synonym. Anstatt eine Option für die Pizzagrößen in der Liste auszuwählen, können Benutzer z.B. stattdessen jumbo eingeben, ein Synonym, das für die Option Groß der Entity PizzaSize definiert ist. Siehe Benutzerdefinierte Entitys.
Die Listenkomponente mit Benutzereingabe.

Die Optionseigenschaft

Sie können die Eigenschaft options wie folgt festlegen:
  • Eine Liste von Zuordnungen - Sie können die Eigenschaft options als Textzeichenfolge oder Wertausdruck festlegen, aber auch als Liste von Zuordnungen konfigurieren. Jede Zuordnung verfügt über eine Eigenschaft label, eine Eigenschaft value und eine optionale Eigenschaft keyword. Sie können die Listenoptionen nach diesem Ansatz lokalisieren, da Sie wie im folgenden Beispiel angegeben auf ein Resource Bundle verweisen können. Weitere Informationen zur Verwendung der Punktnotation finden Sie unter Resource Bundles für Skills. Wenn Benutzer einen Wert eingeben, der mit einem der Werte übereinstimmt, die in der Eigenschaft keyword angegeben werden, reagiert der Bot genau so, wie wenn ein Benutzer die Listenoption selbst antippt.
    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"
  • Eine Textzeichenfolge mit durch Komma getrennten Optionen, wie "klein, mittel, groß" im folgenden Snippet. Sie können die Eigenschaften label und value nicht hinzufügen, wenn Sie options als Zeichenfolge definieren.
    askPizzaSize:
      component: "System.List"
      properties: 
        prompt: "What size do you want?"
        options: "small, medium, large"
        variable: "pizzaSize"
    
  • Ein Apache FreeMarker-Wertausdruck, der entweder eine Zeichenfolgenliste oder eine Liste von Zuordnungen durchläuft, wobei jede Zuordnung sowohl die Eigenschaften label als auch value sowie optional eine Eigenschaft keyword enthalten muss.
    askPizzaSize:
      component: "System.List" 
      properties:
        prompt: "What size do you want?"
        options: "${pizzaSize.value.enumValues}"
        variable: "pizzaSize"
Weitere Informationen zur Syntax finden Sie in der Dokumentation zu Apache FreeMarker.

Aktionslisten

Anstatt die Komponente System.Switch für die bedingte Navigation zu verwenden, können Sie Aktionslisten einsetzen. Mit den optionalen Eigenschaften variable und nlpResultVariable von System.List werden das Listenanzeigeverhalten und der nachfolgende Übergang basierend auf der Benutzereingabe festgelegt.
  • Wenn Sie diese Eigenschaften nicht konfigurieren, basiert die Übergangsaktion auf der vom Skillbenutzer ausgewählten Option:
    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"
  • Wenn Sie die Eigenschaften variable und nlpResultVariable hinzufügen, wird die Listenanzeige umgangen, wenn die Eingabe des Benutzers übereinstimmt. Im folgenden Snippet wird die Liste mit Optionen umgangen, wenn nlpResultVariable die Variable size aus der Benutzereingabe festlegt, wie Ich möchte eine große Pizza bestellen. Der Übergang, der dem Wert entspricht, wird dann ausgelöst.
    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

Mit der Komponente System.Output können Sie eine Nachricht ausgeben, die keine Benutzerantwort oder keine Verarbeitung der Benutzerantwort durch den Skill erfordert.
Hinweis

Diese Komponente ist veraltet, und es ist keine Vorlage mehr verfügbar. Stattdessen können Sie eine der vielen Vorlagen basierend auf der System.CommonResponse verwenden, die im Abschnitt User Messaging des Dialogfelds Komponente hinzufügen angeboten werden.
Eigenschaft Beschreibung Erforderlich?
text Eine Textzeichenfolge Ja. Für dieses Feld ist ein Wert erforderlich.
keepTurn Ein boolescher Wert zum Aufgeben (false) oder Beibehalten (true) der Kontrolle des Skills über den Dialogablauf. Verwenden Sie keepTurn: true, wenn Sie eine ununterbrochene Sequenz von Skillnachrichten ausgeben möchten, in denen keine Einwürfe vom Benutzer akzeptiert werden. Nein
translate Mit dieser Eigenschaft können Sie den booleschen Wert außer Kraft setzen, den Sie für die Kontextvariable autotranslate festgelegt haben. Wenn Sie diese Variable nicht festgelegt oder auf false gesetzt haben, können Sie diese Eigenschaft auf true setzen, um die automatische Übersetzung nur für diese Komponente zu aktivieren. Wenn Sie die Variable autotranslation auf true setzen, können Sie diese Eigenschaft auf false setzen, um diese Komponente von der automatischen Übersetzung auszuschließen. Siehe Übersetzungsservices in Skills. Nein

Wie verwende ich die Komponente "System.Output"?

Die Komponente System.Output erfordert die Zeichenfolgendefinition für die Eigenschaft text. Wie im folgenden Beispiel einer Bestätigungsnachricht dargestellt, können Sie dieser Zeichenfolge Wertausdrücke hinzufügen.
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."
Standardmäßig wartet die Dialog-Engine auf Benutzereingaben, nachdem eine Anweisung von Ihrem Skill ausgegeben wurde. Wenn Sie dieses Verhalten außer Kraft setzen, fügen Sie die optionale Eigenschaft keepTurn hinzu, und setzen Sie sie auf true, um die Dialog-Engine zum nächsten Status weiterzuleiten, der durch die Eigenschaft transitions definiert wird. Wenn kein Übergang definiert wurde, wechselt die Dialog-Engine zum nächsten Status in der Abfolge.
  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"

Wertausdrücke für die Komponente "System.Output" definieren

Sie können einen oder mehrere Wertausdrücke für die Eigenschaft text definieren. Beispiel: Das folgende Snippet verwendet verschiedene Ausdrücke, um den Text zur Bestellbestätigung auszugeben (Pizzagröße und Pizzatyp).
confirmation:
    component: "System.Output"
    properties:
      text: "Your ${size.value} ${type.value} pizza is on its way."
    transitions:
      return: "done" 
Jeder Ausdruck muss immer einen Wert zurückgeben. Wenn auch nur ein Ausdruck einen Nullwert zurückgibt, gibt der Skill Raw-Text für jeden Ausdruck in der Zeichenfolge aus. Dadurch erhalten Ihre Benutzer eine Ausgabe wie die Folgende:
Your ${size.value} ${type.value} is on its way.
Alles oder Nichts. Um sicherzustellen, dass Ihr Skill immer Text ausgibt, den die Benutzer verstehen können, ersetzen Sie einen Nullwert durch einen Standardwert, mit dem Apache FreeMarker-Standardwertoperator: ${size.value!\”piping\”} ${type.value!\”hot\”}. Die doppelten Anführungszeichen geben an, dass der Standardwert kein Variablenverweis ist, sondern der konstante Wert, den der Operator erwartet. Beispiel:
text: "Your ${size.value!\"piping\"} ${type.value!\"hot\"} pizza is on its way."
Hinweis

Maskieren Sie immer die Anführungszeichen (\"...\"), die den Standardwert einschließen, wenn Sie den FreeMarker-Operator verwenden. Die OBotML-Syntax des Dialogablaufs ist nur gültig, wenn Sie diese Escapesequenz bei der Definition eines Standardwertvorgangs verwenden oder den Ausgabetext mit doppelten Anführungszeichen absetzen. Beispiel: Mit der folgenden System.Output-Komponentendefinition können Benutzer die Nachricht wie folgt lesen: Sie haben gesagt: "Diese Bestellung stornieren".
confirmCancel:
    component: "System.Output"
    properties:
      text: "You said, \"Cancel this order.\""
    transitions:
      return: "cancelOrder"

Ausgabetext übersetzen

Mit der Eigenschaft translate können Sie den automatisch übersetzten Text der Komponente System.Output pro Komponente unterdrücken oder aktivieren. Wenn Sie den Wert auf false setzen, wie im folgenden Snippet, gibt die Komponente den Text unverändert ohne Übersetzung aus. Wenn Sie diese Eigenschaft auf true setzen, können Sie die automatische Übersetzung aktivieren, wenn die Variable autoTranslate auf false gesetzt oder nicht definiert ist. Siehe Übersetzungsservices in Skills.
Hinweis

In der Regel sollten Sie die Variable autoTranslate nicht auf true setzen, wenn Sie Text mit Resource Bundles übersetzen. Diese Vorgehensweise wird nicht empfohlen.
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:
     ...