Funzioni

Di seguito sono riportate le funzioni che è possibile configurare nell'SDK Oracle Android.

Indicatori temporali assoluti e relativi

Flag funzione: timestampType: TimestampMode.RELATIVE

È possibile abilitare indicatori orari assoluti o relativi per i messaggi di chat. Gli indicatori orari assoluti visualizzano l'ora esatta per ogni messaggio. Gli indicatori orari relativi vengono visualizzati solo sul messaggio più recente ed esprimono il tempo in termini di secondi, giorni, ore, mesi o anni fa rispetto alla precisione message.The precedente offerta dagli indicatori orari assoluti. sono ideali per le attività di archiviazione, ma nel contesto limitato di una sessione di chat, questa precisione riduce l'esperienza utente perché gli utenti devono confrontare gli indicatori orari per scoprire il passaggio del tempo tra i messaggi. Gli indicatori orari relativi consentono agli utenti di tenere traccia facilmente della conversazione utilizzando termini quali Just Now e Pochi istanti fa che possono essere compresi immediatamente. Gli indicatori orari relativi migliorano l'esperienza dell'utente in un altro modo, semplificando allo stesso tempo le attività di sviluppo: poiché gli indicatori orari relativi contrassegnano i messaggi in termini di secondi, giorni, ore, mesi o anni fa, non è necessario convertirli per i fusi orari.

Configura indicatori orari relativi

Per aggiungere un indicatore orario relativo, procedere come segue.
  • Attiva indicatori orari - enableTimestamp: true
  • Abilita indicatori orari relativi - timestampType: 'relative'
Quando si configura l'indicatore orario (timestampType: 'relative'), come intestazione viene visualizzato un indicatore orario assoluto prima del primo messaggio del giorno. Questa intestazione viene visualizzata quando la conversazione non è stata cancellata e i messaggi meno recenti sono ancora disponibili nella cronologia.
Questo indicatore orario viene aggiornato a intervalli regolari (secondi, minuti e così via) fino alla ricezione di un nuovo messaggio.
  • Per i primi 10 anni
  • Tra 10 e 60 anni
  • Ogni minuto tra 1m-60m
  • Ogni ora tra 1hr-24hr
  • Ogni giorno tra 1d-30d
  • Ogni mese tra 1m-12m
  • Ogni anno dopo il primo anno
Quando un nuovo messaggio viene caricato nella chat, l'indicatore orario relativo del messaggio precedente viene rimosso e sul nuovo messaggio viene visualizzato un nuovo indicatore orario che visualizza l'ora relativa al messaggio precedente. A quel punto, l'indicatore orario relativo viene aggiornato fino all'arrivo dei messaggi successivi.

Layout pulsanti di azione

Flag funzione: actionsLayout

actionsLayout imposta la direzione del layout per le azioni locali, globali, delle schede e dei moduli. Quando si imposta questa opzione come LayoutOrientation.HORIZONTAL, questi pulsanti vengono disposti orizzontalmente e vengono inseriti a capo se il contenuto si eccede.

BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<Server_URI>, false, getApplicationContext())
        .channelId(<CHANNEL_ID>)
        .userId(<USER_ID>)
        .actionsLayout(actionsLayout)
        .build();

Filtro degli allegati

(Obbligatorio) <Immettere qui una breve descrizione.>

Flag funzione: shareMenuItems

Utilizzare questa funzione per limitare o filtrare i tipi di elemento disponibili nel popup del menu di condivisione, impostare il limite delle dimensioni dei file per i caricamenti (ad esempio 1024 nel seguente snippet) e personalizzare le icone e le etichette del menu.
Nota

Prima di poter configurare shareMenuItems, è necessario impostare enableAttachment su true.
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();
Se un oggetto ShareMenuCustomItem non dispone di un valore o di un valore null per l'etichetta, così come shareMenuCustomItem3 = ShareMenuCustomItem('csv') nello snippet precedente, l'etichetta diventa una stringa type con il suffisso share_. Per shareMenuCustomItem3, l'etichetta è share_csv.
Nota

È possibile consentire agli utenti di caricare tutti i tipi di file impostando type di un oggetto ShareMenuCustomItem come *.

vuoto statico pubblico shareMenuItems(ArrayList<Object> shareMenuItems)

È possibile aggiornare dinamicamente il popup di condivisione delle voci di menu richiamando l'API Bots.shareMenuItems(customItems);, dove customItems è un ArrayList di Objects. Ogni oggetto può essere di tipo ShareMenuItem o di tipo ShareMenuCustomItem.
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);

vuoto statico pubblico shareMenuItems()

È possibile ottenere l'elenco delle voci del menu di condivisione chiamando l'API Bots.shareMenuItems();.
Bots.shareMenuItems()

Sottomissione automatica di un campo

Quando la proprietà autoSubmit di un campo è impostata su true, il client invia un valore FormSubmissionMessagePayload con la mappa submittedField contenente i valori di campo validi immessi finora. I campi non ancora impostati (indipendentemente dal fatto che siano obbligatori) o che violino una convalida lato client non sono inclusi nella mappa submittedField. Se il campo inviato automaticamente contiene valori non validi, il messaggio di invio non viene inviato e viene visualizzato il messaggio di errore del client per quel particolare campo. Quando una sottomissione automatica riesce, partialSubmitField nel messaggio di invio del modulo verrà impostato su id nel campo autoSubmit.

Sostituzione di un form di input precedente

Quando l'utente finale invia il modulo, poiché autosubmit di un campo è impostato su true, la competenza può inviare un nuovo EditFormMessagePayload. Questo messaggio deve sostituire il precedente messaggio del modulo di input. Impostando la proprietà di estensione del canale replaceMessage su true, si abilita l'SDK a sostituire il messaggio del form di input precedente con il messaggio del form di input corrente.

Metodi di connessione e disconnessione

La competenza può essere connessa e disconnessa utilizzando i metodi public void disconnect() e public void connect(). WebSocket viene chiuso dopo aver richiamato il metodo diretto:
Bots.disconnect();
Se si richiama il seguente metodo, ristabilisce la connessione WebSocket se lo stato dello skill è Disconnesso:
Bots.connect();
Quando public void connect(Botsconfiguration botsconfiguration) viene chiamato con un nuovo oggetto botsconfiguration, la connessione WebSocket esistente viene chiusa e viene stabilita una nuova connessione utilizzando il nuovo oggetto botsconfiguration.
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<SERVER_URI>, false, getApplicationContext()) // Configuration to initialize the SDK
        .channelId(<CHANNEL_ID>)
        .userId(<USER_ID>)
        .build();

        Bots.connect(botsConfiguration);

Risposte client predefinite

Flag funzione: enableDefaultClientResponse: true (impostazione predefinita: false)

Utilizzare enableDefaultClientResponse: true per fornire risposte predefinite sul lato client accompagnate da un indicatore di digitazione quando la risposta dello skill è stata ritardata o quando non vi è alcuna risposta dello skill. Se l'utente invia il primo messaggio o la prima query, ma lo skill non risponde con il numero di secondi impostato dal flag odaas_default_greeting_timeout, lo skill può visualizzare un messaggio di saluto configurato mediante la stringa di traduzione odaas_default_greeting_message. Successivamente, il client verifica di nuovo la risposta dello skill. Il client visualizza la risposta dello skill se è stata ricevuta, ma in caso contrario il client visualizza un messaggio di attesa (configurato con la stringa di traduzione odaas_default_wait_message) a intervalli impostati dal flag odaas_default_wait_message_interval. Quando l'attesa della risposta dello skill supera la soglia impostata dal flag typingIndicatorTimeout, il client visualizza una risposta spiacevole all'utente e interrompe l'indicatore di digitazione. È possibile configurare la risposta Sorry utilizzando la stringa di traduzione odaas_default_sorry_message.

Delega

Configurazione funzioni: messageModifierDelegate

La funzione di delega consente di impostare un delegato per la ricezione di callback prima di determinati eventi nella conversazione. Per impostare un delegato, una classe deve implementare interface MessageModifierDelegate e passare la relativa istanza alla proprietà messageModifierDelegate.
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.
        }
        }

Messaggio pubblico beforeDisplay(Messaggio)

Il delegato public Message beforeDisplay(Message message) consente di modificare il messaggio di uno skill prima che venga visualizzato nella conversazione. Il messaggio modificato restituito dal delegato viene visualizzato nella conversazione. Se il metodo restituisce null, il messaggio non viene visualizzato.

Messaggio pubblico beforeDisplay(Messaggio)

Il delegato public Message beforeDisplay(Message message) consente di modificare un messaggio utente prima che venga inviato al server di chat. Il messaggio restituito dal delegato viene inviato allo skill. Se restituisce un valore nullo, il messaggio non viene inviato.

Messaggio pubblico beforeNotification(Messaggio)

Il delegato public Message beforeNotification(Message message) consente di modificare il messaggio di uno skill prima di attivare una notifica. Se restituisce un valore nullo, la notifica non viene attivata.

Visualizza la cronologia della conversazione

È possibile abilitare o visualizzare la cronologia delle conversazioni locali di un utente dopo la reinizializzazione dell'SDK impostando displayPreviousMessages su true o false nella configurazione dei bot. Quando l'opzione è impostata su false, i messaggi precedenti non vengono visualizzati per l'utente dopo la reinizializzazione dell'SDK.

Termina la sessione di chat

FeatureFlag: enableEndConversation: true

enableEndConversation: true aggiunge un pulsante di chiusura alla vista intestazione che consente agli utenti di terminare in modo esplicito la sessione di chat corrente. Quando gli utenti fanno clic su questo pulsante Chiudi e confermano l'azione di chiusura, viene visualizzata una finestra di dialogo di richiesta di conferma. L'SDK invia un messaggio di evento allo skill che segna la fine della sessione di chat. L'SDK disconnette quindi lo skill dall'istanza, comprime il widget chat e cancella la cronologia delle conversazioni dell'utente corrente. L'SDK attiva un delegato su beforeEndConversation(CompletionHandler completionHandler) che può essere utilizzato per eseguire un task prima di inviare una richiesta di chiusura della sessione al server. Inoltre, genera un evento OnChatEnd() per il quale è possibile registrarsi.

L'apertura del widget chat determina l'avvio di una nuova sessione di chat.

vuoto statico pubblico endChat()

La conversazione può anche essere terminata dinamicamente chiamando l'API Bots.endChat().
Bots.endChat()

CompletionHandler

CompletionHandler è un listener di eventi implementato nell'SDK, che ascolta il completamento del task eseguito sul delegato beforeEndConversation(CompletionHandler completionHandler) nell'applicazione host. Consulta il documento Javadoc incluso nell'SDK disponibile nella pagina di download di ODA e OMC.

SDK headless

L'SDK può essere utilizzato senza la sua interfaccia utente. Per utilizzarlo in questa modalità, importare nel progetto solo il package com.oracle.bots.client.sdk.android.core-24.12.aar come descritto in Aggiungere l'SDK client Oracle Android al progetto.

L'SDK mantiene la connessione al server e fornisce API per inviare messaggi, ricevere messaggi e ottenere aggiornamenti per lo stato della rete e per altri servizi. È possibile utilizzare le interfacce API per interagire con l'SDK e aggiornare l'interfaccia utente.

È possibile inviare un messaggio utilizzando una qualsiasi delle API send*() disponibili nella classe Bots. Ad esempio, public static void sendMessage(String text) invia un messaggio di testo a skill o assistente digitale.

vuoto statico pubblico sendMessage(testo stringa)

Invia un messaggio di testo allo skill. Il parametro text è il messaggio di testo.
Bots.sendMessage("I want to order a Pizza");
EventListener
Per ascoltare la modifica dello stato della connessione, il messaggio inviato allo skill e ricevuto dallo skill e gli eventi dello stato di caricamento degli allegati, una classe deve implementare l'interfaccia EventListener, che implementa quindi la funzionalità per:
  • void onStatusChange(ConnectionStatus connectionStatus): questo metodo viene chiamato quando lo stato della connessione WebSocket cambia. Il parametro connectionStatus è lo stato corrente della connessione. Per ulteriori dettagli sull'enumerazione ConnectionStatus, fare riferimento ai Javadoc inclusi nell'SDK (disponibili nella pagina di download di ODA e OMC).
  • void onMessageReceived(Message message): questo metodo viene chiamato quando viene ricevuto un nuovo messaggio dalla competenza. Il parametro message è il messaggio ricevuto dalla competenza. Per ulteriori dettagli sulla classe Message, fare riferimento ai Javadoc inclusi nell'SDK (disponibili nella pagina di download di ODA e OMC).
  • void onMessageSent(Message message): questo metodo viene chiamato quando viene inviato un messaggio allo skill. Il parametro del messaggio è il messaggio inviato allo skill. Per ulteriori dettagli sulla classe Message, fare riferimento ai Javadoc inclusi nell'SDK (disponibili nella pagina di download di ODA e OMC).
  • void onAttachmentComplete(): questo metodo viene chiamato al completamento del caricamento di un allegato.
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.
    }
}
L'istanza di tipo EventListener deve quindi essere passata a setEventListener(EventListener eventListener).
vuoto statico pubblico setEventListener(EventListener eventListener)
Imposta il listener in modo che riceva la risposta restituita dalla competenza per ottenere aggiornamenti sulla modifica dello stato della connessione e per ricevere un aggiornamento al completamento del caricamento degli allegati. Il parametro eventListener è un'istanza di tipo EventListener per la ricezione degli aggiornamenti.
Bots.setEventListener(new BotsEventListener());

Webview in-Widget

Flag funzione: linkHandler

È possibile configurare il funzionamento dei collegamenti nei messaggi di chat per consentire agli utenti di accedere alle pagine Web dal widget di chat. Invece di dover passare dalla conversazione per visualizzare una pagina in una scheda o in una finestra separata del browser, un utente può rimanere nella chat perché il widget chat apre il collegamento all'interno di una vista Web.

Configurare la vista Web in widget

Flag funzione: webViewConfig

È possibile configurare il funzionamento del collegamento della vista Web impostando la funzione linkHandler su WebviewLinkHandlerType.WEBVIEW. È possibile impostare la dimensione e la visualizzazione della vista Web utilizzando un oggetto classe webViewConfig:
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();
Come illustrato in questo frammento di codice, è possibile impostare i seguenti attributi per la vista Web.
Attributo Impostazioni
webViewSize Imposta la dimensione dello schermo della finestra della vista Web nel widget con l'enumerazione WebviewSizeWindow, che ha due valori: PARTIAL (WebviewSizeWindow.PARTIAL) e FULL (WebviewSizeWindow.FULL).
clearButtonLabel Imposta il testo utilizzato per il pulsante Cancella/Chiudi nell'angolo superiore destro della vista Web. Il testo predefinito è DONE.
clearButtonIcon Imposta un'icona per il pulsante di cancellazione, che viene visualizzata allineata a sinistra all'interno del pulsante.
clearButtonLabelColor Imposta il colore del testo dell'etichetta del pulsante Cancella.
clearButtonColor Imposta il colore di sfondo per il pulsante Cancella.
webviewHeaderColor Imposta il colore di sfondo per l'intestazione della vista Web.
webviewTitleColor Imposta il colore del titolo nell'intestazione. Il titolo è l'URL del collegamento Web aperto.

Chat multilingue

Flag funzione: multiLangChat

Il supporto della lingua nativa dell'SDK Android consente al widget chat di rilevare sia la lingua di un utente che di selezionare la lingua della conversazione da un menu a discesa nell'intestazione. Gli utenti possono passare da una lingua all'altra, ma solo tra le conversazioni, non durante una conversazione perché la conversazione viene reimpostata ogni volta che un utente seleziona una nuova lingua.

Abilita il menu Lingua

È possibile abilitare un menu che consente agli utenti di selezionare una lingua preferita da un menu a discesa definendo la proprietà multiLangChat con un oggetto contenente supportedLanguage ArrayList, composto da tag di lingua (lang) ed etichette di visualizzazione facoltative (label). Al di fuori di questo array, è possibile impostare la lingua predefinita con la proprietà primary come illustrato da (primary("en") nel seguente snippet.
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();
Il widget chat visualizza le lingue supportate passate in un menu a discesa situato nell'intestazione. Oltre alle lingue disponibili, il menu include anche un'opzione Detect Language. Quando un utente seleziona una lingua da questo menu, la conversazione corrente viene reimpostata e viene avviata una nuova conversazione con la lingua selezionata. La lingua selezionata dall'utente persiste nelle varie sessioni dello stesso browser, pertanto la lingua precedente dell'utente viene selezionata automaticamente quando l'utente rivede la competenza nella pagina contenente il widget chat.
Di seguito sono riportate alcune cose da tenere a mente quando si configura il supporto multilingua:
  • È necessario definire almeno due lingue per consentire la visualizzazione del menu a discesa.
  • Se si omette il tasto primary, il widget rileva automaticamente la lingua nel profilo utente e seleziona l'opzione Rileva lingua nel menu.

Disabilita menu lingua

A partire dalla versione 21.12, è inoltre possibile configurare e aggiornare la lingua della chat senza dover configurare il menu a discesa di selezione della lingua passando primary nella configurazione iniziale senza supportedLanguage ArrayList. Il valore passato nella variabile primary viene impostato come lingua della chat per la conversazione.

Rilevamento della lingua

Oltre alle lingue passate, nel widget chat viene visualizzata l'opzione Detect Language nell'elenco a discesa. La selezione di questa opzione indica alla competenza di rilevare automaticamente la lingua della conversazione dal messaggio dell'utente e, quando possibile, di rispondere nella stessa lingua.
Nota

Se si omette la proprietà primary, il widget rileva automaticamente la lingua nel profilo utente e attiva l'opzione Detect Language nel menu.

È possibile aggiornare dinamicamente la lingua selezionata richiamando l'API setPrimaryChatLanguage(lang). Se il valore lang passato corrisponde a una delle lingue supportate, viene selezionata tale lingua. Quando non è possibile trovare alcuna corrispondenza, viene attivata l'opzione Detect Language. È inoltre possibile attivare l'opzione Lingua rilevata richiamando l'API Bots.setPrimaryChatLanguage('und'), dove 'und' indica un valore non determinato.

È possibile aggiornare la lingua della chat in modo dinamico utilizzando l'API setPrimaryChatLanguage(lang) anche quando il menu a discesa non è stato configurato.

Guida di riferimento rapido per la chat multilingue

Questa operazione... ... Operazioni da eseguire
Visualizza l'elenco a discesa di selezione della lingua per gli utenti finali. Definire la proprietà multiLangChat con un oggetto contenente il valore supportedLanguage ArrayList.
Impostare la lingua della chat senza visualizzare il menu a discesa di selezione della lingua per gli utenti finali. Definire solo primary.
Impostare una lingua predefinita. Passare primary con l'elenco di array supportedLanguage. Il valore primary deve essere una delle lingue supportate che includono l'array.
Abilita rilevamento della lingua. Passare primary come und.
Aggiorna dinamicamente la lingua della chat. Chiama l'API setPrimaryChatLanguage(lang).

Opzioni menu Condividi

Per impostazione predefinita, il menu di condivisione visualizza le opzioni per i seguenti tipi di file:
  • file multimediali visivi (immagini e video)
  • file audio
  • file generali come documenti, PDF e fogli di calcolo
  • posizione

Passando un ArrayList di Oggetti a shareMenuItems shareMenuItems(Arraylist<Object>), è possibile limitare o filtrare il tipo di elementi disponibili nel menu, personalizzare le icone e le etichette del menu e limitare la dimensione del file di caricamento (ad esempio, 1024 nello snippet seguente). Questi oggetti possono essere oggetti di valori di enumerazione shareMenuCustomItem o ShareMenuItem mappati alle voci di menu di condivisione: ShareMenuItem.CAMERA per la voce di menu della fotocamera (se supportata dal dispositivo), ShareMenuItem.VISUAL per la condivisione di un'immagine o di un elemento video, ShareMenuItem.AUDIO per la condivisione di un elemento audio e ShareMenuItem.FILE per la condivisione di un elemento di file. Se si passa un valore vuoto o un valore nullo, vengono visualizzate tutte le voci di menu che possono essere passate come valori di enumerazione ShareMenuItem.

Se un oggetto ShareMenuCustomItem non ha un valore o un valore nullo per l'etichetta come shareMenuCustomItem3 = ShareMenuCustomItem('csv') nel seguente snippet, una stringa di tipo con suffisso a share_ diventa l'etichetta. Per shareMenuCustomItem3, l'etichetta è share_csv. È possibile consentire agli utenti di caricare tutti i tipi di file impostando il tipo di un oggetto ShareMenuCustomItem come *.
Nota

Questa configurazione si applica solo quando enableAttachment è impostato su true.
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();

vuoto statico pubblico shareMenuItems()

È possibile ottenere l'elenco delle voci del menu di condivisione chiamando l'API Bots.shareMenuItems();.
Bots.shareMenuItems()

vuoto statico pubblico shareMenuItems(ArrayList<Object> shareMenuItems)

È possibile aggiornare dinamicamente il popup delle voci del menu di condivisione chiamando l'API Bots.shareMenuItems(customItems);, dove customItems è un ArrayList di oggetti. Ogni oggetto può essere di tipo ShareMenuItem o di tipo ShareMenuCustomItem.
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);

Il riconoscimento vocale

Flag funzione: enableSpeechRecognition

L'impostazione del flag della funzione enableSpeechRecognition su true consente di visualizzare il pulsante del microfono insieme al pulsante di invio ogni volta che il campo di input dell'utente è vuoto.

L'impostazione di questa proprietà su true supporta anche le funzionalità abilitate dalla proprietà enableSpeechRecognitionAutoSend, che, se impostata anche su true, consente di inviare automaticamente la risposta vocale dell'utente al server di chat durante la visualizzazione della risposta come messaggio inviato nella finestra di chat. È possibile consentire agli utenti di modificare o eliminare i messaggi dettati prima di inviarli manualmente impostando enableSpeechRecognitionAutoSend su false.

vuoto statico pubblico startRecording(listener IBotsSpeechListener)

Avvia la registrazione del messaggio vocale dell'utente. Il parametro listener è un'istanza di IBotsSpeechListener per ricevere la risposta restituita dal server.

vuoto statico pubblico stopRecording()

Interrompe la registrazione del messaggio vocale dell'utente.

booleano statico pubblico isRecording()

Verifica se la registrazione vocale è stata avviata o meno. Restituisce true se la registrazione è stata avviata. In caso contrario restituisce false.

IBotsSpeechListener

Una classe deve implementare l'interfaccia IBotsSpeechListener che implementa quindi la funzionalità per i seguenti metodi:

void onError(Errore stringa)

Questo metodo viene chiamato quando si verificano errori durante la connessione al server o quando non viene fornito alcun input o quando viene fornito un input eccessivo. Il relativo parametro error è il messaggio di errore.

void onSuccess(espressione stringa)

Questo metodo viene chiamato quando viene ricevuto un risultato finale dal server. Il parametro utterance è l'espressione finale ricevuta dal server.

Nota

Questo metodo è obsoleto nella Release 20.8.1.

annullare onSuccess(BotsSpeechResult botsSpeechResult)

Questo metodo viene chiamato quando viene ricevuto un risultato finale dal server. Il parametro, botsSpeechResult, è la risposta finale ricevuta dal server.

void onPartialResult(espressione stringa)

Questo metodo viene chiamato quando viene ricevuto un risultato parziale dal server. Il parametro utterance è l'espressione parziale ricevuta dal server.

void onClose(codice int, messaggio stringa)

Questo metodo viene chiamato quando la connessione al server viene chiusa.

Parametri:
  • code: il codice dello stato.
  • message: il motivo della chiusura della connessione

void onOpen()

Il metodo chiamato all'apertura della connessione al server.

onActiveSpeechUpdate(byte[] speechData)

Questo metodo viene chiamato quando c'è un aggiornamento nel messaggio vocale dell'utente, che può quindi essere utilizzato per aggiornare il visualizzatore vocale. Il suo parametro è speechData, l'array di byte della voce registrata dell'utente.
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
}

Sintesi vocale

  • Flag funzione: enableSpeechSynthesis
  • Configurazione delle funzionalità: speechSynthesisVoicePreferences
L'SDK è stato integrato con la sintesi vocale per leggere il messaggio dell'abilità ad alta voce quando viene ricevuto un nuovo messaggio dall'abilità:
  • Gli utenti possono disattivare o disattivare l'audio della risposta dell'abilità utilizzando un pulsante situato nell'intestazione della vista chat. Per abilitare questa funzione, impostare il flag della funzione enableSpeechSynthesis su true.
  • È possibile impostare la lingua preferita che legge i messaggi dello skill ad alta voce con la proprietà speechSynthesisVoicePreferences. Questo parametro che imposta la lingua e la voce è una lista di istanze SpeechSynthesisSetting (descritte nel Javadoc dell'SDK scaricato dalla pagina di download di ODA e OMC). Questa proprietà abilita un fallback quando il dispositivo non supporta la lingua o la voce preferita. Se il dispositivo non supporta la voce preferita, viene utilizzata la voce predefinita per la lingua preferita. Quando non è supportata alcuna voce o lingua preferita, vengono utilizzate la voce e la lingua predefinite.

vuoto statico pubblico initSpeechSynthesisService()

Inizializza il servizio di sintesi vocale. Questo metodo dovrebbe essere chiamato nel metodo onCreate() di un'attività per inizializzare il servizio di sintesi vocale. L'inizializzazione del servizio di sintesi vocale verrà eseguita quando la libreria SDK si inizializza solo se il flag della funzione enableSpeechSynthesis è impostato su true.
public class ConversationActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bots.initSpeechSynthesisService();
    }
}

vuoto statico pubblico startBotAudioResponse(testo stringa)

Inizia a leggere la risposta dell'abilità ad alta voce. Il parametro text è il testo del messaggio dello skill letto ad alta voce.
Bots.startBotAudioResponse("What kind of crust do you want?");
Nota

Questo metodo non è più valido nella release 21.08.

vuoto statico pubblico stopBotAudioResponse()

Interrompe la lettura ad alta voce della risposta dell'abilità.
Bots.stopBotAudioResponse()

booleano statico pubblico isSpeaking()

Verifica se la risposta dello skill è in fase di lettura ad alta voce o meno.

Restituisce true se la risposta dello skill è in fase di lettura ad alta voce. In caso contrario restituisce false.
if (Bots.isSpeaking()) {
    Bots.stopBotAudioResponse();
}

vuoto statico pubblico shutdownBotAudioResponse()

Rilascia le risorse utilizzate dall'SDK.

Questo metodo è chiamato nel metodo onDestroy() di ConversationActivity.
public class ConversationActivity extends AppCompatActivity {
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Bots.shutdownBotAudioResponse();
    }
}

Iniezione servizio vocale

Flag funzione: ttsService

Il flag delle funzioni speechSynthesisService consente di inserire nell'SDK qualsiasi servizio TTS (text-to-speech), proprio o fornito da un fornitore di terze parti. Per inserire un servizio TTS, è innanzitutto necessario impostare il flag della funzione enableSpeechSynthesis su true, quindi passare un'istanza dell'interfaccia SpeechSynthesisService al flag speechSynthesisService.

Interfaccia SpeechSynthesisService

Si crea un'istanza di una classe che è un'implementazione dell'interfaccia SpeechSynthesisService. Implementa questi metodi:
  • initTextToSpeechService(@NonNull Application application, @NonNull BotsConfiguration botsConfiguration): inizializza un nuovo servizio TTS.
    Parametro descrizione;
    application L'applicazione. Non può essere nullo.
    botsConfiguration L'oggetto BotsConfiguration utilizzato per controllare le funzionalità della libreria. Non può essere nullo.
  • speak(String phrase): aggiunge una frase da pronunciare alla coda di espressioni. Il parametro phrase è il testo da pronunciare.
  • isSpeaking(): controlla se la risposta audio viene pronunciata o meno. Restituisce false se non viene pronunciata alcuna risposta audio in corso.
    Nota

    Questo metodo non è più valido nella release 21.08.
  • stopTextToSpeech(): interrompe qualsiasi sintesi vocale in corso.
    Nota

    Questo metodo non è più valido nella release 21.08.
  • shutdownTextToSpeech(): rilascia le risorse utilizzate dal motore TextToSpeech.
  • getSpeechSynthesisVoicePreferences(): restituisce l'array delle preferenze vocali utilizzato per scegliere la corrispondenza migliore per la voce disponibile utilizzata per la sintesi vocale.
  • setSpeechSynthesisVoicePreferences(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences): imposta l'array delle preferenze vocali utilizzato per scegliere la migliore corrispondenza vocale disponibile per la sintesi vocale. Il parametro speechSynthesisVoicePreferences è l'array delle preferenze vocali per la sintesi vocale.
  • onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences): imposta la voce di sintesi vocale sulla migliore corrispondenza vocale disponibile.
    Nota

    Questo metodo non è più valido nella release 21.08.
    Si consiglia di chiamare questo metodo all'interno del metodo setSpeechSynthesisVoicePreferences dopo aver impostato le preferenze vocali ArrayList. Il parametro speechSynthesisVoicePreferences è l'array delle preferenze vocali per la sintesi vocale.
  • onSpeechRecognitionLocaleChange(Locale speechLocale: questo metodo viene richiamato quando il linguaggio di riconoscimento vocale è cambiato. Sostituendo questo metodo, è possibile impostare il linguaggio di sintesi vocale sullo stesso linguaggio del linguaggio di riconoscimento vocale. Il parametro speechLocale è la versione locale impostata per il riconoscimento vocale.
   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.
        }
    }
Nota

SpeechSynthesisService#setSpeechSynthesisVoicePreferencesonSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting>) e SpeechSynthesisService#onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting>) non sono più validi in questa release e sono stati sostituiti da SpeechSynthesisService#setTTSVoice(ArrayList<SpeechSynthesisSetting>) e SpeechSynthesisService#getTTSVoice(). In precedenza, SpeechSynthesisService#setSpeechSynthesisVoicePreferencesonSpeechSynthesisVoicePreferencesChange imposta l'array delle preferenze vocali di sintesi vocale e SpeechSynthesisService#onSpeechSynthesisVoicePreferencesChange imposta la voce migliore disponibile per la sintesi vocale e restituisce la voce selezionata. Ora, la stessa funzionalità viene raggiunta attraverso i nuovi metodi: SpeechSynthesisService#setTTSVoice(ArrayList<SpeechSynthesisSetting> TTSVoices), che imposta sia l'array delle preferenze vocali di sintesi vocale che la migliore voce disponibile per la sintesi vocale e SpeechSynthesisService#getTTSVoice(), che restituisce la voce selezionata per la sintesi vocale.

Indicatore digitazione per conversazioni utente-agente

Flag funzione: enableSendTypingStatus

Se abilitato, l'SDK invia un evento di digitazione RESPONDING insieme al testo attualmente digitato dall'utente a . Mostra un indicatore di digitazione nella console dell'agente. Al termine della digitazione, l'SDK invia un evento LISTENING a Oracle B2C Service o Oracle Fusion Service. In questo modo l'indicatore di digitazione viene nascosto nella console dell'agente.

Analogamente, quando l'agente digita, l'SDK riceve un evento RESPONDING dal servizio. Quando si riceve questo evento, l'SDK mostra un indicatore di digitazione all'utente. Quando l'agente è inattivo, l'SDK riceve l'evento LISTENING dal servizio. Quando si riceve questo evento, l'SDK nasconde l'indicatore di digitazione visualizzato all'utente.

L'API sendUserTypingStatus abilita lo stesso funzionamento per la modalità headless.
public void sendUserTypingStatus(TypingStatus status, String text)
  • Per visualizzare l'indicatore di digitazione sulla console dell'agente:
    Bots.sendUserTypingStatus("RESPONDING", "<Message_Being_Typed>");
  • Per nascondere l'indicatore di digitazione sulla console dell'agente:
    Bots.sendUserTypingStatus("LISTENING", "");
  • Per controllare l'indicatore di digitazione lato utente, utilizzare l'evento onReceiveMessage(Message message). Ad esempio:
    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
             }
           }
         }
Sono disponibili altre due impostazioni che forniscono un controllo aggiuntivo:
  • typingStatusInterval: per impostazione predefinita, l'SDK invia l'evento di digitazione RESPONDING ogni tre secondi al servizio. Utilizzare questo flag per limitare l'evento. Il valore minimo che può essere impostato è di tre secondi.
  • enableAgentSneakPreview: Oracle B2C Service supporta la visualizzazione del testo utente durante l'immissione. Se questo flag è impostato su true (l'impostazione predefinita è false), l'SDK invia il testo effettivo. Per proteggere la privacy degli utenti, l'SDK invia anziché il testo effettivo a Oracle B2C Service quando il flag è impostato su false.
    Nota

    Questa funzione deve essere abilitata sia nel kit SDK che nella configurazione della chat di Oracle B2C Service.

Aggiorna l'avatar dell'utente

È possibile abilitare l'aggiornamento dinamico dell'avatar utente in runtime.

annullamento pubblico updatePersonAvatar

Imposta l'avatar utente per tutti i messaggi, inclusi quelli precedenti.
ConversationActivity.setUserPerson(Object);

Esponi dettagli agente

Utilizzare queste API per modificare il nome dell'agente, il colore del testo, l'avatar, le iniziali del nome dell'agente, il colore del testo e lo sfondo dell'avatar.

pubblico AgentDetails getAgentDetails()

Restituisce un oggetto contenente i dettagli dell'agente.
Bots.getAgentDetails(AgentDetails);
Per ulteriori informazioni sulla classe AgentDetails, vedere Javadocs.

annullamento pubblico setAgentDetails(AgentDetails)

Esegue l'override dei dettagli dell'agente ricevuti dal server.
Bots.setAgentDetails(AgentDetails);

pubblico AgentDetails getAgentDetails()

Restituisce un oggetto contenente i dettagli dell'agente.
Bots.getAgentDetails(AgentDetails);
Per ulteriori informazioni sulla classe AgentDetails, vedere Javadocs.

Visualizzatore vocale

Quando il supporto vocale è abilitato (enableSpeechRecognition(true)), nel piè di pagina del widget chat viene visualizzato un visualizzatore vocale, un grafico del visualizzatore dinamico che indica il livello di frequenza dell'input vocale. Il visualizzatore risponde alla modulazione della voce dell'utente indicando se l'utente sta parlando troppo dolcemente o troppo forte. Questo visualizzatore viene creato utilizzando il flusso di byte registrati mentre l'utente parla, che viene esposto anche nel metodo IBotsSpeechListener#onActiveSpeechUpdate(byte[]) per l'uso in modalità headless.

Il widget chat visualizza un visualizzatore vocale quando gli utenti fanno clic sull'icona vocale. È un indicatore che indica se il livello audio è sufficientemente alto da consentire all'SDK di acquisire la voce dell'utente. Il messaggio dell'utente, riconosciuto come testo, viene visualizzato sotto il visualizzatore.
Nota

La modalità vocale è indicata quando viene visualizzata l'icona della tastiera.

Quando si utilizza enableSpeechRecognitionAutoSend(true), il testo riconosciuto viene inviato automaticamente alla competenza dopo che l'utente ha terminato di dettare il messaggio. La modalità torna quindi all'input di testo. Quando si utilizza enableSpeechRecognitionAutoSend(false), la modalità torna anche all'input di testo, ma in questo caso gli utenti possono modificare il testo riconosciuto prima di inviare il messaggio allo skill.