Funciones
Estas son las funciones que puede configurar en el SDK de Android de Oracle.
Registros de hora absolutos y relativos
Indicador de función: timestampType: TimestampMode.RELATIVE
Puede activar registros de hora absolutos o relativos para los mensajes de chat. Los registros de hora absolutos muestran la hora exacta de cada mensaje. Los registros de hora relativos solo se muestran en el último mensaje y expresan el tiempo en términos de cuántos segundos, días, horas, meses o años han transcurrido con respecto al mensaje anterior. La precisión que ofrecen los registros de hora absolutos los convierten en ideales para tareas de archivado, pero dentro del contexto limitado de una sesión de chat, esta precisión empeora la experiencia de usuario porque los usuarios deben comparar los registros de hora para averiguar el paso del tiempo entre los mensajes. Los registros de hora relativos permiten a los usuarios realizar un seguimiento de la conversación fácilmente con términos como Ahora mismo y Hace unos momentos que se pueden comprender inmediatamente. Los registros de hora relativos mejoran la experiencia del usuario de otra forma, al tiempo que simplifican las tareas de desarrollo: debido a que los registros de hora relativos marcan los mensajes en términos de segundos, días, horas, meses o años transcurridos, no es necesario convertirlos para las zonas horarias.
Configuración de registros de hora relativos
- Active registros de hora:
enableTimestamp: true
- Activar registros de hora relativos:
timestampType: 'relative'
timestampType: 'relative'
), se muestra un registro de hora absoluto antes del primer mensaje del día como cabecera. Esta cabecera aparece cuando la conversación no se haya borrado y los mensajes más antiguos sigan estando disponibles en el historial.
- Para los primeros 10
- Entre 10 y 60
- Cada minuto entre 1 min y 60 min
- Cada hora entre 1 h y 24 h
- Cada día entre 1d-30d
- Cada mes entre 1 m y 12 m
- Cada año después del primer año
Diseño de botones de acción
Indicador de función: actionsLayout
actionsLayout
define la dirección de diseño para las acciones locales, globales, de tarjeta y de formulario. Cuando se define como LayoutOrientation.HORIZONTAL
, estos botones se presentan horizontalmente y se ajustan si el contenido se desborda.
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<Server_URI>, false, getApplicationContext())
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.actionsLayout(actionsLayout)
.build();
Filtrado de Anexo
(Necesario) <Introduzca una descripción breve aquí.>
Indicador de función: shareMenuItems
Para poder configurar
shareMenuItems
, debe definir enableAttachment
en 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
no tiene ningún valor o null
para la etiqueta, al igual que shareMenuCustomItem3 = ShareMenuCustomItem('csv')
en el snippet anterior, una cadena type
con el nombre share_
se convierte en la etiqueta. Para shareMenuCustomItem3
, la etiqueta es share_csv
.
Puede permitir a los usuarios cargar todos los tipos de archivos definiendo
type
de un objeto ShareMenuCustomItem
como *
.
pública estática vacía shareMenuItems(ArrayList<Object> shareMenuItems)
Bots.shareMenuItems(customItems);
, donde customItems
es un ArrayList
de Objects
. Cada objeto puede ser de tipo de valores de enumeración ShareMenuItem
o un 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);
Envío automático de un campo
Cuando un campo tiene la propiedad autoSubmit
definida en true
, el cliente envía un valor FormSubmissionMessagePayload
con la asignación submittedField
que contiene los valores de campo válidos que se han introducido hasta ahora. Los campos que aún no se hayan definido (independientemente de si son obligatorios) o los campos que violan una validación del lado del cliente no se incluyen en la asignación submittedField
. Si el campo de envío automático en sí contiene un valor que no es válido, el mensaje de envío no se envía y se muestra el mensaje de error del cliente para ese campo en particular. Cuando un envío automático se realiza correctamente, el valor partialSubmitField
del mensaje de envío de formulario se definirá en id
del campo autoSubmit
.
Sustitución de un formulario de entrada anterior
Cuando el usuario final envía el formulario, ya sea porque un campo tiene autosubmit
definido en true
, la aptitud puede enviar un nuevo EditFormMessagePayload
. Este mensaje debe sustituir al mensaje del formulario de entrada anterior. Al definir la propiedad de extensión de canal replaceMessage
en true
, puede activar el SDK para sustituir el mensaje de formulario de entrada anterior por el mensaje de formulario de entrada actual.
Métodos de conexión y desconexión
public void disconnect()
y public void connect()
. WebSocket se cierra después de llamar al método directo:Bots.disconnect();
Al llamar al siguiente método, se restablece la conexión WebSocket si la aptitud ha estado desconectada:Bots.connect();
public void connect(Botsconfiguration botsconfiguration)
con un nuevo objeto botsconfiguration
, la conexión WebSocket existente se cierra y se establece una nueva conexión mediante el nuevo 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);
Respuestas de cliente predeterminadas
Indicador de función: enableDefaultClientResponse: true
(valor por defecto: false
)
Utilice enableDefaultClientResponse: true
para proporcionar respuestas por defecto del lado del cliente acompañadas de un indicador de escritura cuando la respuesta de la aptitud se haya retrasado o cuando no haya ninguna respuesta de aptitud. Si el usuario envía el primer mensaje/consulta, pero la aptitud no responde con el número de segundos definido por el indicador odaas_default_greeting_timeout
, la aptitud puede mostrar un mensaje de saludo que se configura mediante la cadena de traducción odaas_default_greeting_message
. A continuación, el cliente vuelve a comprobar la respuesta de la aptitud. El cliente muestra la respuesta de la aptitud si se ha recibido, pero si no, muestra un mensaje de espera (configurado con la cadena de traducción odaas_default_wait_message
) en intervalos definidos por el indicador odaas_default_wait_message_interval
. Cuando la espera de la respuesta de la aptitud supera el umbral definido por el indicador typingIndicatorTimeout
, el cliente muestra una respuesta de disculpa al usuario y detiene el indicador de escritura. Puede configurar la respuesta de disculpa mediante la cadena de traducción odaas_default_sorry_message
.
Delegación
Configuración de función: messageModifierDelegate
interface MessageModifierDelegate
y transferir su instancia a la propiedad 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 Mensaje beforeDisplay(Mensaje de mensaje)
El delegado public Message beforeDisplay(Message message)
permite modificar el mensaje de una aptitud antes de que aparezca en la conversación. El mensaje modificado que devuelve el delegado se muestra en la conversación. Si el método devuelve null
, no se muestra el mensaje.
Visualización del historial de conversaciones
Puede activar o mostrar el historial de conversaciones local de un usuario después de que el SDK se haya reinicializado definiendo displayPreviousMessages
en true
o false
en la configuración de los bots. Cuando se define en false
, los mensajes anteriores no se muestran para el usuario después de la reinicialización del SDK.
Finalización de la sesión de chat
FeatureFlag: enableEndConversation: true
enableEndConversation: true
agrega un botón de cierre a la vista de cabecera que permite a los usuarios finalizar explícitamente la sesión de chat actual. Se abre un cuadro de diálogo de petición de confirmación cuando los usuarios hacen clic en este botón de cierre y cuando confirman la acción de cierre, el SDK envía un mensaje de evento a la aptitud que marca el final de la sesión de chat. A continuación, el SDK desconecta la aptitud de la instancia, reduce el widget de chat y borra el historial de conversaciones del usuario actual. El SDK dispara un delegado en beforeEndConversation(CompletionHandler completionHandler)
que se puede utilizar para realizar una tarea antes de enviar una solicitud de cierre de sesión al servidor. También genera un evento OnChatEnd()
para el que puede registrarse.
Al abrir el widget de chat después, se inicia una nueva sesión de chat.
public static void endChat()
Bots.endChat()
.Bots.endChat()
CompletionHandler
CompletionHandler
es un listener de eventos implantado en el SDK, que recibe la finalización de la tarea que se está realizando en el delegado beforeEndConversation(CompletionHandler completionHandler)
de la aplicación host. Consulte Javadoc incluido con el SDK disponible en la página de descarga de OMC y ODA.
SDK desatendido
El SDK se puede utilizar sin su interfaz de usuario. Para utilizarlo en este modo, importe solo el paquete com.oracle.bots.client.sdk.android.core-24.12.aar
en el proyecto tal y como se describe en Adición del SDK del cliente Android de Oracle al proyecto.
El SDK mantiene la conexión con el servidor y proporciona las API para enviar mensajes, recibir mensajes y obtener actualizaciones para el estado de la red y para otros servicios. Puede utilizar las API para interactuar con el SDK y actualizar la interfaz de usuario.
Puede enviar un mensaje utilizando cualquiera de las API send*()
disponibles en la clase Bots
. Por ejemplo, public static void sendMessage(String text)
envía un mensaje de texto a una aptitud o asistente digital.
public static void sendMessage(Cadena de texto)
text
es el mensaje de texto.Bots.sendMessage("I want to order a Pizza");
EventListener
EventListener
, que luego implanta la funcionalidad para:
void onStatusChange(ConnectionStatus connectionStatus)
: se llama a este método cuando cambia el estado de conexión de WebSocket. Su parámetroconnectionStatus
es el estado actual de la conexión. Consulte la documentación Java incluida en el SDK (disponible en la página de descarga de ODA y OMC) para obtener más información sobre la enumeraciónConnectionStatus
.void onMessageReceived(Message message)
: este método se llama cuando se recibe un mensaje nuevo de la aptitud. Su parámetromessage
es el mensaje recibido de la aptitud. Consulte la documentación Java incluida en el SDK (disponible en la página de descarga de ODA y OMC) para obtener más información sobre la claseMessage
.void onMessageSent(Message message)
: este método se llama cuando se envía un mensaje a la aptitud. Su parámetro de mensaje es el mensaje enviado a la aptitud. Consulte la documentación Java incluida en el SDK (disponible en la página de descarga de ODA y OMC) para obtener más información sobre la claseMessage
.void onAttachmentComplete()
: se llama a este método cuando ha finalizado una carga de anexos.
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.
}
}
La instancia de tipo EventListener
se debe transferir a setEventListener(EventListener eventListener)
.
public static void setEventListener(EventListener eventListener)
eventListener
es una instancia de tipo EventListener
para recibir actualizaciones.Bots.setEventListener(new BotsEventListener());
Vista web en widget
Indicador de función: linkHandler
Puede configurar el comportamiento del enlace en los mensajes de chat para permitir a los usuarios acceder a páginas web desde dentro del widget de chat. En lugar de tener que cambiar de la conversación para ver una página en un separador o en una ventana del explorador independiente, un usuario puede permanecer en el chat porque el widget de chat abre el enlace dentro de una vista web.
Configuración de la vista web en el widget
Indicador de función: webViewConfig
linkHandler
en WebviewLinkHandlerType.WEBVIEW
. Puede definir el tamaño y la visualización de la propia vista web mediante un objeto de clase 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 se muestra en este fragmento de código, puede definir los siguientes atributos para la vista web.Atributo | Configuración |
---|---|
webViewSize |
Define el tamaño de pantalla de la ventana de vista web del widget con la enumeración WebviewSizeWindow , que tiene dos valores: PARTIAL (WebviewSizeWindow.PARTIAL ) y FULL (WebviewSizeWindow.FULL ).
|
clearButtonLabel |
Define el texto utilizado para el botón Borrar/Cerrar en la esquina superior derecha de la vista web. El texto por defecto es DONE .
|
clearButtonIcon |
Define un icono para el botón Borrar, que aparece alineado a la izquierda dentro del botón. |
clearButtonLabelColor |
Define el color del texto de la etiqueta de botón Borrar. |
clearButtonColor |
Define el color de fondo del botón Borrar. |
webviewHeaderColor |
Define el color de fondo de la cabecera de la vista web. |
webviewTitleColor |
Define el color del título en la cabecera. El título es la URL del enlace web que se ha abierto. |
Chat multilingüe
Indicador de función: multiLangChat
El soporte de idioma nativo del SDK de Android permite al widget de chat tanto detectar el idioma de un usuario como permitir al usuario seleccionar el idioma de conversación en un menú desplegable de la cabecera. Los usuarios pueden cambiar entre idiomas, pero solo entre conversaciones, no durante una conversación porque la conversación se restablece cada vez que un usuario selecciona un nuevo idioma.
Activar el menú de idioma
multiLangChat
con un objeto que contenga supportedLanguage
ArrayList, que está compuesto por etiquetas de idioma (lang
) y etiquetas de visualización opcionales (label
). Fuera de esta matriz, también puede definir el idioma por defecto con la propiedad primary
, como se muestra en (primary("en")
en el siguiente fragmento.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();
El widget de chat muestra los idiomas soportados transferidos en un menú desplegable ubicado en la cabecera. Además de los idiomas disponibles, el menú también incluye una opción Detectar idioma. Cuando un usuario selecciona un idioma de este menú, se restablece la conversación actual y se inicia una nueva conversación con el idioma seleccionado. El idioma seleccionado por el usuario se mantiene entre las sesiones en el mismo explorador, por lo que el idioma anterior del usuario se selecciona automáticamente cuando el usuario vuelve a revisar la aptitud a través de la página que contiene el widget de chat.
- Debe definir un mínimo de dos idiomas para permitir que se muestre el menú desplegable.
- Si omite la clave
primary
, el widget detecta automáticamente el idioma en el perfil de usuario y selecciona la opción Detectar idioma en el menú.
Desactivar menú de idioma
A partir de la versión 21.12, también puede configurar y actualizar el idioma del chat sin tener que configurar también el menú desplegable de selección de idioma pasando primary
en la configuración inicial sin supportedLanguage
ArrayList. El valor transferido en la variable primary
se define como el idioma de chat para la conversación.
Detección de idioma
Si omite la propiedad
primary
, el widget detecta automáticamente el idioma en el perfil de usuario y activa la opción Detectar idioma en el menú.
Puede actualizar dinámicamente el idioma seleccionado llamando a la API setPrimaryChatLanguage(lang)
. Si el valor de lang
transferido coincide con uno de los idiomas soportados, se selecciona ese idioma. Cuando no se encuentra ninguna coincidencia, se activa Detectar idioma. También puede activar la opción Idioma detectado llamando a la API Bots.setPrimaryChatLanguage('und')
, donde 'und'
indica un determinado idioma.
Puede actualizar el idioma de chat de forma dinámica mediante la API setPrimaryChatLanguage(lang)
incluso cuando el menú desplegable no se haya configurado.
Referencia rápida de chat multilingüe
Para ello... | ... Realice esta acción |
---|---|
Muestre la lista desplegable de selección de idioma a los usuarios finales. | Defina la propiedad multiLangChat con un objeto que contenga supportedLanguage ArrayList.
|
Defina el idioma del chat sin mostrar el menú desplegable de selección de idioma a los usuarios finales. | Defina solo primary .
|
Defina un idioma por defecto. | Transfiera primary con la lista de matrices supportedLanguage . El valor primary debe ser uno de los idiomas soportados que incluye la matriz.
|
Activar detección de idioma | Transfiera primary como und .
|
Actualice dinámicamente el idioma del chat. | Llame a la API setPrimaryChatLanguage(lang) .
|
Opciones del menú Compartir
- archivos de medios visuales (imágenes y vídeos)
- archivos de audio
- archivos generales, como documentos, archivos PDF y hojas de cálculo
- Ubicación
Al transferir un ArrayList de objetos a shareMenuItems shareMenuItems(Arraylist<Object>)
, puede restringir, o filtrar, el tipo de elementos disponibles en el menú, personalizar los iconos y las etiquetas del menú y limitar el tamaño del archivo de carga (como 1024 en el siguiente fragmento). Estos objetos pueden ser un objeto de valores de enumeración shareMenuCustomItem
o ShareMenuItem
asignados a las opciones de menú de recursos compartidos: ShareMenuItem.CAMERA
para la opción de menú de cámara (si está soportada por el dispositivo), ShareMenuItem.VISUAL
para compartir una imagen o un elemento de vídeo, ShareMenuItem.AUDIO
para compartir un elemento de audio y ShareMenuItem.FILE
para compartir un elemento de archivo. Al transferir un valor vacío o un valor nulo, se muestran todas las opciones de menú que se pueden transferir como valores de enumeración ShareMenuItem
.
ShareMenuCustomItem
no tiene ningún valor o es nulo para la etiqueta, al igual que shareMenuCustomItem3 = ShareMenuCustomItem('csv')
en el siguiente fragmento, una cadena de tipo con el sufijo share_
se convierte en la etiqueta. Para shareMenuCustomItem3
, la etiqueta es share_csv
. Puede permitir a los usuarios cargar todos los tipos de archivos definiendo el tipo de objeto ShareMenuCustomItem
como *
.
Esta configuración solo se aplica cuando
enableAttachment
está definido en 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 estático nulo shareMenuItems()
Bots.shareMenuItems();
.Bots.shareMenuItems()
pública estática vacía shareMenuItems(ArrayList<Object> shareMenuItems)
Bots.shareMenuItems(customItems);
, donde customItems
es un ArrayList de objetos. Cada objeto puede ser de tipo de valores de enumeración ShareMenuItem
o un 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);
Reconocimiento de Voz
Indicador de función: enableSpeechRecognition
Al definir el indicador de la función enableSpeechRecognition
en true
, se activa el botón Micrófono que se mostrará junto con el botón Enviar cada vez que el campo de entrada de usuario esté vacío.
La definición de esta propiedad en true
también soporta la funcionalidad activada por la propiedad enableSpeechRecognitionAutoSend
, que cuando se define también en true
, permite que la respuesta de voz del usuario se envíe al servidor de chat automáticamente mientras se muestra la respuesta como un mensaje enviado en la ventana de chat. Puede permitir que los usuarios en primer lugar editen (o supriman) sus mensajes determinados antes de enviarlos manualmente definiendo enableSpeechRecognitionAutoSend
en false
.
public static nulo startRecording(IBotsSpeechListener listener)
Inicia la grabación del mensaje de voz del usuario. El parámetro listener
es una instancia de IBotsSpeechListener
para recibir la respuesta devuelta del servidor.
public static boolean isRecording()
Comprueba si la grabación de voz se ha iniciado o no. Devuelve true
si se ha iniciado la grabación. De lo contrario, devuelve false
.
IBotsSpeechListener
IBotsSpeechListener
, que a continuación implanta la funcionalidad para los siguientes métodos:
void onError(Error de cadena)
Este método se llama cuando se producen errores al establecer la conexión con el servidor o cuando no se da especifique ninguna entrada o cuando se especifiquen demasiadas entradas. Su parámetro error
es el mensaje de error.
void onSuccess(String expression)
A este método se le llama cuando se recibe un resultado final del servidor. Su parámetro utterance
es la expresión final recibida del servidor.
Este método está en desuso en la versión 20.8.1.
void onSuccess(BotsSpeechResult botsSpeechResult)
A este método se le llama cuando se recibe un resultado final del servidor. Su parámetro, botsSpeechResult
, es la respuesta final recibida del servidor.
void onPartialResult(Solución de cadena)
A este método se le llama cuando se recibe un resultado parcial del servidor. Su parámetro utterance
es la expresión parcial recibida del servidor.
void onClose(int code, String message)
Se llama a este método cuando se cierra la conexión al servidor.
code
: código de estadomessage
: motivo para cerrar la conexión
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íntesis de voz
- Indicador de función:
enableSpeechSynthesis
- Configuración de funcionalidad:
speechSynthesisVoicePreferences
- Los usuarios pueden silenciar o reactivar la respuesta de audio de la aptitud mediante un botón que se encuentra en la cabecera de la vista de chat. Esta función se activa definiendo el indicador de función
enableSpeechSynthesis
entrue
. - Puede definir el idioma preferido que lee los mensajes de la aptitud junto con la propiedad
speechSynthesisVoicePreferences
. Este parámetro que define el idioma y la voz es una lista de instanciasSpeechSynthesisSetting
(descritas en el Javadoc del SDK que se descarga de la página de descarga de ODA y OMC). Esta propiedad permite una devolución de llamada cuando el dispositivo no soporta el idioma o la voz preferidos. Si el dispositivo no soporta la voz preferida, se utilizará en su lugar la voz por defecto del idioma preferido. Si no están soportados el idioma o la voz preferidos, se utilizan el idioma y la voz por defecto.
public static void initSpeechSynthesisService()
onCreate()
de una actividad para inicializar el servicio de síntesis de voz. La inicialización del servicio de síntesis de voz se realizará cuando la biblioteca SDK se inicialice sólo si el indicador de la función enableSpeechSynthesis
se define en true
.public class ConversationActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bots.initSpeechSynthesisService();
}
}
public static void startBotAudioResponse(cadena de texto)
text
es el texto del mensaje de la aptitud que se lee en voz alta.Bots.startBotAudioResponse("What kind of crust do you want?");
Este método quedó en desuso en la versión 21.08.
public static void stopBotAudioResponse()
Bots.stopBotAudioResponse()
public static boolean isSpeaking()
Comprueba si la respuesta de la aptitud se está leyendo en este momento en alto o no.
true
si la respuesta de la aptitud se está leyendo en este momento en voz alta. De lo contrario, devuelve false
.if (Bots.isSpeaking()) {
Bots.stopBotAudioResponse();
}
public static void shutdownBotAudioResponse()
Libera los recursos que utiliza el SDK.
onDestroy()
de ConversationActivity
.public class ConversationActivity extends AppCompatActivity {
@Override
protected void onDestroy() {
super.onDestroy();
Bots.shutdownBotAudioResponse();
}
}
Inyección de servicio de voz
Indicador de función: ttsService
El indicador de función speechSynthesisService
le permite inyectar cualquier servicio de texto a voz (TTS) (propio o proporcionado por un proveedor externo) en el SDK. Para inyectar un servicio TTS, primero debe definir el indicador de función enableSpeechSynthesis
en true
y, a continuación, transferir una instancia de la interfaz SpeechSynthesisService
al indicador speechSynthesisService
.
La interfaz de SpeechSynthesisService
SpeechSynthesisService
. Implementa estos métodos:
initTextToSpeechService(@NonNull Application application, @NonNull BotsConfiguration botsConfiguration)
: inicializa un nuevo servicio TTS.Parámetro Descripción application
La aplicación. Esto no puede ser nulo. botsConfiguration
Objeto BotsConfiguration
utilizado para controlar las funciones de la biblioteca. Esto no puede ser nulo.speak(String phrase)
: agrega una frase que se debe pronunciar en la cola de expresiones. El parámetro It'sphrase
es el texto que se va a hablar.isSpeaking()
: comprueba si se habla o no la respuesta de audio. Devuelvefalse
si no se habla ninguna respuesta de audio en curso.Nota
Este método quedó en desuso en la versión 21.08.stopTextToSpeech()
: para cualquier síntesis de voz en curso.Nota
Este método quedó en desuso en la versión 21.08.shutdownTextToSpeech()
: libera los recursos utilizados por el motor TextToSpeech.getSpeechSynthesisVoicePreferences()
: devuelve la matriz de preferencias de voz que se utiliza para seleccionar la mejor coincidencia para la voz disponible que se utiliza para la síntesis de voz.setSpeechSynthesisVoicePreferences(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences)
: define la matriz de preferencias de voz que se utiliza para seleccionar la mejor coincidencia de voz disponible para la síntesis de voz. El parámetrospeechSynthesisVoicePreferences
es la matriz de preferencias de voz para la síntesis de voz.onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences)
: establece la voz de síntesis de voz en la mejor coincidencia de voz disponible.NotaLe recomendamos que llame a este método dentro del método
Este método quedó en desuso en la versión 21.08.setSpeechSynthesisVoicePreferences
después de definir las preferencias de vozArrayList
. El parámetrospeechSynthesisVoicePreferences
es la matriz de preferencias de voz para la síntesis de voz.onSpeechRecognitionLocaleChange(Locale speechLocale
): este método se llama cuando el lenguaje de reconocimiento de voz ha cambiado. Al sustituir este método, puede establecer el lenguaje de síntesis de voz en el mismo idioma que el lenguaje de reconocimiento de voz. El parámetrospeechLocale
es la configuración regional definida para el reconocimiento de voz.
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>)
y SpeechSynthesisService#onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting>)
han quedado en desuso en esta versión y se han sustituido por SpeechSynthesisService#setTTSVoice(ArrayList<SpeechSynthesisSetting>)
y SpeechSynthesisService#getTTSVoice()
. Antes, SpeechSynthesisService#setSpeechSynthesisVoicePreferencesonSpeechSynthesisVoicePreferencesChange
establecía la matriz de preferencias de voz de síntesis de voz y SpeechSynthesisService#onSpeechSynthesisVoicePreferencesChange
establecía la mejor voz disponible para la síntesis de voz y devolvía la voz seleccionada. Ahora, la misma funcionalidad se logra a través de los nuevos métodos: SpeechSynthesisService#setTTSVoice(ArrayList<SpeechSynthesisSetting> TTSVoices)
, que establece tanto la matriz de preferencia de voz de síntesis de voz como la mejor voz disponible para síntesis de voz y SpeechSynthesisService#getTTSVoice()
, que devuelve la voz seleccionada para síntesis de voz.
Indicador de escritura para conversaciones entre usuario y agente
Indicador de función: enableSendTypingStatus
Cuando está activado, el SDK envía un evento de escritura RESPONDING
junto con el texto que el usuario está escribiendo actualmente en . Muestra un indicador de escritura en la consola del agente. Cuando el usuario haya terminado de escribir, el SDK envía un evento LISTENING
a Oracle B2C Service u Oracle Fusion Service. Esto oculta el indicador de escritura en la consola del agente.
Del mismo modo, cuando el agente está escribiendo, el SDK recibe un evento RESPONDING
del servicio. Al recibir este evento, el SDK muestra un indicador de escritura al usuario. Cuando el agente está inactivo, el SDK recibe el evento LISTENING
del servicio. Al recibir este evento, el SDK oculta el indicador de escritura que se muestra al usuario.
sendUserTypingStatus
permite el mismo comportamiento para el modo sin cabecera.public void sendUserTypingStatus(TypingStatus status, String text)
- Para mostrar el indicador de escritura en la consola del agente:
Bots.sendUserTypingStatus("RESPONDING", "<Message_Being_Typed>");
- Para ocultar el indicador de escritura en la consola del agente:
Bots.sendUserTypingStatus("LISTENING", "");
- Para controlar el indicador de escritura del lado del usuario, utilice el evento
onReceiveMessage(Message message)
. Por ejemplo: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 defecto, el SDK envía el evento de escrituraRESPONDING
cada tres segundos al servicio. Utilice este indicador para limitar este evento. El valor mínimo que se puede definir es de tres segundos.enableAgentSneakPreview
: Oracle B2C Service soporta mostrar el texto del usuario a medida que se introduce. Si este indicador está definido entrue
(el valor por defecto esfalse
), el SDK envía el texto real. Para proteger la privacidad del usuario, el SDK envía...
en lugar del texto real a Oracle B2C Service cuando el indicador está definido enfalse
.Nota
Esta función debe estar activada tanto en el SDK como en la configuración de chat de Oracle B2C Service.
Actualizar el Avatar de Usuario
Puede activar la actualización dinámica del avatar del usuario en tiempo de ejecución.
Exponer detalles de agente
Utilice estas API para modificar el nombre del agente, el color del texto, el avatar, las iniciales del nombre del agente, el color del texto y el fondo del avatar.
público AgentDetails getAgentDetails()
Bots.getAgentDetails(AgentDetails);
Consulte Javadocs para obtener más detalles sobre la clase AgentDetails
.
anulación pública setAgentDetails(AgentDetails)
Bots.setAgentDetails(AgentDetails);
público AgentDetails getAgentDetails()
Bots.getAgentDetails(AgentDetails);
Consulte Javadocs para obtener más detalles sobre la clase AgentDetails
.
Visualizador de voz
Cuando el soporte de voz está activado (enableSpeechRecognition(true)
), el pie de página del widget de chat muestra un visualizador de voz, un gráfico de visualizador dinámico que indica el nivel de frecuencia de la entrada de voz. El visualizador responde a la modulación de la voz del usuario indicando si el usuario habla demasiado bajo o demasiado alto. Este visualizador se crea mediante el flujo de bytes que se registran mientras el usuario habla, el cual también se muestra en el método IBotsSpeechListener#onActiveSpeechUpdate(byte[])
para su uso en el modo sin cabecera.
El modo de voz se indica cuando aparece el icono del teclado.
Con enableSpeechRecognitionAutoSend(true)
, el texto reconocido se envía automáticamente a la aptitud después de que el usuario haya terminado de dictar el mensaje. El modo vuelve a la entrada de texto. Si enableSpeechRecognitionAutoSend(false)
, el modo también se revierte a la entrada de texto, pero en este caso, los usuarios pueden modificar el texto reconocido antes de enviar el mensaje a la aptitud.