Configuración de entidades de bolsa compuestas
Las entidades de bolsa compuesta permiten escribir definiciones de flujo de diálogo mucho más cortas y compactas, ya que se pueden resolver utilizando solo un componente (resolver entidades o una respuesta común).
-
Capturar todo el texto libre, permitir cargas de archivos y recopilar la ubicación actual del usuario con los elementos STRING, ATTACHMENT y LOCATION.
-
Ejecutar el comportamiento individual de cada entidad miembro en la bolsa: puede agregar peticiones de datos específicas de un valor y mensajes de error para entidades individuales de la bolsa compuesta (que incluye entidades personalizadas, entidades del sistema y elementos STRING, ATTACHMENT y LOCATION). También puede controlar qué entidades deben coincidir (o no) con la entrada del usuario. Dado que puede crear una secuencia de petición de datos, la aptitud puede generar distintas peticiones de datos para cada intento del usuario.
-
Presente listas de selección múltiple.
-
Valide las coincidencias de valores según las reglas de validación.
-
Soporte al flujo "infeliz": los usuarios pueden corregir las entradas anteriores.
-
Ejecute transiciones temporales basadas en coincidencias: el flujo de diálogo puede salir temporalmente del componente cuando se parea una entidad, de manera que otro estado pueda realizar una función complementaria, como una llamada REST. Una vez completada la función, el flujo de diálogo vuelve al componente para que la coincidencia de valores pueda continuar. Por ejemplo:
-
Cuando un usuario carga un recibo, es necesario escanearlo para que se puedan extraer de él valores como la fecha de gasto, el importe y el tipo de gasto, que se pasarán a las restantes entidades de la bolsa. De este modo, el componente puede rellenar el resto de valores a partir del recibo, no a partir de la entrada de usuario.
-
La aptitud genera un mensaje como, por ejemplo, “Casi hemos acabado, solo quedan unas preguntas”, entre los juegos de entidades coincidentes de la bolsa.
-
La entrada de usuario debe validarse mediante una llamada REST de backend. Es posible que sea necesario efectuar la validación de inmediato, ya que determina cuál de los elementos de la bolsa debe solicitar más entradas del usuario. Otra opción es que la llamada devuelva la información que se deba compartir con el usuario, como un aviso de tipo "incumplimiento de la política".
-
-
Desambiguación de valores: puede aislar un valor de la entrada de usuario mediante peticiones de datos específicas de la entidad y propiedades de componentes. Permiten efectuar correcciones en entradas anteriores (flujo “infeliz”) y solicitar entradas de usuario para propiedades de entidad incorporadas específicas.
Creación de una entidad de bolsa compuesta
-
Haga clic en Entidades
en la barra de navegación lateral.
-
Haga clic en Agregar entidades.
-
Seleccione Bolsa compuesta como tipo de entidad.
- Introduzca el nombre y la descripción.
- Haga clic en + Manejador de eventos si desea utilizar la petición de datos y la lógica de la bolsa compuesta mediante programación mediante manejadores de eventos de entidades.
-
Haga clic en Agregar elemento de bolsa para abrir el cuadro de diálogo Agregar elemento de bolsa. Si va a agregar una entidad incorporada o una entidad personalizada existente, puede crear un nombre específico de la bolsa y agregar una descripción del rol dentro del contexto de la bolsa compuesta.
-
Puede rellenar la bolsa con entidades personalizadas, entidades incorporadas y los siguientes elementos:
-
STRING: captura el texto libre del usuario.
-
LOCATION: captura la ubicación del usuario.
-
ATTACHMENT: acepta archivos, archivos de audio, vídeos o archivos de imagen cargados por el usuario. La entidad de bolsa compuesta almacena el URL donde se aloja el anexo.
-
-
Al hacer clic en Cerrar, volverá a la página Entidades, pero antes podrá agregar otras capacidades específicas de la bolsa al elemento (o actualizarlo más tarde haciendo clic en
en la página Entidades).
-
siguientes pasos:
- Agregue mensajes de error individuales, peticiones de datos de desambiguación o peticiones de datos condicionales para los elementos de la bolsa.
Nota
Estos se sobrescribirán si agrega la entidad a una bolsa compuesta. -
Agregue la entidad a una intención. Consulte Agregar entidades a intenciones.
-
Configure el flujo de diálogo para que utilice la entidad de bolsa compuesta..
- Agregue mensajes de error individuales, peticiones de datos de desambiguación o peticiones de datos condicionales para los elementos de la bolsa.
Relleno de espacios mejorado
- Solo se actualizará el elemento que se está resolviendo actualmente. Cuando una coincidencia se aplica a más de un elemento de bolsa, el elemento de bolsa que se está resolviendo actualmente tiene prioridad sobre otros elementos. Si desactiva el relleno de espacio mejorado, todos los elementos se actualizarán con el mismo valor.
- Si el artículo de resolución actual es un artículo de bolsa STRING, no se actualizará ningún otro artículo de bolsa.
- Si una coincidencia de entidad se aplica a varios elementos de bolsa (no resueltos), se muestra un cuadro de diálogo de desambiguación, que permite al usuario elegir qué elemento se debe actualizar en lugar de actualizar todos los elementos de bolsa.
- Se ignora el conmutador Petición de datos para desambiguación de la entidad. Recomendamos implantar la desambiguación personalizada con un manejador de eventos de entidad.
El conmutador Usar relleno de espacio mejorado está activado por defecto para las aptitudes creadas con la versión 22.08 de la plataforma. Está desactivado para las aptitudes que se han actualizado a esta versión.
Agregar peticiones de datos
-
Si desea activar la petición de datos, deje el campo Petición de valor en blanco (su estado por defecto). Si se introduce
false
en el campo Petición de valor, se evita la petición de datos. Para pedir un valor condicional, agregue una expresión booleana de FreeMarker que se evalúe comotrue
(para la petición de datos) ofalse
.Consejo:
Al definir Petición de valor enfalse
, el elemento podrá resolverse como parte de otro elemento para el que se realice una petición de datos si se activa Extracción en secuencia incorrecta. -
Haga clic en Agregar petición de datos para crear la secuencia de peticiones de datos. Si necesita cambiar el orden de la secuencia, puede hacerlo moviendo los campos con gestos de arrastrar y soltar o volviendo a numerarlos. Para aleatorizar la salida de las peticiones de datos, asigne el mismo número a dos o más peticiones de datos.NotaPuede almacenar peticiones de datos en grupos de recursos (por ejemplo,
Solo se pueden agregar peticiones de datos para entidades incorporadas si se agregan a una bolsa compuesta.${rb.askCheese}
) o escribirlas como combinaciones de texto y expresiones de FreeMarker.
Actualización de valores ranurados con expresiones FreeMarker de Apache
En el campo Actualizable, introduzca una expresión FreeMarker de Apache que se evalúe en true
para permitir que se actualice el valor con espacio para un elemento de bolsa compuesta.
Activación de la extracción en secuencia incorrecta
- Siempre: la opción por defecto. Al seleccionar esta opción para un elemento, se puede asignar espacio a su valor sin ninguna petición de datos. Por ejemplo, la entidad PizzaSize se puede resolver cuando un cliente introduce Quiero una pizza grande. Esta opción también permite cambiar el valor del elemento en cualquier momento, siempre que la expresión de la propiedad Actualizable no se evalúe como
false
. Por ejemplo, cuando la bolsa compuesta solicita la entidad PizzaType, el cliente puede responder Vegría, por favor, pero que sea mediana. La aptitud puede actualizar el valor de la entidad PizzaSize con el medio sin necesidad de reiniciar la conversación, ya que Siempre se ha activado para los elementos PizzaSize y PizzaType de la bolsa.Nota
Aunque esta opción es el comportamiento por defecto, puede que no siempre sea adecuado para elementos STRING. Si se selecciona esta opción para un elemento de tipo STRING, por ejemplo, el primer mensaje de usuario sería almacenado por el elemento de tipo STRING, en lugar de parearse con la entidad prevista (que podría designarse como el primer elemento de la bolsa que se va a resolver). - Nunca: al seleccionar esta opción, el elemento solo se coloca después de que se le solicite, incluso cuando otros mensajes de usuario contienen valores válidos. Seleccione Nunca para evitar coincidencias involuntarias.
- Solo al resolver la expresión de intención: restringe el espacio de valores fuera de orden a la primera expresión de usuario que se ha resuelto en la intención asociada a la entidad de bolsa compuesta.
Regla de extracción en secuencia incorrecta | Expresión inicial del usuario | Valor asignado | Notas: |
---|---|---|---|
Siempre | Pedir pizza con atún | Atún | El espacio de valores para el elemento PizzaToppings se puede hacer coincidir siempre que el mensaje de usuario contenga el valor correcto ("¡En su lugar, setas!). Se puede colocar o actualizar en cualquier momento de la conversación sin preguntar. |
Nunca | Pedir pizza con atún | Ninguna. | El valor del artículo PizzaTopping no se puede colocar fuera de servicio ni actualizar ad hoc. Solo se puede hacer coincidir cuando se le solicite. |
Solo al resolver la expresión de intención | Pedir pizza con atún | Atún. Sin embargo, si el usuario introduce "Ordenar pizza grande", la bolsa compuesta tendría que solicitar el valor PizzaTopping. | El elemento PizzaTopping se puede colocar fuera de orden solo cuando la primera expresión de usuario que se resuelve en una intención tiene un valor coincidente. De lo contrario, se debe solicitar este valor. La bolsa compuesta no permitirá la actualización o colocación ad hoc de este artículo. |
Activación de Extraer con
- La bolsa compuesta tiene dos entidades relacionadas con la dirección: NamedAddress, una entidad de valor de lista con valores como domicilio y oficina, y DeliveryAddress, una entidad ADDRESS.
- La petición de datos de la entidad DeliveryAddress es ¿Dónde quiere que le entreguemos el pedido?
- La entidad NamedAddress no solicita una entrada (se introduce false en el campo Petición de datos de valor).
- La entidad NamedAddress se puede extraer con DeliveryAddress (se selecciona DeliveryAddress en el menú Extraer con ).
Si la bolsa compuesta solicita la entidad DeliveryAddress, puede resolver la entidad utilizando una dirección física o uno de los valores de NamedAddress ( domicilio u oficina).
Agregar reglas de validación
varName
es el nombre de la entidad de bolsa compuesta que se declara como variable en la definición del flujo de diálogo:${varName.value.itemName}
Si esta expresión se evalúa en false, la entrada de usuario no es válida.amount
de la entidad CURRENCY:${expense.value.Amount.amount > 4}
Amounts below 5 ${expense.value.Amount.currency} cannot be expensed. Enter a higher amount or type 'cancel'.
Para obtener más información sobre otras propiedades de CURRENCY (así como sobre otras propiedades de entidad incorporadas), consulte Entidades incorporadas y sus propiedades.
Configuración de un flujo de diálogo YAML para entidades de bolsa compuestas
Si la aptitud se está desarrollando en modo de diálogo YAML, estas son las acciones que debe realizar para configurar el flujo de diálogo para entidades de bolsa compuesta:
-
En el nodo
context
, declare la entidad de bolsa compuesta como una variable:... metadata: platformVersion: "1.1" main: true name: "ExpenseBot" context: variables: expense: "Expense" iResult: "nlpresult"
-
Puede utilizar
System.ResolveEntities
oSystem.CommonResponse
. Ambos componentes permiten utilizar la entidad de bolsa compuesta y cada uno de ellos tiene sus ventajas.System.ResolveEntities
es el más sencillo de los dos, ya que cuenta con un conjunto de propiedades pequeño. A diferencia del componenteSystem.ResolveEntities
,System.CommonResponse
proporciona más control sobre la interfaz de usuario que se utiliza para resolver las entidades de la bolsa. Por ejemplo, puede agregar lógica condicional para determinar las peticiones de datos y las acciones globales relacionadas con los valores.Consejo:
Debido a que los metadatos para el componenteSystem.CommonResponse
pueden volverse muy complejos cuando se utilizan entidades de bolsa compuesta, se recomienda utilizar el componenteSystem.ResolveEntities
en su lugar y utilizar manejadores de eventos de entidades para cualquier personalización de la interfaz de usuario. -
Haga referencia a la variable de contexto de la entidad de bolsa compuesta en la propiedad
variable
del componente y, a continuación, defina las propiedades restantes según sea necesario. En System.ResolveEntities y Propiedades component, se describen y se ofrecen más ejemplos.A continuación, se muestra un ejemplo del componenteSystem.ResolveEntities
:createExpense: component: "System.ResolveEntities" properties: variable: "expense" useFullEntityMatches: true nlpResultVariable: "iResult" cancelPolicy: "immediate" transitions: actions: cancel: "cancelExpense" return: "done"
Variable system.entityToResolve
system.entityToResolve
proporciona información sobre el estado actual del proceso de resolución de entidades, tal y como lo realizan los componentes Resolver entidades y Respuesta común. Normalmente, hará referencia a las propiedades de este valor de variable en los metadatos del componente de respuesta común cuando desee personalizar los mensajes. Puede utilizarla para definir la lógica del mensaje de error de una entidad, o para varias propiedades que pertenecen a los componentes Resolver entidades y Respuesta común. Agregue las siguientes propiedades para devolver el valor de la entidad actual:
userInput
prompt
promptCount
updatedEntities
outOfOrderMatches
disambiguationValues
enumValues
needShowMoreButton
rangeStartVar
nextRangeStart
prompt
, errorMessage
y reglas de validación.
Sorry,'${system.entityToResolve.value.userInput!'this'}' is not a valid pizza size.
system.entityToResolve
. Entre ellas, se encuentra un mensaje definido para la propiedad text
, que confirma una actualización realizada en un valor de entidad definido previamente mediante una directiva list
de Apache FreeMarker y la propiedad updatedEntities
. metadata:
responseItems:
- type: "text"
text: "<#list system.entityToResolve.value.updatedEntities>I have updated <#items as ent>${ent.description}<#sep> and </#items>. </#list><#list system.entityToResolve.value.outOfOrderMatches>I got <#items as ent>${ent.description}<#sep> and </#items>. </#list>"
- type: "text"
text: "${system.entityToResolve.value.prompt}"
actions:
- label: "${enumValue}"
type: "postback"
iteratorVariable: "system.entityToResolve.value.enumValues"
needShowMoreButton
, rangeStartVar
y nextRangeStart
: globalActions:
- label: "Show More"
type: "postback"
visible:
expression: "${system.entityToResolve.value.needShowMoreButton}"
payload:
action: "system.showMore"
variables:
${system.entityToResolve.value.rangeStartVar}: ${system.entityToResolve.value.nextRangeStart}
- label: "Cancel"
type: "postback"
visible:
onInvalidUserInput: true
payload:
action: "cancel"
La etiqueta Mostrar más debe incluir una propiedad system.showMore
(action: "system.showMore"
). De lo contrario, no funcionará.
Expresiones entityToResolve
Expresión | Descripción |
---|---|
${system.entityToResolve.value.resolvingField} |
Devuelve el nombre del elemento de la bolsa. |
${system.entityToResolve.value.allMatches[0].entityName} |
Devuelve el nombre de entidad al que hace referencia el elemento de la bolsa. La matriz allMatches contiene todas las entidades cuyos valores podría actualizar el mensaje del usuario.
|
${<variable>1.value[system.entityToResolve.value.resolvingField]} |
Devuelve el valor del elemento de bolsa que los usuarios introducen o seleccionan. |
${system.entityToResolve.value.userInput} |
Devuelve el texto introducido por el usuario. Puede utilizar esta expresión para registrar la entrada del usuario o mostrarla en el chat, por ejemplo, cuando un usuario introduce un valor no válido. |
${system.entityToResolve.value.outOfOrderMatches[n].entityName} |
Devuelve los nombres de las entidades extraídas en secuencia incorrecta. Junto con los valores que solicitan las entidades de resolución o los componentes de respuesta común, los usuarios pueden proporcionar valores adicionales que disparan la extracción en secuencia incorrecta del valor y la actualización de otras entidades de la bolsa compuesta. |
${system.entityToResolve.value.outOfOrderMatches[n].name} |
Devuelve el nombre del elemento de bolsa compuesta. |
${system.entityToResolve.value.outOfOrderMatches? has_content?then(…,…)} |
Devuelve el valor de una entidad cuya coincidencia se ha ejecutado en secuencia incorrecta. Debido a que es probable que no haya ninguna entidad cuya coincidencia se haya ejecutado en secuencia incorrecta, esta expresión utiliza el operador has_content .
|
Manejadores de eventos de entidades
Puede gestionar el servicio desplegado para EEH desde la página Componentes

bots-node-sdk
. Por ejemplo, el siguiente fragmento ilustra la definición de un evento validate
en un elemento de bolsa denominado ExpenseDate que evita que los usuarios introduzcan una fecha futura al presentar un informe de gastos.ExpenseDate: {
validate: async (event, context) => {
if (new Date(event.newValue.date) > new Date()) {
context.addValidationError("ExpenseDate",context.translate('ExpenseDate.text'));
return false;
}
}
La documentación de Writing Entity Event Handlers de bots-node-sdk
describe la estructura general del código del manejador de eventos, los eventos de nivel de elemento y entidad y los métodos EntityResolutionContext como addValidationError
y translate
en el fragmento anterior.
Debido a que los manejadores de eventos de entidad están escritos en JavaScript, puede utilizar una lógica avanzada que no se logra fácilmente, o incluso es factible, con las expresiones FreeMarker que puede utilizar para definir la validación, los errores y las peticiones de datos en la página de edición de elementos de bolsa y el flujo de diálogo. También son más fáciles de depurar. Dicho esto, no es necesario que seleccione manejadores de eventos de entidades en expresiones FreeMarker. Puede combinar los dos. Por ejemplo, puede utilizar expresiones FreeMarker para validaciones y peticiones de datos simples y reservar un EEH para funciones más complicadas como llamar a una API de REST cuando se hayan resuelto todos los elementos de bolsa.
Creación de controladores de eventos de entidades con el editor de códigos de controladores de eventos
Puede crear EEH utilizando el editor de códigos de gestores de eventos al que se accede desde la página de propiedades de bolsa compuesta o con el IDE que desee. Aunque el editor de códigos de manejador de eventos tiene algunas ventajas sobre una herramienta de terceros, puede que desee alternar con un IDE de terceros según el tamaño de la tarea y las bibliotecas que necesite. Para evaluar las ventajas y las desventajas, consulte ¿Qué IDE debo utilizar?
- Haga clic en + Manejador de eventos.
- Complete el cuadro de diálogo Crear manejador de eventos agregando un nombre de servicio y un nombre de manejador.
Después de crear el manejador, puede abrir el editor haciendo clic en .
El editor se rellena con el código de inicio. Su objeto handlers
contiene los objetos entity
, items
y custom
. Dentro de estos objetos, se definen los eventos de nivel de evento, que se disparan para toda la bolsa compuesta, los eventos de nivel de elemento, que controlan la resolución de los elementos de bolsa individuales y los eventos personalizados que se disparan en las acciones de devolución. Por defecto, el objeto handler
tiene un objeto entity
definido. Los objetos items
y custom
se rellenan al agregar una plantilla personalizada o de nivel de elemento.
Descripción de la ilustración eeh-default-template.png
event
: un objeto JSON de las propiedades específicas del evento.context
: referencia a la clase EntityResolutionContext, cuyos métodos (comoaddValidationError
en el siguiente fragmento) proporcionan la lógica del manejador de eventos.
items: {
Amount: {
validate: async (event, context) => {
let amount = event.newValue.amount;
if (amount < 5) {
context.addValidationError("Amount",`Amounts below 5 ${event.newValue.currency} cannot be expensed. Enter a higher amount or type 'cancel'.`);
}
}
}
Consulte la documentación Manejadores de eventos de entidades de escritura de
bots-node-sdk
para obtener más información sobre el código inicial de EEH, los eventos de nivel de entidad y elemento, EntityResolutionContext y los ejemplos de código.
Adición de Eventos
Por ejemplo, al agregar una plantilla de evento
validate
, se rellena el editor con el siguiente código:validate: async (event, context) => {
},
A continuación, puede actualizar esta plantilla con su propio código:validate: async (event, context) => {
if (event.newValue.value === 'PEPPERONI')
context.addValdiationError('Type', "Sorry, no pepperoni pizzas today!");
},
Cuando el código es válido, al hacer clic en Guardar, se despliega automáticamente y se empaqueta en un archivo TGZ. Puede supervisar el estado del despliegue y descargar el archivo TGZ para volver a utilizarlo en otras aptitudes de la página Componentes.
Consejo:
Para comprobar si hay errores de tiempo de ejecución, active Activar registro de componentes y, a continuación, revise los logs (a los que se accede haciendo clic en Diagnóstico > Ver logs) para conocer los parámetros que han llamado a los eventos.

Agregar manejadores de eventos de nivel de entidad
validate
, publishMessage
, maxPromptsReached
, resolved
, attachmentReceived
y locationReceived
.Evento | Descripción |
---|---|
validate |
Un manejador para validaciones de nivel de entidad que se llama cuando se cambia el valor de al menos uno de los elementos de bolsa. |
publishMessage |
Un manejador de reserva genérico que se llama cuando un elemento de bolsa carece de un mensaje de petición de datos o de un manejo de desambiguación. |
maxPromptsReached |
Manejador de reserva genérico que se llama cuando no se ha especificado el manejador específico del elemento para alcanzar el número máximo de peticiones de datos. |
resolved |
Esta función se llama cuando se haya resuelto la entidad de bolsa compuesta. Normalmente agregaría un evento resolved para llamar a una API de backend que termine una transacción relacionada con los valores recopilados por la entidad de bolsa compuesta. Si la llamada de API devuelve errores porque algunos de los valores recopilados por la bolsa compuesta no son válidos, puede borrar estos valores.
|
attachmentReceived |
Se llama a este manejador cuando el usuario envía un anexo. |
locationReceived |
Este manejador se llama cuando el usuario envía una ubicación. |
publishMessage
. Mediante las funciones updatedItemMessage
y outOfOrderItemsMessage
(que también se definen en la plantilla por defecto), este evento permite a la aptitud generar mensajes que confirmen que se ha actualizado un valor de elemento de bolsa resuelto anteriormente o que ha aceptado una entrada válida para un elemento de bolsa que no sea la que solicita actualmente la entidad (entrada en desorden).Este evento es opcional. Puede eliminarla, dejarla como está o agregarle una funcionalidad. Por ejemplo, puede agregar un botón Cancelar si un usuario ha superado el número máximo de peticiones de datos al intentar introducir un valor válido.
publishMessage: async (event, context) => {
updatedItemsMessage(context);
outOfOrderItemsMessage(context);
//Add Cancel button for invalid values entered by users
let message = context.getCandidateMessageList()[0];
}
…
message.addGlobalAction(context.getMessageFactory().createPostbackAction('Cancel', {action:'cancel'}));
context.addMessage(message); }
}
Agregar manejadores de nivel de elemento
shouldPrompt
, validate
, publishPromptMessage
, publishDisambiguateMessage
y MaxPromptsReached
.Evento | Descripción |
---|---|
shouldPrompt |
Solicita un elemento en función de los valores de los otros elementos de la bolsa. Este manejador tiene prioridad sobre la petición de datos configurada mediante el campo Petición de valor. |
validate |
Este manejador solo se llama cuando se define un valor para un elemento de bolsa. Si la validez del valor depende de otros elementos de bolsa, debe implantar el evento validate de nivel de entidad en su lugar.
|
publishPromptMessage |
Use esta función para reemplazar o ampliar el mensaje generado por los componentes Respuesta común y Entidades de resolución para solicitar el artículo. |
publishDisambiguateMessage |
Utilice esta función para sustituir o ampliar el mensaje de la petición de datos de desambiguación generado por los componentes Respuesta común y Entidades de resolución. |
maxPromptsReached |
Esta función se llama cuando se ha alcanzado el número máximo de peticiones de datos para este elemento, especificado por Máximo de intentos de entrada de usuario en la pantalla del elemento de bolsa compuesta. |
La adición de un evento de nivel de elemento genera el objeto items
.
Descripción de la ilustración eeh-items-block.png
Agregar eventos personalizados
Al agregar una plantilla personalizada, se agrega un objeto
custom
con el event code básico. Consulte la documentación Manejadores de eventos de entidades de escritura de bots-node-sdk
para obtener ejemplos de implantación de un evento personalizado.someCustomEvent: async (event, context) => {
}
Sustitución o eliminación de un manejador de eventos de entidad
- Seleccione una línea vacía del menú Manejador de Eventos para reactivar el botón + Manejador de Eventos.
- Abra la página Components
. Desactive Servicio activado o suprima el servicio.
Nota
No puede suprimir ni desactivar un servicio si EEH sigue asociado a la entidad de bolsa compuesta. - Si es necesario, agregue un nuevo EEH a la bolsa compuesta o, si no está optando por un nuevo EEH, puede agregar la lógica de resolución con expresiones FreeMarker.
Consejo:
La supresión de la entidad de bolsa compuesta también suprimirá el servicio desplegado para EEH.¿Qué IDE debo utilizar?
bots-node-sdk pack
, o puede utilizar el editor de códigos de manejador de eventos que proporcionamos. Cuando utilice nuestro editor, no tiene que configurar su entorno de desarrollo ni empaquetar ni desplegar su código. El código se despliega automáticamente después de guardarlo. También puede revisar el código directamente sin tener que volver a desplegarlo, algo que no puede hacer al empaquetar y desplegar un manejador creado con su propio IDE. No puede agregar paquetes de NPM adicionales mediante el editor de códigos del manejador de eventos. Necesitará otro IDE. Por ejemplo, si desea utilizar Moment.js para trabajar con fechas, debe descargar el TGZ, agregar la biblioteca con el IDE que desee y, a continuación, volver a empaquetar y desplegar el TGZ. Después de esto, puede seguir utilizando el editor de códigos del manejador de eventos.
Consejo:
El editor de códigos del manejador de eventos puede ser una mejor opción para los cambios poco importantes. Si necesita realizar cambios importantes o agregar más paquetes de NPM, puede descargar el TGZ desde la página Componentes, descomprimirlo y, a continuación, utilizar su editor favorito para modificar el código antes de volver a empaquetarlo y desplegarlo.Simplificar flujos de diálogo con manejadores de eventos de entidades
Los gestores de eventos de entidad pueden simplificar la definición del flujo de diálogo porque se utilizan con las mejores prácticas de abreviado de diálogo que son entidades de bolsa compuesta. Cuando se trata de servicios de backend, hacen que su definición de flujo de diálogo sea menos complicada porque no es necesario escribir un estado independiente para el componente personalizado que los llama.
metadata
del componente de respuesta común. En su lugar, puede agregar el carrousel mediante código simple, lo que significa que también puede agregar respuestas de tarjeta al componente Resolución de Entidades. Por ejemplo, este código permite que el componente Resolución de Entidades muestre un carrusel con desplazamiento horizontal de tarjetas para el tipo de pizza, con una tarjeta con un botón de cancelación:Type: {
publishPromptMessage: async (event, context) => {
let candidateMessage = context.getCandidateMessageList()[0];
const mf = context.getMessageFactory();
const message = mf.createCardMessage()
.setLayout(horizontal)
.setCards(context.getEnumValues().map(p => {
mf.createCard(p.value)
.setDescription(pizzaInfo[p.value].description)
.setImageUrl(pizzaInfo[p.value].image)
.addAction(mf.createPostbackAction('Order',{variables: {pizza: p.value}}));
})
.setGlobalActions(candidateMessage.getGlobalActions());
context.addMessage(message);
}
Tutoriales del manejador de eventos de entidades
Realice este tutorial para familiarizarse con los manejadores de eventos de entidades mediante la creación de uno con el editor. A continuación, consulte este tutorial avanzado para crear un manejador de eventos de entidades con un IDE externo y bots-node-sdk
.
Desambiguar elementos y subtipos de bolsas anidadas
startTime
y endTime
para un subtipo INTERVAL, presenta a los usuarios el valor definido para la propiedad Etiqueta para aclarar la entrada solicitada. Consejo:
Al igual que con todas las cadenas, se recomienda definir el valor Etiqueta como un grupo de recursos.Agregar la entidad DATE_TIME a una bolsa compuesta
Aunque puede utilizar la fecha, la hora y la duración como entidades independientes, le recomendamos que las utilice en entidades de bolsa compuesta.
- Antes de crear un elemento de bolsa DATE_TIME, configure las reglas de resolución de ambigüedad de fecha y hora adecuadas para su caso de uso. Por ejemplo, si está creando una aptitud de generación de informes de gastos, seleccione Pasado. Si la aptitud es un programador de reuniones, seleccione Futuro.
- En la entidad de bolsa compuesta, haga clic en Agregar elemento.
- Seleccione Entidad en el menú Tipo.
- Seleccione DATE_TIME en el menú Nombre de entidad.
- Seleccione un subtipo DATE_TIME en el menú Subtype.
Las opciones de configuración de la página Agregar Elemento de Bolsa cambian según el subtipo que seleccione. Por ejemplo, si selecciona el subtipo Recurrente, puede acceder a las opciones de configuración para los elementos de bolsa anidada que son específicos para definir un evento repetitivo, como el objeto Fecha y hora para la fecha y hora de inicio inicial y el objeto Duración para definir la frecuencia del evento. - Si ha seleccionado los subtipos Recurrente o Intervalo:
- Defina los valores de subtipo que solicita la bolsa compuesta en el menú Petición de datos para.
- Puesto que las reuniones suelen empezar y terminar el mismo día, active Fecha de finalización por defecto a fecha de inicio para el subtipo
startDate
. Esto establece la fecha final como igual a la fecha inicial cuando el mensaje del usuario no menciona la fecha final (o cuando la fecha final no se extrae en orden).
- De manera opcional, agregue una etiqueta de desambiguación si la entrada de usuario puede coincidir con más de un subtipo.
Consejo:
También puede configurar las propiedades que no son específicas de DATE_TIME, como relleno de ranuras mejorado, actualización de valores de ranuras con Apache FreeMarker, peticiones de datos personalizadas y mensajes de error. - Puede acceder a la configuración de nivel de subtipo haciendo clic en un subtipo. Use el recorrido para volver a la configuración de nivel de artículo.
- siguientes pasos:
- Asocie la entidad de bolsa compuesta a la intención.
- Declare una variable para la entidad en el flujo de diálogo.
- En el flujo de diálogo, haga referencia a la entidad de bolsa compuesta con el elemento DATE_TIME mediante el estado Resolver bolsa compuesta.
- Los valores DATE_TIME se representan como ISO 8601. Para una salida fácil de usar, utilice Apache FreeMarker
.xs
incorporado. En el siguiente fragmento, el valor del subtipo Time se formatea con.value?time.xs?string['hh:mm a']
.
En lugar de hacer referencia al elemento DATE_TIME como una cadena, puede seguir el enfoque de mejores prácticas para hacer referencia a él en un grupo de recursos, comoYour pizza will be delivered at ${pizza.value.deliveryTime.value?time.xs?string['hh:mm a']}.
DeliveryMessage
en el siguiente ejemplo.
Para el mensaje de grupo de recursos${rb('DeliveryMessage','time',pizza.value.deliveryTime.value?time.xs?string['hh:mm a'])}
DeliveryMessage
, el valor se representa mediante el parámetro{time}
:Your pizza will be delivered at {time}.
Tutorial: Extracción de entidades en un entorno real con entidades de bolsa compuesta
Para acceder a una experiencia práctica centrada en la creación de una bolsa compuesta, consulte este tutorial: Activación de extracción de entidades en un entorno real con entidades de bolsa compuesta.