Features
Im Folgenden finden Sie die Features, die Sie im Oracle-Android-SDK konfigurieren können.
Absolute und relative Zeitstempel
Feature-Flag: timestampType: TimestampMode.RELATIVE
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. Aufgrund der durch absolute Zeitstempel gebotenen Genauigkeit sind diese ideal für Archivierungsaufgaben. Im begrenzten Kontext einer Chatsession beeinträchtigt diese Genauigkeit aber 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.
Relative Zeitstempel konfigurieren
- Aktivieren Sie Zeitstempel:
enableTimestamp: true
- Aktivieren Sie relative Zeitstempel:
timestampType: 'relative'
timestampType: 'relative'
) 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 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
Aktionsschaltflächenlayout
Feature-Flag: actionsLayout
actionsLayout
legt die Layoutrichtung für die lokalen, globalen, Karten- und Formularaktionen fest. Wenn Sie diesen Wert auf LayoutOrientation.HORIZONTAL
setzen, sind diese Schaltflächen horizontal ausgerichtet und werden umgebrochen, wenn der Inhalt überläuft.
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<Server_URI>, false, getApplicationContext())
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.actionsLayout(actionsLayout)
.build();
Anhangfilterung
(Erforderlich) <Geben Sie hier eine kurze Beschreibung ein.>
Feature-Flag: shareMenuItems
Bevor Sie
shareMenuItems
konfigurieren können, müssen Sie enableAttachment
auf true
setzen.
ArrayList<Object> customItems = new ArrayList<>();
ShareMenuCustomItem shareMenuCustomItem1 = new ShareMenuCustomItem("pdf bin", "Label1", 1024, R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem2 = new ShareMenuCustomItem("doc", "Label2", R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem3 = new ShareMenuCustomItem("csv");
ArrayList<Object> customItems = new ArrayList<>(Arrays.asList(shareMenuCustomItem1,shareMenuCustomItem2,shareMenuCustomItem3,ShareMenuItem.CAMERA));
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(sharedPreferences.getString(getString(R.string.pref_name_chat_server_host), Settings.CHAT_SERVER_URL), false, getApplicationContext())
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.shareMenuItems(customItems)
.enableAttachment(true)
.build();
ShareMenuCustomItem
-Objekt keinen Wert oder einen null
-Wert für das Label aufweist, wie bei shareMenuCustomItem3 = ShareMenuCustomItem('csv')
im vorherigen Snippet, wird eine type
-Zeichenfolge mit dem Präfix share_
zum Label. Bei shareMenuCustomItem3
lautet das Label share_csv
.
Sie können Benutzern ermöglichen, alle Dateitypen hochzuladen, indem Sie die
type
eines ShareMenuCustomItem
-Objekts auf *
setzen.
public static void shareMenuItems(ArrayList<Object> shareMenuItems)
Bots.shareMenuItems(customItems);
aufrufen, wobei customItems
eine ArrayList
von Objects
ist. Jedes Objekt kann entweder vom Typ ShareMenuItem
enum-Werte oder ein Objekt von ShareMenuCustomItem
sein.ArrayList<Object> customItems = new ArrayList<>();
ShareMenuCustomItem shareMenuCustomItem1 = new ShareMenuCustomItem("pdf bin", "Label1", 1024, R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem2 = new ShareMenuCustomItem("doc", "Label2", R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem3 = new ShareMenuCustomItem("csv");
customItems.add(shareMenuCustomItem1);
customItems.add(ShareMenuItem.CAMERA);
customItems.add(ShareMenuItem.FILE);
customItems.add(shareMenuCustomItem2);
customItems.add(shareMenuCustomItem3);
Bots.shareMenuItems(customItems);
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.
Methoden für die Verbindung und Trennung
public void disconnect()
und public void connect()
verbunden und getrennt werden. Die WebSocket wird nach dem Aufruf der direkten Methode geschlossen:Bots.disconnect();
Beim Aufruf der folgenden Methode wird die WebSocket-Verbindung wiederhergestellt, wenn sich der Skill in einem nicht verbundenen Status befindet:Bots.connect();
public void connect(Botsconfiguration botsconfiguration)
mit einem neuen botsconfiguration
-Objekt aufgerufen wird, wird die vorhandene WebSocket-Verbindung geschlossen, und mit dem neuen botsconfiguration
-Objekt wird eine neue Verbindung hergestellt.BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<SERVER_URI>, false, getApplicationContext()) // Configuration to initialize the SDK
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.build();
Bots.connect(botsConfiguration);
Standard-Clientantworten
Feature-Flag: enableDefaultClientResponse: true
(Standard: false
)
Verwenden Sie enableDefaultClientResponse: true
, um standardmäßige clientseitige Antworten mit einem Typisierungsindikator 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 mit der durch das Kennzeichen odaas_default_greeting_timeout
festgelegten Anzahl von Sekunden antwortet, kann der Skill eine Begrüßungsnachricht anzeigen, die mit dem Übersetzungsstring odaas_default_greeting_message
konfiguriert ist. Als Nächstes sucht der Client erneut nach der Antwort des Skills. Der Client zeigt die Antwort des Skills an, wenn sie empfangen wurde. Andernfalls zeigt der Client in durch das Flag odaas_default_wait_message_interval
festgelegten Intervallen eine Wartemeldung (konfiguriert mit dem odaas_default_wait_message
-Übersetzungsstring) 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 odaas_default_sorry_message
konfigurieren.
Delegation
Featurekonfiguration: messageModifierDelegate
interface MessageModifierDelegate
implementieren und die zugehörige Instanz an die Eigenschaft messageModifierDelegate
übergeben.private MessageDelegate implements MessageModifierDelegate {
@Override
public Message beforeSend(Message message) {
// Handle before send delegate here
}
@Override
public Message beforeDisplay(Message message) {
if (message != null && message.getPayload() != null && message.getPayload().getType() == MessagePayload.MessageType.CARD) {
((CardMessagePayload)message.getPayload()).setLayout(CardLayout.VERTICAL);
}
return message;
}
@Override
public Message beforeNotification(Message message) {
// Handle before notification delegate here
}
}
@Override
public void beforeEndConversation(CompletionHandler completionHandler) {
// Handle before end conversation end delegate here
// Trigger completionHandler.onSuccess() callback after successful execution of the task.
// Trigger completionHandler.onFailure() callback when the task is unsucessful.
}
}
public Message beforeDisplay(Message message)
Mit dem Delegaten public Message beforeDisplay(Message message)
kann die Nachricht eines Skills geändert werden, bevor sie in der Unterhaltung angezeigt wird. Die vom Delegaten zurückgegebene geänderte Nachricht wird in der Unterhaltung angezeigt. Wenn die Methode null
zurückgibt, wird die Nachricht nicht angezeigt.
public Message beforeDisplay(Message message)
Mit dem Delegaten public Message beforeDisplay(Message message)
kann eine Benutzernachricht geändert werden, bevor sie an den Chatserver gesendet wird. Die vom Delegaten zurückgegebene Nachricht wird an den Skill gesendet. Wenn Null zurückgegeben wird, wird die Nachricht nicht gesendet.
Unterhaltungshistorie anzeigen
Sie können die lokale Unterhaltungshistorie eines Benutzers aktivieren oder anzeigen, nachdem das SDK erneut initialisiert wurde, indem Sie in der Botkonfiguration displayPreviousMessages
auf true
oder false
setzen. Wenn dieser Wert auf false
gesetzt ist, werden vorherige Nachrichten für den Benutzer nach der erneuten Initialisierung des SDK nicht angezeigt.
Chat-Session beenden
FeatureFlag: enableEndConversation: true
enableEndConversation: true
fügt der Headeransicht eine Schaltfläche "Schließen" hinzu, mit der Benutzer die aktuelle Chatsession explizit beenden können. Ein Bestätigungsdialogfeld wird geöffnet, wenn Benutzer auf diese Schaltfläche "Schließen" klicken und wenn sie die Schließungsaktion bestätigen, sendet das SDK eine Ereignisnachricht an den Skill, der das Ende der Chatsession markiert. Das SDK trennt dann den Skill von der Instanz, minimiert das Chatwidget und löscht die Unterhaltungshistorie des aktuellen Benutzers. Das SDK löst einen Delegierten auf beforeEndConversation(CompletionHandler completionHandler)
aus, der zum Ausführen einer Aufgabe verwendet werden kann, bevor eine Anforderung zum Schließen der Session an den Server gesendet wird. Außerdem wird ein OnChatEnd()
-Ereignis ausgelöst, für das Sie sich registrieren können.
Nach dem Öffnen des Chatwidgets wird eine neue Chatsession gestartet.
public static void endChat()
Bots.endChat()
-API beendet werden.Bots.endChat()
CompletionHandler
CompletionHandler
ist ein Ereignis-Listener, der im SDK implementiert ist und auf den Abschluss der Aufgabe horcht, die für den Delegierten beforeEndConversation(CompletionHandler completionHandler)
in der Hostanwendung ausgeführt wird. Weitere Informationen finden Sie im Javadoc, das im SDK enthalten ist, das auf der ODA- und OMC-Downloadseite verfügbar ist.
Headless-SDK
Das SDK kann ohne die zugehörige UI verwendet werden. Um es in diesem Modus zu verwenden, importieren Sie nur das Package com.oracle.bots.client.sdk.android.core-24.12.aar
in das Projekt, wie in Oracle-Android-Client-SDK zum Projekt hinzufügen beschrieben.
Das SDK verwaltet die Verbindung zum Server und stellt APIs für das Senden von Nachrichten, das Empfangen von Nachrichten und das Abrufen von Aktualisierungen für den Netzwerkstatus und für andere Services bereit. Mit den APIs können Sie mit dem SDK interagieren und die UI aktualisieren.
Sie können eine Nachricht mit den in der Klasse Bots
verfügbaren send*()
-APIs senden. Beispiel: public static void sendMessage(String text)
sendet eine Textnachricht an den Skill oder digitalen Assistenten.
public static void sendMessage(String text)
text
ist die Textnachricht.Bots.sendMessage("I want to order a Pizza");
EventListener
EventListener
-Schnittstelle implementieren, die wiederum die Funktionalität für Folgendes implementiert:
void onStatusChange(ConnectionStatus connectionStatus)
: Diese Methode wird aufgerufen, wenn sich der Status der WebSocket-Verbindung ändert. Der ParameterconnectionStatus
ist der aktuelle Status der Verbindung. Weitere Informationen zum EnumConnectionStatus
finden Sie in der Java-Dokumentation, die im SDK (verfügbar über die ODA- und OMC-Downloadseite) enthalten ist.void onMessageReceived(Message message)
: Diese Methode wird aufgerufen, wenn eine neue Nachricht vom Skill empfangen wird. Der Parametermessage
ist die vom Skill empfangene Nachricht. Weitere Einzelheiten zur KlasseMessage
finden Sie in der Java-Dokumentation, die im SDK (verfügbar über die ODA- und OMC-Downloadseite) enthalten ist.void onMessageSent(Message message)
: Diese Methode wird aufgerufen, wenn eine Nachricht an den Skill gesendet wird. Der Parameter "message" ist die an den Skill gesendete Nachricht. Weitere Einzelheiten zur KlasseMessage
finden Sie in der Java-Dokumentation, die im SDK (verfügbar über die ODA- und OMC-Downloadseite) enthalten ist.void onAttachmentComplete()
: Diese Methode wird aufgerufen, wenn ein Anhangsupload abgeschlossen ist.
public class BotsEventListener implements EventListener {
@Override
public void onStatusChange(ConnectionStatus connectionStatus) {
// Handle the connection status change
}
@Override
public void onMessageReceived(Message message) {
// Handle the messages received from skill/DA
}
@Override
public void onMessageSent(Message message) {
// Handle the message sent to skill or Digital Assistant
}
@Override
public void onAttachmentComplete() {
// Handle the post attachment upload actions
// Close the attachment upload progress popup if any etc.
}
}
Die Instanz vom Typ EventListener
muss dann an setEventListener(EventListener eventListener)
übergeben werden.
public static void setEventListener(EventListener eventListener)
eventListener
ist eine Instanz vom Typ EventListener
zum Empfangen von Aktualisierungen.Bots.setEventListener(new BotsEventListener());
Webansicht im Widget
Feature-Flag: linkHandler
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.
Webansicht im Widget konfigurieren
Feature-Flag: webViewConfig
linkHandler
auf WebviewLinkHandlerType.WEBVIEW
setzen. Sie können Größe und Anzeige der Webansicht selbst mit einem webViewConfig
-Klassenobjekt festlegen:BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<SERVER_URI>, false, getApplicationContext()) // Configuration to initialize the SDK
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.linkHandler(WebviewLinkHandlerType.WEBVIEW)
.webViewConfig(new WebViewConfig()
.webViewSize(WebviewSizeWindow.FULL)
.webViewTitleColor(<COLOR_VALUE>)
.webviewHeaderColor(<COLOR_VALUE>)
.clearButtonLabel(<BUTTON_TEXT>)
.clearButtonLabelColor(<COLOR_VALUE>)
.clearButtonIcon(<IMAGE_ID>))
.build();
Wie in diesem Code-Snippet dargestellt, können Sie die folgenden Attribute für die Webansicht festlegen.Attribut | Einstellungen |
---|---|
webViewSize |
Legt die Bildschirmgröße des Webansichtsfensters im Widget mit dem WebviewSizeWindow -Enum fest, das zwei Werte aufweist: PARTIAL (WebviewSizeWindow.PARTIAL ) und FULL (WebviewSizeWindow.FULL ).
|
clearButtonLabel |
Legt den Text für die Schaltfläche "Löschen"/"Schließen" in der oberen rechten Ecke der Webansicht fest. Der Standardtext lautet DONE .
|
clearButtonIcon |
Legt ein Symbol für die Schaltfläche "Löschen" fest, das auf der Schaltfläche linksbündig angezeigt wird. |
clearButtonLabelColor |
Legt die Farbe des Textes der Schaltfläche "Löschen" fest. |
clearButtonColor |
Legt die Hintergrundfarbe für die Schaltfläche "Löschen" fest. |
webviewHeaderColor |
Legt die Hintergrundfarbe für den Webansichtsheader fest. |
webviewTitleColor |
Legt die Farbe des Titels im Header fest. Der Titel ist die URL des geöffneten Weblinks. |
Mehrsprachiger Chat
Feature-Flag: multiLangChat
Mit der nativen Sprachunterstützung des Android-SDK kann das Chatwidget sowohl die Sprache eines Benutzers erkennen als auch ermöglichen, dass der Benutzer die Konversationssprache aus einem Dropdown-Menü im Header auswählt. 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 die supportedLanguage
ArrayList enthält, die aus Sprachtags (lang
) und optionalen Anzeigelabels (label
) besteht. Neben diesem Array können Sie optional die Standardsprache mit der Eigenschaft primary
festlegen, wie durch das (primary("en")
im folgenden Snippet) dargestellt.ArrayList<SupportedLanguage> supportedLanguages = new ArrayList<>();
supportedLanguages.add(new SupportedLanguage("en"));
supportedLanguages.add(new SupportedLanguage("fr", "French"));
supportedLanguages.add(new SupportedLanguage("de", "German"));
MultiLangChat multiLangChat = new MultiLangChat().supportedLanguage(supportedLanguages).primary("en");
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<SERVER_URI>, false, getApplicationContext()) // Configuration to initialize the SDK
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.multiLangChat(multiLangChat)
.build();
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.
- Sie müssen mindestens zwei Sprachen definieren, damit das Dropdown-Menü angezeigt werden kann.
- Wenn Sie den Schlüssel
primary
auslassen, erkennt das Widget automatisch die Sprache im Benutzerprofil und wählt die Option Sprache erkennen im Menü aus.
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 primary
in der anfänglichen Konfiguration ohne die supportedLanguage
ArrayList. Der in der Variable primary
übergebene Wert wird als Chatsprache für die Unterhaltung festgelegt.
Spracherkennung
Wenn Sie die Eigenschaft
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 auch die Option Erkannte Sprache aktivieren, indem Sie die Bots.setPrimaryChatLanguage('und')
-API aufrufen, wobei 'und'
"unbestimmt" angibt.
Sie können die Chatsprache auch dann dynamisch mit der API setPrimaryChatLanguage(lang)
aktualisieren, wenn das Dropdown-Menü nicht konfiguriert wurde.
Kurzreferenz für mehrsprachigen Chat
Gehen Sie folgendermaßen vor... | ... Vorgehensweise |
---|---|
Zeigen Sie die Dropdown-Liste für die Sprachauswahl für Endbenutzer an. | Definieren Sie die Eigenschaft multiLangChat mit einem Objekt, das die Eigenschaft supportedLanguage ArrayList enthält.
|
Legen Sie die Chatsprache fest, ohne den Endbenutzern das Dropdown-Menü für die Sprachauswahl anzuzeigen. | Definieren Sie nur primary .
|
Standardsprache festlegen | Übergeben Sie primary mit der supportedLanguage Arraylist. Der Wert primary muss eine der unterstützten Sprachen im Array sein.
|
Spracherkennung aktivieren. | Übergeben Sie primary als und .
|
Chat-Sprache dynamisch aktualisieren. | Rufen Sie die API setPrimaryChatLanguage(lang) auf.
|
Optionen für das Menü "Teilen"
- Visuelle Mediendateien (Bilder und Videos)
- Audio-Dateien
- Allgemeine Dateien wie Dokumente, PDFs und Kalkulationstabellen
- Speicherort
Indem Sie eine ArrayList von Objekten an shareMenuItems shareMenuItems(Arraylist<Object>)
übergeben, können Sie den Typ der im Menü verfügbaren Elemente einschränken oder filtern, die Symbole und Labels des Menüs anpassen und die Größe von Uploaddateien einschränken (wie 1024 im folgenden Snippet). Bei diesen Objekten kann es sich entweder um ein Objekt von shareMenuCustomItem
oder um ShareMenuItem
-Enum-Werte handeln, die den Elementen im Menü "Teilen" zugeordnet sind: ShareMenuItem.CAMERA
für die Kameramenüoption (sofern vom Gerät unterstützt), ShareMenuItem.VISUAL
für das Teilen eines Bild- oder Videoelements, ShareMenuItem.AUDIO
für das Teilen eines Audioelements und ShareMenuItem.FILE
für das Teilen eines Dateielements. Wenn Sie einen leeren Wert oder einen Nullwert übergeben, werden alle Menüoptionen angezeigt, die als ShareMenuItem
-Enum-Werte übergeben werden können.
ShareMenuCustomItem
-Objekt keinen Wert oder einen Nullwert für das Label aufweist, wie bei shareMenuCustomItem3 = ShareMenuCustomItem('csv')
im folgenden Snippet, wird eine Typzeichenfolge mit dem Präfix share_
zum Label. Bei shareMenuCustomItem3
lautet das Label share_csv
. Sie können Benutzern das Hochladen aller Dateitypen ermöglichen, indem Sie den Typ eines ShareMenuCustomItem
-Objekts auf *
setzen.
Diese Konfiguration gilt nur, wenn
enableAttachment
auf true
gesetzt ist.
ArrayList<Object> customItems = new ArrayList<>();
ShareMenuCustomItem shareMenuCustomItem1 = new ShareMenuCustomItem("pdf bin", "Label1", 1024, R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem2 = new ShareMenuCustomItem("doc", "Label2", R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem3 = new ShareMenuCustomItem("csv");
ArrayList<Object> customItems = new ArrayList<>(Arrays.asList(shareMenuCustomItem1,shareMenuCustomItem2,shareMenuCustomItem3,ShareMenuItem.CAMERA));
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(sharedPreferences.getString(getString(R.string.pref_name_chat_server_host), Settings.CHAT_SERVER_URL), false, getApplicationContext())
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.shareMenuItems(customItems)
.enableAttachment(true)
.build();
öffentlichen statischen Storno shareMenuItems()
Bots.shareMenuItems();
aufrufen.Bots.shareMenuItems()
public static void shareMenuItems(ArrayList<Object> shareMenuItems)
Bots.shareMenuItems(customItems);
aufrufen, wobei customItems
eine ArrayList von Objekten ist. Alle Objekte können ShareMenuItem
-Enum-Werte oder Objekte von ShareMenuCustomItem
sein.ArrayList<Object> customItems = new ArrayList<>();
ShareMenuCustomItem shareMenuCustomItem1 = new ShareMenuCustomItem("pdf bin", "Label1", 1024, R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem2 = new ShareMenuCustomItem("doc", "Label2", R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem3 = new ShareMenuCustomItem("csv");
customItems.add(shareMenuCustomItem1);
customItems.add(ShareMenuItem.CAMERA);
customItems.add(ShareMenuItem.FILE);
customItems.add(shareMenuCustomItem2);
customItems.add(shareMenuCustomItem3);
Bots.shareMenuItems(customItems);
Spracherkennung
Feature-Flag: enableSpeechRecognition
Wenn Sie das Featurekennzeichen enableSpeechRecognition
auf true
setzen, kann die Schaltfläche "Mikrofon" zusammen mit der Schaltfläche "Senden" angezeigt werden, wenn das Benutzereingabefeld leer ist.
Wenn Sie diese Eigenschaft auf true
setzen, wird auch die von der Eigenschaft enableSpeechRecognitionAutoSend
aktivierte Funktionalität unterstützt. Wenn diese Eigenschaft auf true
gesetzt wird, kann die Sprachantwort des Benutzers automatisch an den Chatserver gesendet werden, während die Antwort als gesendete Nachricht im Chatfenster angezeigt wird. Sie können es Benutzern ermöglichen, die diktierten Nachrichten zunächst zu bearbeiten (oder zu löschen), bevor sie sie manuell senden. Dazu setzen Sie enableSpeechRecognitionAutoSend
auf false
.
public static void startRecording(IBotsSpeechListener listener)
Startet die Aufzeichnung der Sprachnachricht des Benutzers. Der Parameter listener
ist eine Instanz von IBotsSpeechListener
, die die vom Server zurückgegebene Antwort empfängt.
public static boolean isRecording()
Prüft, ob die Sprachaufzeichnung gestartet wurde. Gibt true
zurück, wenn die Aufzeichnung gestartet wurde. Andernfalls wird false
zurückgegeben.
IBotsSpeechListener
IBotsSpeechListener
implementieren, die dann die Funktionalität für die folgenden Methoden implementiert:
void onError(String error)
Diese Methode wird aufgerufen, wenn Fehler beim Herstellen der Verbindung zum Server auftreten oder wenn keine Eingabe erfolgt bzw. zu viele Eingaben vorgenommen werden. Der Parameter error
ist die Fehlermeldung.
void onSuccess(String utterance)
Diese Methode wird aufgerufen, wenn ein abschließendes Ergebnis vom Server empfangen wird. Der Parameter utterance
ist die letzte vom Server empfangene Äußerung.
Diese Methode wird in Release 20.8.1 nicht mehr unterstützt.
void onSuccess(BotsSpeechResult botsSpeechResult)
Diese Methode wird aufgerufen, wenn ein abschließendes Ergebnis vom Server empfangen wird. Der zugehörige Parameter botsSpeechResult
ist die abschließende Antwort, die vom Server empfangen wurde.
void onPartialResult(String utterance)
Diese Methode wird aufgerufen, wenn ein Teilergebnis vom Server empfangen wird. Der Parameter utterance
ist die teilweise vom Server empfangene Äußerung.
void onClose(int code, String message)
Diese Methode wird aufgerufen, wenn die Verbindung zum Server geschlossen wird.
code
: Der Statuscodemessage
: Der Grund für das Schließen der Verbindung
onActiveSpeechUpdate(byte[] speechData)
public class BotsSpeechListener implements IBotsSpeechListener {
@Override
public void onError(String error) {
// Handle errors
}
@Override
public void onSuccess(String utterance) {
// This method was deprecated in release 20.8.1.
// Handle final result
}
@Override
public void onSuccess(BotsSpeechResult botsSpeechResult) {
// Handle final result
}
@Override
public void onPartialResult(String utterance) {
// Handle partial result
}
@Override
public void onClose(int code, String message) {
// Handle the close event of connection to server
}
@Override
public void onOpen() {
// Handle the open event of connection to server
}
@Override
public void onActiveSpeechUpdate(byte[] speechData) {
// Handle the speech update event
}
}
Bots.startRecording(new BotsSpeechListener()); // Start voice recording
if (Bots.isRecording()) {
Bots.stopRecording(); // Stop voice recording
}
Sprachsynthese
- Feature-Flag:
enableSpeechSynthesis
- Funktionskonfiguration:
speechSynthesisVoicePreferences
- Benutzer können die Audioantwort des Skills mit einer Schaltfläche im Header der Chatansicht stummschalten oder die Stummschaltung aufheben. Sie aktivieren dieses Feature, indem Sie das Feature-Flag
enableSpeechSynthesis
auftrue
setzen. - Sie können mit der Eigenschaft
speechSynthesisVoicePreferences
die bevorzugte Sprache festlegen, in der die Nachrichten des Skills vorgelesen werden. Der Parameter, der die Sprache und Stimme festlegt, ist eine Liste derSpeechSynthesisSetting
-Instanzen (beschrieben in der Javadoc des SDK, das Sie von der ODA- und OMC-Downloadseite herunterladen). Diese Eigenschaft ermöglicht einen Fallback, wenn das Gerät die bevorzugte Sprache oder Stimme nicht unterstützt. Wenn das Gerät die bevorzugte Stimme nicht unterstützt, wird stattdessen die Standardstimme für die bevorzugte Sprache verwendet. Wenn weder die bevorzugte Stimme noch die bevorzugte Sprache unterstützt wird, werden die Standardstimme und die Standardsprache verwendet.
public static void initSpeechSynthesisService()
onCreate()
einer Aktivität aufgerufen werden, um den Sprachsyntheseservice zu initialisieren. Die Initialisierung des Sprachsyntheseservice erfolgt nur dann beim Initialisieren der SDK-Library, wenn das Feature-Flag enableSpeechSynthesis
auf true
gesetzt ist.public class ConversationActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bots.initSpeechSynthesisService();
}
}
public static void startBotAudioResponse(String text)
text
ist der Text für die Skillnachricht, die vorgelesen wird.Bots.startBotAudioResponse("What kind of crust do you want?");
Diese Methode ist in Release 21.08 veraltet.
public static void stopBotAudioResponse()
Bots.stopBotAudioResponse()
public static boolean isSpeaking()
Prüft, ob die Skillantwort derzeit vorgelesen wird oder nicht.
true
zurück, wenn die Skillantwort derzeit vorgelesen wird. Andernfalls wird false
zurückgegeben.if (Bots.isSpeaking()) {
Bots.stopBotAudioResponse();
}
public static void shutdownBotAudioResponse()
Gibt die vom SDK verwendeten Ressourcen frei.
onDestroy()
von ConversationActivity
aufgerufen.public class ConversationActivity extends AppCompatActivity {
@Override
protected void onDestroy() {
super.onDestroy();
Bots.shutdownBotAudioResponse();
}
}
Speech Service-Injection
Featurekennzeichen: ttsService
Mit dem Feature-Flag speechSynthesisService
können Sie jeden Text-to-Speech-(TTS-)Service - Ihren eigenen oder einen von einem Drittanbieter bereitgestellten - in das SDK einfügen. Um einen TTS-Service zu injizieren, müssen Sie zuerst das Feature-Flag enableSpeechSynthesis
auf true
setzen und dann eine Instanz der SpeechSynthesisService
-Schnittstelle an das Flag speechSynthesisService
übergeben.
Die Schnittstelle SpeechSynthesisService
SpeechSynthesisService
ist. Es implementiert folgende Methoden:
initTextToSpeechService(@NonNull Application application, @NonNull BotsConfiguration botsConfiguration)
: Initialisiert einen neuen TTS-Service.Parameter Beschreibung application
Die Anwendung. Dieser Wert darf nicht Null sein. botsConfiguration
Das BotsConfiguration
-Objekt, das zur Steuerung der Library-Features verwendet wird. Dieser Wert darf nicht Null sein.speak(String phrase)
: Fügt eine Wortgruppe hinzu, die in die Äußerungswarteschlange vorgelesen werden soll. Der Parameterphrase
ist der Text, der vorgelesen werden muss.isSpeaking()
: Prüft, ob die Audioantwort vorgelesen wird. Sie gibtfalse
zurück, wenn keine laufende Audioantwort gesprochen wird.Hinweis
Diese Methode ist in Release 21.08 veraltet.stopTextToSpeech()
: Stoppt jede laufende Sprachsynthese.Hinweis
Diese Methode ist in Release 21.08 veraltet.shutdownTextToSpeech()
: Gibt die Ressourcen frei, die von der TextToSpeech-Engine verwendet werden.getSpeechSynthesisVoicePreferences()
: Gibt das Sprachvoreinstellungs-Array zurück, mit dem die beste Übereinstimmung für die verfügbare Stimme ausgewählt wird, die für die Sprachsynthese verwendet wird.setSpeechSynthesisVoicePreferences(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences)
: Legt das Array für Spracheinstellungen fest, mit dem die beste verfügbare Sprachübereinstimmung für die Sprachsynthese ausgewählt wird. Der ParameterspeechSynthesisVoicePreferences
ist das Spracheinstellungsarray für die Sprachsynthese.onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences)
: Legt die Sprachsynthese auf die beste verfügbare Sprachübereinstimmung fest.HinweisWir empfehlen, diese Methode innerhalb der Methode
Diese Methode ist in Release 21.08 veraltet.setSpeechSynthesisVoicePreferences
aufzurufen, nachdem Sie die SprachvoreinstellungenArrayList
festgelegt haben. Der ParameterspeechSynthesisVoicePreferences
ist das Spracheinstellungsarray für die Sprachsynthese.onSpeechRecognitionLocaleChange(Locale speechLocale
): Diese Methode wird aufgerufen, wenn sich die Spracherkennungssprache geändert hat. Wenn Sie diese Methode außer Kraft setzen, können Sie die Sprache der Sprachsynthese auf dieselbe Sprache wie die Sprache der Spracherkennung einstellen. Der ParameterspeechLocale
ist das für die Spracherkennung festgelegte Gebietsschema.
private class TextToSpeechServiceInjection implements SpeechSynthesisService {
@Override
public void initTextToSpeechService(@NonNull Application application, @NonNull BotsConfiguration botsConfiguration) {
// Initialisation of Text to Speech Service.
}
@Override
public void speak(String phrase) {
// Adds a phrase to the utterance queue to be spoken
}
@Override
public boolean isSpeaking() {
// Checks whether the bot audio response is being spoken or not.
return false;
}
@Override
public void stopTextToSpeech() {
// Stops any ongoing speech synthesis
}
@Override
public void shutdownTextToSpeech() {
// Releases the resources used by the TextToSpeech engine.
}
@Override
public ArrayList<SpeechSynthesisSetting> getSpeechSynthesisVoicePreferences() {
// The voice preferences array which is used to choose the best match available voice for speech synthesis.
return null;
}
@Override
public void setSpeechSynthesisVoicePreferences(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences) {
// Sets the voice preferences array which can be used to choose the best match available voice for speech synthesis.
}
@Override
public SpeechSynthesisSetting onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences) {
// Sets the speech synthesis voice to the best voice match available.
return null;
}
@Override
public void onSpeechRecognitionLocaleChange(Locale speechLocale) {
// If the speech recognition language is changed, the speech synthesis language can also be changed to the same language.
}
}
SpeechSynthesisService#setSpeechSynthesisVoicePreferencesonSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting>)
und SpeechSynthesisService#onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting>)
wurden in diesem Release nicht mehr unterstützt und durch SpeechSynthesisService#setTTSVoice(ArrayList<SpeechSynthesisSetting>)
und SpeechSynthesisService#getTTSVoice()
ersetzt. Zuvor hat SpeechSynthesisService#setSpeechSynthesisVoicePreferencesonSpeechSynthesisVoicePreferencesChange
das Sprachvoreinstellungsarray für die Sprachsynthese festgelegt, und SpeechSynthesisService#onSpeechSynthesisVoicePreferencesChange
die beste Stimme festgelegt, die für die Sprachsynthese verfügbar ist, und die ausgewählte Stimme zurückgegeben. Jetzt wird die gleiche Funktionalität durch die neuen Methoden erreicht: SpeechSynthesisService#setTTSVoice(ArrayList<SpeechSynthesisSetting> TTSVoices)
, das sowohl das Sprachsynthese-Sprachpräferenzarray als auch die beste verfügbare Stimme für die Sprachsynthese festlegt, und SpeechSynthesisService#getTTSVoice()
, das die ausgewählte Stimme für die Sprachsynthese zurückgibt.
Eingabeindikator für Benutzer-Agent-Unterhaltungen
Feature-Flag: enableSendTypingStatus
Wenn diese Option aktiviert ist, sendet das SDK ein RESPONDING
-Eingabeereignis zusammen mit dem Text, der derzeit vom Benutzer eingegeben wird, an . Zeigt einen Tippindikator auf der Agent-Konsole an. Wenn der Benutzer die Eingabe abgeschlossen hat, sendet das SDK ein LISTENING
-Ereignis an Oracle B2C Service oder Oracle Fusion Service. Dadurch wird die Eingabeanzeige in der Agent-Konsole ausgeblendet.
Wenn der Agent eingibt, empfängt das SDK ebenfalls ein RESPONDING
-Ereignis vom Service. Nach Erhalt dieses Ereignisses zeigt das SDK dem Benutzer einen Tippindikator an. Wenn der Agent im Leerlauf ist, empfängt das SDK das Ereignis LISTENING
vom Service. Nach Erhalt dieses Ereignisses blendet das SDK den Eingabeindikator aus, der dem Benutzer angezeigt wird.
sendUserTypingStatus
-API aktiviert dasselbe Verhalten für den Headless-Modus.public void sendUserTypingStatus(TypingStatus status, String text)
- So zeigen Sie die Eingabeanzeige auf der Agent-Konsole an:
Bots.sendUserTypingStatus("RESPONDING", "<Message_Being_Typed>");
- So blenden Sie die Eingabeanzeige auf der Agent-Konsole aus:
Bots.sendUserTypingStatus("LISTENING", "");
- Um den benutzerdefinierten Eingabeindikator zu steuern, verwenden Sie das Ereignis
onReceiveMessage(Message message)
. Beispiel:public void onReceiveMessage(Message message) { if (message != null) { MessagePayload messagePayload = message.getPayload(); if (messagePayload instanceof StatusMessagePayload) { StatusMessagePayload statusMessagePayload = (StatusMessagePayload) messagePayload; String status = statusMessagePayload.getStatus(); if (status.equalsIgnoreCase(String.valueOf(TypingStatus.RESPONDING))) { // show typing indicator } else if (status.equalsIgnoreCase(String.valueOf(TypingStatus.LISTENING)) // hide typing indicator } } }
typingStatusInterval
: Standardmäßig sendet das SDK das EingabeereignisRESPONDING
alle drei Sekunden an den Service. Mit diesem Kennzeichen können Sie dieses Ereignis drosseln. Der Mindestwert, der festgelegt werden kann, beträgt drei Sekunden.enableAgentSneakPreview
: Oracle B2C Service unterstützt die Anzeige des Benutzertextes bei der Eingabe. Wenn dieses Flag auftrue
gesetzt ist (Standard istfalse
), sendet das SDK den tatsächlichen Text. Um die Privatsphäre der Benutzer zu schützen, sendet das SDK...
anstelle des eigentlichen Textes an Oracle B2C Service, wenn das Flag auffalse
gesetzt ist.Hinweis
Dieses Feature muss sowohl im SDK als auch in der Oracle B2C Service-Chatkonfiguration aktiviert sein.
Benutzeravatar aktualisieren
Sie können die dynamische Aktualisierung des Benutzeravatars zur Laufzeit aktivieren.
Agent-Details anzeigen
Mit diesen APIs können Sie den Agent-Namen, die Textfarbe, den Avatar, die Initialen des Agent-Namens, die Textfarbe und den Avatarhintergrund ändern.
öffentliche AgentDetails getAgentDetails()
Bots.getAgentDetails(AgentDetails);
Weitere Informationen über die Klasse AgentDetails
finden Sie in den Javadocs.
öffentliche Stornierung setAgentDetails(AgentDetails)
Bots.setAgentDetails(AgentDetails);
öffentliche AgentDetails getAgentDetails()
Bots.getAgentDetails(AgentDetails);
Weitere Informationen über die Klasse AgentDetails
finden Sie in den Javadocs.
Sprachvisualisierung
Wenn Sprachunterstützung aktiviert ist (enableSpeechRecognition(true)
), zeigt der Footer des Chatwidgets eine Sprachvisualisierung an. Dabei handelt es sich um ein dynamisches Visualisierungsdiagramm, das die Frequenzebene der Spracheingabe angibt. Die Visualisierung reagiert auf die Modulation der Benutzerstimme, indem sie angibt, ob der Benutzer zu leise oder zu laut spricht. Diese Visualisierung wird mit dem Bytestream erstellt, der aufgezeichnet wird, während der Benutzer spricht. Dies wird auch in der IBotsSpeechListener#onActiveSpeechUpdate(byte[])
-Methode zur Verwendung im Headless-Modus angezeigt.
Der Sprachfunktionsmodus wird durch Anzeige des Tastatursymbols angegeben.
Wenn enableSpeechRecognitionAutoSend(true)
angegeben ist, wird der erkannte Text automatisch an den Skill gesendet, nachdem der Benutzer die Nachricht diktiert hat. Anschließend wird der Modus auf die Texteingabe zurückgesetzt. Wenn enableSpeechRecognitionAutoSend(false)
angegeben ist, wird der Modus ebenfalls auf die Texteingabe zurückgesetzt. In diesem Fall können Benutzer jedoch den erkannten Text ändern, bevor sie die Nachricht an den Skill senden.