Localización de aptitudes
Puede diseñar aptitudes para usuarios cuyo idioma nativo no sea el inglés. Aunque el motor de procesamiento de lenguaje natural (NLP) funciona en inglés, puede diseñar aptitudes para interactuar con usuarios en otros idiomas mediante una combinación de un servicio de traducción, componentes de traducción especiales y grupos de recursos.
Servicios de traducción
Para que las aptitudes puedan interactuar con los usuarios en un idioma distinto del inglés, antes tiene que configurar un servicio de traducción en Oracle Digital Assistant. Puede utilizar Microsoft Translator o la API Translation de Google.
Si un usuario introduce una solicitud o una respuesta en un idioma distinto al inglés, la aptitud utiliza el servicio de traducción para convertir la entrada al inglés. Tras efectuar la traducción, el motor de procesamiento de lenguaje natural (NLP) puede resolverla en una intención y parear las entidades. A continuación, la aptitud puede responder al usuario utilizando el servicio de traducción para traducir las etiquetas y las peticiones de datos o haciendo referencia a cadenas específicas del idioma de los grupos de recursos.
En el caso de las aptitudes que disponen de un corpus de entrenamiento en un idioma distinto del inglés, el servicio de traducción se utiliza también en la fase de diseño. Al entrenar una aptitud en un idioma distinto del inglés, se crean versiones en inglés de las expresiones de ejemplo y los valores de entidades personalizadas que se van a utilizar en el modelo de entrenamiento (si bien estas traducciones no se muestran en el diseñador de aptitudes).
API Translation de Google
Para utilizar la API Translation de Google, debe generar la clave de API. Esta clave se crea desde la consola de GCP (API y servicios > Credenciales). Para obtener más información, consulte la documentación de Google Cloud Platform.
Microsoft Translator
Si desea utilizar Microsoft Translator como servicio de traducción en Oracle Digital Assistant, debe suscribirse a Translator o al servicio múltiple de Cognitive Services y obtener una clave secreta. Consulte https://docs.microsoft.com/en-gb/azure/cognitive-services/translator/reference/v3-0-reference.
Estos son los puntos más importante que debe saber:
- Debe utilizar la región Global y su URL correspondiente (
https://api.cognitive.microsofttranslator.com/
). - Debe obtener una clave secreta para la autenticación. Puede obtenerla en la sección Keys and Endpoints de Azure Portal.
Registro de un servicio de traducción en Oracle Digital Assistant
-
Haga clic en
para abrir el menú lateral y seleccione Configuración > Servicio de traducción.
-
Haga clic en Agregar servicio.
-
En el cuadro de diálogo Servicios de traducción, introduzca la URL y la clave de autorización (para el servicio Microsoft Translator) o el token de autorización (para la API de Google Translation).
- URL
- Clave de autorización (para el servicio Microsoft Translator) o token de autorización (para la API de Google Translation).
Agregar un servicio de traducción a una aptitud
- Si todavía no lo ha hecho, registre un servicio de traducción en Oracle Digital Assistant.
- Haga clic en
para abrir el menú lateral, seleccione Desarrollo > Aptitudes y elija la aptitud.
- En la barra de navegación izquierda de la aptitud, haga clic en el icono Configuración (
) y seleccione el separador General.
- Vaya al menú desplegable Servicio de traducción y seleccione el servicio de traducción.
Idioma predominante
Si ha configurado un servicio de traducción para una aptitud, Oracle Digital Assistant asigna de modo automático un idioma predominante para dicha aptitud, en función del idioma de las expresiones de ejemplo de la aptitud.
Para ver qué idioma predominante se ha asignado a una aptitud, pulse el icono Configuración() en la barra de navegación izquierda de la aptitud, seleccione el separador General y compruebe el valor de la propiedad Idioma predominante.
Asegúrese de que todas las expresiones de ejemplo de las intenciones, las entidades y el texto de respuesta del diálogo estén en el idioma predominante.
Si está diseñando la aptitud para que admita varios idiomas, el idioma predominante debe ser el inglés.
El idioma predominante del asistente digital lo determina el idioma predominante de la primera aptitud que se agrega al asistente digital. Cualquier otra aptitud que se agregue al asistente digital deberá tener el mismo idioma predominante.
Si la primera aptitud que se agrega no tiene un idioma predominante (porque no se ha especificado ningún servicio de traducción en la aptitud), el idioma predominante del asistente digital se establecerá en inglés. En este caso, puede agregar aptitudes que tengan el inglés como idioma predominante (o que no tengan ningún idioma predominante establecido).
Enfoques de traducción de las aptitudes
Para desarrollar aptitudes que conversen en idiomas distintos del inglés, puede utilizar uno de estos métodos:
-
Cree aptitudes en un solo idioma distinto del inglés en las que:
- Prepare el corpus de entrenamiento en el idioma de destino de la aptitud.
Cuando se desarrollan asistentes digitales en un solo idioma distinto al inglés, estos se rellenan con aptitudes únicamente en ese idioma (si todas las aptitudes de un asistente digital determinado tienen el mismo idioma predominante).
-
Cree aptitudes multilingües en las que:
- Prepare el corpus de entrenamiento en inglés.
- Mejore el flujo de diálogo de la aptitud para gestionar la traducción de las entradas del usuario y las respuestas de la aptitud.
- Como paso opcional (aunque recomendado), puede crear grupos de recursos para uno o más idiomas para las etiquetas, peticiones de datos y mensajes de la aptitud. Esto le permite controlar el texto de las respuestas de la aptitud.
En ambos casos, Digital Assistant utiliza el servicio de traducción para traducir la entrada del usuario al idioma base. Para las respuestas, utiliza grupos de recursos (si se proporcionan en la aptitud) o el servicio de traducción para traducir la respuesta de la aptitud al idioma del usuario.
Aptitudes con un solo idioma distinto del inglés
Para desarrollar una aptitud para un idioma único distinto del inglés, siga estos pasos:
-
Si aún no lo ha hecho, agregue un servicio de traducción a la aptitud.
- Cree las expresiones para la aptitud en el idioma de destino de la aptitud (no en inglés):
- Haga clic en
para abrir el menú lateral, seleccione Desarrollo > Aptitudes y abra la aptitud.
- En la navegación izquierda de la aptitud, haga clic en
- Seleccione una intención.
- En el campo de texto Ejemplos, escriba la expresión y pulse Intro.
- Repita los dos pasos anteriores para cada intención.
- Haga clic en
-
Para cualquier entidad personalizada de la aptitud, asegúrese de que los valores estén en el idioma predominante de la aptitud.
Puede agregar y editar entidades personalizadas haciendo clic en
, en la navegación izquierda de la aptitud.
Si no proporciona valores de entidad personalizados en el idioma predominante, la aptitud no podrá procesar correctamente las entradas de usuario que contengan valores que tengan que parearse mediante una entidad personalizada.
- En la aptitud, actualice todos los mensajes de configuración y las peticiones de datos para utilizar el idioma predominante:
Para acceder a estos mensajes y peticiones de datos:
- En la navegación izquierda de la aptitud, haga clic en
.
Los mensajes y peticiones de datos se encuentran en los separadores Configuración y Asistente digital.
- En la navegación izquierda de la aptitud, haga clic en
-
No se pueden traducir los nombres de las entidades incorporadas.
-
Cuando se configura una aptitud de este modo, el marco de procesamiento de idioma detecta una entrada que no está en inglés y la traduce al inglés (el idioma del modelo de entrenamiento) en segundo plano. Después de evaluar la entrada, determina la respuesta adecuada y la traduce al idioma de destino.
Esto puede afectar a los costos de la traducción, ya que requiere más llamadas al servicio de traducción que una aptitud en la que el corpus de entrenamiento ya está en inglés.
Aptitudes multilingües con traducción automática
Puede activar la aptitud para que detecte automáticamente el idioma del usuario y se comunique con él en este idioma.
Para ello, debe actualizar el flujo de diálogo para manejar la traducción. Puesto que el motor de NLP solo reconoce el inglés, debe configurar el flujo para que:
- Detecte el idioma del usuario.
- Traduzca la entrada del usuario de manera que pueda resolverla el componente
System.Intent
.
Puede manejar la traducción de las entradas de usuario utilizando cualquiera de las siguientes estrategias:
- Inclusiva: defina individualmente la propiedad
translate
entrue
para cada componente que quiera traducir. - Exclusiva: defina la variable de contexto
autoTranslate
entrue
para que la entrada de cada componente se traduzca por defecto. Si hay algún componente que no necesite traducción, defina su propiedadtranslate
enfalse
.
Traducción inclusiva
Estos son los pasos que debe seguir si quiere especificar individualmente qué componentes traducir:
- Si aún no lo ha hecho, agregue un servicio de traducción a la aptitud.
- Asegúrese de que la variable de contexto
autoTranslate
no esté definida (o esté definida enfalse
). - Encima del estado del componente
System.Intent
, agregue el componente System.DetectLanguage:detect: component: "System.DetectLanguage" properties: useExistingProfileLanguageTag: true transitions: {}
Nota
La propiedaduseExistingProfileLanguageTag
se utiliza cuando una aptitud forma parte de un asistente digital que tiene un servicio de traducción. Esto permite a la aptitud utilizar el idioma detectado por el asistente digital inmediatamente. De lo contrario, la aptitud puede proporcionar un mensaje o una petición de datos en inglés antes de que se detecte (o se vuelva a detectar) el idioma. Si la aptitud no está en un asistente digital con la función de traducción activada, se ignora la propiedad. - En el componente System.Intent, defina la propiedad translate en
true
.intent: component: "System.Intent" properties: variable: "iResult" translate: true
- Para el resto de componentes de entrada, establezca también la propiedad translate en
true
.
Ejemplo: aptitud multilingüe con traducción automática (inclusiva)
metadata:
platformVersion: "1.0"
main: true
name: "AutoTranslatePizzaJoe"
parameters:
age: 18
context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
states:
detect:
component: "System.DetectLanguage"
properties:
useExistingProfileLanguageTag: true
transitions: {}
intent:
component: "System.Intent"
properties:
variable: "iResult"
translate: true
ShowMenu:
component: "System.CommonResponse"
properties:
processUserMessage: true
translate: true
metadata:
responseItems:
- type: "text"
text: "Hello ${profile.firstName}, this is our menu today:"
...
...
Traducción exclusiva
Estos son los pasos que debe seguir si quiere utilizar la traducción automática por defecto (y especificar individualmente los componentes que no se van a traducir) :
- Si aún no lo ha hecho, agregue un servicio de traducción a la aptitud.
- Agregue
autoTranslate: "boolean"
como variable al nodocontext
.context: variables: ... autoTranslate: "boolean"
- En el nodo
states
, encima del componenteSystem.Intent
, agregue un componenteSystem.SetVariable
. A continuación, defina la propiedadvariable
para utilizar la variable de contextoautoTranslate
y establezca la propiedadvalue
entrue
.setAutoTranslate: component: "System.SetVariable" properties: variable: "autoTranslate" value: true transitions: {}
- Para el siguiente estado, agregue el componente System.DetectLanguage:
detect: component: "System.DetectLanguage" properties: useExistingProfileLanguageTag: true transitions: {}
Nota
La propiedaduseExistingProfileLanguageTag
se utiliza cuando una aptitud forma parte de un asistente digital que tiene un servicio de traducción. Esto permite a la aptitud utilizar el idioma detectado por el asistente digital inmediatamente. De lo contrario, la aptitud puede proporcionar un mensaje o una petición de datos en inglés antes de que se detecte (o se vuelva a detectar) el idioma. Si la aptitud no está en un asistente digital con la función de traducción activada, se ignora la propiedad. - Para los componentes que no quiera traducir de forma automática, defina la propiedad translate en
false
. Por ejemplo:done: component: "System.Output" properties: text: "${rb('OnTheWay','${size.value}','${type.value}')}" translate: false transitions: return: "done"
Ejemplo: aptitud multilingüe con traducción automática (exclusiva)
metadata:
platformVersion: "1.0"
main: true
name: "AutoTranslatePizzaJoe"
parameters:
age: 18
context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
autoTranslate: "boolean"
states:
setAutoTranslate:
component: "System.SetVariable"
properties:
variable: "autoTranslate"
value: true
transitions: {}
detect:
component: "System.DetectLanguage"
properties:
useExistingProfileLanguageTag: true
transitions: {}
intent:
component: "System.Intent"
properties:
variable: "iResult"
Manipulación de las entradas antes de la traducción
Si quiere manipular el texto de entrada antes de enviarlo al servicio de traducción, puede utilizar el componente System.TranslateInput. Por ejemplo, puede que quiera procesar la entrada de usuario para eliminar datos personales antes de enviarla al servicio de traducción.
sourceString
incluye el texto que se debe traducir. (Esta entrada, por ejemplo, puede haber sido recopilada por un componente System.Text
y procesada por otro componente). Una vez que System.TranslateInput
termina su procesamiento, la traducción al inglés se almacena en la variable translatedString
.context:
variables:
autoTranslate: "boolean"
translatedString: "string"
sourceString: "string"
...
states:
...
translateInputString:
component: "System.TranslateInput"
properties:
source: "sourceString"
variable: "translatedString"
transitions: {}
Grupos de recursos para las aptitudes
Si quiere controlar la redacción de las respuestas de la aptitud (en lugar de basarse en el texto proporcionado por el servicio de traducción), utilice grupos de recursos. Puede proporcionar grupos de recursos para tantos idiomas y dialectos como sea necesario.
Creación de una clave de grupo de recursos
Para cada aptitud, puede definir claves de grupos de recursos que identifican el texto de salida que se debe traducir y, a continuación, proporcionar valores para esas claves en uno o más idiomas. Las claves se definen automáticamente para el nombre de conversación de cualquier intención que haya creado, así como para las respuestas de cualquier intención de respuesta. Sin embargo, usted debe crear claves para otro texto de salida que desee traducir, como texto del flujo de diálogo.
-
En la navegación de la izquierda de la aptitud, haga clic en
.
- Haga clic en el separador Definido por el usuario.
-
Haga clic en Agregar grupo.
Por defecto, el idioma de la primera clave es el inglés.
-
Introduzca la clave y su texto. Por ejemplo, para la petición de datos de usuario How old are you?, puede introducir HowOld en el campo Clave y, a continuación. How old are you? en el campo Texto.
-
Haga clic en Crear entrada.
-
Para agregar una versión de la cadena en un idioma extranjero, haga clic en Agregar Idioma.
-
Complete el cuadro de diálogo Crear entrada:
-
Idioma: agregue una etiqueta de idioma IETF BCP 47 como, por ejemplo,
fr
para francés ode
para alemán. -
Texto: cadena de salida. Por ejemplo, para una traducción al francés (
fr
) de la clave HowOld, debe agregar una cadena como quel âge avez-vous?Nota
También puede utilizar configuraciones regionales más específicas (comoen-US
), pero, en la mayoría de los casos, no son útiles. Por ejemplo, si está utilizando un servicio de traducción (mediante el componenteSystem.DetectLanguage
) para detectar el idioma, solo se devolverá un código de dos letras.Si la aptitud no puede parear el idioma de entrada con una etiqueta de idioma definida en el grupo, se establece por defecto en una etiqueta menos específica (si hay alguna disponible). Si ninguna de las entradas coincide con el idioma del explorador, la aptitud utiliza la entrada por defecto, inglés. Consulte Resolución de entrada de grupo de recursos para obtener más información.
-
-
Si quiere traducir otras cadenas, haga clic en Agregar clave para crear otra entrada en el grupo de recursos.
-
Haga referencia al grupo de recursos en el flujo de diálogo. Puede definir las peticiones de datos de entidades como un grupo de recursos.
Las entidades personalizadas no se pueden traducir con grupos de recursos. En su lugar, puede agregar traducciones como sinónimos en la lista de valores de las entidades personalizadas.
Traducción del nombre de conversación
En algunos puntos de una conversación, como cuando la aptitud intenta determinar qué flujo quiere seguir el usuario, la aptitud puede presentar un cuadro de diálogo que hace referencia a una o varias intenciones. En estos casos, la aptitud hace referencia a las intenciones por sus nombres de conversación, para los que se generan claves y entradas por defecto en el grupo de recursos.
Para proporcionar una traducción para un nombre de conversación:
-
Haga clic en Grupo de recursos en la barra de navegación izquierda (
).
-
Haga clic en el separador Intenciones de la página Grupos de recursos.
-
Seleccione la intención.
-
Haga clic en Agregar idioma.
-
Complete el cuadro de diálogo Crear entrada:
-
Idioma: agregue una etiqueta de idioma IETF BCP 47 como, por ejemplo,
fr
para francés,de
para alemán oen-US
para inglés estadounidense. -
Texto: cadena de salida. Por ejemplo, para una traducción al francés (
fr
) de la clave HowOld, debe agregar una cadena como quel âge avez-vous?
-
Si la intención cuyo nombre de conversación quiere cambiar no aparece en la lista, haga clic en

Traducción de las respuestas para intenciones de respuesta
Al crear una intención de respuesta, se crea automáticamente una clave de grupo de recursos para la respuesta.
Para proporcionar una traducción de una respuesta en una intención de respuesta:
-
Haga clic en Grupo de recursos en la barra de navegación izquierda (
).
-
Haga clic en el separador Preguntas y respuestas de la página Grupos de recursos.
-
Seleccione la clave para la respuesta que desea traducir.
-
Haga clic en Agregar idioma.
-
Complete el cuadro de diálogo Crear entrada:
-
Idioma: agregue una etiqueta de idioma IETF BCP 47 como, por ejemplo,
fr
para francés,de
para alemán oen-US
para inglés estadounidense. -
Texto: cadena de salida.
-
Grupos de recursos de referencia en el flujo de diálogo
Para definir la salida de un componente incorporado, haga referencia a la clave del mensaje y a la variable de contexto del grupo de recursos.
rb
, en la sección de contexto. Más abajo, las expresiones de valor definen la propiedad de texto para los componentes System.Output
y hacen referencia a la variable rb
y las claves WhatType
y OnTheWay
. La primera genera una cadena simple y la otra utiliza valores dinámicos. context:
variables:
rb: "resourcebundle"
...
pizzaType:
component: "System.Output"
properties:
text: "${rb('WhatType')}" # rb refers to the variable, WhatType is the key to the message in the resource bundle.
transitions: {}
...
done:
component: "System.Output"
properties:
text: "${rb('OnTheWay','${size.value}','${type.value}')}" # size.value and type.value are the arguments for the 'OnTheWay' message key.
transitions:
return: "done"
Para mensajes más sencillos, también puede hacer referencia a grupos de recursos utilizando la notación de puntos (${rb.WhatType}
).
Consejo:
Para probar los grupos de recursos utilizando el comprobador, configure el explorador en otro idioma.Grupos de recursos y traducción automática de aptitudes
Aunque se utilicen grupos de recursos, se sigue utilizando un servicio de traducción para que los usuarios puedan proporcionar entradas en su idioma nativo. Sin embargo, no querrá que los componentes que utilicen los grupos de recursos se traduzcan automáticamente.
Estos son los pasos generales para configurar una aptitud para usar un servicio de traducción para entradas del usuario cuando se utilizan grupos de recursos para las respuestas de la aptitud:
- Si aún no lo ha hecho, agregue un servicio de traducción a la aptitud.
- Utilice el componente
System.DetectLanguage
para determinar el idioma de la entrada del usuario. - Aplique los grupos de recursos para manejar las respuestas de la aptitud al usuario.
- En el caso de componentes que hagan referencia a grupos de recursos, asegúrese de que la traducción automática esté desactivada. Para ello, puede:
- Utilizar el método inclusivo:
- Establezca la variable de contexto
autoTranslate
enfalse
(o no la establezca). - Defina la propiedad
translate
entrue
paraSystem.Intent
,System.Text
y otros componentes de entrada.
- Establezca la variable de contexto
- Utilizar el método exclusivo:
- Establezca la variable de contexto
autoTranslate
entrue
. - Sustituya
autoTranslate
para los componentes que utilicen grupos de recursos (como los componentesSystem.Output
ySystem.CommonResponse
) estableciendo la propiedadtranslate
para esos componentes enfalse
.
Una desventaja de este método es que puede resultar más difícil observar dónde se ha configurado involuntariamente la traducción automática de un componente que debería utilizar, en su lugar, grupos de recursos.
- Establezca la variable de contexto
- Utilizar el método inclusivo:
Si la aptitud usa grupos de recursos para algunos componentes, pero se basa en la traducción automática para otros componentes, puede:
- Establezca la variable de contexto
autoTranslate
entrue
. - Defina la propiedad
translate
enfalse
para cada componente que utilice un grupo de recursos.
Ejemplo: traducción con grupos de recursos
El siguiente código de ejemplo de flujo de diálogo muestra la parte relevante del flujo de diálogo para una aptitud que acepta una entrada de usuario en un idioma distinto al inglés, la traduce al inglés para la resolución de intenciones y responde en el idioma del usuario utilizando texto de los grupos de recursos.
La variable de contexto autotranslate
no está establecida, por lo que los componentes no se traducen automáticamente por defecto. Sin embargo, la propiedad translate
está definida en true para el componente System.Intent
, de manera que la entrada de usuario se traduce automáticamente.
metadata:
platformVersion: "1.0"
main: true
name: "PizzaJoe"
parameters:
age: 18
context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
rb: "resourcebundle"
states:
# add DetectLanguage component
detect:
component: "System.DetectLanguage"
transitions: {}
intent:
component: "System.Intent"
properties:
variable: "iResult"
translate: true
transitions:
actions:
OrderPizza: "resolvesize"
CancelPizza: "cancelorder"
unresolvedIntent: "unresolved"
...
pizzaType:
component: "System.Output"
properties:
text: "${rb('WhatType')}"
transitions: {}
...
En este ejemplo:
- Se presupone que hay un servicio de traducción activado para la aptitud.
- La variable de contexto
rb
va acompañada de otra variable denominadatranslated
. - Se ha definido
System.DetectLanguage
. El valor deprofile.languageTag
se define en el código de dos letras del idioma detectado. Este valor también tiene prioridad sobre el valor deprofile.locale
. - Dado que los componentes
System.DetectLanguage
ySystem.TranslateInput
preceden al componenteSystem.Intent
, permiten que la entrada de usuario inicial se traduzca al inglés para que el componenteSystem.Intent
pueda utilizarla y se resuelva en una de las intenciones.
También puede detectar el idioma desde el cliente de mensajería a través de la variable
profile.locale
(y no utilizar el componente System.DetectLanguage
). Sin embargo, este enfoque requiere que los usuarios llamen inicialmente a la aptitud en inglés (por ejemplo, “Hello, PizzaJoe!”).
Resolución de entrada del grupo de recursos
El grupo de recursos que se aplica depende del valor almacenado para las dos variables de contexto de usuario específicas de la ubicación, profile.languageTag
y profile.locale
. Si se establecen ambas variables, profile.languageTag
tiene prioridad.
profile.languageTag
se define en el idioma de la entrada del usuario mediante el componente System.DetectLanguage
, si se dispone de dicho componente en el flujo de diálogo. El valor de profile.languageTag
tiene el formato de un código de idioma de dos caracteres (por ejemplo, en
para inglés).
El cliente de mensajería define profile.locale
. El valor de profile.locale
puede tener el formato idioma-país-variante (por ejemplo, en-AU-sydney
), idioma-país (por ejemplo, en-AU
) o idioma (por ejemplo, en
).
Para resolver el idioma que utilizar, Oracle Digital Assistant busca en primer lugar una coincidencia exacta. Si no la encuentra, amplía incrementalmente la búsqueda hasta que lo consigue. Si sigue sin encontrar ninguna coincidencia, devuelve el idioma por defecto, que es el inglés (en
).
${profile.locale}
es en-AU-sydney
(y profile.languageTag
no se ha definido), Oracle Digital Assistant realiza las siguientes acciones para buscar la mejor coincidencia de idioma:
-
Busca en el grupo los criterios de idioma-país-variante (
en-AU-sydney
). -
Si no obtiene resultados, busca en el grupo el idioma y el país (
en-AU
). -
Si tampoco así obtiene resultados, amplía su búsqueda al idioma (
en
).
Exportación e importación de grupos de recursos
Puede exportar e importar grupos de recursos como formato de archivo CSV, lo que permite trabajar con los grupos fuera de línea.
El archivo CSV debe tener las siguientes columnas:
languageTag
key
message
annotation
Para exportar un archivo CSV con el grupo de recursos existente:
-
En la página Grupo de recursos de la aptitud o el asistente digital, haga clic en
para exportar un archivo CSV con el grupo de recursos existente.
Incluso si aún no ha agregado ninguna clave al grupo de recursos, se exportará un archivo con el formato necesario del CSV.
Para importar un archivo de grupo de recursos:
- En la página Grupo de recursos de la aptitud o el asistente digital, haga clic en
.
¿Cómo se traducen las respuestas de componentes personalizados?
- Almacene un objeto de datos enviado desde un componente personalizado en una variable de contexto. A continuación, puede hacer referencia a esta variable en los componentes de la interfaz de usuario incorporada, como
System.Output
,System.Text
oSystem.CommonResponse
. - Guarde los mensajes de cadena en una variable de contexto y, a continuación, transfiera el nombre de la variable de contexto como un parámetro de entrada a los componentes del sistema, como
System.Output
,System.List
,System.CommonResponse
oSystem.TranslateOutput
. - Traduzca la salida del componente personalizado en el propio componente y, a continuación, escriba directamente la respuesta en el cliente de mensajería (evitando así los componentes del sistema por completo).
Opción 1: almacenamiento de datos en una variable de contexto
-
Guarde los datos en una variable de contexto del flujo de diálogo.
Para escribir datos de un objeto de datos en una variable de contexto, agregue el siguiente código al componente personalizado:
Para que esta línea de código en particular funcione, debe agregar una variable de contexto correspondiente a la definición del flujo de diálogo denominadaconversation.variable('dialogVar', dataObject); conversation.transition(); done();
dialogVar
, de tipostring
:dialogVar: "string"
Consejo:
Se recomienda transferir el nombre de la variable de contexto en la que el componente personalizado debería escribir como un parámetro de entrada en el componente personalizado. De esta forma, se asegura de que el parámetro de contexto existe realmente al acceder a él. -
Incluya la propiedad
translate: true
en una definición del componente de salida o utilice el componenteSystem.TranslateOutput
para traducirlo al idioma del usuario.Los componentes del sistema no pueden traducir un objeto de datos como un todo, por lo que, si necesita traducir los objetos de datos almacenados en una variable de contexto, deberá hacer referencia a la variable de contexto junto con el nombre del atributo del objeto de datos que se muestra al usuario y se traduce mediante un componente de salida. En el siguiente ejemplo, la variable de contexto esdialogVar
. El objeto de datos que se transfiere del componente personalizado a esta variable de contexto es{product: "an apple", type: "fruit", origin: "Spain" }
. Para mostrar y traducir este objeto, debe hacer referencia a un componenteSystem.Output
y activar su traducción:
Si se activa un servicio de traducción para la aptitud, este mensaje se traduce al idioma del usuario. El componente personalizado también transfiere el contenido traducido al objeto de datos.printProduct: component: "System.Output" properties: text: "The product in your cart is a ${dialogVar.value.type}. It is ${dialogVar.value.product} from ${dialogVar.value.origin}" translate: true
Opción 2: guardado de mensajes en una variable de contexto
En este enfoque, puede transferir al componente personalizado el nombre de la variable de contexto que contiene la respuesta del componente como parámetro de entrada. Así, se garantiza que los componentes personalizados no dependan de un código de implantación de OBotML específico y que se puedan seguir reutilizando.
initializeReceipt
y transfiere el nombre de la variable de contexto (receipt
), que contiene la respuesta del componente, y purchaseId
como parámetros de entrada.initializeReceipt:
component: "sample.receipt.dataresponse"
properties:
dataVariable: "receipt"
purchaseid: "${purchaseId.value}
printReceipt:
component: "System.Output"
properties:
text:"${receipt.value}"
translate: true
...
El código personalizado para acceder a estos parámetros de entrada es el siguiente:...
invoke: (conversation, done) => {
var responseVariable = conversation.properties().dataVariable;
var purchaseId = conversation.properties().purchaseId;
...
var message = queryRemoteServiceForReceipt(purchaseId);
...
conversation.variable(responseVariable, message);
conversation.transition();
done();
}
System.TranslateOutput
o definir la propiedad translate
en un componente de salida, como System.CommonResponse
o System.Output
, como se puede ver en el estado printReceipt
: si un componente personalizado devuelve un mensaje en un idioma distinto al inglés, que, por lo tanto, es necesario procesar con el motor de procesamiento de lenguaje natural (NLP), el componente System.TranslateInput
se ubicaría antes de System.Intent
en el flujo de diálogo. Esto permite al componente System.Intent
procesar la versión en inglés del mensaje.translateMessage:
component: "System.TranslateInput"
properties:
source: "variable_populated_by_custom_component"
variable: "translationStringVar"
getIntent:
component: "System.Intent"
properties:
variable: "iResult"
sourceVariable: "translationStringVar"
...
Opción 3: envío de respuestas directamente al usuario
conversation.reply
.
Las respuestas que se envían directamente a un usuario no pueden ser traducidas por un servicio de traducción. En este caso, deberá codificar las traducciones en el componente personalizado
- En el código del componente personalizado, llame a un servicio de traducción antes de enviar el mensaje. Utilice este método cuando el mensaje no se origine en el componente personalizado, sino que se haya consultado desde un backend remoto. En este caso, la traducción automática convierte las cadenas al idioma que espera la aptitud.
- Use los grupos de mensajes para proporcionar respuestas traducidas para los idiomas que quiera que admita la aptitud. Los grupos de mensajes pueden utilizar marcadores de posición en las cadenas traducidas en las que el componente personalizado inserta el valor de los datos en tiempo de ejecución. Los grupos de mensajes de los componentes personalizados son una opción viable si el componente personalizado consulta los datos de un servicio remoto.
Para detectar el idioma preferido en el componente personalizado, puede transferir la configuración regional como un parámetro de entrada al componente o acceder a las variables
profile.locale
yprofile.languageTag
, como se muestra en el siguiente ejemplo://detect user locale. If not set, define a default var locale = conversation.variable('profile.locale')? conversation.variable('profile.locale') : 'en'; //when profile languageTag is set, use it. If not, use profile.locale var languageTag = conversation.variable('profile.langageTag')? conversation.variable('profile.langageTag') : locale;