Funciones
Estas son las funciones que puede configurar en el SDK de iOS de Oracle.
Registros de hora absolutos y relativos
- Indicador de función:
enableTimestamp
- Indicador de función:
timestampMode
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, enableTimestamp
debe estar activado (true
) y timestampMode
, que controla el estilo del registro de hora, debe ser timestampMode.relative
. Al definir timestampMode.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 acciones
Utilice los valores de configuración BotsProperties.actionsLayout
para mostrar los botones de acción en diseños horizontales o verticales. El diseño se puede definir para acciones locales, acciones globales, acciones de tarjeta y acciones de formulario. El valor por defecto es horizontal
para todos los tipos de acción.
BotsProperties.actionsLayout = ActionsLayout(local: .horizontal,global: .vertical,card: .horizontal,form: .horizontal)
Avatares de agente
Para las aptitudes integradas con soporte de agente en directo, la configuración agentAvatar
permite mostrar un icono de avatar para los mensajes enviados por los agentes. Esta configuración se define con la URL del icono que aparece junto con los mensajes del agente.
Actualización dinámica de avatares y detalles de agentes
Puede activar los avatares de usuario y agente para que se actualicen dinámicamente en tiempo de ejecución mediante setUserAvatar(avatarAsset : String)
, getAgentDetails()
y setUserAvatar(avatarAsset : String)
.
Definir el Avatar de Usuario
setPersonAvatar(avatarAsset : String)
permite la actualización dinámica del avatar del usuario en tiempo de ejecución. Este método define el avatar del usuario para todos los mensajes, incluidos los mensajes anteriores. avatarAsset
puede ser:
- Nombre del activo de la carpeta
Assets
del proyecto. - Un enlace externo al origen de imagen, como se muestra en el siguiente ejemplo.
BotsUIManager.shared().setPersonAvatar(avatarAsset: "https://picsum.photos/200/300")
BotsUIManager.shared().setPersonAvatar(avatarAsset: "userAvatarInAssetsFolder")
Definir los detalles del agente
Puede personalizar los detalles del agente mediante la API setAgentDetails(agentDetails: AgentDetails)
. Junto con el nombre del agente, los otros atributos que puede utilizar esta API para personalizar son el color del texto y el avatar. Si no se ha configurado ningún avatar de agente, el avatar se puede configurar de forma dinámica con las iniciales del nombre del agente. También puede personalizar el color de estas iniciales y el color de fondo. La API getAgentDetails()
recupera los detalles del agente actual.
Aunque se pueden llamar a estas API en cualquier momento, recomendamos utilizarlas con los eventos onReceiveMessage()
o beforeDisplay()
.
setAgentDetails(agentDetails: AgentDetails)
Todos los parámetros del objeto
AgentDetails
son opcionales.
// to override avatar , name and name text colorlet agentDetails = AgentDetails(name: "Bob", avatarImage: "https://picsum.photos/200/300", nameTextColor: .red)
// to override avatar , namelet agentDetails = AgentDetails(name: "Bob", avatarImage: "https://picsum.photos/200/300")
// to override avatar, name, name text color,avatar initials color , avatar background let agentDetails = AgentDetails(name: "Bob", nameTextColor: .red,avatarTextColor: .blue,avatarBackgroundColor: .green)
BotsUIManager.shared().setAgentDetails(agentDetails: agentDetails)
AgentDetails
. Por ejemplo:let agentDetails = AgentDetails()
agentDetails.name = "Bob"
agentDetails.avatarImage = "agentAvatar"
agentDetails.nameTextColor = .red
agentDetails.avatarBackgroundColor = .green
agentDetails.avatarTextColor = .brown
BotsUIManager.shared().setAgentDetails(agentDetails: agentDetails)
Filtrado de Anexo
Indicador de función: shareMenuConfiguration
shareMenuConfiguration
para restringir o filtrar los tipos de elementos que están disponibles en la ventana emergente del menú de recursos compartidos, definir el límite de tamaño de archivo en KB para las cargas (como 1024 en el siguiente fragmento) y personalizar los iconos y las etiquetas del menú. El valor por defecto y el límite máximo son 25 MB.
Para poder configurar
shareMenuConfiguration
, debe definir enableAttachment
en true
.
botsConfiguration.shareMenuConfiguration = ([ShareMenuItem.files, ShareMenuItem.camera, ShareMenuItem.location], [ShareMenuCustomItem(types: [String(kUTTypePDF)], label: "PDF Files", maxSize: 1024), ShareMenuCustomItem(types: [String(kUTTypeText)], label: "Text Files")])
Para types
, debe utilizar CFString para el tipo de archivo correspondiente y convertirlo en String
. Cualquier otra cadena no será válida. Puede permitir a los usuarios cargar todos los tipos de archivos definiendo types
como String(kUTTypeItem)
.
función pública shareMenuItems(shareMenuItems: ([ShareMenuItem], [ShareMenuCustomItem]))
BotsManager.shared().shareMenuItems(shareMenuItems: ([ShareMenuItem], [ShareMenuCustomItem]))
.BotsManager.shared().shareMenuItems([ShareMenuItem.files, ShareMenuItem.camera, ShareMenuItem.location], [ShareMenuCustomItem(types: [String(kUTTypePDF)], label: "PDF Files", maxSize: 1024), ShareMenuCustomItem(types: [String(kUTTypeText)], label: "Text Files")])
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
.
Métodos de conexión, desconexión y destrucción
La aptitud se puede conectar o desconectar, o bien el SDK se puede destruir mediante los métodos public func destroy()
, public func disconnect()
y public func connect()
.
función pública destroy()
Destruye el SDK cerrando cualquier conexión activa, reconocimiento de voz, síntesis de voz, cargas de archivos y eliminando el controlador de vista del SDK. Una vez que se llama, no se puede llamar a ninguno de los métodos de API pública. Solo estarán activos de nuevo una vez que se vuelva a llamar al método initialize(botsConfiguration: BotsConfiguration, completionHandler: @escaping (ConnectionStatus, Error?) -> ())
para inicializar el SDK.
función pública disconnect()
BotsManager.shared().disconnect()
función pública connect()
BotsManager.shared().connect()
función pública connect(botsConfiguration: BotsConfiguration)
BotsConfiguration
, se cierra la conexión de socket web existente y se establece una nueva conexión mediante las nuevas propiedades de canal. Otras propiedades definidas en BotsConfiguration
permanecen tal cual.var botsConfiguration = BotsConfiguration(url: url, userId: userId, channelId: channelId)
BotsManager.shared().connect(botsConfiguration: botsConfiguration)
Respuestas de cliente predeterminadas
Indicador de función: enableDefaultClientResponse
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 defaultGreetingTimeout
, la aptitud puede mostrar un mensaje de saludo que se configura mediante la cadena de traducción odais_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 odais_default_wait_message
) en intervalos definidos por el indicador defaultWaitMessageInterval
. Cuando la espera de la respuesta de la aptitud supera el umbral definido por el indicador typingStatusTimeout
, 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 odais_default_sorry_message
.
Delegación
BotsMessageServiceDelegate
e implantar los siguientes métodos:
public func beforeDisplay(message: [String: Any]?) -> [String: Any]?
Este método permite modificar la carga útil del mensaje de una aptitud antes de que se muestre en la conversación. La carga útil del mensaje devuelta por el método se utiliza para mostrar el mensaje. Si devuelve nil
, no se mostrará el mensaje.
public func beforeSend(message: [String: Any]?) -> [String: Any]?
Este método permite modificar la carga útil de un mensaje de usuario antes de que se envíe al servidor de chat. La carga útil del mensaje devuelta por el método se envía a la aptitud. Si devuelve nil
, no se envía el mensaje.
public func beforeSendPostback(action: [String: Any]?) -> [String: Any]?
public func beforeSendPostback(action: [String: Any]?) -> [String: Any]?
permite modificar una carga útil de devolución antes de enviarla al servidor de chat. La carga útil de acción devuelta por el método se envía a la aptitud. Si devuelve nil
, la acción de devolución seleccionada por el usuario no se envía al servidor de chat.public class ViewController: UIViewController, BotsMessageServiceDelegate {
func beforeSend(message: [String : Any]?) -> [String : Any]? {
// Handle before send delegate here
}
func beforeDisplay(message: [String : Any]?) -> [String : Any]? {
// Handle before display delegate here
}
func beforeSendPostback(action: [String : Any]?) -> [String : Any]? {
// Handle before send postback action delegate here
}
}
BotsMessageServiceDelegate
, se debe asignar a la propiedad BotsManager.shared().delegate
como se muestra en el siguiente fragmento de código para inicializar el SDK:BotsManager.shared().delegate = self
Finalización de la sesión de chat
Indicador de función: enableEndConversation
enableEndConversation
, cuando se define en 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 también emite un evento chatend
en el protocolo BotsEventListener
que puede implantar.
Consejo:
La conversación también se puede terminar llamando al métodoBotsManager.shared().endChat()
, que puede utilizar cuando se inicializa el SDK en el modo sin cabecera.
SDK desatendido
El SDK se puede utilizar sin su interfaz de usuario. 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 BotsManager
. Por ejemplo, public func send(message: UserMessage)
envía un mensaje de texto a una aptitud o un asistente digital.
Función pública send(mensaje: UserMessage)
Esta función envía un mensaje a la aptitud. Su parámetro message
es una instancia de una clase que se ajusta a la clase UserMessage
. En este caso, es UserTextMessage
.BotsManager.shared().send(message: UserTextMessage(text: "Quiero pedir una pizza", type: .text))
BotsEventListener
BotsEventListener
que implantar los siguientes métodos:
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 los documentos de la API que se incluyen en el SDK para obtener más información sobre la enumeraciónConnectionStatus
.onReceiveMessage(message: BotsMessage)
: se llama a este método cuando se recibe un nuevo mensaje de la aptitud. Su parámetromessage
es el mensaje recibido de la aptitud. Consulte los documentos de la API que se incluyen en el SDK para obtener más información sobre la claseBotsMessage
.onUploadAttachment(message: BotsAttachmentMessage)
: se llama a este método cuando se ha completado una carga de anexo. Su parámetromessage
es el objetoBotsAttachmentMessage
para el anexo cargado.onDestroy()
: este método se llama cuando se llama al métododestroy()
.onInitialize()
: se llama a este método cuando se llama al métodoinitialize(botsConfiguration: BotsConfiguration, completionHandler: @escaping (ConnectionStatus, Error?) -> ())
. Toma el siguiente parámetro:newLanguage
: objetoSupportedLanguage
para el idioma de chat recién definido.
beforeEndConversation()
: este método se llama cuando se inicia la sesión de finalización de conversación.chatEnd()
: método de devolución de llamada disparado después de que la conversación haya finalizado correctamente.
extension ViewController: BotsEventListener {
func onReceiveMessage(message: BotsMessage) {
// Handle the messages received from skill or Digital Assistant
}
func onUploadAttachment(message: BotsAttachmentMessage) {
// Handle the post attachment upload actions
}
func onStatusChange(connectionStatus: ConnectionStatus) {
// Handle the connection status change
}
func onInitialize() {
//Handle initialization
}
func onDestroy() {
//Handle destroy
}
func onChatLanguageChange(newLanguage: SupportedLanguage) {
//Handle the language change.
}
func beforeEndConversation(completionHandler: @escaping (EndConversationStatus) -> Void) {
//Do the desired cleanup before session is closed.
return completionHandler(.success) // if cleanup was successfull.
return completionHandler(.success) // if there was en error cleaning up.
}
func chatEnd() {
//Handle successfull session end from server before the SDK is destroyed.
}
}
La instancia que se ajusta al protocolo BotsEventListener
se debe asignar a la propiedad BotsManager.shared().botsEventListener
como se ilustra en el siguiente fragmento de código para inicializar el SDK:BotsManager.shared().botsEventListener = self
Vista web en widget
Propiedad UI: 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
Propiedad UI: WebViewConfig
LinkHandler
en LinkHandlerType.webview
. WebViewConfig
se puede definir en una instancia de estructura WebViewConfiguration
.
BotsProperties.LinkHandler = LinkHandlerType.webview
//Set the properties which you want changed from the default values.
BotsProperties.WebViewConfig.webViewSize = WebViewSize.full
BotsProperties.WebViewConfig.clearButtonLabelColor = UIColor.black
Como se muestra en este fragmento de código, puede definir los siguientes atributos para la vista web.Atributo | Valores |
---|---|
webViewSize |
Define el tamaño de pantalla de la ventana de vista web del widget con el atributo WebviewSize , que tiene dos valores: partial (WebviewSize.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 se toma del juego de cadenas en odais_done en el archivo Localizable.strings .
|
clearButtonIcon |
Define un icono para el botón Borrar, que aparece alineado a la izquierda dentro del botón. Por defecto, no hay ningún icono definido para el botón de borrado. Es una cadena vacía. |
clearButtonLabelColor |
Define el color del texto de la etiqueta de botón Borrar. El color por defecto es UIColor.white .
|
clearButtonColor |
Define el color de fondo del botón Borrar. El color por defecto es UIColor.clear .
|
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. |
Formato de registro de hora de mensaje
El indicador timestampFormat
formatea los registros de hora que se muestran en los mensajes. Puede aceptar una cadena que conste de tokens de formato como "hh:mm:ss"
y otros formatos soportados por DateFormatter de Swift.
Chat multilingüe
Indicador de función: multiLangChat
El lenguaje nativo del SDK de iOS permite al widget de chat detectar el idioma de un usuario o permitir a los usuarios seleccionar el idioma de conversación. 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 la matriz supportedLanguages
, que está compuesto por etiquetas de idioma (lang
) y etiquetas de visualización opcionales (label
). Fuera de esta matriz, puede definir opcionalmente el idioma por defecto con la variable primaryLanguage
(MultiLangChat(primaryLanguage: String)
en el siguiente fragmento). botsConfiguration.multiLangChat = MultiLangChat(
supportedLanguages:[
SupportedLanguage.init(lang: "en", label: "English"),
SupportedLanguage.init(lang: "fr"),
SupportedLanguage.init(lang: "fr-CA", label: "French (Canada)")
],
primaryLanguage: "fr-CA"
)
Para formatear correctamente los códigos de idioma y región en archivos .lproj (proyecto de localización) localizables, utilice un guion (
-
) como separador, no un guion bajo (_
). Por ejemplo, utilice fr-CA
, no fr_CA
. Esto se alinea con la forma en que se crean los archivos .lproj
en la aplicación. Cuando el SDK busca un archivo .lproj
, primero intenta localizar uno con el formato languageCode-Region.lproj
exacto. Si no puede encontrar dicho archivo, el SDK busca un archivo languageCode.lproj
. Si no se encuentra, el SDK busca un archivo base.lproj
. Cuando no se puede localizar ninguno de estos, el SDK utiliza por defecto el inglés (en
).
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.
Puede agregar un listener de evento para el evento onChatLanguageChange
, que se dispara cuando se selecciona un idioma de chat en el menú desplegable o se cambia.
- Debe definir un mínimo de dos idiomas para permitir que se muestre el menú desplegable.
- Si ignora el atributo
primaryLanguage
, el widget detecta automáticamente el idioma en el perfil de usuario y selecciona la opción Detectar idioma en el menú. - La clave
label
es opcional para los idiomas soportados originalmente:fr
se muestra como Francés en el menú,es
se muestra como Español, y así sucesivamente. - Si bien
label
es opcional, si ha agregado un idioma que no es uno de los idiomas soportados originalmente, debe agregar una etiqueta para identificar la etiqueta. Por ejemplo, si no definelabel: 'हिंदी'
, paralang: "hi"
, el menú desplegable muestra hi en su lugar, contribuyendo a una experiencia de usuario deficiente.
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 MultiLangChat(primaryLanguage: String)
.
Detección de idioma
Además de los idiomas transferidos, el widget de chat muestra una opción Detectar idioma en el menú 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.
Puede actualizar dinámicamente el idioma seleccionado llamando a la API BotsManager.shared().setPrimaryLanguage(primaryLanguage: String)
. 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 BotsManager.shared().setPrimaryLanguage(primaryLanguage: "und")
, donde "und"
indica un valor indeterminado o transfiriendo primaryLanguage:nil
.
Puede actualizar el idioma de chat de forma dinámica mediante la API setPrimaryLanguage(primaryLanguage: String)
incluso cuando el menú desplegable no se haya configurado.
Referencia rápida de chat multilingüe
Para ello... | ... Realice esta acción |
---|---|
Mostrar el menú desplegable de selección de idioma a los usuarios finales. | Transfiera MultiLangChat(supportedLanguages: [SupportedLanguage]) .
|
Defina el idioma del chat sin mostrar el menú desplegable de selección de idioma a los usuarios finales. | Transfiera MultiLangChat(primaryLanguage: String) .
|
Defina un idioma por defecto. | Transfiera MultiLangChat(supportedLanguages: [SupportedLanguage], primaryLanguage: String) .
|
Activar detección de idioma | Transfiera primaryLanguage:nil o primaryLanguage:"und" .
|
Actualice dinámicamente el idioma del chat. | Llame a la API setPrimaryLanguage(primaryLanguage: String) .
|
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.
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
sharePopupConfiguration
permite restringir las opciones que se muestran en el menú Compartir. Al transferir una tupla de matrices a ShareMenuConfiguration
-- shareMenuConfiguration = ([ShareMenuItem], [ShareMenuCustomItem])
-- puede restringir, o filtrar, el tipo de elementos que están disponibles en el menú, personalizar los iconos y las etiquetas del menú, así como limitar el tamaño del archivo de carga. La tupla tiene una matriz de opciones de menú de recursos compartidos de tipo ShareMenuItem
y una matriz de opciones de menú de recursos compartidos de tipo ShareMenuCustomItem
. Transfiérala como una matriz vacía para todos los tipos de archivos.
Reconocimiento de Voz
- Indicador de función:
enableSpeechRecognition
- Configuración de funcionalidad:
enableAutoSendSpeechResponse
Al definir el indicador de la función enableSpeechRecognition
en true
, se activa el botón Micrófono que se mostrará en lugar del botón Enviar cada vez que el campo de entrada de usuario esté vacío. La voz se convierte a texto y se envía a la aptitud o al asistente digital. Si la voz se ha reconocido parcialmente, el resultado parcial se muestra en una ventana emergente que se abre haciendo clic en el botón de micrófono.
La definición de esta propiedad en true
también soporta la funcionalidad activada por la propiedad enableAutoSendSpeechResponse
, 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 func isRecording() -> Bool
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
.
onSpeechResponseReceived(data: String, final: Bool)
del protocolo BotsEventListener
se puede utilizar para gestionar todas las respuestas del servidor de voz.BotsManager.shared().startRecording()
if (BotsManager.shared().isRecording()) {
BotsManager.shared().stopRecording() // Stop voice recording
}
Síntesis de voz
- Indicador de función:
enableSpeechSynthesis
- Configuración de funcionalidad:
speechSynthesisVoicePreferences
- 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
. 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.
Inyección de servicio de voz
Indicador de función: ttsService
El indicador de función ttsService
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 TTSService
al indicador ttsService
.
El protocolo TTSService
TTSService
. Implementa los siguientes métodos:
speak(text: String)
: este método agrega el texto que se va a hablar a la cola de expresiones. Su parámetrotext
es el texto que se va a hablar.isSpeaking()
: este método comprueba si se habla o no la respuesta de audio. Devuelvefalse
si no se habla ninguna respuesta de audio.stopSpeech()
: este método detiene cualquier síntesis de voz en curso.
class CustomTTSService: TTSService {
func speak(text: String) {
// Adds text to the utterance queue to be spoken
}
func stopSpeech() {
// Stops any ongoing speech synthesis
}
func isSpeaking() -> Bool {
// Checks whether the bot audio response is being spoken or not.
}
}
Indicador de escritura para conversaciones entre usuario y agente
Indicador de función: enableSendTypingStatus
Cuando este indicador está activado, el SDK envía un evento de escritura RESPONDING
junto con el texto que el usuario está escribiendo actualmente a Oracle B2C Service u Oracle Fusion Service. Muestra un indicador de escritura en la consola del agente. Cuando el usuario ha terminado de escribir, el SDK envía un evento LISTENING
al servicio. 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 func sendUserTypingStatus(status: TypingStatus, text: String? = nil)
- Para mostrar el indicador de escritura en la consola del agente:
BotsManager.shared().sendUserTypingStatus(status: .RESPONDING, text: textToSend)
- Para ocultar el indicador de escritura en la consola del agente:
BotsManager.shared().sendUserTypingStatus(status: .LISTENING)
- Para controlar el indicador de escritura del lado del usuario, utilice el evento
onReceiveMessage()
. Por ejemplo:public func onReceiveMessage(message: BotsMessage) { if message is AgentStatusMessage { if let status = message.payload["status"] as? String { switch status { case TypingStatus.LISTENING.rawValue: hideTypingIndicator() case TypingStatus.RESPONDING.rawValue: showTypingIndicator() } } } }
BotsConfiguration
que proporcionan un control adicional:
typingStatusInterval
: por defecto, el SDK envía el evento de escrituraRESPONDING
cada tres segundos a Oracle B2C Service. 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 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.
Visualizador de voz
Cuando el soporte de voz está activado (botsConfiguration.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 AVAudioEngine de Swift, que se muestra en el método onAudioReceived
del protocolo SpeechEventListener
para su uso en modo sin cabecera.
El modo de voz se indica cuando aparece el icono del teclado.
Si botsConfiguration.enableSpeechAutoSendSpeechResponse = 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 botsConfiguration.enableSpeechAutoSendSpeechResponse = 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.