Features
Im Folgenden finden Sie die Features, die Sie im Oracle-Web-SDK konfigurieren können.
Absolute und relative Zeitstempel
- Feature-Flag:
timestampMode: 'relative' | 'absolute'
(Standard:'relative'
) - Featurekonfiguration:
timestampMode
Sie können absolute oder relative Zeitstempel für Chatnachrichten aktivieren. Absolute Zeitstempel zeigen die genaue Zeit für jede Nachricht an. Relative Zeitstempel werden nur in der letzten Nachricht angezeigt und geben die Zeit in Bezug auf die Sekunden, Tage, Stunden, Monate oder Jahre seit der vorherigen Nachricht an.
Beschreibung der Abbildung relative-v-absolute-timestamps.png
Die Genauigkeit Mit absoluten Zeitstempeln sind sie ideal für Archivierungsaufgaben. Im begrenzten Kontext einer Chatsession beeinträchtigt diese Genauigkeit jedoch die Benutzererfahrung, da Benutzer Zeitstempel vergleichen müssen, um die Zeitspanne zwischen Nachrichten zu ermitteln. Mit relativen Zeitstempeln können Benutzer die Unterhaltung einfach durch leicht verständliche Begriffe wie Jetzt gerade und Vor wenigen Minuten verfolgen. Relative Zeitstempel verbessern die Benutzererfahrung auch auf andere Weise und vereinfachen gleichzeitig die Entwicklungsaufgaben: Da relative Zeitstempel die Nachrichten in Sekunden, Tagen, Stunden, Monaten oder Jahren kennzeichnen, müssen Sie sie nicht für andere Zeitzonen konvertieren.
Verhalten relativer Zeitstempel
timestampMode: 'relative'
oder timestampMode: 'default'
) konfigurieren, wird vor der ersten Nachricht des Tages ein absoluter Zeitstempel als Header angezeigt. Dieser Header wird angezeigt, wenn die Unterhaltung nicht gelöscht wurde und ältere Nachrichten noch in der Historie verfügbar sind. In jeder neuen Nachricht wird dann ein relativer Zeitstempel angezeigt.

Beschreibung der Abbildung most-recent-message-timestamp.png
Dieser Zeitstempel wird in folgenden regelmäßigen Abständen (Sekunden, Minuten usw.) aktualisiert, bis eine neue Nachricht empfangen wird.
- In den ersten 10 Sekunden
- Zwischen 10 und 60 Sekunden
- Jede Minute zwischen 1 und 60 Minuten
- Jede Stunde zwischen 1 und 24 Stunden
- Jeden Tag zwischen 1 und 30 Tagen
- Jeden Monat zwischen 1 und 12 Monaten
- Jedes Jahr nach dem ersten Jahr
Relativen Zeitstempel hinzufügen
- Aktivieren Sie relative Zeitstempel:
timestampMode: 'relative'
- Optionale Schritte:
- Legen Sie die Farbe für den relativen Zeitstempel fest:
timestamp
: "<a hexadecimal color value>
" - Lokalisieren Sie bei mehrsprachigen Skills den Zeitstempeltext mit den folgenden Schlüsseln:
Taste Standardtext Beschreibung relTimeNow
Now
Der anfängliche Zeitstempel, der für die ersten 9 Sekunden angezeigt wird. Dieser Zeitstempel wird auch angezeigt, wenn die Unterhaltung zurückgesetzt wird. relTimeMoment
a few moments ago
Wird 10 bis 60 Sekunden lang angezeigt. relTimeMin
{0}min ago
Wird jede Minute aktualisiert. relTimeHr
{0}hr ago
Wird jede Stunde aktualisiert. relTimeDay
{0}d ago
Wird im ersten Monat täglich aktualisiert. relTimeMon
{0}mth ago
Wird in den ersten zwölf Monaten monatlich aktualisiert. relTimeYr
{0}yr ago
Wird jährlich aktualisiert. - Mit den
timeStampFormat
-Einstellungen können Sie das Format des absoluten Zeitstempels ändern, der vor der ersten Nachricht jedes Tages angezeigt wird.
- Legen Sie die Farbe für den relativen Zeitstempel fest:
Automatische Vervollständigung
- Feature-Flag:
enableAutocomplete: true
(Standard:false
) - Clientseitiges Caching aktivieren:
enableAutocompleteClientCache
enableAutocomplete: true
, und fügen Sie der Seite "Intent erstellen" ein Set optimierter Benutzernachrichten hinzu. Wenn diese Option aktiviert ist, werden diese Nachrichten in einem Popup-Fenster angezeigt, nachdem Benutzer drei oder mehr Zeichen eingegeben haben. Die Wörter in den vorgeschlagenen Nachrichten, die mit der Benutzereingabe übereinstimmen, werden in Fettschrift hervorgehoben. Dann können Benutzer ihren eigenen Text eingeben oder stattdessen eine der automatisch vervollständigten Nachrichten auswählen.
Dieses Feature ist nur über WebSocket verfügbar.
Wenn ein digitaler Assistent mit dem Oracle-Webkanal verknüpft ist, können alle für die Skills, die bei diesem digitalen Assistenten registriert sind, konfigurierten Beispieläußerungen als automatische Vervollständigungsvorschläge verwendet werden.
Feld automatisch weiterleiten
Wenn für ein Feld die Eigenschaft autoSubmit
auf true
gesetzt ist, sendet der Client eine FormSubmissionMessagePayload
mit der Zuordnung submittedField
, die entweder die gültigen Feldwerte enthält, die bisher eingegeben wurden. Felder, die noch nicht festgelegt sind (unabhängig davon, ob sie erforderlich sind) oder Felder, die eine clientseitige Validierung verletzen, werden nicht in die submittedField
-Map aufgenommen. Wenn das automatisch weitergeleitete Feld selbst einen ungültigen Wert enthält, wird die Weiterleitungsnachricht nicht gesendet, und die Clientfehlermeldung wird für dieses Feld angezeigt. Wenn eine automatische Weiterleitung erfolgreich ist, wird die partialSubmitField
in der Formularweiterleitungsnachricht auf id
des Feldes autoSubmit
gesetzt.
Vorheriges Eingabeformular ersetzen
Wenn der Endbenutzer das Formular weiterleitet, weil für ein Feld autosubmit
auf true
gesetzt ist, kann der Skill eine neue EditFormMessagePayload
senden. Diese Meldung sollte die vorherige Eingabeformularnachricht ersetzen. Wenn Sie die Kanalerweiterungseigenschaft replaceMessage
auf true
setzen, aktivieren Sie das SDK, um die vorherige Eingabeformularnachricht durch die aktuelle Eingabeformularnachricht zu ersetzen.
Automatisches RTL-Layout
Wenn die Grundrichtung der Hostseite mit <html dir="rtl">
festgelegt ist, um Rechts-nach-links-Sprachen (RTL) zu unterstützen, wird das Chatwidget automatisch auf der linken Seite gerendert. Da das Widget für RTL-Sprachen linksbündig ausgerichtet ist, werden dessen Symbole und Textelemente ebenfalls neu positioniert. Die Symbole befinden sich an den gegenüberliegenden Stellen von ihrer Position bei einem Links-nach-rechts-Rendering (LTR). Beispiel: Die Symbole "Senden", "Mikrofon" und "Anhang" werden vertauscht, sodass die Symbole "Mikrofon" und "Senden" die linke Seite des Eingabefeldes belegen (wobei das Richtungssymbol zum Senden nach links zeigt), während sich das Anhangssymbol auf der rechten Seite des Eingabefeldes liegt. Die Ausrichtung der Textelemente, wie inputPlaceholder
und chatTitle
, basiert darauf, ob die Textsprache LTR oder RTL ist. Bei RTL-Sprachen werden der inputPlaceHolder-Text und chatTitle auf der rechten Seite des Eingabefeldes angezeigt.
Avatare
avatarBot
: Die URL der Bildquelle oder die Quellzeichenfolge des SVG-Bildes, das neben den Skillnachrichten angezeigt wird.avatarUser
: Die URL der Bildquelle oder die Quellzeichenfolge des SVG-Bildes, das neben den Benutzernachrichten angezeigt wird. Wenn der Skill über eine Live-Agent-Integration verfügt, kann das SDK so konfiguriert werden, dass ein anderes Symbol für Agent-Nachrichten angezeigt wird.avatarAgent
: Die URL der Bildquelle oder die Quellzeichenfolge des SVG-Images, das neben den Agent-Nachrichten angezeigt wird. Wenn dieser Wert nicht angegeben wird,avatarBot
jedoch festgelegt ist, wird stattdessen das SymbolavatarBot
verwendet.
Diese Einstellungen können nur in den Initialisierungseinstellungen übergeben werden. Sie können nicht dynamisch geändert werden.
new WebSDK({
URI: '<URI>',
//...,
icons: {
avatarBot: '../assets/images/avatar-bot.png',
avatarUser: '../assets/images/avatar-user.jpg',
avatarAgent: '<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24"><path d="M12 6c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2m0 9c2.7 0 5.8 1.29 6 2v1H6v-.99c.2-.72 3.3-2.01 6-2.01m0-11C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 9c-2.67 0-8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4z"/></svg>'
}
})
Registerkartenübergreifende Unterhaltung synchronisieren
Feature-Flag: enableTabsSync: true
(Standard: true
)
Möglicherweise müssen Benutzer die Website aus verschiedenen Gründen in mehreren Registerkarten öffnen. Mit enableTabsSync: true
können Sie die Benutzerunterhaltung von einer beliebigen Registerkarte aus synchronisieren und fortsetzen, solange die Verbindungsparameter (URI
, channelId
und userId
) auf allen Registerkarten identisch sind. Dieses Feature stellt sicher, dass Benutzer Nachrichten aus dem Skill auf einer beliebigen Registerkarte anzeigen und über dieselbe oder eine andere Registerkarte antworten können. Wenn der Benutzer die Unterhaltungshistorie auf einer Registerkarte löscht, wird sie auch aus den anderen Registerkarten gelöscht. Wenn der Benutzer die Chatsprache auf einer Registerkarte aktualisiert, wird die Chatsprache mit den anderen Registerkarten synchronisiert.
- Eine neue Registerkarte wird mit vorhandenen Registerkarten für die neuen Nachrichten zwischen dem Benutzer und dem Skill beim Öffnen synchronisiert. Wenn Sie das SDK nicht für die Anzeige von Nachrichten aus der Unterhaltungshistorie konfiguriert haben, wird das anfängliche Chatwidget auf der neuen Registerkarte beim Öffnen leer angezeigt.
- Wenn Sie das SDK so konfiguriert haben, dass die Unterhaltungshistorie angezeigt wird, werden die Nachrichten aus dem aktuellen Chat auf vorhandenen Registerkarten als Teil der Unterhaltungshistorie auf einer neuen Registerkarte angezeigt. Wenn Sie
disablePastActions
aufall
oderpostback
setzen, kann die Interaktion mit den Aktionen für Nachrichten auf der neuen Registerkarte verhindert werden. - Der Safari-Browser unterstützt diese Funktion derzeit nicht.
Rendering benutzerdefinierter Nachrichten
Feature-Flag: delegate.render: (message) => boolean (default: undefined)
render
implementieren, die das Nachrichtenmodell als Eingabe verwendet und ein boolesches Flag als Ausgabe zurückgibt. Sie muss true
zurückgeben, um das Standard-Rendering durch das benutzerdefinierte Rendering für einen bestimmten Nachrichtentyp zu ersetzen. Wenn false
zurückgegeben wird, wird stattdessen die Standardmeldung wiedergegeben.
Beim benutzerdefinierten Rendering müssen die gesamte Aktionsklickbehandlung und die Deaktivierung oder Aktivierung der Aktion explizit behandelt werden.
samples
des SDK wird beschrieben, wie Sie dieses Feature mit solchen Frameworks wie React, Angular und Oracle JavaScript Extension Toolkit (JET) verwenden können.
Standard-Clientantworten
Feature-Flag: enableDefaultClientResponse: true
(Standard: false
)
Verwenden Sie dieses Flag, um standardmäßige clientseitige Antworten zusammen mit einem Tippindikator anzugeben, wenn die Skillantwort verzögert wurde oder wenn keine Skillantwort vorhanden ist. Wenn der Benutzer die erste Nachricht/Abfrage sendet, der Skill jedoch nicht innerhalb der durch das Kennzeichen defaultGreetingTimeout
festgelegten Anzahl von Sekunden antwortet, kann der Skill eine Begrüßungsnachricht anzeigen, die mit dem Übersetzungsstring defaultGreetingMessage
konfiguriert ist. Als Nächstes sucht der Client erneut nach der Skillantwort. Der Client zeigt die Skillantwort an, wenn sie empfangen wurde. Wenn dies jedoch nicht der Fall ist, zeigt der Client in von defaultWaitMessageInterval
festgelegten Intervallen eine Wartemeldung (mit dem defaultWaitMessage
-Übersetzungsstring konfiguriert) an. Wenn die Wartezeit auf die Skillantwort den durch das Flag typingIndicatorTimeout
festgelegten Schwellenwert überschreitet, zeigt der Client eine bedauernde Antwort an den Benutzer an und stoppt den Eingabeindikator. Sie können die Entschuldigungsantwort mit dem Übersetzungsstring defaultSorryMessage
konfigurieren.
Delegation
Featurekonfiguration: delegate
delegate
, oder verwenden Sie die Methode setDelegate
. Das Delegatobjekt kann optional die Delegatfunktionen beforeDisplay
, beforeSend
, beforePostbackSend
, beforeEndConversation
und render
enthalten.var delegate = {
beforeDisplay: function(message) {
return message;
},
beforeSend: function(message) {
return message;
},
beforePostbackSend: function(postback) {
return postback;
},
beforeEndConversation: function(message) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(message);
}, 2000);
});
},
render: function(message) {
if (message.messagePayload.type === 'card') {
// Perform custom rendering for card using msgId
return true;
}
return false;
}
}
beforeDisplay
Mit dem Delegaten beforeDisplay
kann die Nachricht eines Skills geändert werden, bevor sie in der Unterhaltung angezeigt wird. Die vom Delegierten zurückgegebene Nachricht wird anstelle der ursprünglichen Nachricht angezeigt. Die zurückgegebene Nachricht wird nicht angezeigt, wenn der Delegierte einen falschen Wert wie null
, undefined
oder false
zurückgibt. Wenn der Delegierte Fehler ausgibt, wird die ursprüngliche Nachricht anstelle der vom Delegierten zurückgegebenen Nachricht angezeigt. Verwenden Sie den Delegaten beforeDisplay
, um das Linkverhalten für Webansichten im Widget selektiv anzuwenden.
beforeSend
Mit dem Delegaten beforeSend
kann eine Benutzernachricht geändert werden, bevor sie als Teil von sendMessage
an den Chatserver gesendet wird. Die vom Delegaten zurückgegebene Nachricht wird an den Skill anstelle der ursprünglichen Nachricht gesendet. Die vom Delegierten zurückgegebene Nachricht ist nicht festgelegt, wenn der Delegierte einen falschen Wert wie null
, undefined
oder false
zurückgibt. Die Nachricht wird dann nicht gesendet. Wenn ein Fehler auftritt, wird die ursprüngliche Nachricht anstelle der vom Delegierten zurückgegebenen Nachricht gesendet.
beforePostbackSend
Der Delegat beforePostbackSend
ähnelt beforeSend
, wird aber auf Postback-Nachrichten vom Benutzer angewendet. Der vom Delegaten zurückgegebene Postback wird an den Skill gesendet. Wenn er einen falschen Wert zurückgibt, wie null
, undefined
oder false
, wird keine Nachricht gesendet.
beforeEndConversation
beforeEndConversation
ermöglicht ein Abfangen am Ende eines Unterhaltungsablaufs, wenn eine Pre-Exit-Aktivität ausgeführt werden muss. Die function
empfängt die Beendigungsnachricht als ihren Eingabeparameter und muss eine Promise
zurückgeben. Wenn diese Promise
mit der Beendigungsnachricht aufgelöst wird, wird die Beendigungsnachricht CloseSession
an den Chatserver gesendet. Andernfalls wird verhindert, dass die Beendigungsnachricht gesendet wird....
beforeEndConversation: function(message) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(message);
}, 2000);
});
}
ren
Mit dem Delegaten render
können Sie die Standardnachrichtenwiedergabe außer Kraft setzen. Wenn die Delegatfunktion render
true
für einen bestimmten Nachrichtentyp zurückgibt, erstellt die WebSDK einen Platzhalter-Slot anstelle der Standardnachrichtenwiedergabe. Um den Platzhalter zu identifizieren, fügen Sie die msgId
der Nachricht als id
des Elements hinzu. In der Delegatfunktion render
können Sie mit dieser ID die Referenz für den Platzhalter abrufen und die benutzerdefinierte Nachrichtenvorlage wiedergeben. Siehe Benutzerdefinierte Nachrichtenwiedergabe.
Verschiebbare Startschaltfläche und Widget
Feature-Flag: enableDraggableButton: true
(Standard: false
)
Insbesondere auf Mobilgeräten mit begrenzter Bildschirmgröße kann das Chatwidget oder die Startschaltfläche manchmal Inhalte auf einer Webseite blockieren. Wenn Sie enableDraggableButton: true
festlegen, können Benutzer das Widget oder die Startschaltfläche wegziehen, wenn es die Ansicht blockiert. Dieses Kennzeichen wirkt sich nur auf die Position der Startschaltfläche aus und nicht auf das Chatwidget: Das Widget wird weiterhin aus seinem ursprünglichen Ort geöffnet.
Dynamischer Eingabeindikator
Feature-Flag: showTypingIndicator: 'true'
Ein Eingabeindikator zeigt Benutzern an, dass sie mit dem Senden einer Nachricht warten sollen, weil der Skill gerade eine Antwort vorbereitet. Standardmäßig zeigen Skills den Eingabeindikator nur für ihre erste Antwort an, wenn Sie das SDK mit showTypingIndicator: 'true'
initialisieren. Für eine optimale Benutzererfahrung sollte der Skill über einen dynamischen Eingabeindikator verfügen, d.h. ein Eingabeindikator, der nach jeder Skillantwort angezeigt wird. Dadurch wird Benutzern vermittelt, dass kein Timeout im Skill aufgetreten ist und dieser noch aktiv an einer Antwort arbeitet. Darüber hinaus verhindert die Anzeige des Eingabeindikators nach jeder Skillantwort ein vorzeitiges Senden von Nachrichten durch die Benutzer. Dies ist möglicherweise der Fall, wenn die Eigenschaft keepTurn
den Skill anweist, mit einer Reihe separater Nachrichten zu antworten, die es dem Benutzer nicht erlauben, eine eigene Antwort einzuwerfen.
- Initialisieren Sie das SDK, indem Sie
showTypingIndicator
auftrue
setzen. - Rufen Sie die
showTypingIndicator
-API auf.
showTypingIndicator
können Sie die Anzeige des dynamischen Eingabeindikators nur in folgenden Fällen aktivieren:
- Das Widget ist mit dem Oracle-Chatserver verbunden. Der dynamische Eingabeindikator wird nicht angezeigt, wenn die Verbindung beendet wurde.
- Das SDK wurde initialisiert, indem
showTypingIndicator
auftrue
gesetzt wurde.Hinweis
Diese API funktioniert nicht, wenn das SDK im Headless-Modus verwendet wird.
typingIndicatorTimeout
festgelegt wurde. Die Standardeinstellung beträgt 20 Sekunden. Wenn die API aufgerufen wird, während bereits ein Eingabeindikator angezeigt wird, wird der Timer zurückgesetzt und der Indikator ausgeblendet.
Der Eingabeindikator wird ausgeblendet, sobald der Benutzer die Nachrichten des Skills empfängt. Der Eingabeindikator wird im Chatfenster nach unten verschoben, wenn ein Benutzer bei angezeigtem Indikator eine Nachricht eingibt, einen Anhang hochlädt oder einen Standort sendet.
Eingebettetes Linkverhalten steuern
- Benutzerdefinierte Handhabung:
linkHandler: { onclick: <function>, target: '<string>' }
- In der Webansicht im Widget:
linkHandler: { target: 'oda-chat-webview' }
- In einem neuen Fenster:
openLinksInNewWindow: 'true'
openLinksInNewWindow: true
oder dem Standardverhalten beim Öffnen von Links in einer neuen Registerkarte können Sie auch Links öffnen, die die Webseiten des Widgets überlagern. Um dies und andere Overrides für das Linkverhalten zu aktivieren, initialisieren Sie das SDK mit:
linkHandler: {
target: '_blank', // open link in a new page
onclick: (event) => { // some operation }
}
Mit linkHander
können Sie:
- die
iframe
-Navigation so steuern, dass die Seite weiterhin überlagert werden kann, ohne dass das Widget unter Beibehaltung derselben Benutzer-ID in jede Seite aufgenommen und bei der Navigation erneut geöffnet werden muss. - einige Links in einem neuen Fenster öffnen, während andere Links auf derselben Registerkarte geöffnet werden.
- eine Aktion ausführen, wenn auf einen Link geklickt wird.
- verhindern, dass ein Link geöffnet wird.
- einen Link in einer Webview öffnen.
openLinksInNewWindow
festgelegte Linkverhalten außer Kraft zu setzen, müssen Sie eines oder beide der folgenden Attribute definieren:
self
- Der aktuelle Browserkontexttarget
: Gibt den Kontext an, in dem eine Suche stattfindet, z.B. eine Registerkarte, ein Fenster oder einiFrame
. Definieren Sie deniFrame
-Speicherort alstarget
-Attribut eines Ankerelements (<a>
). Sie können die Attribute_self
,_blank
,_parent
und_top
des Ziels definieren.onclick
: Akzeptiert eine Callback-Funktion, die aufgerufen wird, wenn auf den Link geklickt wird. Das beim Klicken empfangeneMouseEvent
wird an den Callback übergeben. Damit kann eine Aktion ausgeführt oder sogar das Öffnen des Links verhindert werden.
Embedded-Modus
- Feature-Flag:
embedded: true
(Standard:false
) - Übergeben Sie die ID des Zielcontainerelements:
targetElement
- Fügen Sie
embedded: true
hinzu. - Definieren Sie die Eigenschaft
targetElement
mit der ID des DOM-Elements (einer HTML-Komponente), das als Container des Widgets verwendet wird (z.B.'container-div'
im folgenden Snippet).
<head>
<meta charset="utf-8">
<title>Oracle Web SDK Sample</title>
<script src="scripts/settings.js"></script>
<script>
var chatWidgetSettings = {
URI: YOUR_URI,
channelId: YOUR_CHANNELID,
embedded: true,
targetElement: 'container-div'
...
</script>
</head>
<body>
<h3 align="center">The Widget Is Embedded Here!</h3>
</body>
<div id="container-div"
style="height: 600px; width: 380px; padding: 0; text-align: initial">
</div>
Das Widget nimmt die gesamte Breite und Höhe des Containers ein. Falls der Container nicht groß genug ist, wird das Widget nicht auf der Seite angezeigt.
Unterhaltungssitzung beenden
Feature-Flag: enableEndConversation: true
(Standard: true
)
Ab Version 21.12 fügt das SDK dem Chatwidgetheader standardmäßig eine Schaltfläche "Schließen" hinzu (enableEndConversation: true
), mit der Benutzer die aktuelle Session beenden können.
endConversationConfirmMessage
und endConversationDescription
anpassen. Wenn ein Benutzer den Prompt ablehnt, indem er auf Ja klickt, sendet das SDK dem Skill eine Ereignisnachricht, mit der die aktuelle Unterhaltungssession als beendet markiert wird. Die Instanz trennt dann die Verbindung zum Skill, blendet das Chatwidget aus und löscht die Unterhaltungshistorie des aktuellen Benutzers. Außerdem wird ein chatend
-Ereignis ausgelöst, für das Sie sich registrieren können:Bots.on('chatend', function() {
console.log('The conversation is ended.');
});
Nach dem Öffnen des Chatwidgets wird eine neue Konversationssitzung gestartet.Sie können eine Session auch beenden, indem Sie die Methode
Bots.endChat()
aufrufen (in der Referenz zu dem Oracle-Web-SDK beschrieben, das auf der Seite Downloads verfügbar ist). Der Aufruf dieser Methode kann nützlich sein, wenn das SDK im headless-Modus initialisiert wird.
Fokus auf der ersten Aktion in einer Nachricht
Feature-Flag: focusOnNewMessage: 'action'
(Standard: 'input'
)
Benutzer, die eine tastaturbasierte Navigation bevorzugen (wie Poweruser), können den Fokus vom Benutzereingabefeld auf die erste (oder ganz linke) Aktionsschaltfläche in einer Nachricht verschieben. Standardmäßig legt das Chatwidget den Fokus mit jeder neuen Nachricht wieder auf das Benutzereingabefeld (focusOnNewMessage: 'input'
). Dieses Verhalten eignet sich für Dialogabläufe, die viele Texteingaben vom Benutzer erwarten. Wenn der Dialogablauf jedoch eine Reihe von Nachrichten mit Aktionen enthält, können Benutzer diese Aktionen nur über Mausklick oder Tabulator-Rücknavigation auswählen. Für diesen Anwendungsfall können Sie den Fokus auf die erste Aktionsschaltfläche in der empfangenen Skillnachricht legen, indem Sie focusOnNewMessage: 'action'
festlegen. Wenn die Nachricht keine Aktionen enthält, wird der Fokus auf das Benutzereingabefeld gelegt.
Tastenkombinationen und Zugriffstasten
hotkeys
können Sie Tastenkombinationen für Alt-Tasten erstellen, mit denen UI-Elemente im Chatwidget aktiviert oder fokussiert werden. Benutzer können diese Tastenkombinationen anstelle von Maus- oder Berührungsgesten ausführen. Beispiel: Benutzer können Alt + L eingeben, um das Chatwidget zu starten, und Alt + C, um es auszublenden. Sie weisen den Elementen mithilfe der Schlüssel/Wert-Paare des Objekts hotkeys
die Tastaturtasten zu. Beispiel:
var settings = {
// ...,
hotkeys: {
collapse: 'c', // Usage: press Alt + C to collapse the chat widget when chat widget is expanded
launch: 'l' // Usage: press Alt + L to launch the chat widget when chat widget is collapsed
}
};
Beim Erstellen dieser Schlüssel/Wert-Paare gilt Folgendes:- Sie können nur einen einzelnen Buchstaben oder eine Ziffer für einen Schlüssel übergeben.
- Sie können nur die Tastaturtasten a-z und 0-9 als Werte verwenden.
Beim Attribut muss die Groß-/Kleinschreibung nicht berücksichtigt werden.
Taste | Element |
---|---|
clearHistory |
Die Schaltfläche, mit der die Unterhaltungshistorie gelöscht wird. |
close |
Die Schaltfläche, die das Chatwidget schließt und die Unterhaltung beendet. |
collapse |
Die Schaltfläche, mit der das eingeblendete Chatwidget ausgeblendet wird. |
input |
Das Texteingabefeld im Chatfooter. |
keyboard |
Die Schaltfläche, die den Eingabemodus von Sprache zu Text wechselt. |
language |
Das Auswahlmenü, das die Sprachauswahlliste anzeigt. |
launch |
Schaltfläche zum Starten des Chatwidgets |
mic |
Die Schaltfläche, mit der der Eingabemodus von Text auf Sprache umgeschaltet wird. |
send |
Die Schaltfläche, die den Eingabetext an den Skill sendet. |
shareMenu |
Die Schaltfläche "Menü freigeben" im Chatfußzeile |
shareMenuAudio |
Die Menüoption im Popup-Menü "Teilen", die eine Audiodatei zum Teilen auswählt. |
shareMenuFile |
Die Menüoption im Popup-Menü "Teilen", die eine generische Datei zum Teilen auswählt. |
shareMenuLocation |
Die Menüoption im Popup-Menü "Teilen", die den Benutzerstandort für das Teilen auswählt. |
shareMenuVisual |
Die Menüoption im Popup-Menü "Teilen", die eine Bild- oder Videodatei zum Teilen auswählt. |
Headless-SDK
Feature-Flag: enableHeadless: true
(Standard: false
)
enableHeadless: true
in den anfänglichen Einstellungen. Die Kommunikation kann wie folgt implementiert werden:
- Nachrichten senden: Ruft
Bots.sendMessage(message)
auf, um eine Payload an den Server zu übergeben. - Nachrichten empfangen: Auf Antworten kann mit
Bots.on('message:received', <messageReceivedCallbackFunction>)
gehorcht werden. - Aktualisierung des Verbindungsstatus abrufen: Horcht mit
Bots.on('networkstatuschange', <networkStatusCallbackFunction>)
auf Aktualisierungen des Verbindungsstatus. Der Callback hat einen Statusparameter, der mit Werten von 0 bis 3 aktualisiert wird, wobei jeder Wert einem WebSocket-Status zuordnet ist:0
:WebSocket.CONNECTING
1
:WebSocket.OPEN
2
:WebSocket.CLOSING
3
:WebSocket.CLOSED
- Vorschläge für eine Abfrage zurückgeben: Gibt einen Promise zurück, der als die Vorschläge für die angegebene Abfragezeichenfolge aufgelöst wird. Der Promise wird abgelehnt, wenn das Abrufen des Vorschlags zu lang dauert (etwa 10 Sekunden).
Bots.getSuggestions(utterance) .then((suggestions) => { const suggestionString = suggestions.toString(); console.log('The suggestions are: ', suggestionString); }) .catch((reason) => { console.log('Suggestion request failed', reason); });
Hinweis
Um diese API zu verwenden, müssen Sie die autocomplete-Option (
) aktivieren und die automatische Vervollständigung für die Intents konfigurieren.enableAutocomplete: true
Mehrsprachiger Chat
Mit der nativen Sprachunterstützung des Web-SDK kann das Chatwidget die Sprache eines Benutzers erkennen oder es Benutzern ermöglichen, die Unterhaltungssprache auszuwählen. Benutzer können zwischen Sprachen wechseln, aber nur zwischen Unterhaltungen und nicht während einer Unterhaltung, da die Unterhaltung zurückgesetzt wird, wenn ein Benutzer eine neue Sprache wählt.
Sprachmenü aktivieren
multiLangChat
mit einem Objekt definieren, das das Array supportedLangs
enthält, das aus Sprachtags (lang
) und optionalen Anzeigelabels (label
) besteht. Außerhalb dieses Arrays können Sie optional die Standardsprache mit dem Schlüssel primary
festlegen (primary: 'en'
im folgenden Snippet).multiLangChat: {
supportedLangs: [{
lang: 'en'
}, {
lang: 'es',
label: 'Español'
}, {
lang: 'fr',
label: 'Français'
}, {
lang: 'hi',
label: 'हिंदी'
}],
primary: 'en'
}
Das Chatwidget zeigt die übergebenen unterstützten Sprachen in einem Dropdown-Menü im Header an. Neben den verfügbaren Sprachen enthält das Menü auch die Option Sprache ermitteln. Wenn ein Benutzer eine Sprache in diesem Menü auswählt, wird die aktuelle Unterhaltung zurückgesetzt, und eine neue Unterhaltung mit der ausgewählten Sprache wird gestartet. Die vom Benutzer ausgewählte Sprache wird in allen Sessions desselben Browsers beibehalten. So wird die vorherige Sprache des Benutzers automatisch ausgewählt, wenn der Benutzer den Skill über die Seite mit dem Chatwidget erneut öffnet.
Tipp:
Sie können einen Ereignis-Listener für das Ereignischatlanguagechange
hinzufügen (in der Referenz zu dem Oracle-Web-SDK beschrieben, das auf der Seite Downloads verfügbar ist). Dieser wird ausgelöst, wenn eine Chatsprache aus dem Dropdown-Menü ausgewählt oder geändert wurde.Bots.on('chatlanguagechange', function(language) {
console.log('The selected chat language is', language);
});
- Sie müssen mindestens zwei Sprachen definieren, damit das Dropdown-Menü angezeigt werden kann.
- Der Schlüssel
label
ist für die nativ unterstützten Sprachen optional:fr
wird im Menü als Französisch angezeigt,es
als Spanisch usw. - Labels für die Sprachen können dynamisch festgelegt werden, indem die Labels mit der Einstellung
i18n
übergeben werden. Sie können das Label für jede Sprache festlegen, indem Sie es an den Schlüssellanguage_<languageTag>
übergeben. Dieses Muster ermöglicht das Festlegen von Labels für jede Sprache (ob unterstützt oder nicht unterstützt) sowie Übersetzungen des Labels selbst in verschiedene Gebietsschemas. Beispiel:
Wenn die Eigenschafti18n: { en: { langauge_de: 'German', language_en: 'English', language_sw: 'Swahili', language_tr: 'Turkish' }, de: { langauge_de: 'Deutsche', language_en: 'Englisch', language_sw: 'Swahili', language_tr: 'Türkisch' } }
i18n
Übersetzungszeichenfolgen für die ausgewählte Sprache enthält, wird der Text für Felder wie Eingabeplatzhalter, Chattitel, Mouseover-Text für Schaltflächen und QuickInfo-Titel automatisch in die ausgewählte Sprache geändert. Der Feldtext kann nur dann in eine andere Sprache geändert werden, wenn Übersetzungszeichenfolgen für die ausgewählte Sprache vorhanden sind. Wenn diese Zeichenfolgen nicht vorhanden sind, bleibt die Sprache für den Feldtext unverändert. - Das Widget erkennt automatisch die Sprache im Benutzerprofil und aktiviert die Option Sprache erkennen, wenn Sie den Schlüssel
primary
nicht angeben. - Wenn
label
optional ist und Sie eine Sprache hinzugefügt haben, die nicht nativ unterstützt wird, fügen Sie ein Label zur Identifizierung des Tags hinzu, insbesondere wenn keine i18n-Zeichenfolge für die Sprache vorhanden ist. Beispiel: Wenn Sie nichtlabel: 'हिंदी'
fürlang: hi
definieren, wird in der Dropdown-Liste stattdessen hi angezeigt, was zu einer suboptimalen Benutzererfahrung führt.
Sprachmenü deaktivieren
Ab Version 21.12 können Sie die Chatsprache auch konfigurieren und aktualisieren, ohne das Dropdown-Menü für die Sprachauswahl konfigurieren zu müssen. Übergeben Sie dazu multiLangChat.primary
in der anfänglichen Konfiguration, ohne auch ein multiLangChat.supportedLangs
-Array zu übergeben. Der in der Variable primary
übergebene Wert wird als Chatsprache für die Unterhaltung festgelegt.
Spracherkennung
Wenn Sie den Schlüssel
primary
nicht angeben, erkennt das Widget automatisch die Sprache im Benutzerprofil und aktiviert die Option Sprache erkennen im Menü.
Sie können die ausgewählte Sprache dynamisch aktualisieren, indem Sie die API setPrimaryChatLanguage(lang)
aufrufen. Wenn der übergebene lang
-Befehl mit einer der unterstützten Sprachen übereinstimmt, wird diese Sprache ausgewählt. Wenn keine Übereinstimmung gefunden werden kann, wird Sprache erkennen aktiviert. Sie können die Option Ermittelte Sprache auch aktivieren, indem Sie die setPrimaryChatLanguage('und')
-API aufrufen, wobei 'und'
unbestimmt angibt, oder indem Sie multiLangChat: {primary: null}
oder multiLangChat: {primary: 'und'}
übergeben.
setPrimaryChatLanguage(lang)
aktualisieren, wenn das Dropdown-Menü nicht konfiguriert wurde. Beispiel:Bots.setPrimaryChatLanguage('fr')
Sie können die Sprache dynamisch aktualisieren, unabhängig davon, ob die Chatsprache ursprünglich konfiguriert wurde oder nicht.Spracherkennung ist bei der Konfiguration verfügbar, wenn Benutzer eine unterstützte Sprache auswählen. Sie ist nicht verfügbar, wenn die Option Sprache erkennen festgelegt ist. Die Auswahl einer Sprache, die von der Spracherkennung nicht unterstützt wird, deaktiviert die Erkennungsfunktion, bis eine unterstützte Sprache ausgewählt wird.
Kurzreferenz für mehrsprachigen Chat
Gehen Sie folgendermaßen vor... | ... Vorgehensweise |
---|---|
Zeigen Sie die Dropdown-Liste für die Sprachauswahl für Endbenutzer an. | Übergeben Sie multiLangChat.supportedLangs .
|
Legen Sie die Chatsprache fest, ohne den Endbenutzern das Dropdown-Menü für die Sprachauswahl anzuzeigen. | Übergeben Sie multiLangChat.primary .
|
Standardsprache festlegen | Übergeben Sie multiLangChat.primary mit multiLangChat.supportedLangs . Der Wert primary muss eine der unterstützten Sprachen im Array sein.
|
Spracherkennung aktivieren. | Übergeben Sie primary: null oder primary: 'und' mit multiLangChat .
|
Chat-Sprache dynamisch aktualisieren. | Rufen Sie die API setPrimaryChatLanguage(lang) auf.
|
Webansicht im Widget
Sie können das Linkverhalten in Chatnachrichten konfigurieren, damit Benutzer über das Chatwidget auf Webseiten zugreifen können. Anstatt die Unterhaltung zu verlassen, um eine Seite auf einer Registerkarte oder in einem separaten Browserfenster anzuzeigen, kann ein Benutzer im Chat verbleiben, da das Chatwidget den Link in einer Webansicht öffnet.
Linkverhalten zur Webansicht konfigurieren
- Um alle Links in der Webansicht zu öffnen, übergeben Sie
linkHandler: { target: 'oda-chat-webview' }
in den Einstellungen. Dadurch wird das Ziel aller Links aufoda-chat-webview
gesetzt. Das ist deriframe
-Name in der Webansicht. - Um nur bestimmte Links in der Webansicht zu öffnen und gleichzeitig sicherzustellen, dass andere Links normal in anderen Registerkarten oder Fenstern geöffnet werden, verwenden Sie den Delegaten
beforeDisplay
. Um eine bestimmte Nachrichten-URL-Aktion in der Webansicht zu öffnen, ersetzen Sie den Wert'url'
des Feldesaction.type
durch'webview'
. Wenn der Aktionstyp in der FunktionbeforeDisplay
'webview'
lautet, öffnet die Aktionsschaltfläche den Link in der Webansicht, wenn auf ihn geklickt wird.
Links aus der Webansicht öffnen
Links, die in eine Seite eingebettet sind, die in der Webansicht angezeigt wird, können nur in der Webansicht geöffnet werden, wenn sie in ein Ankerelement (<a>
) konvertiert werden, wobei das Attribut target als target="oda-chat-webview"
definiert ist.
WebView anpassen
webViewConfig
anpassen, die ein Objekt akzeptiert. Beispiel:{ referrerPolicy: 'no-referrer-when-downgrade', closeButtonType: 'icon', size: 'tall'
Die Felder in diesem Objekt sind optional. Die Konfiguration kann auch dynamisch aktualisiert werden, indem Sie ein
webViewConfig
-Objekt in der Methode setWebViewConfig
übergeben. Jede Eigenschaft im Objekt ist optional.
Feld | Value | Beschreibung |
---|---|---|
accessibilityTitle
|
Zeichenfolge | Der Name des Webansichts-Frameelements für barrierefreien Webzugriff. |
closeButtonIcon
|
Zeichenfolge | Die Bild-URL/SVG-Zeichenfolge, mit der das Symbol "Schließen" angezeigt wird. |
closeButtonLabel
|
Zeichenfolge | Textlabel/QuickInfo-Titel für die Schaltfläche "Schließen". |
closeButtonType
|
|
Legt fest, wie die Schaltfläche "Schließen" in der Webansicht angezeigt wird. |
referrerPolicy
|
ReferrerPolicy
|
Gibt an, welcher Referrer beim Abrufen der Frameressource gesendet werden soll. Der Policy-Wert referrerPolicy muss eine gültige Direktive sein. Die angewendete Standard-Policy ist 'no-referrer-when-downgrade' .
|
sandbox
|
Ein Zeichenfolgenarray | Ein Array gültiger Einschränkungszeichenfolgen, mit denen bestimmte Aktionen innerhalb des Frames ausgeschlossen werden können. Die Einschränkungen, die an dieses Feld übergeben werden können, sind in der Beschreibung des Attributs sandbox in der MDN-Webdokumentation enthalten.
|
size
|
|
Die Höhe der Webansicht im Vergleich zur Höhe des Chatwidgets. Wenn dieser Wert auf 'tall' gesetzt ist, wird er auf 80 % der Höhe des Widgets gesetzt. Bei 'full' entspricht er der Höhe des Widgets.
|
title
|
Zeichenfolge | Der Titel, der im Header des Containers der Webansicht angezeigt wird. |
- Seiten mit dem Antwortheader
X-frame-options: deny
oderX-frame-options: sameorigin
können aufgrund von serverseitigen Einschränkungen, die das Öffnen der Seite innerhalb von iFrames verhindern, möglicherweise nicht in der Webansicht geöffnet werden. In diesen Fällen zeigt die Webansicht den Link erneut dem Benutzer an, damit er ihn in einem neuen Fenster oder einer neuen Registerkarte öffnen kann. - Aufgrund serverseitiger Einschränkungen können Autorisierungsseiten nicht innerhalb der WebViews geöffnet werden, da Autorisierungsseiten immer
X-frame-options: deny
zurückgeben, um einen Clickjacking-Angriff zu verhindern. - Externe Links können nicht korrekt in der Webansicht geöffnet werden. Nur Links, die in die Unterhaltungsnachrichten eingebettet sind, können in der Webansicht geöffnet werden.
Hinweis
Da externe Nachrichten nicht mit der Webansicht kompatibel sind, dürfen Sie keinen externen Links zum Öffnen in der Webansicht festlegen.
webViewErrorInfoText
anpassen:settings = {
URI: 'instance',
//...,
i18n: {
en: {
webViewErrorInfoText: 'This link can not be opened here. You can open it in a new page by clicking {0}here{/0}.'
}
}
}
Langes Polling
Feature-Flag: enableLongPolling: true
(Standard: false
)
Das SDK verwendet WebSockets zur Verbindung mit dem Server und zur Kommunikation mit Skills. Wenn das WebSocket aus irgendeinem Grund über das Netzwerk deaktiviert ist, können traditionelle HTTP-Aufrufe zum Chat mit dem Skill verwendet werden. Dieses Feature wird als langes Polling bezeichnet, da das SDK den Server kontinuierlich aufrufen oder abfragen muss, um die neuesten Nachrichten vom Skill abzurufen. Dieses Fallback-Feature kann aktiviert werden, indem Sie enableLongPolling: true
in den anfänglichen Einstellungen übergeben.
Eingabeindikator für Benutzer-Agent-Unterhaltungen
Feature-Flag: enableSendTypingStatus
: boolesch (Standard: false
)
Mit dieser Funktion können Agents feststellen, ob Benutzer noch an der Unterhaltung beteiligt sind, indem sie den Benutzerstatus an den Live-Agent senden. Wenn enableSendTypingStatus
auf true
gesetzt ist, sendet das SDK ein Statusereignis der Typisierung RESPONDING
zusammen mit dem Text, der derzeit vom Benutzer eingegeben wird, an Oracle B2C Service oder Oracle Fusion Service. Dadurch wird wiederum ein Tippindikator auf der Agent-Konsole angezeigt. Wenn der Benutzer die Eingabe beendet hat, sendet das SDK ein LISTENING
-Ereignis an den Service, um den Eingabeindikator in der Agent-Konsole auszublenden.
Die Konfiguration typingStatusInterval
, die einen Mindestwert von drei Sekunden hat, drosselt die Eingabestatusaktualisierung.
enableAgentSneakPreview
(standardmäßig false
) auf true
gesetzt sein, und die Sneak-Vorschau muss in der Oracle B2C Service-Chatkonfiguration aktiviert sein.
Sie müssen den Livetippstatus nicht auf der Benutzerseite konfigurieren. Der Benutzer kann standardmäßig den Eingabestatus des Agent anzeigen. Wenn der Agent eingibt, erhält das SDK eine
RESPONDING
-Statusmeldung, die zur Anzeige eines Eingabeindikators in der Ansicht des Benutzers führt. Wenn der Agent im Leerlauf ist, erhält das SDK eine LISTENING
-Statusmeldung, mit der der Eingabeindikator ausgeblendet wird.
Spracherkennung
Feature-Flag: enableSpeech: true
(Standard: false
)
Wenn Sie enableSpeech: true
festlegen, kann die Schaltfläche "Mikrofon" anstelle der Sendeschaltfläche angezeigt werden, wenn das Benutzereingabefeld leer ist.
Ihr Skill kann die Spracherkennung auch mit der Methode startVoiceRecording(onSpeechRecognition, onSpeechNetworkChange)
zum Starten von Aufzeichnungen und mit der Methode stopVoiceRecording
zum Stoppen von Aufzeichnungen verwenden. (Diese Methoden werden im Benutzerhandbuch beschrieben, das im SDK enthalten ist.)
Mit dem Flag enableSpeechAutoSend
können Sie konfigurieren, ob der von der Stimme des Benutzers erkannte Text ohne manuelle Eingabe vom Benutzer direkt an den Chatserver gesendet werden soll. Wenn Sie diese Eigenschaft auf true
(Standard) setzen, kann die Sprachantwort des Benutzers automatisch an den Chatserver gesendet werden. Wenn Sie diesen Wert auf false
setzen, kann der Benutzer die Nachricht bearbeiten, bevor sie an den Chatserver gesendet wird, oder sie löschen.
Sprachvisualisierung
Featurekonfiguration: enableSpeechAutoSend

Der Sprachfunktionsmodus wird durch Anzeige des Tastatursymbols


Beschreibung der Abbildung voice-visualizer.png
enableSpeechAutosend
true
ist (enableSpeechAutoSend: true
), werden Nachrichten automatisch gesendet, nachdem sie erkannt wurden. Wenn Sie enableSpeechAutoSend: false
festlegen, wechselt der Eingabemodus zu Text, nachdem die Sprachnachricht erkannt wurde, sodass Benutzer ihre Nachrichten als Text bearbeiten oder vervollständigen können, bevor sie sie manuell senden. Alternativ können Benutzer ihre Nachricht mit der Sprachfunktion über einen nachfolgenden Klick auf das Sprachsymbol vervollständigen, bevor sie sie manuell senden.
Die Sprachvisualisierung wird mit AnalyserNode erstellt. Sie können die Sprachvisualisierung mit der Methode
startVoiceRecording
im Headless-Modus implementieren. Weitere Informationen zu AnalyserNode und Frequenzebenen finden Sie im SDK.