Personalización del diálogo con contexto
Para personalizar la conversación, su asistente puede recopilar información del cliente y, a continuación, consultarla más adelante en la conversación.
Retención de información a través de rondas de diálogo
El diálogo no tiene estado, lo que significa que no retiene información entre una interacción con el usuario y la siguiente. Cuando añade un diálogo a un asistente y lo despliega, el asistente guarda el contexto de una llamada de mensaje y, a continuación, lo vuelve a enviar en la siguiente solicitud a lo largo de la sesión actual. La sesión actual dura mientras un usuario interactúa con el asistente más el marco de tiempo de inactividad de sesión designado. El tiempo de inactividad de sesión máximo permitido oscila entre 5 minutos y 7 días, en función del tipo de plan. Si no añade el diálogo a un asistente, es su responsabilidad como desarrollador de aplicaciones personalizadas mantener la información continua que necesita la aplicación.
La aplicación puede pasar información al diálogo, y el diálogo puede actualizar esta información y pasarla a la aplicación o un nodo posterior. El diálogo lo hace mediante variables de contexto.
Variables de contexto
Una variable de contexto es una variable que el usuario define en un nodo. Puede especificar un valor predeterminado para la misma. A continuación, otros nodos, lógica de aplicación o entrada de usuario pueden establecer o cambiar el valor de la variable de contexto.
Puede definir una condición sobre valores de variables de contexto haciendo referencia a una variable de contexto desde una condición de nodo de diálogo para determinar si se debe ejecutar un nodo. También puede hacer referencia a una variable de contexto desde condiciones de respuesta de nodo de diálogo para mostrar respuestas diferentes en función de un valor proporcionado por un servicio externo o por el usuario.
Más información:
- Cómo pasar contexto desde la aplicación
- Cómo pasar contexto de nodo a nodo
- Definición de una variable de contexto
- Tareas comunes de variables de contexto
- Supresión de una variable de contexto
- Actualización de una variable de contexto
- Cómo se procesan las variables de contexto
- Orden de operación
- Adición de variables de contexto a un nodo con ranuras
Cómo pasar contexto desde la aplicación
Para pasar información de la aplicación al diálogo, defina una variable de contexto y pase la variable de contexto al diálogo.
Por ejemplo, la aplicación puede establecer una variable de contexto $time_of_day y pasarla al diálogo que puede utilizar la información para adaptar el saludo que muestra al usuario.
En este ejemplo, el diálogo sabe que la aplicación establece la variable a uno de estos valores: morning, afternoon o evening. Puede comprobar para cada valor, y, dependiendo del valor que encuentre, devolver el saludo adecuado. Si la variable no se pasa o tiene un valor que no coincide con ninguno de los valores esperados, se muestra al usuario un saludo más genérico.
Cómo pasar contexto de nodo a nodo
El diálogo también puede añadir variables de contexto para pasar información de un nodo a otro o para actualizar los valores de las variables de contexto. A medida que el diálogo solicita y obtiene información del usuario, puede rastrear la información y hacer referencia a ella más adelante en la conversación.
Por ejemplo, en un nodo puede preguntar a los usuarios cómo se llaman y en un nodo posterior dirigirse a ellos por su nombre.
En este ejemplo, la entidad del sistema @name se utiliza para extraer el nombre del usuario de la entrada, si el usuario la proporciona. En el editor JSON, la variable de contexto de nombre de usuario se define y se establece en el valor @name. En un nodo posterior, se incluye la variable de contexto $username en la respuesta para dirigirse al usuario por su nombre.
Definición de una variable de contexto
Para definir una variable de contexto, añada el nombre de la variable al campo Variable y añada un valor predeterminado para la misma al campo Valor en la vista de edición del nodo.
-
Pulse esta opción para abrir el nodo de diálogo al que desea añadir una variable de contexto.
-
Vaya a la sección El asistente responde y pulse el icono de menú
.
-
Pulse Abrir editor de contexto.
-
Añada el par de nombre y valor de la variable a los campos Variable y Valor.
-
El
namepuede contener caracteres alfabéticos en mayúsculas y minúsculas, caracteres numéricos (0-9) y subrayados. -
El
valuepuede ser cualquier tipo JSON soportado, como, por ejemplo, una variable de serie simple, un número, una matriz JSON o un objeto JSON.
-
En la tabla siguiente se muestran algunos ejemplos de cómo definir pares de nombre y valor para distintos tipos de valores:
| Variable | Valor | Tipo de valor |
|---|---|---|
| dessert | "cake" | Serie |
| age | 18 | Número |
| toppings_array | ["onions","olives"] |
Matriz JSON |
| full_name | {"first":"John","last":"Doe"} |
Objeto JSON |
A continuación, para hacer referencia a estas variables de contexto, utilice la sintaxis $name donde nombre es el nombre de la variable de contexto que ha definido.
Por ejemplo, puede especificar la siguiente expresión como respuesta del diálogo:
The customer, $age-year-old <? $full_name.first ?>, wants a pizza with <? $toppings_array.join(' and ') ?>, and then $dessert.
La salida resultante se muestra así:
The customer, 18-year-old John, wants a pizza with onions and olives, and then cake.
También puede utilizar el editor JSON para definir variables de contexto. Tal vez prefiera utilizar el editor JSON si desea añadir una expresión compleja como valor de la variable. Consulte Variables de contexto en el editor JSON para obtener más detalles.
Tareas comunes de variables de contexto
Para almacenar toda la serie que ha proporcionado el usuario como entrada, utilice input.text:
| Variable | Valor |
|---|---|
| repeat | <?input.text?> |
Por ejemplo, la entrada de usuario puede ser, I want to order a device. Si la respuesta del nodo es, You said: $repeat, la respuesta se mostrará como, You said: I want to order a device.
Para almacenar el valor de una entidad en una variable de contexto, utilice esta sintaxis:
| Variable | Valor |
|---|---|
| place | @place |
Por ejemplo, la entrada de usuario podría ser I want to go to Paris. Si la entidad @place reconoce Paris, el asistente guarda Paris en la variable de contexto $place.
Para almacenar el valor de una serie extraída de la entrada del usuario, puede incluir una expresión SpEL que utilice el método extract para aplicar una expresión regular a la entrada del usuario. La expresión siguiente extrae
un número de la entrada del usuario y la almacena en la variable de contexto $number.
| Variable | Valor |
|---|---|
| number | <?input.text.extract('[\d]+',0)?> |
Para almacenar el valor de una entidad de patrón, añada .literal al nombre de entidad. Utilizando esta sintaxis, asegúrese de que la extensión exacta del texto de la entrada de usuario que coincide con el patrón especificado se almacena en la variable.
| Variable | Valor |
|---|---|
| correo electrónico | <? @email.literal ?> |
Por ejemplo, la entrada de usuario es Contact me at joe@example.com. Su entidad denominada @email reconoce el formato de correo electrónico name@domain.com. Al configurar la variable de contexto para
almacenar @email.literal, indica que desea almacenar la parte de la entrada que coincide con el patrón. Si omite la propiedad .literal de la expresión del valor, se devuelve el nombre del valor de la entidad que
ha especificado para el patrón en lugar del segmento de la entrada de usuario que coincide con el patrón.
Supresión de una variable de contexto
Para suprimir una variable de contexto, establezca la variable en null.
| Variable | Valor |
|---|---|
| order_form | null |
Actualización de un valor de variable de contexto
Para actualizar el valor de una variable de contexto, defina una variable de contexto con el mismo nombre que la variable de contexto anterior, pero esta vez especifique un valor distinto para la misma.
Cuando más de un nodo establece el valor de la misma variable de contexto, el valor de la variable de contexto puede cambiar en el curso de una conversación con un usuario. El valor que se aplica depende del nodo que desencadene el usuario en el transcurso de la conversación. El valor especificado para la variable de contexto en el último nodo que se procesa sobrescribe los valores que han establecido para la variable los nodos que se han procesado anteriormente.
Para obtener información sobre cómo actualizar el valor de una variable de contexto cuando el valor es un objeto JSON o un tipo de datos de matriz JSON, consulte Actualización de un valor de variable de contexto en JSON
Cómo se procesan las variables de contexto
El lugar en el que se define la variable de contexto es importante. La variable de contexto no se crea y se establece en el valor que especifique para el mismo hasta que su asistente procese la parte del nodo de diálogo donde ha definido la variable de contexto. En la mayoría de los casos, el usuario define la variable de contexto como parte de la respuesta del nodo. Cuando lo hace, se crea la variable de contexto y se le da el valor especificado cuando su asistente devuelve la respuesta del nodo.
Para un nodo con respuestas condicionales, la variable de contexto se crea y se establece cuando se cumple la condición correspondiente a una respuesta específica y se procesa la respuesta. Por ejemplo, si define una variable de contexto para la respuesta condicional #1 y el asistente procesa la respuesta #2, la variable que ha definido para la respuesta condicional #1 no se establece.
Para obtener información sobre cómo añadir variables de contexto que desea que su asistente establezca como un usuario interactúa con un nodo con ranuras, consulte Adición de variables de contexto a un nodo con ranuras.
Orden de operación
Cuando el usuario define varias variables para que se procesen juntas, el orden en el que las define no determina el orden en el que su asistente evalúa las variables. Su asistente evalúa las variables en orden aleatorio. No establezca un
valor en la primera variable de contexto y espere utilizarlo en la segunda variable porque es posible que la primera variable de contexto no se ejecute antes de la segunda. Por ejemplo, no utilice dos variables de contexto para implementar
la lógica que compruebe si la entrada de usuario contiene la palabra Yes.
| Variable | Valor |
|---|---|
| user_input | <? input.text ?> |
| contains_yes | <? $user_input.contains('Yes') ?> |
Utilice en su lugar una expresión ligeramente más compleja para evitar tener que depender de que el valor de la primera variable de la lista (user_input) se evalúe antes que la segunda variable (contains_yes).
| Variable | Valor |
|---|---|
| contains_yes | <? input.text.contains('Yes') ?> |
Adición de variables de contexto a un nodo con ranuras
Para obtener más información sobre las ranuras, consulte Obtención de información con ranuras.
Para añadir una variable de contexto que se procesa después de que se cumpla una condición de respuesta para una ranura:
- Abra el nodo con ranuras en la vista de edición.
- Pulse el icono Personalizar ranura
.
- Pulse el icono Opciones
y, a continuación, seleccione Habilitar condición.
- Pulse el icono Personalizar manejador
junto a la respuesta con la que desea asociar la variable de contexto.
- Pulse el icono Opciones
en la sección Responde del asistente y, a continuación, pulse Abrir editor de contexto.
- Añada el par de nombre y valor de la variable a los campos Variable y Valor.
Para añadir una variable de contexto que se establezca o se actualice después de que se cumpla una condición de ranura, siga los pasos siguientes:
- Abra el nodo con ranuras en la vista de edición.
- Pulse el icono Personalizar ranura
.
- Pulse el icono Opciones
y, a continuación, seleccione Habilitar condición.
- Añada el par de nombre y valor de la variable en formato JSON.
{
"time_of_day": "morning"
}
No puede utilizar el editor de contexto para definir variables de contexto que se establecen durante esta fase de evaluación de nodo de diálogo. Debe utilizar en su lugar el editor JSON. Para obtener más información sobre el uso del editor JSON, consulte Variables de contexto en el editor JSON.
Variables de contexto en el editor JSON
También puede definir una variable de contexto en el editor JSON. Utilice el editor JSON si está definiendo una variable de contexto compleja y desea poder ver la expresión SpEL completa a medida que la añade o la cambia.
El par de nombre y valor debe cumplir estos requisitos:
-
El
namepuede contener caracteres alfabéticos en mayúsculas y minúsculas, caracteres numéricos (0-9) y subrayados.Puede incluir otros caracteres en el nombre, como puntos y guiones. Sin embargo, si lo hace, debe especificar la sintaxis abreviada
$(variable-name)cada vez que haga referencia a la variable. Consulte Expresiones para acceder a objetos para obtener más información. -
El
valuepuede ser cualquier tipo JSON soportado, como, por ejemplo, una variable de serie simple, un número, una matriz JSON o un objeto JSON.
El siguiente ejemplo JSON define los valores de la serie $dessert, la matriz $toppings_array, el número $age y las variables de contexto de objeto $full_name:
{
"context": {
"dessert": "cake",
"toppings_array": [
"onions",
"olives"
],
"age": 18,
"full_name": {
"first": "Jane",
"last": "Doe"
}
},
"output":{}
}
Para definir una variable de contexto en formato JSON, siga estos pasos:
-
Pulse esta opción para abrir el nodo de diálogo al que desea añadir la variable de contexto.
Todos los valores existentes de las variables de contexto que se definen para este nodo se visualizan en un conjunto de campos de Variable y Valor correspondientes. Si no desea que se visualicen en la vista de edición del nodo, debe cerrar el editor de contexto. Puede cerrar el editor desde el mismo menú que se utiliza para abrir el editor JSON; en los siguientes pasos se describe cómo acceder al menú.
-
Pulse el icono Opciones
para la respuesta del asistente y, a continuación, pulse Abrir editor JSON.
Si el valor Varias respuestas condicionadas está habilitado para el nodo, primero debe pulsar el icono Personalizar respuesta
para la respuesta con la que desea asociar la variable de contexto.
-
Añada el bloque
"context":{}si no está presente.{ "context":{}, "output":{} } -
En el bloque de contexto, añada un par
"name"y"value"para cada variable de contexto que desee definir.{ "context":{ "name": "value" }, "output": {} }En este ejemplo, una variable denominada
new_variablese añade a un bloque de contexto que ya contiene una variable.{ "context":{ "existing_variable": "value", "new_variable":"value" } }Para hacer referencia a la variable de contexto, utilice la sintaxis
$namedonde nombre es el nombre de la variable de contexto que ha definido. Por ejemplo,$new_variable.
Más información:
- Supresión de una variable de contexto en JSON
- Actualización de un valor de variable de contexto en JSON
- Establecimiento de una variable de contexto igual que otra
Supresión de una variable de contexto en JSON
Para suprimir una variable de contexto, establezca la variable en null.
{
"context": {
"order_form": null
}
}
Si desea eliminar cualquier rastro de la variable de contexto, utilice el método JSONObject.remove(string) para suprimirla del objeto de contexto. Sin embargo, debe utilizar una variable para realizar la eliminación. Defina la nueva variable en la salida del mensaje para que no se guarde más allá de la llamada actual.
{
"output": {
"text" : {},
"deleted_variable" : "<? context.remove('order_form') ?>"
}
}
Alternativamente puede suprimir una variable de contexto en la lógica de su aplicación.
Actualización de un valor de variable de contexto en JSON
En general, si un nodo establece el valor de una variable de contexto que ya está establecido, el nuevo valor sobrescribe el valor anterior.
Actualización de un objeto JSON complejo
Los valores anteriores se sobrescribe para todos los tipos de JSON, excepto para un objeto JSON. Si la variable de contexto es un tipo complejo como un objeto JSON, se utiliza un procedimiento de fusión de JSON para actualizar la variable. La operación de fusión añade las propiedades recién definidas y sobrescribe las propiedades existentes del objeto.
En este ejemplo, se define una variable de contexto de nombre como un objeto complejo.
{
"context": {
"complex_object": {
"user_firstname" : "Paul",
"user_lastname" : "Pan",
"has_card" : false
}
}
}
Un nodo de diálogo actualiza el objeto JSON de la variable de contexto con los valores siguientes:
{
"complex_object": {
"user_firstname": "Peter",
"has_card": true
}
}
El resultado es este contexto:
{
"complex_object": {
"user_firstname": "Peter",
"user_lastname": "Pan",
"has_card": true
}
}
Actualización de matrices
Si los datos de contexto del diálogo contienen una matriz de valores, puede actualizar la matriz añadiendo valores, eliminando un valor o sustituyendo todos los valores.
Elija una de estas acciones para actualizar la matriz. En cada caso, vemos la matriz antes de la acción, la acción y la matriz después de que se aplique la acción.
-
Append: Para añadir valores al final de una matriz, utilice el método
append.Para este contexto de tiempo de ejecución del diálogo:
{ "context": { "toppings_array": ["onion", "olives"] } }Realice esta actualización:
{ "context": { "toppings_array": "<? $toppings_array.append('ketchup', 'tomatoes') ?>" } }Resultado:
{ "context": { "toppings_array": ["onion", "olives", "ketchup", "tomatoes"] } } -
Remove: Para eliminar un elemento, utilice el método
removey especifique su valor o posición en la matriz.-
Remove by value elimina un elemento de una matriz por su valor.
Para este contexto de tiempo de ejecución del diálogo:
{ "context": { "toppings_array": ["onion", "olives"] } }Realice esta actualización:
{ "context": { "toppings_array": "<? $toppings_array.removeValue('onion') ?>" } }Resultado:
{ "context": { "toppings_array": ["olives"] } } -
Remove by position: Eliminación de un elemento de la matriz por su posición de índice:
Para este contexto de tiempo de ejecución del diálogo:
{ "context": { "toppings_array": ["onion", "olives"] } }Realice esta actualización:
{ "context": { "toppings_array": "<? $toppings_array.remove(0) ?>" } }Resultado:
{ "context": { "toppings_array": ["olives"] } }
-
-
Sobrescribir: para sobrescribir los valores de una matriz, establezca la matriz en los nuevos valores:
Para este contexto de tiempo de ejecución del diálogo:
{ "context": { "toppings_array": ["onion", "olives"] } }Realice esta actualización:
{ "context": { "toppings_array": ["ketchup", "tomatoes"] } }Resultado:
{ "context": { "toppings_array": ["ketchup", "tomatoes"] } }
Establecimiento de una variable de contexto igual que otra
Cuando se establece una variable de contexto igual que otra variable de contexto, se define un puntero entre uno y otro. Posteriormente, si el valor de una de las variables cambia, el valor de la otra variable también se cambia.
Por ejemplo, si especifica una variable de contexto como se indica a continuación, cuando cambie el valor de $var1 o $var2 más adelante, también cambiará el valor del otro.
| Variable | Valor |
|---|---|
| var2 | var1 |
No establezca una variable igual que otra para capturar un valor en un punto en el tiempo. Con las matrices, si desea capturar un valor de matriz que se almacena en una variable de contexto y utilizarlo más adelante, cree una nueva variable basada en el valor actual de la variable en su lugar.
Por ejemplo, para crear una copia de los valores de una matriz en un determinado punto, añada una matriz que se llene con los valores de la matriz existente. Para ello, puede utilizar la sintaxis siguiente:
{
"context": {
"var2": "<? output.var2?:new JsonArray().append($var1) ?>"
}
}