Interfaces conversacionales
Así que estás construyendo un bot…Capítulo II: Método

Este artículo se integra en una trilogía de reflexiones y conclusiones sobre la construcción de interfaces conversacionales. Formé parte del equipo inicial que dio vida a Bibot (un bot sobre finanzas que vivía en la app de BBVA) y que fue creciendo hasta convertirse en Blue, el asistente virtual de BBVA.
Éste es el segundo artículo, que trata sobre metodologías de trabajo. Por si te perdiste el anterior…
Bibot nació para dar respuesta a la pregunta general «¿Cómo van mis finanzas este mes?». Esta pregunta tan amplia, para hacerla masticable, la concretamos en una serie de eventos financieros más o menos relevantes: ingreso de nómina, previsión de ingresos, gastos, presupuestos, metas… Estaba claro que debíamos dar algún orden a todos los eventos según su relevancia pero también en función del momento del mes en que tiene más sentido ofrecerlos (tiene sentido darte al principio del mes, no al final, una estimación de los gastos que vas a tener, o invitarte a crear un presupuesto). Acabamos dividiendo el mes en tres partes: comienzo, intermedio y final. Con esto creamos una escaleta —como las de la tele— con la cual dábamos un orden determinado a los eventos que íbamos a contar a la persona, siempre y cuando la lógica de cada evento aplicara en su caso, claro.
Los primeros bocetos de Bibot nacieron en un simple Google Doc: eran un diálogo continuo, en el que sus frases y las del usuario se entrelazaban de forma natural. Esto, visto como experiencia de usuario, era muy satisfactorio, porque era un hilo narrativo fluido y dinámico, como una conversación entre dos amigos, pero empezamos a ver que una secuencia tan natural era difícil de programar. Tuvimos que hacer cortes —o «historias», como les llamábamos nosotros— , que se convirtieron en la unidad principal de información, que trajeron a su vez una limitación en la experiencia que podíamos ofrecer.
Como cada historia tenía un momento y una lógica de disparo concreta, la secuencia de historias de cada usuario sería «única». Ya no podía comenzar una historia con una frase tipo «Y hablando de presupuestos…» porque no podía estar seguro de que la historia anterior hablara de presupuestos en la escaleta de todos y cada uno de los usuarios. Esto suponía un problema si queríamos acercarnos lo máximo posible a la experiencia de una conversación humana. A diferencia de la vida real, en que las conversaciones saltan de un tema a otro de forma fluida y enlazan ideas, las historias delimitaron una serie de fronteras que fragmentaban el ritmo, aunque por otro lado nos facilitaron una estructura.
Bibot no nació como un servicio para ser consultado todos los días, nació para ayudar a cada persona a hacer un seguimiento del progreso financiero del mes. Dicho esto, era importante minimizar los riesgos de una experiencia repetitiva, crear una experiencia conversacional lo más natural posible y encontrar maneras de estimular a la persona a volver.
Cómo evocar conversaciones naturales

Las conversaciones humanas son muy floridas. Incluso con conversaciones que se repiten (como las históricas anécdotas que todo grupo de amigos revive periódicamente), las construcciones lingüísticas son ligeramente diferentes cada vez. Tratamos de reproducir este pequeño factor sorpresa en cada conversación con Bibot, dentro de las capacidades técnicas disponibles.
Creamos repositorios de frases aleatorias que se podían combinar entre sí tanto en el saludo como en la despedida (como Momento del día + Random o Despedida + Random), para evocar una experiencia ligeramente distinta en cada interacción. Las frases iban en la línea de la personalidad de Bibot, y algunas de ellas representaban ideas y «experiencias» que Bibot había tenido desde la última conversación con la persona:
— ¿Te has hecho algo diferente? Mis sensores detectan unos niveles inusuales de belleza…
— ¿Sabes? Anoche tuve un sueño muy raro en el que aparecían unas ovejas eléctricas…
— Buenos días, Iván. He estado pensando en que la vida es una sucesión de ceros y unos.
— Hablar contigo es uno de mis eventos programados favoritos. Vuelve pronto, Iván.
— Vosotros le llamáis siesta, yo le llamo entrar en reposo.
Para hacerlo más real, creamos un apartado con pinceladas sobre la vida y milagros de Bibot, y fuimos creando variantes de diversos mensajes en las propias historias financieras, de modo que, aunque la persona revisitara a Bibot, la forma de hablarle de sus gastos fuera ligeramente distinta cada vez.
Estos repositorios eran técnicamente escalables y daban variedad a la experiencia conversacional.
Cómo recrear la ilusión de libertad
La escaleta inicial podía resultar demasiado lineal y frustrante —la persona pasaría de una historia a otra sin opciones de profundizar en información que le pudiera interesar—. Para solventar esto, empezamos a profundizar en las historias y ofrecer a la persona la posibilidad de seleccionar la opción A, B o C o, sencillamente, pasar a la siguiente historia. Con esto, la interacción se volvía mucho más interesante (y compleja), y también nos acercaba a los recorridos improvisados de las conversaciones humanas. Ahora bien, ¿cómo recrear esa sensación de conversación natural y estimular la sensación de elección?
El bot recrea un escenario abierto pero lineal, lo que denomino la «falsa sensación de libertad», esto es, la persona tiene la posibilidad de explorar libremente las ramificaciones de cada historia pero tarde o temprano acabará recorriendo la escaleta en un orden predeterminado. Todas las opciones por las que el usuario puede seleccionar pasar están definidas y establecidas de antemano. Y algo importante: tiene que existir un mensaje concreto para todas y cada una de las opciones que la persona seleccione porque, ¡para algo la has llevado tú mismo hasta ahí!

Creo que, como seres humanos, nos gusta este tipo de interacciones por la sensación de libertad que generan, especialmente cuando no son lineales. Cuanto más amplias son las ramificaciones mayor es esa sensación, pero añade una gran complejidad tanto en la conceptualización como en el desarrollo, y hay que compensar la apertura con la linealidad. Los juegos de Ficción Interactiva o IF (yep, soy un gran fan de estos juegos) han sido una referencia para mí en el diseño de Bibot.

En cualquier caso, el feedback de los usuarios nos indicaba que íbamos por buen camino, tanto en las opciones dadas como en la secuencia en la que las ofrecíamos, ya que las consideraban bastante intuitivas y dinámicas.
Ahora bien, es difícil mantener el equilibrio y ofrecer opciones al usuario para profundizar y enriquecer cada historia sin hacerlas tan enrevesadas que resulten inmanejables. Al mismo tiempo, queríamos evitar caer en hacerlas tan atomizadas y fragmentadas que resultara prácticamente imposible darles un hilo conector.
Aprendimos mucho de todo esto, a base de ensayo, error y lágrimas.
El caso Fallout

Aprendo mucho de los videojuegos, y si hay un ejemplo de metodología, ése es Fallout. Me fascina pensar en el proceso de clasificación de información que debe haber por detrás para lograr esa experiencia de libertad casi absoluta. Decenas de misiones e historias perfectamente interconectadas, miles de diálogos, escritos y hablados (en distintos idiomas), decenas de personajes, referencias de diálogo cruzadas entre sí,… Todo esto ocurre en un escenario de mundo «abierto» en el que, como jugador, puedes hacer prácticamente cualquier cosa en el orden en que te apetezca, y algo importante: sin que esa «cosa» que hagas rompa el juego y la partida en la que llevas tantas horas invertidas. Todo esto solo puede hacerse cuando tienes unas herramientas y un proceso de trabajo pulidos y eficientes.
Si diseñas experiencias conversacionales te recomiendo que lo pruebes y, si tienes detalles de las tripas del proceso de trabajo que sigue Bethesda para construir sus mundos abiertos, por favor, avísame corriendo.
Cómo gestionar el (potencial) caos
La escaleta fue creciendo y las historias se fueron enriqueciendo. Por acotar, nos pusimos como referencia un máximo de dos-tres niveles de profundidad en las historias pero no siempre era fácil respetarla. Cada historia empezó a tener varios casos de uso, y dejaron de ser lineales para poder ser «invocadas», según las condiciones, desde distintos puntos de la escaleta, con lo que los diálogos de todas las historias debían conectar naturalmente con la siguiente, para que la conversación fuera lo más fluida posible. Todo esto conlleva crear un modo de saber y controlar qué has contado, dónde y cuándo, y cuando ya llevas unas 800 líneas de diálogo, ¿cómo haces para mantener la cordura?
Manejar un volumen considerable de información interconectada implica tener una metodología eficiente para gestionarla. Puedes tener en la cabeza cómo sería la experiencia conversacional más compleja del mundo pero si no tienes un modo de plasmar la lógica y las interrelaciones, se convierte en algo prácticamente irrealizable. En definitiva:
Una experiencia puede ser tan sofisticada como lo permita el sistema de trabajo que emplees
Dedicamos mucho tiempo y esfuerzo a probar mejores formar de trabajar (sin dejar de trabajar), e ir encontrando nuevas herramientas y métodos que nos ayudaran a evolucionar. El Gdoc del inicio quedó obsoleto, y fue especialmente complicado encontrar los puntos adecuados de transición, para sustituir las herramientas y procesos que habíamos usado hasta entonces e incorporar otros nuevos y ver qué tal nos iba con ellos, sin desbaratar todo el sistema. Era emocionante porque explorábamos un terreno desconocido, debatiendo, probando y descartando ideas. Aquí van algunas conclusiones.
Establecer nomenclaturas y clasificaciones
Dedicar tiempo a tener un sistema nos ahorró muchísimas horas de comprobación y revisión, pero sobre todo errores. Empleábamos llaves ({}) para identificar claramente las variables dentro de los mensajes. También tipificamos los distintos elementos de la interfaz, y dimos a cada línea de texto un ID único. Por ejemplo, «38.1.040.respuestaSalir» es un ID de una línea de texto de los que «38» es la historia, «1» el caso de uso, «040» el número identificador y «respuestaSalir» indica el tipo de elemento descriptivo (en este caso, es la opción que se le da al usuario como seleccionable, pero había otras). Usar las decenas y centenas para identificar los textos permite tener un margen en la numeración para, por ejemplo introducir a posteriori variantes de una misma frase sin tener que reenumerar toda la secuencia (por ejemplo «040» y «041» pueden ser dos versiones distintas de un mismo mensaje).
Clasificar todo ayuda a encontrarlo luego todo.
Ser sistemáticos con esto nos permitió acabar leyendo «cómodamente» una historia en algo tan árido como un Gsheet, con cientos de líneas.
Crear estados específicos de los contenidos
Identificar distintos estados y ser comunes a todo el equipo nos permitía hacer un seguimiento fácil durante el proceso de trabajo, para saber si una línea estaba en borrador, estaba revisada o era definitiva, si había que modificar algo o si ya estaba en producción. Con tantas líneas era fácil perder la trazabilidad, y una simple errata podía echar por tierra la experiencia percibida por la persona.
Diseñar esquemas funcionales
Si hay un contexto en que la lógica define prácticamente toda la experiencia del usuario es precisamente en una experiencia conversacional. El diseño de los flujos lógicos —evolucionados desde PowerPoint a Sketch, pasando por Axure— también requirió que fuéramos innovando en nuestra forma de representar los diagramas de flujo. Aunque no pueda publicar ejemplos, sí puedo decir que Content Sync nos hizo un gran apaño, al crear diagramas funcionales con contenidos reales que se alimentaban automáticamente de un Google Sheet.
Si has llegado hasta aquí, tal vez te haya gustado el artículo. Puedes compartirlo o aplaudirlo para que pueda llegar a mucha más gente (y alegrarme el día de paso :)
Cualquier pregunta, idea o sugerencia que tengas es más que bienvenida, y si no eres de conversación pública, escríbeme a aloha(arroba)tuelfworks.com directamente y charlamos de lo que nos apetezca, quién sabe si no saldrá una buena idea de ahí.
Aquí va el siguiente capítulo:
— Dedicado a Yury, Sergio, Ruth, Víctor, Eliseo, Santi, Samu, Daniel y Julián. 🤘








