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

So fügen Sie einen relativen Zeitstempel hinzu:
  • Aktivieren Sie Zeitstempel: enableTimestamp: true
  • Aktivieren Sie relative Zeitstempel: timestampType: 'relative'
Wenn Sie den Zeitstempel (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.
Dieser Zeitstempel wird in folgenden regelmäßigen Intervallen (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
Wenn eine neue Nachricht in den Chat geladen wird, wird der relative Zeitstempel der vorherigen Nachricht entfernt. Stattdessen wird ein neuer Zeitstempel in der neuen Nachricht angezeigt, der die Zeit relativ zur vorherigen Nachricht anzeigt. Ab dann wird der relative Zeitstempel aktualisiert, bis die nächsten Nachrichten eintreffen.

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

Mit dieser Funktion können Sie die im Popup-Menü "Teilen" verfügbaren Objekttypen einschränken oder filtern, den Grenzwert für die Dateigröße für Uploads festlegen (z.B. 1024 im folgenden Snippet) und die Symbole und Labels des Menüs anpassen.
Hinweis

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();
Wenn ein 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.
Hinweis

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)

Sie können das Popup-Fenster "Elemente freigeben" dynamisch aktualisieren, indem Sie die API 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);

public static void shareMenuItems()

Sie können die Liste der Elemente im Menü "Teilen" abrufen, indem Sie die API Bots.shareMenuItems(); aufrufen.
Bots.shareMenuItems()

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

Der Skill kann mit den Methoden 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();
Wenn 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

Mit dem Delegationsfeature können Sie einen Delegaten so festlegen, dass Callbacks vor bestimmten Ereignissen in der Unterhaltung empfangen werden. Um einen Delegaten festzulegen, muss eine Klasse 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.

public Message beforeNotification(Message message)

Mit dem Delegaten public Message beforeNotification(Message message) kann die Nachricht eines Skills geändert werden, bevor eine Benachrichtigung ausgelöst wird. Wenn Null zurückgegeben wird, wird die Benachrichtigung nicht ausgelöst.

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()

Die Unterhaltung kann auch dynamisch durch Aufrufen der 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)

Sendet eine Textnachricht an den Skill. Der Parameter text ist die Textnachricht.
Bots.sendMessage("I want to order a Pizza");
EventListener
Um auf die Änderung des Verbindungsstatus, die an den Skill gesendete und vom Skill empfangene Nachricht und die Statusereignisse des Anhangsuploads zu horchen, muss eine Klasse die 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 Parameter connectionStatus ist der aktuelle Status der Verbindung. Weitere Informationen zum Enum ConnectionStatus 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 Parameter message ist die vom Skill empfangene Nachricht. Weitere Einzelheiten zur Klasse Message 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 Klasse Message 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)
Legt fest, dass der Listener die vom Skill zurückgegebene Antwort empfängt, um Aktualisierungen der Verbindungsstatusänderung abzurufen und eine Aktualisierung zu erhalten, wenn der Anhangsupload abgeschlossen ist. Der Parameter 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

Sie können das Linkverhalten für Webansichten konfigurieren, indem Sie die Funktion 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

Sie können ein Menü aktivieren, mit dem Benutzer eine bevorzugte Sprache aus einem Dropdown-Menü auswählen können, indem Sie die Eigenschaft 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.
Berücksichtigen Sie bei der Konfiguration der Unterstützung mehrerer Sprachen die folgenden Aspekte:
  • 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

Neben den übergebenen Sprachen zeigt das Chatwidget in der Dropdown-Liste auch die Option Sprache erkennen an. Bei Auswahl dieser Option erkennt der Skill die Unterhaltungssprache automatisch anhand der Nachricht des Benutzers und antwortet nach Möglichkeit in derselben Sprache.
Hinweis

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"

Standardmäßig werden im Menü "Teilen" Optionen für die folgenden Dateitypen angezeigt:
  • 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.

Wenn ein 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.
Hinweis

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()

Sie können die Liste der Elemente im Menü "Teilen" abrufen, indem Sie die API Bots.shareMenuItems(); aufrufen.
Bots.shareMenuItems()

public static void shareMenuItems(ArrayList<Object> shareMenuItems)

Sie können das Popup-Fenster für Elemente im Menü "Teilen" dynamisch aktualisieren, indem Sie die API 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 void stopRecording()

Stoppt die Aufzeichnung der Sprachnachricht des Benutzers.

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

Eine Klasse muss die Schnittstelle 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.

Hinweis

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.

Parameter:
  • code: Der Statuscode
  • message: Der Grund für das Schließen der Verbindung

void onOpen()

Die Methode, die aufgerufen wird, wenn die Verbindung zum Server geöffnet wird.

onActiveSpeechUpdate(byte[] speechData)

Diese Methode wird aufgerufen, wenn eine Aktualisierung in der Sprachnachricht des Benutzers vorhanden ist, die dann für die Aktualisierung der Sprachvisualisierung verwendet werden kann. Der zugehörige Parameter ist speechData, das Bytearray der aufgezeichneten Stimme des Benutzers.
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
Das SDK wurde mit Sprachsynthese integriert, um die Nachricht des Skills vorzulesen, wenn eine neue Nachricht vom Skill empfangen wird:
  • 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 auf true 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 der SpeechSynthesisSetting-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()

Initialisiert den Sprachsyntheseservice. Diese Methode muss in der Methode 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)

Startet das Vorlesen der Antwort des Skills. Der Parameter text ist der Text für die Skillnachricht, die vorgelesen wird.
Bots.startBotAudioResponse("What kind of crust do you want?");
Hinweis

Diese Methode ist in Release 21.08 veraltet.

public static void stopBotAudioResponse()

Stoppt das Vorlesen der Antwort des Skills.
Bots.stopBotAudioResponse()

public static boolean isSpeaking()

Prüft, ob die Skillantwort derzeit vorgelesen wird oder nicht.

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

Diese Methode wird in der Methode 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

Sie erstellen eine Instanz einer Klasse, die eine Implementierung der Schnittstelle 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 Parameter phrase ist der Text, der vorgelesen werden muss.
  • isSpeaking(): Prüft, ob die Audioantwort vorgelesen wird. Sie gibt false 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 Parameter speechSynthesisVoicePreferences ist das Spracheinstellungsarray für die Sprachsynthese.
  • onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences): Legt die Sprachsynthese auf die beste verfügbare Sprachübereinstimmung fest.
    Hinweis

    Diese Methode ist in Release 21.08 veraltet.
    Wir empfehlen, diese Methode innerhalb der Methode setSpeechSynthesisVoicePreferences aufzurufen, nachdem Sie die Sprachvoreinstellungen ArrayList festgelegt haben. Der Parameter speechSynthesisVoicePreferences 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 Parameter speechLocale 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.
        }
    }
Hinweis

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.

Die 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
             }
           }
         }
Es gibt zwei weitere Einstellungen, die zusätzliche Kontrolle bieten:
  • typingStatusInterval: Standardmäßig sendet das SDK das Eingabeereignis RESPONDING 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 auf true gesetzt ist (Standard ist false), 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 auf false 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.

Öffentliche Stornierung updatePersonAvatar

Legt den Benutzeravatar für alle Nachrichten einschließlich vorheriger Nachrichten fest.
ConversationActivity.setUserPerson(Object);

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()

Gibt ein Objekt mit den Agent-Details zurück.
Bots.getAgentDetails(AgentDetails);
Weitere Informationen über die Klasse AgentDetails finden Sie in den Javadocs.

öffentliche Stornierung setAgentDetails(AgentDetails)

Überschreibt die Agent-Details, die vom Server empfangen wurden.
Bots.setAgentDetails(AgentDetails);

öffentliche AgentDetails getAgentDetails()

Gibt ein Objekt mit den Agent-Details zurück.
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.

Das Chatwidget zeigt eine Sprachvisualisierung an, wenn Benutzer auf das Sprachsymbol klicken. Es ist ein Indikator dafür, ob der Audiopegel hoch genug ist, damit das SDK die Stimme des Benutzers erfassen kann. Die Nachricht des Benutzers wird als Text erkannt und unter der Visualisierung angezeigt.
Hinweis

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.