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

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.

Muestra un nodo de bienvenida que utiliza condiciones de respuesta para comprobar el valor de la variable de contexto $time_of_day que se pasa al diálogo desde la aplicación.
Contexto de hora del día

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.

Muestra un nodo de introducción que solicita al usuario su nombre y lo almacena como una variable de contexto. El siguiente nodo hace referencia al usuario por nombre utilizando la variable de contexto $username.
Pasar contexto de un nodo a otro

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.

  1. Pulse esta opción para abrir el nodo de diálogo al que desea añadir una variable de contexto.

  2. Vaya a la sección El asistente responde y pulse el icono de menú icono de menú desbordamiento.

  3. Pulse Abrir editor de contexto.

  4. Añada el par de nombre y valor de la variable a los campos Variable y Valor.

    • El name puede contener caracteres alfabéticos en mayúsculas y minúsculas, caracteres numéricos (0-9) y subrayados.

    • El value puede 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:

Definir pares de nombre y valor
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:

Captura de entrada de usuario
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:

Captura de una mención de entidad
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.

Uso de un método String
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.

Captura de un valor de entidad de patrón
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.

Anular una variable de contexto
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.

Utilización de dos variables de contexto para comprobar un valor en la entrada de usuario
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).

Uso de una única variable de contexto
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:

  1. Abra el nodo con ranuras en la vista de edición.
  2. Pulse el icono Personalizar ranura Personalizar ranura.
  3. Pulse el icono Opciones Opciones y, a continuación, seleccione Habilitar condición.
  4. Pulse el icono Personalizar manejador Editar ranura junto a la respuesta con la que desea asociar la variable de contexto.
  5. Pulse el icono Opciones Opciones en la sección Responde del asistente y, a continuación, pulse Abrir editor de contexto.
  6. 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:

  1. Abra el nodo con ranuras en la vista de edición.
  2. Pulse el icono Personalizar ranura Personalizar ranura.
  3. Pulse el icono Opciones Opciones y, a continuación, seleccione Habilitar condición.
  4. 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 name puede 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 value puede 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:

  1. 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ú.

  2. Pulse el icono Opciones 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 Personalizar respuesta para la respuesta con la que desea asociar la variable de contexto.

  3. Añada el bloque "context":{} si no está presente.

    {
      "context":{},
      "output":{}
    }
    
  4. 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_variable se 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 $name donde 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

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 remove y 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.

Establecimiento de una variable de contexto igual que otra
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) ?>"
 }
 }