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

Para agregar un registro de hora relativo:
  • Active registros de hora: enableTimestamp: true
  • Activar registros de hora relativos: timestampType: 'relative'
Al configurar el registro de hora (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.
Este registro de hora se actualiza a los siguientes intervalos regulares (segundos, minutos, etc.) hasta que se recibe un nuevo mensaje.
  • 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
Cuando se carga un nuevo mensaje en el chat, se elimina el registro de hora relativo del mensaje anterior y aparece un nuevo registro de hora en el nuevo mensaje que muestra la hora relativa respecto al mensaje anterior. En ese momento, el registro de hora relativo se actualiza hasta que llegan los siguientes mensajes.

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

Utilice esta función para restringir o filtrar los tipos de elementos que están disponibles en la ventana emergente del menú de recursos compartidos, establecer el límite de tamaño de archivo para cargas (como 1024 en el siguiente fragmento) y personalizar los iconos y las etiquetas del menú.
Nota

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();
Si un objeto 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.
Nota

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)

Puede actualizar dinámicamente la ventana emergente de opciones del menú compartido llamando a la API 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);

public static void shareMenuItems()

Puede obtener la lista de opciones del menú de recursos compartidos llamando a la API Bots.shareMenuItems();.
Bots.shareMenuItems()

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

La aptitud se puede conectar y desconectar mediante los métodos 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();
Cuando se llama a 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

La función de delegación le permite definir un delegado para recibir devoluciones de llamada antes de ciertos eventos de la conversación. Para definir un delegado, una clase debe implantar 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.

public Mensaje beforeDisplay(Mensaje de mensaje)

El delegado public Message beforeDisplay(Message message) permite modificar un mensaje de usuario antes de enviarlo al servidor de chat. El mensaje que devuelve el delegado se envía a la aptitud. Si devuelve un valor nulo, no se envía el mensaje.

public Mensaje beforeNotification(Mensaje de mensaje)

El delegado public Message beforeNotification(Message message) permite modificar el mensaje de una aptitud antes de disparar una notificación. Si devuelve un valor nulo, no se dispara la notificación.

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

La conversación también se puede terminar dinámicamente llamando a la API 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)

Envía un mensaje de texto a la aptitud. Su parámetro text es el mensaje de texto.
Bots.sendMessage("I want to order a Pizza");
EventListener
Para recibir el cambio de estado de conexión, el mensaje enviado a la aptitud y recibido de la aptitud y los eventos de estado de carga de anexos, una clase debe implantar la interfaz 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ámetro connectionStatus 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ón ConnectionStatus.
  • void onMessageReceived(Message message): este método se llama cuando se recibe un mensaje nuevo de la aptitud. Su parámetro message 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 clase Message.
  • 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 clase Message.
  • 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)
Establece que el listener reciba la respuesta devuelta de la aptitud para obtener actualizaciones sobre el cambio de estado de la conexión y que recibirá una actualización cuando finalice la carga del anexo. Su parámetro 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

Puede configurar el comportamiento de enlace de vista web definiendo la función 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

Puede activar un menú que permita a los usuarios seleccionar un idioma preferido en un menú desplegable definiendo la propiedad 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.
A continuación, se muestran algunos aspectos que hay que tener en cuenta al configurar el soporte multilingüe:
  • 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

Además de los idiomas transferidos, el widget de chat muestra una opción Detectar idioma en la lista desplegable. Al seleccionar esta opción, se indica a la aptitud que detecte automáticamente el idioma de la conversación del mensaje del usuario y, cuando sea posible, que responda en el mismo idioma.
Nota

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

Por defecto, el menú Compartir muestra opciones para los siguientes tipos de archivo:
  • 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.

Si un objeto 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 *.
Nota

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

Puede obtener la lista de opciones del menú de recursos compartidos llamando a la API Bots.shareMenuItems();.
Bots.shareMenuItems()

pública estática vacía shareMenuItems(ArrayList<Object> shareMenuItems)

Puede actualizar dinámicamente la ventana emergente de opciones del menú de recursos compartidos llamando a la API 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 void stopRecording()

Para la grabación del mensaje de voz del usuario.

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

Una clase debe implantar la interfaz 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.

Nota

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.

Parámetros:
  • code: código de estado
  • message: motivo para cerrar la conexión

void onOpen()

Método llamado cuando se abre la conexión al servidor.

onActiveSpeechUpdate(byte[] speechData)

Se llama a este método cuando hay una actualización en el mensaje de voz del usuario, que luego se puede utilizar para actualizar el visualizador de voz. Su parámetro es speechData, la matriz de bytes de la voz grabada del usuario.
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
El SDK se ha integrado con la síntesis de voz para leer el mensaje de la aptitud cuando se recibe un nuevo mensaje de la aptitud:
  • 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 en true.
  • 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 instancias SpeechSynthesisSetting (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()

Inicializa el servicio de síntesis de voz. Se debe llamar a este método en el método 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)

Inicia la lectura de la respuesta de la aptitud en voz alta. Su parámetro text es el texto del mensaje de la aptitud que se lee en voz alta.
Bots.startBotAudioResponse("What kind of crust do you want?");
Nota

Este método quedó en desuso en la versión 21.08.

public static void stopBotAudioResponse()

Para la lectura de la respuesta de la aptitud en voz alta.
Bots.stopBotAudioResponse()

public static boolean isSpeaking()

Comprueba si la respuesta de la aptitud se está leyendo en este momento en alto o no.

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

Este método se llama en el método 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

Puede crear una instancia de una clase que sea una implantación de la interfaz 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's phrase es el texto que se va a hablar.
  • isSpeaking(): comprueba si se habla o no la respuesta de audio. Devuelve false 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ámetro speechSynthesisVoicePreferences 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.
    Nota

    Este método quedó en desuso en la versión 21.08.
    Le recomendamos que llame a este método dentro del método setSpeechSynthesisVoicePreferences después de definir las preferencias de voz ArrayList. El parámetro speechSynthesisVoicePreferences 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ámetro speechLocale 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.
        }
    }
Nota

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.

La API 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
             }
           }
         }
Hay dos configuraciones más que proporcionan un control adicional:
  • typingStatusInterval: por defecto, el SDK envía el evento de escritura RESPONDING 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 en true (el valor por defecto es false), 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 en false.
    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.

anulación pública updatePersonAvatar

Establece el avatar del usuario para todos los mensajes, incluidos los mensajes anteriores.
ConversationActivity.setUserPerson(Object);

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

Devuelve un objeto que contiene los detalles del agente.
Bots.getAgentDetails(AgentDetails);
Consulte Javadocs para obtener más detalles sobre la clase AgentDetails.

anulación pública setAgentDetails(AgentDetails)

Sustituye los detalles del agente recibidos del servidor.
Bots.setAgentDetails(AgentDetails);

público AgentDetails getAgentDetails()

Devuelve un objeto que contiene los detalles del agente.
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 widget de chat muestra un visualizador de voz cuando los usuarios hacen clic en el icono de voz. Es un indicador de si el nivel de audio es lo suficientemente alto como para que el SDK capture la voz del usuario. El mensaje del usuario, tal y como se reconoce como texto, se muestra debajo del visualizador.
Nota

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.