Memoria

Si bien las variables son extremadamente útiles para almacenar datos puntuales, como el nombre de una ciudad o el color favorito del usuario, con frecuencia necesitaremos almacenar datos más complejos que, además, necesitaremos relacionar entre sí. Para almacenar información de este tipo y trabajar con ella, el bot dispone de una memoria que consiste en un archivo XML en el que cada elemento es un recuerdo.

Para crear y recuperar recuerdos, es imprescindible recurrir el lenguaje de script del bot. Sin embargo, no te preocupes si no tienes experiencia en programación. Este lenguaje se ha simplificado para que sea intuitivo y sencillo, pero sin sacrificar su potencia. Veamos la siguiente regla.

<rule>
     <input>he gastado <wildcard name="$importe$"> en <wildcard name="$artículo$"></input>
     <output script="recentMemoryCreate(purchase);recentMemorySetAttribute(amout,$importe$);
       recentMemorySetAttribute(item,$artículo$)">Muy bien, lo anotaré.</output>
</rule>
Según esta regla, si el usuario escribe He gastado 10 € en un macetero, el bot creará un elemento del tipo purchase, con dos atributos: el atributo amount con el valor 10 € y el atributo item con el valor un macetero. Es decir, se habrá creado el siguiente recuerdo:

<purchase amount="10 €" item="un macetero" timeStamp="2015-06-09 16_27_33" />

De esta manera tan sencilla, hemos creado un sistema para anotar los gastos del usuario que nos permitirá crear gráficos, recordatorios, resúmenes de manera relativamente fácil. Este método es muy flexible. En el ejemplo lo hemos aplicado a la contabilidad doméstica, pero puede utilizarse para cualquier otra cosa: objetos, libros, películas, torneos, etc. ¡Cualquier cosa que el usuario diga y que merezca la pena recordar!

Si has observado atentamente el ejemplo anterior, tal vez te hayas dado cuenta de que el recuerdo creado incluía un atributo aparte de los que habíamos creado con el script: el atributo timeStamp. Este atributo se añade por defecto cada vez que se crea un elemento y contiene la fecha y la hora en la que se creó el elemento, por lo que no solo es útil para anotar cuándo se creó el recuerdo, sino que también puede servir como identificador único del recuerdo.

Memoria reciente

Una vez que hemos comenzado a llenar la memoria del bot con recuerdos, podemos comenzar a hacer cosas con ellos. Pero, ¿cómo especificar cuáles son los que nos interesan en un momento dado y cuáles no? Para ello, se utiliza la memoria reciente que simula en cierta manera el comportamiento de la memoria reciente del ser humano.

La memoria reciente no es más que un subconjunto de recuerdos de la memoria del bot agrupados por un cierto criterio. Hay dos maneras básicas de elegir los recuerdos que contendrá esta memoria reciente:

  • Creando un recuerdo: al crear un recuerdo con la instrucción recentMemoryCreate(tipoElemento), la memoria reciente se vacía y pasa a contener solo el recuerdo que hemos creado.
  • Recuperando un conjunto de recuerdos de la memoria: podemos utilizar las instrucciones recentMemoryGetByText(texto) y recentMemoryGetByItem(tipoElemento) para obtener un conjunto genérico de recuerdos y, a continuación, emplear cualquiera de las funciones de filtrado disponibles para seleccionar solo los que nos interesan.
Las modificaciones que hagamos en la memoria reciente se guardarán en la memoria general. Es decir, si recuperamos un recuerdo y le añadimos un nuevo atributo, también el recuerdo de la memoria general tendrá ese nuevo atributo.

Tipos predeterminados de recuerdos

La memoria del bot es totalmente flexible. Podemos crear recuerdos de todos los tipos que se nos ocurran. No obstante, para facilitar las funciones más habituales, el bot incluye varios tipos predeterminados de recuerdos, a los que le aplica un tratamiento especial a la hora de mostrarlos, con objeto que tener una base sobre la que construir nuestro bot. Sin embargo, no estamos obligados a utilizarlos, si lo deseamos podemos crear recuerdos del tipo que deseemos.

A continuación, podemos ver una explicación de estos tipos predeterminados y su uso:

  • variable: nombre de una variable y el valor que se le ha asignado.
  • list: lista de elementos.
  • event: fechas en la que se debe mostrar un recordatorio.
  • life: actividad que ha realizado el usuario en una fecha concreta.
  • purchase: compra que ha realizado el usuario en una fecha concreta.
  • item: objeto que forma parte de un inventario.
  • trigger: momento en el que se disparará una alarma.
  • unstructured: recuerdo sin estructura.
variable
Este recuerdo tiene los siguientes atributos:
  • name: nombre de la variable.
  • value: valor de la variable.
Volver arriba
list
Este recuerdo solo tiene el atributo name, que indica el nombre del elemento. Puede contener tantos elementos item como se desee, cada uno de los cuales contiene solo el elemento name, que especifica el nombre del elemento.
Volver arriba
event
Este recuerdo tiene los siguientes atributos:
  • date: fecha del evento del que se desea mostrar un recordatorio. Si el evento no tiene ningún año asociado (como por ejemplo, en el caso de los santos), se puede utilizar un asterisco para indicar que el evento se repite todos los años.
  • name: descripción del evento.
  • recurring: los eventos que tienen una fecha asociada, pero se repiten todos los años, deben tener el valor «yes» en este atributo para indicar que se repita todos los años.
  • advance: antelación con la que se mostrará el recordatorio al darle la bienvenida al usuario. Por ejemplo, si este atributo tiene el valor «3», se recordará el evento con 3 días de antelación. Si no se indica ningún valor, los recordatorios comenzarán a mostrarse con 14 días de antelación. Este atributo no afecta a la consulta de eventos por cualquier otro medio.
Volver arriba
life
Este recuerdo solo tiene el atributo activity, que indica la actividad que ha realizado el usuario. Ofrece una manera útil de recordar lo que ha hecho el usuario en una fecha concreta. Por ejemplo, se puede guardar si hay ido al cine, ha comenzado a leer un libro o ha tenido una reunión.
Volver arriba
purchase
Este recuerdo tiene los siguientes atributos:
  • item: categoría genérica en la que se inscribe el gasto. Por ejemplo, si hemos hecho una compra en el supermercado, podemos clasificarlo como comida, si hemos comprado un libro, podemos incluirlo como ocio, etc.
  • detail: descripción detallada del gasto. Continuando con el ejemplo anterior, en el caso del supermercado tal vez nos interese indicar el nombre del supermercado donde hemos hecho la compra y respecto al libro tal vez queramos recordar el título del libro y la librería donde lo hemos comprado.
  • amount: importe del gasto. Se almacena siempre utilizando el punto como separador decimal.
Volver arriba
item
Este recuerdo tiene los siguientes atributos:
  • name: nombre del objeto.
  • location: ubicación del objeto.
Volver arriba
trigger
Este recuerdo tiene los siguientes atributos:
  • type: tipo de la alarma. Actualmente solo se admite el tipo checkDate, que dispara la alarma en un momento concreto.
  • date: si se trata de una alarma checkDate, fecha y hora en la que se disparará la alarma.
  • name: mensaje que se mostrará cuando se dispare la alarma.
Volver arriba
unstructured
Este recuerdo se crea por defecto cada vez que el usuario introduce un texto, a menos que utilicemos la instrucción forget(), para que el bot no lo recuerda. Ofrece una manera cómoda de realizar un seguimiento de las respuestas del bot que no nos resultan satisfactorias, a fin de crear nuevas reglas que atiendan a ellas. También permiten almacenar datos interesantes que en otro caso se perderían.
Volver arriba


Solicitamos su permiso para obtener datos estadísticos de su navegación en esta web, en cumplimiento del Real Decreto-ley 13/2012.
Si continúa navegando consideramos que acepta el uso de cookies. Aceptar | Más información