Recursos
Aqui estão os recursos que você pode configurar no Oracle Android SDK.
Timestamps Absolutos e Relativos
Flag de recurso: timestampType: TimestampMode.RELATIVE
Você pode ativar timestamps absolutos ou relativos para mensagens de chat. Os timestamps absolutos exibem a hora exata de cada mensagem. Os timestamps relativos só são exibidos na mensagem mais recente e expressam o tempo em termos de segundos, dias, horas, meses ou anos atrás em relação à mensagem anterior. A precisão fornecida por timestamps absolutos os torna ideais para tarefas de arquivamento, mas dentro do contexto limitado de uma sessão de chat, essa precisão é extraída da experiência do usuário porque os usuários devem comparar os timestamps para descobrir a passagem de tempo entre as mensagens. Os timestamps relativos permitem que os usuários rastreiem a conversa facilmente por meio de termos como Há Pouco e Há alguns momentos que podem ser imediatamente compreendidos. Os timestamps relativos melhoram a experiência do usuário de outra forma, além de também simplificar suas tarefas de desenvolvimento: como os timestamps relativos marcam as mensagens em termos de segundos, dias, horas, meses ou anos atrás, você não precisa convertê-las em fusos horários.
Configurar Timestamps Relativos
- Ativar timestamps –
enableTimestamp: true
- Ativar timestamps relativos –
timestampType: 'relative'
timestampType: 'relative'
), um timestamp absoluto é exibido antes da primeira mensagem do dia como cabeçalho. Esse cabeçalho é exibido quando a conversa não foi limpa e mensagens mais antigas ainda estão disponíveis no histórico.
- Nos primeiros 10s
- Entre 10s e 60s
- Cada minuto entre 1m e 60m
- Cada hora entre 1hr e 24hr
- Cada dia entre 1d e 30d
- Cada mês entre 1m e 12m
- Todo ano após o primeiro ano
Layout dos Botões de Ação
Flag do recurso: actionsLayout
actionsLayout
define a direção do layout para as ações local, global, de cartão e de formulário. Quando você define isso como LayoutOrientation.HORIZONTAL
, esses botões são dispostos horizontalmente e serão encapsulados se o conteúdo transbordar.
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<Server_URI>, false, getApplicationContext())
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.actionsLayout(actionsLayout)
.build();
Filtragem de Anexo
(Obrigatório) <Digite uma descrição curta aqui.>
Flag do recurso: shareMenuItems
Para poder configurar
shareMenuItems
, defina enableAttachment
como 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
não tiver um valor ou um null
para o label, como tem shareMenuCustomItem3 = ShareMenuCustomItem('csv')
no trecho de código anterior, uma string type
sufixada com share_
se tornará o label. Para shareMenuCustomItem3
, o label é share_csv
.
Você pode permitir que os usuários façam upload de todos os tipos de arquivo, definindo o
type
de um objeto ShareMenuCustomItem
como *
.
public static void shareMenuItems(ArrayList<Object> shareMenuItems)
Bots.shareMenuItems(customItems);
, em que customItems
é um ArrayList
de Objects
. Cada objeto pode ser do tipo ShareMenuItem
ou um objeto 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);
Envio automático de um campo
Quando um campo tem a propriedade autoSubmit
definida como true
, o cliente envia um FormSubmissionMessagePayload
com o mapa submittedField
contendo os valores de campo válidos que foram informados até o momento. Todos os campos que ainda não foram definidos (independentemente de serem obrigatórios) ou campos que violam uma validação do cliente não são incluídos no mapa submittedField
. Se o próprio campo enviado automaticamente contiver um valor que não seja válido, a mensagem de envio não será enviada e a mensagem de erro do cliente será exibida para esse campo específico. Quando um envio automático for bem-sucedido, o partialSubmitField
na mensagem de envio do formulário será definido como id
do campo autoSubmit
.
Substituindo um formulário de entrada anterior
Quando o usuário final envia o formulário, porque um campo tem autosubmit
definido como true
, a habilidade pode enviar um novo EditFormMessagePayload
. Essa mensagem deve substituir a mensagem anterior do formulário de entrada. Definindo a propriedade de extensão do canal replaceMessage
como true
, você ativa o SDK para substituir a mensagem anterior do form de entrada pela mensagem atual do form de entrada.
Métodos de Conexão e Desconexão
public void disconnect()
e public void connect()
. O WebSocket é fechado após chamar o método direto:Bots.disconnect();
Chamar o método a seguir restabelece a conexão WebSocket se a habilidade estiver em um estado desconectado:Bots.connect();
public void connect(Botsconfiguration botsconfiguration)
é chamado com um novo objeto botsconfiguration
, a conexão WebSocket existente é fechada e uma nova conexão é estabelecida usando o novo objeto 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);
Respostas Padrão do Cliente
Flag de recurso: enableDefaultClientResponse: true
(padrão: false
)
Use enableDefaultClientResponse: true
para fornecer respostas padrão do cliente acompanhadas por um indicador de digitação quando a resposta da habilidade tiver sido atrasada ou quando não houver resposta da habilidade. Se o usuário enviar a primeira mensagem/consulta, mas a habilidade não responder com o número de segundos definido pelo flag odaas_default_greeting_timeout
, a habilidade poderá exibir uma mensagem de saudação configurada usando a string de tradução odaas_default_greeting_message
. Em seguida, o cliente verifica novamente a resposta da habilidade. O cliente exibirá a resposta da habilidade se ela tiver sido recebida, mas se não tiver sido recebida, o cliente exibirá uma mensagem de espera (configurada com a string de tradução odaas_default_wait_message
) em intervalos definidos pelo flag odaas_default_wait_message_interval
. Quando a espera pela resposta da habilidade excede o limite definido pelo flag typingIndicatorTimeout
, o cliente exibe uma resposta lamentável ao usuário e interrompe o indicador de digitação. Você pode configurar a resposta de desculpas usando a string de tradução odaas_default_sorry_message
.
Delegação
Configuração de recurso: messageModifierDelegate
interface MessageModifierDelegate
e informar sua instância à propriedade 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.
}
}
public Message beforeDisplay(Message message)
O delegado public Message beforeDisplay(Message message)
permite que a mensagem de uma habilidade seja modificada antes de ser exibida na conversa. A mensagem modificada que é retornada pelo delegado é exibida na conversa. Se o método retornar null
, a mensagem não será exibida.
public Message beforeDisplay(Message message)
O delegado public Message beforeDisplay(Message message)
permite que uma mensagem de usuário seja modificada antes de ser enviada ao servidor de chat. A mensagem retornada pelo delegado é enviada à habilidade. Se ela retornar nulo, a mensagem não será enviada.
Exibir o Histórico de Conversas
Você pode ativar ou exibir o histórico de conversas locais de um usuário depois que o SDK foi reinicializado, definindo displayPreviousMessages
como true
ou false
na configuração de bots. Quando definido como false
, as mensagens anteriores não são exibidas para o usuário, após a reinicialização do SDK.
Encerrar a Sessão de Chat
FeatureFlag: enableEndConversation: true
enableEndConversation: true
adiciona um botão de fechamento à exibição de cabeçalho que permite aos usuários encerrar explicitamente a sessão de chat atual. Uma caixa de diálogo de prompt de confirmação é aberta quando os usuários clicam nesse botão de fechamento e, quando confirmam a ação de fechamento, o SDK envia uma mensagem de evento para a habilidade que marca o fim da sessão de chat. O SDK, em seguida, desconecta a habilidade da instância, recolhe o widget de chat e apaga o histórico de conversas do usuário atual. O SDK aciona um delegado em beforeEndConversation(CompletionHandler completionHandler)
que pode ser usado para executar uma tarefa antes de enviar a solicitação de fechamento da sessão ao servidor. Ele também gera um evento OnChatEnd()
no qual você pode se registrar.
A abertura do widget de chat inicia uma nova sessão de chat.
public static void endChat()
Bots.endChat()
.Bots.endChat()
CompletionHandler
CompletionHandler
é um listener de eventos implementado no SDK, que escuta a conclusão da tarefa que está sendo executada no representante beforeEndConversation(CompletionHandler completionHandler)
no aplicativo host. Consulte o Javadoc incluído no SDK disponível na página de download do ODA e do OMC.
SDK sem Interface do Usuário
O SDK pode ser usado sem sua interface de usuário. Para usá-lo nesse modo, importe apenas o pacote com.oracle.bots.client.sdk.android.core-24.12.aar
para o projeto, conforme descrito em Adicionar o SDK do Cliente Oracle Android ao Projeto.
O SDK mantém a conexão com o servidor e fornece APIs para enviar mensagens, receber mensagens e obter atualizações para o status da rede e para outros serviços. Você pode usar as APIs para interagir com o SDK e atualizar a interface do usuário.
Você pode enviar uma mensagem usando qualquer uma das APIs send*()
disponíveis na classe Bots
. Por exemplo, public static void sendMessage(String text)
envia uma mensagem de texto para a habilidade ou o assistente digital.
public static void sendMessage(String text)
text
é a mensagem de texto.Bots.sendMessage("I want to order a Pizza");
EventListener
EventListener
, que implementa a funcionalidade para:
void onStatusChange(ConnectionStatus connectionStatus)
– Este método é chamado quando o status da conexão WebSocket é alterado. Seu parâmetroconnectionStatus
é o status atual da conexão. Consulte os Javadocs incluídos no SDK (disponíveis na página de download do ODA e OMC) para obter mais detalhes sobre a enumeraçãoConnectionStatus
.void onMessageReceived(Message message)
– Este método é chamado quando uma nova mensagem é recebida da habilidade. Seu parâmetromessage
é a mensagem recebida da habilidade. Consulte os Javadocs incluídos no SDK (disponíveis na página de download do ODA e OMC) para obter mais detalhes sobre a classeMessage
.void onMessageSent(Message message)
- Este método é chamado quando uma mensagem é enviada à habilidade. Seu parâmetro de mensagem é a mensagem enviada à habilidade. Consulte os Javadocs incluídos no SDK (disponíveis na página de download do ODA e OMC) para obter mais detalhes sobre a classeMessage
.void onAttachmentComplete()
– Este método é chamado quando um upload de anexo é concluído.
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.
}
}
A instância do tipo EventListener
deve ser passada para setEventListener(EventListener eventListener)
.
public static void setEventListener(EventListener eventListener)
eventListener
é uma instância do tipo EventListener
para receber atualizações.Bots.setEventListener(new BotsEventListener());
Webview In-Widget
Flag do recurso: linkHandler
Você pode configurar o comportamento do link em mensagens de chat para permitir que os usuários acessem páginas web dentro do widget de chat. Em vez de ter que alternar da conversa para exibir uma página em uma guia ou em outra janela do browser, um usuário pode permanecer no chat porque o widget de chat abre o link em uma Webview.
Configurar o Webview In-Widget
Flag do recurso: webViewConfig
linkHandler
como WebviewLinkHandlerType.WEBVIEW
. Você pode definir o tamanho e a exibição da própria webview usando um objeto de 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();
Como ilustrado neste trecho de código, você pode definir os atributos a seguir para a webview.Atributo | Definições |
---|---|
webViewSize |
Define o tamanho da tela da janela da webview in-widget com a enumeração WebviewSizeWindow , que tem dois valores: PARTIAL (WebviewSizeWindow.PARTIAL ) e FULL (WebviewSizeWindow.FULL ).
|
clearButtonLabel |
Define o texto usado para o botão limpar/fechar no canto superior direito da webview. O texto padrão é DONE .
|
clearButtonIcon |
Define um ícone para o botão Limpar, que aparece alinhado à esquerda dentro do botão. |
clearButtonLabelColor |
Define a cor do texto do label do botão Limpar. |
clearButtonColor |
Define a cor do plano de fundo do botão Limpar. |
webviewHeaderColor |
Define a cor do plano de fundo do cabeçalho da webview. |
webviewTitleColor |
Define a cor do título no cabeçalho. O título é o URL do link web que foi aberto. |
Chat multilíngue
Flag do recurso: multiLangChat
O suporte ao idioma nativo do Android SDK permite que o widget de chat detecte o idioma de um usuário e permita que o usuário selecione o idioma da conversa em um menu drop-down no cabeçalho. Os usuários podem alternar entre os idiomas, mas apenas entre as conversas, não durante, porque a conversa é redefinida sempre que um usuário seleciona um novo idioma.
Ativar o menu Language
multiLangChat
com um objeto contendo supportedLanguage
ArrayList, que é composto de tags de idioma (lang
) e labels de exibição opcionais (label
). Fora desse array, você opcionalmente pode definir o idioma padrão com a propriedade primary
, conforme ilustrado pelo (primary("en")
no snippet a seguir.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();
Em um menu drop-down localizado no cabeçalho, o widget de chat exibe os idiomas suportados transmitidos. Além dos idiomas disponíveis, o menu também inclui uma opção Detectar Idioma. Quando um usuário seleciona um idioma nesse menu, a conversa atual é redefinida e uma nova conversa é iniciada com o idioma selecionado. O idioma selecionado pelo usuário persiste entre as sessões no mesmo browser; por isso, o idioma anterior do usuário é selecionado automaticamente quando o usuário visita de novo a habilidade por meio da página que contém o widget de chat.
- Defina no mínimo dois idiomas para permitir a exibição do menu drop-down.
- Se você omitir a chave
primary
, o widget detectará automaticamente o idioma no perfil do usuário e selecionará a opção Detectar Idioma no menu.
Desativar Menu de Idioma
A partir da Versão 21.12, você também pode configurar e atualizar o idioma de chat sem precisar também configurar o menu suspenso de seleção de idioma informando primary
na configuração inicial sem o supportedLanguage
ArrayList. O valor informado na variável primary
é definido como o idioma de chat da conversa.
Detecção de Idioma
Se você omitir a propriedade
primary
, o widget detectará automaticamente o idioma no perfil do usuário e ativará a opção Detectar Idioma no menu.
Você pode atualizar dinamicamente o idioma selecionado chamando a API setPrimaryChatLanguage(lang)
. Se o lang
informado corresponder a um dos idiomas suportados, esse idioma será selecionado. Quando nenhuma correspondência for encontrada, Detectar Idioma será ativado. Você também pode ativar a opção Idioma Detectado chamando a API Bots.setPrimaryChatLanguage('und')
, em que 'und'
indica indeterminado.
Você pode atualizar o idioma de bate-papo dinamicamente usando a API setPrimaryChatLanguage(lang)
mesmo quando o menu suspenso não tiver sido configurado.
Referência Rápida de Chat Multilingual
Para isso... | ... Faça isto |
---|---|
Exibe o menu suspenso de seleção de idioma para usuários finais. | Defina a propriedade multiLangChat com um objeto contendo supportedLanguage ArrayList.
|
Defina o idioma do bate-papo sem exibir o menu suspenso de seleção de idioma para os usuários finais. | Defina primary somente.
|
Definir um idioma padrão. | Informe primary com o Arraylist supportedLanguage . O valor primary deve ser um dos idiomas suportados incluídos no array.
|
Ativar detecção de idioma. | Informe primary como und .
|
Atualize dinamicamente o idioma do chat. | Chame a API setPrimaryChatLanguage(lang) .
|
Opções do Menu Compartilhar
- arquivos de mídia visual (imagens e vídeos)
- arquivos de áudio
- arquivos gerais, como documentos, PDFs e planilhas
- localização
Ao transmitir um ArrayList de Objetos para shareMenuItems shareMenuItems(Arraylist<Object>)
, você pode restringir ou filtrar o tipo de itens disponíveis no menu, personalizar os ícones e labels do menu e limitar o tamanho do arquivo de upload (como 1024 no trecho de código a seguir). Esses objetos podem ser um objeto de valores de enumeração shareMenuCustomItem
ou ShareMenuItem
que são mapeados para os itens de menu de compartilhamento: ShareMenuItem.CAMERA
para o item de menu de câmera (se suportado pelo dispositivo), ShareMenuItem.VISUAL
para compartilhar um item de imagem ou vídeo, ShareMenuItem.AUDIO
para compartilhar um item de áudio e ShareMenuItem.FILE
para compartilhar um item de arquivo. A transmissão de um valor vazio ou nulo exibe todos os itens de menu que podem ser transmitidos como valores de enumeração ShareMenuItem
.
ShareMenuCustomItem
não tiver um valor ou um nulo para o label, como tem shareMenuCustomItem3 = ShareMenuCustomItem('csv')
no trecho de código a seguir, uma string de tipo sufixada com share_
se tornará o label. Para shareMenuCustomItem3
, o label é share_csv
. Você pode permitir que os usuários façam upload de todos os tipos de arquivo, definindo o tipo de um objeto ShareMenuCustomItem
como *
.
Esta configuração só se aplica quando a propriedade
enableAttachment
está definida como 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();
public static void shareMenuItems()
Bots.shareMenuItems();
.Bots.shareMenuItems()
public static void shareMenuItems(ArrayList<Object> shareMenuItems)
Bots.shareMenuItems(customItems);
, em que customItems
é uma ArrayList de Objetos. Cada objeto pode ser do tipo valores de enumeração ShareMenuItem
ou um objeto 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);
Reconhecimento de Fala
Flag do recurso: enableSpeechRecognition
A definição do flag do recurso enableSpeechRecognition
como true
permite que o botão do microfone seja exibido junto com o botão Enviar sempre que o campo de entrada do usuário estiver vazio.
A definição dessa propriedade como true
também suporta a funcionalidade ativada pela propriedade enableSpeechRecognitionAutoSend
, que quando também está definida como true
, permite que a resposta de fala do usuário seja enviada ao servidor de chat automaticamente enquanto exibe a resposta como uma mensagem enviada na janela de chat. Você pode permitir que os usuários editem (ou excluam) primeiro suas mensagens ditadas antes de enviá-las manualmente, definindo enableSpeechRecognitionAutoSend
como false
.
public static void startRecording(IBotsSpeechListener listener)
Inicia a gravação da mensagem de voz do usuário. O parâmetro listener
é uma instância de IBotsSpeechListener
para receber a resposta retornada do servidor.
public static boolean isRecording()
Verifica se a gravação de voz foi iniciada ou não. Retorna true
se a gravação tiver sido iniciada. Caso contrário, retorna false
.
IBotsSpeechListener
IBotsSpeechListener
que, em seguida, implementa a funcionalidade para os seguintes métodos:
void onError(String error)
Este método é chamado quando ocorrem erros ao estabelecer a conexão com o servidor ou quando nenhuma ou muitas entradas são fornecidas. Seu parâmetro error
é a mensagem de erro.
void onSuccess(String statement)
Este método é chamado quando um resultado final é recebido do servidor. Seu parâmetro utterance
é a declaração final recebida do servidor.
Este método passou por remoção gradual na Release 20.8.1.
void onSuccess(BotsSpeechResult botsSpeechResult)
Este método é chamado quando um resultado final é recebido do servidor. Seu parâmetro correspondente, botsSpeechResult
, é a resposta final recebida do servidor.
void onPartialResult(String absoluta)
Este método é chamado quando um resultado parcial é recebido do servidor. Seu parâmetro utterance
é a declaração parcial recebida do servidor.
void onClose(int code, String message)
Este método é chamado quando a conexão com o servidor é fechada.
code
– O código do statusmessage
– O motivo para fechar a conexão
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
}
Síntese de Fala
- Flag do recurso:
enableSpeechSynthesis
- Configuração da funcionalidade:
speechSynthesisVoicePreferences
- Os usuários podem silenciar ou desativar o silêncio da resposta de áudio da habilidade usando um botão que está localizado no cabeçalho da view de chat. Você habilita esse recurso definindo o flag do recurso
enableSpeechSynthesis
comotrue
. - Você pode definir o idioma preferencial que lê as mensagens da habilidade em voz alta com a propriedade
speechSynthesisVoicePreferences
. Este parâmetro que define o idioma e a voz é uma lista de instânciasSpeechSynthesisSetting
(descrita no Javadoc do SDK que você submete a download da página de download do ODA e do OMC). Esta propriedade ativa um fallback quando o dispositivo não suporta o idioma ou a voz preferenciais. Se o dispositivo não suportar a voz preferencial, será usada a voz padrão do idioma preferencial. Quando não há suporte nem para a voz nem para o idioma preferenciais, a voz e o idioma padrão são usados.
public static void initSpeechSynthesisService()
onCreate()
de uma Atividade para inicializar o serviço de síntese de fala. A inicialização do serviço de síntese de fala será feita quando a biblioteca de SDK for inicializada apenas se o flag de recurso enableSpeechSynthesis
estiver definido como true
.public class ConversationActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bots.initSpeechSynthesisService();
}
}
public static void startBotAudioResponse(String text)
text
é o texto da mensagem da habilidade que é lida em voz alta.Bots.startBotAudioResponse("What kind of crust do you want?");
Este método foi descontinuado na Release 21.08.
public static void stopBotAudioResponse()
Bots.stopBotAudioResponse()
public static boolean isSpeaking()
Verifica se a resposta da habilidade está sendo lida em voz alta ou não no momento.
true
se a resposta da habilidade estiver sendo lida em voz alta no momento. Caso contrário, retorna false
.if (Bots.isSpeaking()) {
Bots.stopBotAudioResponse();
}
public static void shutdownBotAudioResponse()
Libera os recursos usados pelo SDK.
onDestroy()
de ConversationActivity
.public class ConversationActivity extends AppCompatActivity {
@Override
protected void onDestroy() {
super.onDestroy();
Bots.shutdownBotAudioResponse();
}
}
Injeção de Serviço de Fala
Flag do recurso : ttsService
O flag do recurso speechSynthesisService
permite que você injete qualquer serviço de conversão de texto em fala (TTS) - seu próprio serviço ou fornecido por um fornecedor de terceiros - no SDK. Para injetar um serviço TTS, primeiro defina o flag do recurso enableSpeechSynthesis
como true
e, em seguida, informe uma instância da interface SpeechSynthesisService
para o flag speechSynthesisService
.
A Interface SpeechSynthesisService
SpeechSynthesisService
. Ele implementa estes métodos:
initTextToSpeechService(@NonNull Application application, @NonNull BotsConfiguration botsConfiguration)
: Inicializa um novo serviço TTS.Parâmetro Descrição application
O aplicativo. O valor não pode ser nulo. botsConfiguration
O objeto BotsConfiguration
usado para controlar os recursos da biblioteca. O valor não pode ser nulo.speak(String phrase)
: Adiciona uma frase que deve ser falada para a fila de declarações. O parâmetro It'sphrase
é o texto a ser falado.isSpeaking()
: Verifica se a resposta de áudio está ou não sendo falada. Ele retornaráfalse
se não houver resposta de áudio em andamento sendo falada.Observação
Este método foi descontinuado na Release 21.08.stopTextToSpeech()
: Interrompe qualquer síntese de fala em andamento.Observação
Este método foi descontinuado na Release 21.08.shutdownTextToSpeech()
: Libera os recursos usados pelo mecanismo TextToSpeech.getSpeechSynthesisVoicePreferences()
: Retorna o array de preferências de voz que é usado para escolher a melhor correspondência para a voz disponível usada para síntese de fala.setSpeechSynthesisVoicePreferences(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences)
: Define o array de preferências de voz que é usado para escolher a melhor correspondência de voz disponível para síntese de fala. O parâmetrospeechSynthesisVoicePreferences
é o array de preferência de voz para síntese de fala.onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences)
: Define a voz de síntese de fala para a melhor correspondência de voz disponível.ObservaçãoRecomendamos que você chame esse método dentro do método
Este método foi descontinuado na Release 21.08.setSpeechSynthesisVoicePreferences
após definir as preferências de vozArrayList
. O parâmetrospeechSynthesisVoicePreferences
é o array de preferência de voz para síntese de fala.onSpeechRecognitionLocaleChange(Locale speechLocale
): esse método é chamado quando a linguagem de reconhecimento de fala é alterada. Ao substituir este método, você pode definir a linguagem de síntese de fala para a mesma linguagem que a linguagem de reconhecimento de fala. O parâmetrospeechLocale
é a localidade definida para reconhecimento de fala.
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>)
foram substituídos por SpeechSynthesisService#setTTSVoice(ArrayList<SpeechSynthesisSetting>)
e SpeechSynthesisService#getTTSVoice()
nesta versão. Anteriormente, SpeechSynthesisService#setSpeechSynthesisVoicePreferencesonSpeechSynthesisVoicePreferencesChange
definia o array de preferência de voz de síntese de fala e SpeechSynthesisService#onSpeechSynthesisVoicePreferencesChange
definia a melhor voz disponível para síntese de fala e retornava a voz selecionada. Agora, a mesma funcionalidade é alcançada através dos novos métodos: SpeechSynthesisService#setTTSVoice(ArrayList<SpeechSynthesisSetting> TTSVoices)
, que define tanto o array de preferência de voz de síntese de fala quanto a melhor voz disponível para síntese de fala e SpeechSynthesisService#getTTSVoice()
, que retorna a voz selecionada para síntese de fala.
Indicador de Digitação para Conversas do Agente do Usuário
Flag do recurso: enableSendTypingStatus
Quando ativado, o SDK envia um evento de digitação RESPONDING
junto com o texto que está sendo digitado no momento pelo usuário para . Isso mostra um indicador de digitação no console do agente. Quando o usuário terminar de digitar, o SDK enviará um evento LISTENING
para o Oracle B2C Service ou o Oracle Fusion Service. Isso oculta o indicador de digitação no console do agente.
Da mesma forma, quando o agente está digitando, o SDK recebe um evento RESPONDING
do serviço. Ao receber este evento, o SDK mostra um indicador de digitação para o usuário. Quando o agente está ocioso, o SDK recebe o evento LISTENING
do serviço. Ao receber este evento, o SDK oculta o indicador de digitação mostrado ao usuário.
sendUserTypingStatus
permite o mesmo comportamento para o modo sem interface do usuário.public void sendUserTypingStatus(TypingStatus status, String text)
- Para mostrar o indicador de digitação no console do agente:
Bots.sendUserTypingStatus("RESPONDING", "<Message_Being_Typed>");
- Para ocultar o indicador de digitação no console do agente:
Bots.sendUserTypingStatus("LISTENING", "");
- Para controlar o indicador de digitação do lado do usuário, use o evento
onReceiveMessage(Message message)
. Por exemplo :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
- Por padrão, o SDK envia o evento de digitaçãoRESPONDING
a cada três segundos para o serviço. Use este sinalizador para limitar este evento. O valor mínimo que pode ser definido é três segundos.enableAgentSneakPreview
- O Oracle B2C Service suporta mostrar o texto do usuário à medida que ele é informado. Se esse flag for definido comotrue
(o padrão éfalse
), o SDK enviará o texto real. Para proteger a privacidade do usuário, o SDK envia...
em vez do texto real para o Oracle B2C Service quando o flag é definido comofalse
.
Atualizar o Avatar do Usuário
Você pode ativar a atualização dinâmica do avatar do usuário no runtime.
Expor Detalhes do Agente
Use essas APIs para modificar o nome do agente, a cor do texto, o avatar, as iniciais do nome do agente, a cor do texto e o plano de fundo do avatar.
público AgentDetails getAgentDetails()
Bots.getAgentDetails(AgentDetails);
Consulte os Javadocs para obter mais detalhes sobre a classe AgentDetails
.
public void setAgentDetails(AgentDetails)
Bots.setAgentDetails(AgentDetails);
público AgentDetails getAgentDetails()
Bots.getAgentDetails(AgentDetails);
Consulte os Javadocs para obter mais detalhes sobre a classe AgentDetails
.
Visualizador de Voz
Quando o suporte a voz está ativado (enableSpeechRecognition(true)
), o rodapé do widget de chat exibe um visualizador de voz, um gráfico de visualizador dinâmico que indica o nível de frequência da entrada de voz. O visualizador responde à modulação da voz do usuário, indicando se o usuário está falando muito baixo ou muito alto. Este visualizador é criado usando o stream de bytes que são gravados enquanto o usuário está falando, que também é exposto no método IBotsSpeechListener#onActiveSpeechUpdate(byte[])
para uso no modo sem interface do usuário.
O modo de voz é indicado quando o ícone de teclado aparece.
Quando enableSpeechRecognitionAutoSend(true)
, o texto reconhecido é enviado automaticamente para a habilidade depois que o usuário termina de ditar a mensagem. Em seguida, o modo é revertido para entrada de texto. Quando enableSpeechRecognitionAutoSend(false)
, o modo também é revertido para entrada de texto, mas nesse caso, os usuários podem modificar o texto reconhecido antes de enviar a mensagem para a habilidade.