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
- Attiva indicatori orari -
enableTimestamp: true
- Abilita indicatori orari relativi -
timestampType: 'relative'
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.
- 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
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
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();
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
.
È 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)
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);
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
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();
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
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.
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()
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)
text
è il messaggio di testo.Bots.sendMessage("I want to order a Pizza");
EventListener
EventListener
, che implementa quindi la funzionalità per:
void onStatusChange(ConnectionStatus connectionStatus)
: questo metodo viene chiamato quando lo stato della connessione WebSocket cambia. Il parametroconnectionStatus
è lo stato corrente della connessione. Per ulteriori dettagli sull'enumerazioneConnectionStatus
, 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 parametromessage
è il messaggio ricevuto dalla competenza. Per ulteriori dettagli sulla classeMessage
, 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 classeMessage
, 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)
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
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
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.
- È 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
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
- 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
.
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 *
.
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()
Bots.shareMenuItems();
.Bots.shareMenuItems()
vuoto statico pubblico shareMenuItems(ArrayList<Object> shareMenuItems)
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
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.
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.
code
: il codice dello stato.message
: il motivo della chiusura della connessione
onActiveSpeechUpdate(byte[] speechData)
public class BotsSpeechListener implements IBotsSpeechListener {
@Override
public void onError(String error) {
// Handle errors
}
@Override
public void onSuccess(String utterance) {
// This method was deprecated in release 20.8.1.
// Handle final result
}
@Override
public void onSuccess(BotsSpeechResult botsSpeechResult) {
// Handle final result
}
@Override
public void onPartialResult(String utterance) {
// Handle partial result
}
@Override
public void onClose(int code, String message) {
// Handle the close event of connection to server
}
@Override
public void onOpen() {
// Handle the open event of connection to server
}
@Override
public void onActiveSpeechUpdate(byte[] speechData) {
// Handle the speech update event
}
}
Bots.startRecording(new BotsSpeechListener()); // Start voice recording
if (Bots.isRecording()) {
Bots.stopRecording(); // Stop voice recording
}
Sintesi vocale
- Flag funzione:
enableSpeechSynthesis
- Configurazione delle funzionalità:
speechSynthesisVoicePreferences
- 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
sutrue
. - È 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 istanzeSpeechSynthesisSetting
(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()
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)
text
è il testo del messaggio dello skill letto ad alta voce.Bots.startBotAudioResponse("What kind of crust do you want?");
Questo metodo non è più valido nella release 21.08.
vuoto statico pubblico stopBotAudioResponse()
Bots.stopBotAudioResponse()
booleano statico pubblico isSpeaking()
Verifica se la risposta dello skill è in fase di lettura ad alta voce o meno.
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.
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
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 parametrophrase
è il testo da pronunciare.isSpeaking()
: controlla se la risposta audio viene pronunciata o meno. Restituiscefalse
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 parametrospeechSynthesisVoicePreferences
è l'array delle preferenze vocali per la sintesi vocale.onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences)
: imposta la voce di sintesi vocale sulla migliore corrispondenza vocale disponibile.NotaSi consiglia di chiamare questo metodo all'interno del metodo
Questo metodo non è più valido nella release 21.08.setSpeechSynthesisVoicePreferences
dopo aver impostato le preferenze vocaliArrayList
. Il parametrospeechSynthesisVoicePreferences
è 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 parametrospeechLocale
è 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.
}
}
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.
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 } } }
typingStatusInterval
: per impostazione predefinita, l'SDK invia l'evento di digitazioneRESPONDING
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 sutrue
(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 sufalse
.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.
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()
Bots.getAgentDetails(AgentDetails);
Per ulteriori informazioni sulla classe AgentDetails
, vedere Javadocs.
annullamento pubblico setAgentDetails(AgentDetails)
Bots.setAgentDetails(AgentDetails);
pubblico AgentDetails getAgentDetails()
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.
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.