scieee AI-readable full text Open interactive document viewer

Análisis de necesidades, diseño y desarrollo de un chatbot para la Universidad de Sevilla

Olmedo Carpio, Arturo

Abstract

En la actualidad el uso de tecnologías en la vida cotidiana cada vez está más extendido y se usan en múltiples aplicaciones de diferente tipo. Por este motivo los chatbots se han convertido en una herramienta muy utilizada para proporcionar ayuda a los usuarios de todo tipo de aplicaciones y servicios. Estos agentes virtuales ofrecen respuestas e información a las consultas de las diferentes personas de manera automática, proporcionando soporte en cualquier momento y reduciendo los recursos que una corporación o institución educativa necesita en su servicio de atención al cliente. Estos se usan en diversos ámbitos como las compras online, reservar una habitación de hotel, un vuelo, proceso de matriculación en la Universidad, etc. En este proyecto se explica el funcionamiento de los chatbots y su avance a lo largo de los años para introducir al lector en esta nueva forma de inteligencia artificial, para después estudiar las funciones que pueden realizar y crear un ejemplo real de asistente virtual. Para ello se estudiarán las diferentes plataformas para el desarrollo del bot, repasando los pros y contras de cada una de ellas, para elegir la más conveniente según las necesidades del proyecto. Una vez desarrollado el bot habrá una primera fase de puesta en preproducción para que diferentes usuarios lo utilicen realizando pruebas, análisis de resultados, corrección de errores, con el fin de mejorar la base de conocimientos de la herramienta siguiendo un proceso mejora continua de Deming. En nuestro caso, se desarrolla un chatbot para el Área de Atención y Orientación del Estudiante de la Universidad de Sevilla con el fin de reducir los recursos necesarios para atender todas las dudas de los estudiantes y mejorar la experiencia de estos a la hora de realizar cualquier consulta. Ahora mismo con el COVID-19 reducir el contacto es primordial y gracias a implementar un asistente virtual se reducirán las personas que acuden presencialmente a la Universidad sin perder calidad en la atención ofrecida a los estudiantes.

Full text

GRADO EN INGENIERÍA ELECTRÓNICA TRABAJO FINAL DE GRADO Análisis de Necesidades, Diseño y Desarrollo de un Chatbot para la Universidad de Sevilla Autor: Arturo Olmedo Carpio Tutor: Antonio Martín Montes Curso 2020 - 2021 Resumen En la actualidad el uso de tecnologías en la vida cotidiana cada vez está más extendido y se usan en múltiples aplicaciones de diferente tipo. Por este motivo los chatbots se han convertido en una herramienta muy utilizada para proporcionar ayuda a los usuarios de todo tipo de aplicaciones y servicios. Estos agentes virtuales ofrecen respuestas e información a las consultas de las diferentes personas de manera automática, proporcionando soporte en cualquier momento y reduciendo los recursos que una corporación o institución educativa necesita en su servicio de atención al cliente. Estos se usan en diversos ámbitos como las compras online, reservar una habitación de hotel, un vuelo, proceso de matriculación en la Universidad, etc. En este proyecto se explica el funcionamiento de los chatbots y su avance a lo largo de los años para introducir al lector en esta nueva forma de inteligencia artificial, para después estudiar las funciones que pueden realizar y crear un ejemplo real de asistente virtual. Para ello se estudiarán las diferentes plataformas para el desarrollo del bot, repasando los pros y contras de cada una de ellas, para elegir la más conveniente según las necesidades del proyecto. Una vez desarrollado el bot habrá una primera fase de puesta en preproducción para que diferentes usuarios lo utilicen realizando pruebas, análisis de resultados, corrección de errores, con el fin de mejorar la base de conocimientos de la herramienta siguiendo un proceso mejora continua de Deming. En nuestro caso, se desarrolla un chatbot para el Área de Atención y Orientación del Estudiante de la Universidad de Sevilla con el fin de reducir los recursos necesarios para atender todas las dudas de los estudiantes y mejorar la experiencia de estos a la hora de realizar cualquier consulta. Ahora mismo con el COVID-19 reducir el contacto es primordial y gracias a implementar un asistente virtual se reducirán las personas que acuden presencialmente a la Universidad sin perder calidad en la atención ofrecida a los estudiantes. Contenido 1. INTRODUCCIÓN Y OBJETIVOS ..................................................................................... 11 1.1 Introducción ............................................................................................................. 11 1.2 Objetivos .................................................................................................................. 11 1.3 Estructura ................................................................................................................. 12 2. ESTADO DEL ARTE.......................................................................................................... 13 2.1.1 Inicios .................................................................................................................... 13 2.1.2 Estado Actual de chatbots a nivel mundial .......................................................... 14 2.1.2 Chatbots en entornos universitarios ...................................................................... 15 2.2. Tecnología de estandarización ................................................................................ 16 2.3. Comparativa de plataformas.................................................................................... 17 3.PERSPECTIVA Y FUNCIONES DEL PRODUCTO ......................................................... 23 3.1 Descripción general .................................................................................................. 24 3.2 Requisitos ................................................................................................................. 25 3.3 Metodología ............................................................................................................. 26 3.4 Planificación y costes ............................................................................................... 26 3.4.1 Planificación .................................................................................................26 3.4.2 Recursos necesarios ......................................................................................29 3.4.3 Costes ...........................................................................................................30 3.4.4 Análisis de riesgo .........................................................................................30 4. DISEÑO DE LA ARQUITECTURA DEL CHATBOT ..................................................... 32 4.1. Entornos de trabajo.................................................................................................. 32 4.1.2 Chatfuel ........................................................................................................32 4.1.2 Bases de datos...............................................................................................42 4.1.3 Visual Code Studio .......................................................................................45 5. DETALLES DE LA IMPLEMETANCIÓN........................................................................ 46 5.1 Procedimientos asociados ........................................................................................ 46 6. DESARROLLO Y DISEÑO................................................................................................ 47 6.1 Chatbot ..................................................................................................................... 47 6.1.1 Bloques y secuencias ....................................................................................47 6.1.2 Inteligencia artificial.....................................................................................61 6.1.3 Roles de usuario ...........................................................................................62 6.1.4 Acceso al chatbot..........................................................................................62 6.2 Páginas web .............................................................................................................. 63 6.3 Base de datos ............................................................................................................ 91 7. PRUEBAS Y ANÁLISIS DE RESULTADOS ................................................................... 96 7.1 Pruebas del servidor de producción ......................................................................... 96 7.2 Respaldo de información y políticas de seguridad................................................. 103 7.2.1 Recopilación de información......................................................................103 7.2.2 Uso de datos personales..............................................................................103 7.2.3 Divulgación de datos personales ................................................................104 7.2.4 Gestión del cambio .....................................................................................104 8. FUTURAS AMPLIACIONES Y MEJORAS ................................................................... 105 8.1 Mejoras ................................................................................................................... 105 8.2 Conclusiones .......................................................................................................... 105 Bibliografía ............................................................................................................................ 107 Índice de figuras Figura 1: El primer chatbot “ELIZA”.................................................................................... 13 Figura 2: Conversación entre un humano y “ALICE” .......................................................... 14 Figura 3: Gráfica del tamaño del mercado de los chatbots en Norte América. .................... 15 Figura 4: Gráfica de la cuota de mercado de los chatbots a nivel mundial. ......................... 15 Figura 5: Elementos básicos de un intent en Dialogflow. ...................................................... 18 Figura 6: Flujo de conversación en Chatfuel ......................................................................... 20 Figura 7: Página de IA del agente virtual de Chatfuel. ......................................................... 20 Figura 8: Código escrito en lenguaje AIML........................................................................... 21 Figura 9: Nodos de dialogo en Watson Conversation de IBM............................................... 22 Figura 10: Diagrama Gantt de las fases del proyecto ........................................................... 29 Figura 11: Página de inicio de Chatfuel para crear un chatbot. ........................................... 32 Figura 12: Apartado “Grow” de Chatfuel. ............................. ¡Error! Marcador no definido. Figura 13: Sección Flows de Chatfuel. .................................................................................. 34 Figura 14: Menú persistente de Chatfuel. .............................................................................. 35 Figura 15: “Welcome Message” de Chatfuel. ....................................................................... 36 Figura 16: Tipos de contenido y acciones de los bloques de Chatfuel. ................................. 36 Figura 17: Ejemplo de galería de Chatfuel ............................................................................ 37 Figura 18: Ejemplo de respuestas rápidas de Chatfuel ......................................................... 37 Figura 19: Ejemplo de guardar datos del usuario en Chatfuel.............................................. 38 Figura 20: Ejemplo de asignar atributos de usuario en Chatfuel .......................................... 38 Figura 21: Inteligencia artificial de Chatfuel. ....................................................................... 40 Figura 22: Chat en vivo de Chatfuel. ..................................................................................... 40 Figura 23: Apartado para agrupar usuarios de Chatfuel. ..................................................... 41 Figura 24: Graficas de análisis de usuarios de Chatfuel ....................................................... 42 Figura 25: Ejemplo de conexión con base de datos de MySQL Workbench. ......................... 43 Figura 26: Ejemplo de crear tablas en MySQL Workbench. ................................................. 44 Figura 27: Ejemplo de datos de una tabla en MySQL Workbench. ....................................... 44 Figura 28: Ejemplo de código en Visual Code Studio. .......................................................... 45 Figura 29: Estructura básica de un chatbot ........................................................................... 46 Figura 30: Redireccionando saludo en función de la hora. ................................................... 50 Figura 31: Ejemplo de saludo del bot. ................................................................................... 50 Figura 32.: Suscripción a secuencia de menú. ....................................................................... 51 Figura 33: Ultimo bloque de la secuencia “Default Answer”. .............................................. 51 Figura 34: Menú principal del chatbot. ................................................................................. 52 Figura 35: Preguntas para guardar los datos de contacto del usuario. ................................ 53 Figura 36: Conexión con página web mediante el método POST.......................................... 53 Figura 37: Correo de notificación al usuario. ....................................................................... 54 Figura 38: Redirección a otro bloque según atributo “time24h”.......................................... 54 Figura 39: Diagrama de flujo de conversación de bloques de chat en vivo. ......................... 55 Figura 40: Bloque de videos. .................................................................................................. 56 Figura 41: Opciones del bloque “Todos videos vistos”......................................................... 57 Figura 42: Bloque “Elegir música 1”. ................................................................................... 57 Figura 43: Bloque ”Elegir música 2”. ................................................................................... 58 Figura 44: Suscripción a la secuencia “opinión”.................................................................. 59 Figura 45: Formulario para obtener la opinión del usuario. ................................................ 59 Figura 46: Creación de motor de búsqueda de Google. ........................................................ 60 Figura 47: Buscador de Chatfuel. .......................................................................................... 60 Figura 48: Inicio de sesión en página web de tutorías. ......................................................... 61 Figura 49: Frases de entrenamiento para los saludos. .......................................................... 61 Figura 50: Frases de entrenamiento para bibliotecas abiertas los fines de semana. ............ 61 Figura 51: Frases de entrena miento para música. ............................................................... 62 Figura 52: Datos de conexión con la base de datos............................................................... 63 Figura 53: Código para recibir datos mediante método POST. ............................................ 63 Figura 54: Enviar datos mediante método POST en Chatfuel. .............................................. 64 Figura 55: Cambio de idioma del atributo genero................................................................. 64 Figura 56: Eliminar fecha del atributo dateFormatted.......................................................... 64 Figura 57: Eliminar zona horaria del atributo “dateFormatted”. ........................................ 65 Figura 58: Separar abreviaturas del atributo “locale”. ........................................................ 65 Figura 59: Asignar nombre completo a la variable país según su abreviatura..................... 65 Figura 60: Conexión con base de datos. ................................................................................ 65 Figura 61: Crear comando para introducir datos en tabla de la base de datos MySQL....... 66 Figura 62: Realizar conexión y notificar al chat mediante JSON.......................................... 66 Figura 63: Comando para consultar datos de una tabla de la base de datos........................ 67 Figura 64: Crear variable para enviar las consultas mediante el chat. ................................ 67 Figura 65: Crear mensaje en caso de no haber consultas en la base datos. ......................... 67 Figura 66: Ejemplo de etiqueta en HTML.............................................................................. 68 Figura 67: Ejemplo de atributo en HTML.............................................................................. 68 Figura 68: Metadatos de visualización de la página web. ..................................................... 72 Figura 69: Título de la pestaña del navegador. ..................................................................... 72 Figura 70: Utilizar estilos mediante archivos CSS. ............................................................... 72 Figura 71: Activar extensiones SDK de Facebook Messenger. ............................................. 72 Figura 72: Atributos básicos del formulario. ......................................................................... 72 Figura 73: Cuadros de texto del formulario........................................................................... 73 Figura 74: Menú desplegable del formulario......................................................................... 73 Figura 75: “Checkbox” del formulario.................................................................................. 74 Figura 76: Enviar datos ocultos mediante el formulario. ...................................................... 74 Figura 77: Recibir datos del formulario mediante el método POST...................................... 74 Figura 78: Crear primera parte del url para enviar datos a Chatfuel. ................................. 75 Figura 79: Crear segunda parte del url para enviar datos a Chatfuel. ................................. 75 Figura 80: Comandos “curl” para configurar y realizar la conexión con la página web. ... 76 Figura 81: Código CSS creando la presentación del menú desplegable del formulario. ...... 80 Figura 82: Principio del código del formulario de registro................................................... 81 Figura 83: Código que incluye los archivos JavaScript. ....................................................... 81 Figura 84: Menú de la interfaz del rol de administrador....................................................... 81 Figura 85 : Sección de administradores del rol administrador. ............................................. 82 Figura 86 : Código para crear la tabla de la sección de administradores............................. 82 Figura 87: Sección de estudiante del rol de administrador. .................................................. 82 Figura 88: Código para la crear la tabla de la sección de estudiantes ................................. 83 Figura 89: Sección de tutorías del rol de administrador. ...................................................... 83 Figura 90: Página para mover reservas de tutorías .............................................................. 83 Figura 91: Menú de la interfaz del rol de estudiante. ............................................................ 84 Figura 92: Código para crear lista con tutorías disponibles. ................................................ 85 Figura 93: Lista con tutorías reservadas por el alumno. ....................................................... 85 Figura 94: Página de tutorías del rol de profesor. ................................................................ 86 Figura 95: Código para generar la lista de las tutorías ........................................................ 86 Figura 96: Código en JavaScript para enviar datos a archivos PHP. .................................. 88 Figura 97: Código en PHP para generar el botón que activa la función en JavaScript. ...... 88 Figura 98: Código con la conexión a la base de datos. ......................................................... 90 Figura 99: Código que recibe los datos del archivo JavaScript. ........................................... 90 Figura 100: Código que realiza la consulta a la base de datos. ............................................ 91 Figura 101: Chat para prueba del bot con usuario 1 ............................................................ 96 Figura 102: Chat para prueba del bot con usuario 1 ............................................................ 97 Figura 103: Chat para prueba del bot con usuario 1 ............................................................ 97 Figura 104: Chat para prueba del bot con el usuario 2......................................................... 98 Figura 105:Chat para prueba del bot con el usuario 2.......................................................... 99 Figura 106:Chat para prueba del bot con el usuario 2.......................................................... 99 Figura 107:Chat para prueba del bot con el usuario 2........................................................ 100 Figura 108:Chat para prueba del bot con el usuario 2........................................................ 100 Figura 109:Chat para prueba del bot con el usuario 3........................................................ 101 Figura 110:Chat para prueba del bot con el usuario 3........................................................ 102 Figura 111:Chat para prueba del bot con el usuario 4........................................................ 102 Figura 112: Chat para prueba del bot con el usuario 4....................................................... 103 Figura 113:Tareas asociadas a la gestión del cambio......................................................... 104 Índice de tablas Tabla 1: Ventajas y desventajas de las diferentes plataformas para el desarrollo de chatbots .................................................................................................................................................. 22 Tabla 2: Requisitos del chatbot del proyecto. ......................................................................... 25 Tabla 3: Lista de fases y subtareas del proyecto. .................................................................... 28 Tabla 4: Coste del personal. .................................................................................................... 30 Tabla 5: Coste del equipo. ....................................................................................................... 30 Tabla 6: Análisis de riesgos..................................................................................................... 31 Tabla 7: Atributos que se resetean en el “Welcome Message”............................................... 47 Tabla 8: Atributos predefinidos de Chatfuel. .......................................................................... 48 Tabla 9: Atributos de fecha y hora de una API externa. ......................................................... 49 Tabla 10: Etiquetas de preámbulo y raíz de HTML ................................................................ 68 Tabla 11: Etiquetas de metadatos de HTML. .......................................................................... 68 Tabla 12: Etiquetas de secciones de HTML. ........................................................................... 69 Tabla 13: Etiquetas de bloques de contenido de HTML.......................................................... 69 Tabla 14: Etiquetas de texto de HTML. ................................................................................... 70 Tabla 15: Etiquetas de tablas de HTML. ................................................................................. 70 Tabla 16: Etiquetas de formularios de HTML......................................................................... 71 Tabla 17: Propiedades de los caracteres de la página web en lenguaje CSS......................... 76 Tabla 18: Propiedades del texto de la página web en lenguaje CSS. ..................................... 77 Tabla 19: Propiedades de los bordes de la página web en lenguaje CSS............................... 77 Tabla 20: Propiedades de los márgenes exteriores de la página web en lenguaje CSS. ........ 78 Tabla 21: Propiedades de los márgenes interiores de la página web en lenguaje CSS. ........ 78 Tabla 22: Propiedades del fondo de la página web en lenguaje CSS. .................................... 78 Tabla 23: Propiedades de las tablas de la página web en lenguaje CSS. ............................... 79 Tabla 24: Propiedades de las cajas de la página web en lenguaje CSS. ................................ 79 Tabla 25: Archivos y funciones del rol de administrador. ...................................................... 84 Tabla 26: Archivos y funciones del rol de estudiante. ............................................................. 85 Tabla 27: Archivos y funciones del rol de profesor................................................................. 86 Tabla 28: Funciones de la biblioteca jQuery .......................................................................... 88 Tabla 29: Archivos y funciones JavaScript ............................................................................. 90 Tabla 30: Descripción de las columnas de tabla "Opiniones" de la base datos ..................... 92 Tabla 31: Descripción de las columnas de tabla "Usuarios" de la base de datos .................. 93 Tabla 32: Descripción de las columnas de tabla "usuariostutoria" de la base de datos ........ 93 Tabla 33: Descripción de las columnas de tabla "datosusuario" de la base de datos............ 94 notas de corte, asignaturas y además es capaz de realizar acciones como las matrículas de los alumnos. En la Universidad de Murcia se implanto a Lola que el año pasado resolvió más de 28.000 consultas sobre el acceso a la universidad. Para crearla se utilizó la plataforma Dialogflow de Google y tuvo una mención en la “Harvard Business Review” por su gran éxito. 2.2. Tecnología de estandarización Los chatbots necesitan de cierta tecnología para poder comprender el lenguaje de los humanos y convertirlo en un lenguaje interpretable para las maquinas, este proceso se llama Procesamiento del Lenguaje Natural (PLN). Comprender los miles de palabras, la estructura de la oración, el trasfondo y la intención puede llegar a ser bastante complejo. Estos datos conversacionales son datos no estructurados y son difíciles de ordenar y manejar por eso se suele utilizar el aprendizaje automático gracias al cual pueden ir aprendiendo de las interacciones que realizan. El PLN realiza diferentes tareas para conseguir simplificar la decodificación del mensaje: • El bot primero normaliza el mensaje poniendo todos los caracteres de igual forma, es decir convirtiendo todos en minúsculas. Después descompone el mensaje completo en grupos o estructuras más pequeñas, separa el mensaje en oraciones y a continuación las oraciones en palabras para facilitar el manejo de la información. Este proceso se llama tokenización. • El siguiente paso es eliminar las palabras que no tienen información valiosa para comprender el mensaje como algunos pronombres, artículos o conjunciones como por ejemplo “el”, “como” o “y”. A continuación, se halla el lema de todas las formas flexionadas de las palabras, es decir los plurales, conjugaciones y demás se transforman en la forma de la palabra que se encuentra en el diccionario, para ello se usa una base datos. Posteriormente se asigna una categoría gramatical a las palabras según sean sustantivos, adjetivos, verbos, etc. • Se utiliza el modelo de Bolsa de palabras en el cual se obvia el orden de las palabras y solo se contabiliza el número de veces que se repite una palabra para determinar la frecuencia de termino y designar las palabras con más importancia. Esta bolsa de palabras se representa mediante un vector. A veces los conceptos que permiten distinguir significados están formados por más de una palabra, como por ejemplo “Nueva York” que es un bigrama. Por último, se clasifican las entidades del mensaje que son elementos que existen de verdad como lugares, personas, fechas, empresas, etc, que facilitará muchas funciones del bot como por ejemplo al comprar una entrada de cine si el bot identifica el nombre de la sala de cine, el de la película y la fecha será capaz de comprar la entrada sin problema. Otro parte importante para el procesado de la información son las expresiones regulares, el bot tiene un base de datos donde las almacena y sirven para captar patrones que aparecen en el texto como por ejemplo “Hola, buenos días”. Al tener almacenada esta expresión es más fácil para la maquina “comprender” su significado y responder correctamente. Este conjunto de procesos es el primer paso del bot para procesar la información del mensaje y convertirla a un lenguaje que él pueda “entender” y manejar para poder responder e interactuar con las personas. Ya se ha realizado el análisis morfológico del mensaje. A continuación, viene otro elemento muy importante para los bots que es la comprensión del lenguaje natural (CLN) y que va a realizar las siguientes funciones: • Análisis sintáctico: Analiza la estructura de las oraciones que componen el mensaje según el modelo o reglas que utilicen, es decir si las reglas lingüísticas las ha escrito el desarrollador o las ha aprendido el bot por su cuenta mediante el aprendizaje automático. • Análisis semántico: Elimina las ambigüedades y determina el significado de las oraciones • Análisis pragmático: Tiene en cuenta el contexto, la intención de la oración según antecedentes de conversaciones anteriores con el usuario, el tono de este o el lenguaje figurado como la metáfora e ironía para determinar el significado final de la oración. Gracias a todas estas funciones el bot es capaz de entender el mensaje para poder contestarlo. La respuesta de este es la última parte de las funciones de los bots, la generación de lenguaje natural (GLN). En este proceso el bot generar el mensaje adecuado para contestar según los datos recabados en la comprensión del texto de la persona con la que interactúa. Estos datos contienen múltiples parámetros para que el bot pueda seleccionar según las reglas lingüísticas o su aprendizaje automático. No todos los bot utilizan todas estas técnicas, hay entornos de desarrollo que simplifican mucho el proceso y solo con palabras clave y frases de entrenamiento a las que se les asignas respuestas o acciones cumplen las funciones básicas de un bot. 2.3. Comparativa de plataformas A continuación, se van a describir algunas de las plataformas de desarrollo más conocidas de chatbots, estas proporcionan herramientas y facilitan el desarrollo permitiendo crear un bot sin tener grandes conocimientos de programación. Dialogflow Es la plataforma de la compañía Google desde que la compro en 2016. Esta herramienta para la creación de chatbots cuenta con múltiples funcionalidades para simplificarnos el proceso: • Proporciona mecanismo de Procesamiento de Lenguaje Natural para extraer los parámetros de la conversación y Machine Learning que permite que el bot se entrene mediante las conversaciones que tenga con los usuarios o incluso subiendo archivos de texto a la plataforma, consiguiendo entender la misma pregunta de distintas formas. • Se puede integrar en múltiples canales de comunicación como Facebook, Skype, Telegram y muchos más pudiendo llegar a gran cantidad de usuarios. • Proporcionas mecanismos de reconocimiento de voz por lo que podemos conectarlo con Google Assistant y que no sea necesario escribir para comunicarnos con él. • Tiene una versión gratuita con la que hacer bot más simples, aunque cuenta con una versión de pago con más funciones. Ahora se van a explicar los conceptos básicos que usamos para crear a nuestro agente (bot) de Dialogflow. El primero es el intent que define la intención del usuario, según sus mensajes el agente seleccionara el intent con más coincidencia, como por ejemplo en una la página web de una universidad si el usuario pregunta: “¿Hay alguna biblioteca que este abierta los fines de semana?” el agente seleccionara el intent de bibliotecas. Un intent contiene los siguientes elementos: • Frases de entrenamiento: Son frases que lo usuarios suelen decir para referirse a ese intent, cuando el agente detecta una de esas frases selecciona ese intent. Para que el agente detecte estas frases no tienen que ser exactamente iguales gracias al procesamiento del lenguaje. • Acción: Se le asocia una acción a cada intent para el agente la realice cuando una frase coincida con este. • Parámetros: Son los valores extraídos del mensaje del usuario cuando un intent coincide. Cada parámetro se organiza según su tipo de entidad que determina como se extraen y agrupan los datos. Hay varios de tipo de entidades predeterminadas como fechas, horas, lugares, etc. Pero también puedas crear entidades personalizadas como por ejemplo asignaturas para una agente virtual de una universidad. Se pueden seleccionar las acciones o las respuestas según el conjunto de parámetros que hemos recopilado del mensaje del usuario • Respuestas: Hay que determinar las respuestas de cada intent según los parámetros obtenidos, pudiendo dar una respuesta, solicitar más datos o terminar la conversación. Figura 5: Elementos básicos de un intent en Dialogflow. Los contextos se le asignan a cada intent y funcionan como los contextos de una conversación real. Estos se activan cuando coincide un intent determinado facilitando que el próximo intent coincida, por ejemplo, un usuario manda el siguiente mensaje: “Quiero hacer la automatrícula” y más tarde en la misma conversación dice “¿Hasta cuándo puedo hacerla?”, el agente gracias al contexto sabe que el usuario está preguntando por la fecha de la automatrícula. Para poder usar esto eficientemente a los contextos se le dan unos ciclos de vida, para que si la conversación avanza se vayan actualizando los contextos. Chatfuel Esta plataforma está enfocada a realizar un bot más simple sin tener muchos conocimientos de programación. Estas son algunas de sus características: • Solo permite el desarrollo de bot para Facebook Messenger, pero mediante un pluggin se puede introducir en cualquier página web. • Carece de aprendizaje automático y el procesamiento de lenguaje natural es muy sencillo por lo que está orientado más a una conversación guiada para conseguir objetivos específicos y no a simular la conversación que se tendría con un humano. Aun así, se puede conseguir un gran nivel de compresión, pero será una tarea mucho más tediosa. • No dispone de reconocimiento de voz, solo se puede interactuar con el de forma escrita. • La integración con otras herramientas se realiza mediante el lenguaje JSON. Esto se usa para acceder a la base de datos, backend o APIs externas para que una aplicación externa a Chatfuel realice una función o consulta y le transfiera el resultado. También se puede conectar con una serie de aplicaciones predeterminadas mediante la aplicación Zappier. • Análisis y seguimiento de las conversaciones con los usuarios, recopilando datos sobre sus preferencias y segmentándolos en diferentes categorías para poder enviarles información personalizada a cada grupo. En definitiva, es una herramienta muy sencilla al alcance de todos y que puede cumplir con necesidades como publicidad, enviar mensajes masivos a un determinado grupo de clientes, orientar en compras mediante chat, etc. En esta plataforma el flujo este guiado mediante una arquitectura de bloques, que pueden tener diversas funciones como enviar un mensaje y proponer opciones para responderlas mediante botones para ir dirigiendo la conversación, realizar acciones como asignar valores a atributos, determinar qué acción hacer según unas condiciones, iniciar chat en vivo, llamar por teléfono, etc. Gracias a esto podemos ir creando secuencias de operaciones para conseguir nuestro cometido e ir llamando a estas funciones según el fin que quiera alcanzar nuestro usuario ya sea comprar ropa o ponerse en contacto con un tele operador. Figura 6: Flujo de conversación en Chatfuel Aparte de esto se puede ir dotando al bot de inteligencia artificial creando respuestas o llamando a estos bloques si el usuario usa palabras clave para que no sea solo un menú y la conversación parezca más humana. También tiene un mensaje predeterminado para cuando no se reconoce ninguna palabra clave redirigir la conversación. Figura 7: Página de IA del agente virtual de Chatfuel. AIML Es un lenguaje de programación de código libre y usado para crear ALICE, sus siglas significan “Artificial Intelligence Markup Languaje”. En él se usan tres conceptos básicos: • Categorías: Son los temas o unidades básicas de conocimiento. Estas constan de patrones y plantillas • Patrones: Son palabras clave que el bot identifica los mensajes del usuario para responder con las plantillas • Plantillas: Son los conjuntos de respuestas asignados para contestar a los mensajes de los usuarios clasificados por patrones. Figura 8: Código escrito en lenguaje AIML Aparte de estos elementos básicos hay muchas más funciones típicas del lenguaje de programación como condicionales, bucles, etc. Esto es un lenguaje de programación y no un entorno de trabajo ya que todo el bot se crea a partir de código, cada vez se usa menos por la sencillez que aportan los otros métodos. Watson Conversation Es una plataforma de la empresa IBM que proporciona funciones muy similares a las plataformas de desarrollo anteriores sobre todo a Dialogflow: • Procesamiento de entrada por voz (Speech to Text) y procesamiento de salida por voz (Text to Speech). • Procesamiento del lenguaje natural para mantener una conversación estructurada y satisfacer las peticiones de los usuarios. • Tiene una versión gratuita aparte de la de pago con más funciones. • Es compatible con muchos canales de comunicación Facebook Messenger, Telegram, Slack.. • Posee machine learning permitiendo que el bot aumente su base de datos constantemente para mejorar la experiencia con el usuario. • Análisis de las interacciones de los diferentes usuarios con el fin de recopilar datos para mejorar el servicio. Los conceptos básicos para desarrollar el chatbot se asemejan muchos a los anteriormente vistos: • Intenciones: Son acciones asignadas a mensajes o peticiones del usuario, es decir a la finalidad que busca el usuario con esos mensajes, como por ejemplo encargar comida a domicilio. A cada intención se añaden frases de ejemplo que el usuario puede usar para que se reconozca. • Entidades: Son diferentes parámetros que se vinculan a la intención y que aportan información necesaria para satisfacer la necesidad del usuario, como siguiendo el ejemplo anterior el tipo de comida que quiere encargar, cuando la quiere, la dirección de entrega, etc. • Dialogo: Se crea un flujo de conversación mediante nodos, en los que se define una serie de respuestas para una serie de situaciones como el mensaje de bienvenida. También se puede añadir intenciones a un nodo para así reunir datos (entidades) mediante los slots o conseguir un flujo secuencial añadiendo condicionales para que solo se pueda avanzar a un nodo si primero provenimos de uno anterior. Figura 9: Nodos de dialogo en Watson Conversation de IBM Hay muchas más plataformas como Manychat, Botisfy, etc. Pero al ser muy similares a las anteriores no se comentan sus características. Dialogflow Chatfuel Watson Conversation Ventajas -Dispone de “machine learning” para la mejora continua. -Dispone de mecanismos de “Speech-to-Text" y “Textto-Speech" para la comunicación por voz. -Es multicanal. -El uso de contextos permite una conversación más fluida. -La creación de un bot es muy sencilla e intuitiva. -La conexión con APIs externas se puede realizar con unos conocimientos mínimos de JSON. -Dispone de una interfaz gráfica para crear el flujo de la conversación. -Permite hacer seguimiento de los usuarios mediante una herramienta para enviar mensajes a los usuarios que se suscriban. -La versión gratuita incluye todas las funciones. -Dispone de “machine learning”. -Dispone de mecanismos de “Speech-to-Text" y “Text-toSpeech" para la comunicación por voz, aparte dispone de “Watson Language Translator” capaz de entender 7 idiomas y “Watson Tone Analizer” para interpretar el tono y sentimiento de la voz. -Es multicanal. -Tiene visión computacional para buscar y clasificar todo el contenido visual. Desventajas -Requiere de un mayor conocimiento de programación para conectarlo con APIs externas. -La versión gratuita no incluye todas las funciones. -No dispone “machine learning” por lo que el entrenamiento puede resultar tedioso. -No dispone de mecanismos de reconocimiento por voz. -Solo dispone de un canal de comunicación que es Facebook Messenger. -La versión gratuita es muy básica comparada con la de pago. -Se utiliza para desarrollar bot industriales muy complejos. Tabla 1: Ventajas y desventajas de las diferentes plataformas para el desarrollo de chatbots. 3.PERSPECTIVA Y FUNCIONES DEL PRODUCTO Actualmente con la pandemia que estamos sufriendo del COVID-19 es recomendable reducir el contacto con otras personas lo máximo posible. La Universidades debido a su gran concurrencia de estudiantes y profesores han limitado su acceso para minimizar el riesgo de contagio. Por ello los estudiantes tienen difícil acudir presencialmente a resolver dudas sobre la gestión de cualquier asunto relacionado con sus estudios o servicios que ofertan las Universidades. Por eso hay que buscar soluciones para poder dar el mejor servicio posible a los alumnos sin poner en riesgo su salud y ayudar a salir de esta situación lo antes posible. Para poder solucionar el problema de atender a los alumnos sin que acudan a la Universidad se podría dar atención telefónica o vía email, pero con el gran número de usuarios esto es algo que llevaría mucho tiempo y gran cantidad de recursos humanos ya que la cantidad de alumnos es muy grande. Esto provocaría tiempos de espera demasiado elevados para resolver dudas y provocaría que el servicio no sea muy eficiente. Pero este problema se podría solucionar en gran medida con el uso de un chatbot para resolver parte de estas situaciones y ayudar al alumno a acceder a la información que necesita. En caso de que la información o tramite que necesite sea muy complejo o demasiado personalizado para su situación se le pondría en contacto con el personal adecuado para ayudarle. Consiguiendo así reducir la carga de trabajo del personal de atención al cliente de las universidades y ofrecer un servicio de calidad. Aparte de los motivos de la pandemia un chatbot tendría más ventajas como un acceso a la información más sencillo y cercano a los posibles nuevos alumnos de la universidad que tienen una decisión muy importante ante ellos y tienen múltiples caminos que poder elegir. Al implantar un asistente virtual se facilita la elección del camino a seguir y puede marcar la diferencia para que el alumno elija una universidad aumentando así el número de inscripciones de esta. Otra gran ventaja es que el bot puede atender a sus usuarios las 24 horas y a través de redes sociales que casi todos tienen instaladas en sus móviles, consiguiendo estar activo en cualquier lugar y en todo momento. Se puede actualizar de forma sencilla por el personal docente cada cierto tiempo para incorporar nuevas preguntas frecuentes realizadas por los alumnos o peticiones de estos para ir incorporando nueva información con el paso del tiempo. Gracias al análisis de las conversaciones con los usuarios se pueden obtener datos sobre lo que más se consulta o el perfil de los alumnos que más usan este servicio para cada vez ir implementando nuevas funciones para mejorar el servicio y llegar a más personas. Por estos motivos el objetivo de este proyecto es la creación de un chatbot para el Área de Atención y Orientación al Estudiante de la Universidad de Sevilla. Muchas universidades ya los están usando y han sido un éxito. Para crearlo se ha usado como entorno de desarrollo Chatfuel por la facilidad que esta plataforma otorga para crear un chatbot. Frente a otras plataformas una de las ventajas principales es que es gratuita, aunque posee una versión de pago esta ofrece casi las mismas funcionalidades. Su versión gratuita ofrece lo mismo que otras plataformas y su sistema para estructurar la información mediante bloques permite guiar la conversación de una forma muy directa e intuitiva. Esto es muy favorable porque se quiere que el usuario consiga obtener lo que busca en el menor tiempo posible y a aparte permite ofrecerle una atención muy personalizada y que pueda cubrir cualquier tipo de necesidad usando muchos bloques y diferentes flujos entre ellos. A parte de esto se puede compartir información con APIs externas mediante el uso de JSON permitiendo gran cantidad de funciones. Es posible enviar cualquier tipo de información, no solo texto, como imágenes, videos, audios, páginas web, etc. También se pueden crear menús en formas de galerías para que la información sea más atractiva y completa. A continuación, se van a enumerar las diferentes funciones e información que va a tener el chatbot: • Diferentes menús con las secciones principales en las que el bot puede atender a los usuarios como bibliotecas, deportes, noticias de la universidad, preguntas frecuentes, cursos disponibles... • Se conecta con APIs para acceder a aplicaciones ya existentes para obtener datos como la fecha actual para determinar el saludo o si está en el horario de atención por alguien del personal. Esto lo hará usando JSON mediante las funciones GET y POST. • Guarda la información de los usuarios que lo deseen en bases de datos para enviarle noticias nuevas, cursos y resolver dudas. • Recopila información de la opinión de los usuarios sobre la atención recibida mediante un formulario en una base de datos para ir mejorando los puntos débiles del bot. • Crear una página web con una interfaz y diferentes roles de usuario para reservar tutorías. Para ello habría que conectar esta página web con la base de datos. • Pone en contacto al usuario con un trabajador de atención al cliente en caso de que sea necesario. • Contesta automáticamente a comentarios que se realicen en las publicaciones de la página de Facebook. • Envía videos y música a los usuarios para que se entretengan mientras son atendidos por alguien del personal. • Realizara búsquedas en la página de la Universidad de Sevilla para temas que no tenga programados mediante RSS. 3.1 Descripción general El producto final será un chatbot desarrollado con Chatfuel para comunicarse mediante Facebook Messenger solo en forma escrita. Este asistente pone a disposición del usuario contenido de diferentes departamentos de la Universidad de Sevilla. El bot mediante inteligencia artificial y su arquitectura de bloques conduce la conversación entre sus diferentes opciones para que el usuario obtenga la información deseada. Aparte puede realizar funciones como recopilar datos, enviar contenido multimedia, buscar mediante palabras clave en páginas web externas y enviar nuevas noticias de blogs. Aparte se complementará con una página web para que lo estudiantes puedan reservar tutorías y dar su opinión sobre las conversaciones para posibles mejoras. 3.2 Requisitos En este punto analizaremos los requisitos para nuestro chatbot, para poder establecer un orden de prioridades y tener un seguimiento de las funciones resueltas y sin resolver. El análisis de requisitos se define según el Estándar IEEE Std.610[IEE 1990] como “el proceso del estudio de las necesidades de los usuarios para llegar a una definición de los requisitos del sistema, de hardware o de software, así como el proceso de estudio y refinamiento de dichos requisitos”. Por lo tanto, un requisito es una característica o función que tiene que realizar el sistema para cumplir con una necesidad del usuario. Entonces para estipularlos se van a plantear diversas situaciones en las que los usuarios necesiten la ayuda de nuestro agente conversacional para hacer una lista de requisitos y organizarlos según su importancia. Con esta lista se puede administrar el tiempo correctamente para dedicarlo solo a estas especificaciones. A continuación, están las tablas con esta clasificación: ID Descripción Prioridad 001 Saludo inicial y presentación del bot Alta 002 Redirigir la conversación en caso de no disponer de respuesta para un mensaje Alta 003 Funcionar en múltiples dispositivos (PCs, móviles y tablets) Alta 004 Poner en contacto con un administrador cuando el bot no sea capaz de solventar el problema Alta 005 Disponer de un menú para preguntas frecuentes (FAQ) Alta 006 Preguntar al usuario si las respuestas dadas han servido de ayuda para posteriores mejoras del bot Alta 007 Entender la misma pregunta realizada de diferentes formas Alta 008 Guardar registro de conversaciones para su análisis y entrenar al bot para corregir errores Alta 009 Estar activo en todo momento Alta 010 Guardar datos de usuario mediante APIs en una base de datos usando la función POST Alta 011 Acceder a datos de externos o de nuestro backend mediante la función GET Alta 012 Enviar emails de forma automática a usuarios y administradores Alta 013 Funcionar en múltiples canales como Facebook Messenger, Instagram, Slack Media 014 Clasificar a los usuarios según sus respuestas para sus futuras consultas Media 015 Tener un tiempo de respuesta rápido Media 016 Enviar imágenes o redireccionar al usuario a ellas mediante la url Media 017 Mandar notificaciones o publicidad a usuarios determinados cada cierto tiempo Media 018 Poder acceder a nueva información de blogs o páginas web mediante RSS Media 019 Buscar información según palabras clave dentro de una página web Baja Tabla 2: Requisitos del chatbot del proyecto. 4. DISEÑO DE LA ARQUITECTURA DEL CHATBOT En este apartado se comentan todas tecnologías usadas para crear el chatbot junto con las bases de datos y páginas web. 4.1. Entornos de trabajo 4.1.2 Chatfuel Chatfuel dispone de una gran variedad de funciones para crear un chatbot totalmente operativo de forma intuitiva y sencilla. Aparte de esto, otras de las ventajas por las que se selecciono es porque su versión gratuita tiene las mismas funciones que la de pago siendo ideal para nuestro proyecto. Otro de los motivos es porque dispone de una gran cantidad de contenido docente en internet para usar esta plataforma. A continuación, se van a explicar todos los elementos básicos de Chatfuel. El único requisito para usar Chatfuel es ser administrador de una página de Facebook, se puede crear de forma gratuita en unos pocos minutos. En la página de inicio de Chatfuel está la opción de crear un bot desde cero o elegir una de las plantillas que ofrece sobre diversos como asistencia para el COVID-19, hoteles, e-comerce, etc. Una vez creado el bot hay que vincularlo con la página de Facebook y se puede empezar a añadir contenido. Figura 11: Página de inicio de Chatfuel para crear un chatbot. Después se accede al dashboard del bot donde tenemos un menú en el lateral con todas las opciones para administrar y crear el asistente virtual que se van a comentar a continuación. Grow En esta sección se encuentran un resumen de todas las funciones destinadas a aumentar el número de usuarios del bot: • Crear un link que inicie un chat con el asistente virtual para compartirlo en una página web, algún foro o en cualquier otro medio. • Dividir a los usuarios del bot en grupos según algunos valores que sean relevantes como los artículos o servicios por los que se interesó cuando interacciono con el bot, para así enviarles publicidad personalizada y captar mejor su atención. • Crear anuncios en Facebook para vincularlos a un bloque o flujo de Chatfuel para que cuando el usuario visualice un anuncio aparezca la opción de iniciar un chat con el bot para realizar la compra o proporcionarle ayuda. El inconveniente de esto es que los anuncios de Facebook no son gratuitos. • Volver a atraer a usuarios inactivos mediante mensajes promocionales como pueden ser ofertas o novedades. • Responder automáticamente a publicaciones en la página de Facebook en la que esta alojada el bot. Figura 12: Apartado “Grow” de Chatfuel. Aparte del resumen de estas funciones la sección Grow nos muestra la página de Facebook a la que está conectada el bot, un resumen de los anuncios de Facebook y los mensajes más comunes que el bot no reconoce, es decir para los que no tiene una respuesta establecida. Esto último es muy útil ya que nos indica el número de veces que se ha recibido ese mensaje y da la opción de añadir una respuesta ya sea con texto o un bloque de información permitiendo eliminar los posibles puntos muertos de la conversación. Automation Esta es la sección más importante ya que es la que permite dotar de inteligencia y contenido al bot. Esta divida en tres apartados Flows, Blocks y Set Up AI. Flows La sección Flows permite añadir todos los bloques de contenido y funciones al bot como dar valor a atributo, añadir condiciones, enviar texto o imágenes y muchas otras funciones más. Flows proporciona casi las mismas funciones que el apartado Blocks, pero acompañadas de una representación gráfica de los bloques que se unen mediante flechas para ver el flujo de la conversación de manera visual. Durante el desarrollo del bot de este proyecto esta sección estaba en fase beta por lo que la mayoría del bot se ha desarrollado mediante Blocks. Por ello en este apartado solo se explicarán las funciones que solo se puedan implementar en Flows, muchas de ellas mencionadas en el apartado anterior: Figura 13: Sección Flows de Chatfuel. • Responder automáticamente a publicaciones de Facebook. • Dirigir mediante anuncios de Facebook hacia un bloque del flujo de la conversación. • Proporciona un script para añadir en el código de una página web para incluir el chat bot en esta. • Añadir un menú persistente en el chat con las diferentes opciones que te ofrece el bot, pero esta función no está permitida ahora mismo en Europa por motivos de privacidad. Figura 14: Menú persistente de Chatfuel. Aparte de esto dispone de varias plantillas con usos típicos como FAQs, atención en cafés, reserva de hoteles, vuelos, etc. Blocks La sección Blocks igual que la anterior se utiliza para crear contenido y dar funciones al bot. Como se ha comentado antes en esta sección se ha creado casi todo el bot del proyecto por lo se explicara sus funciones más en detalle. El elemento básico que se utiliza para crear contenido en Chatfuel se llama bloque. Los bloques pueden contener información en forma de texto, imágenes, videos o audios y realizar funciones como guardar atributos, conectarse con aplicaciones externas y demás funciones que se explican a continuación. Cada bloque que se crea se relaciona con uno o más bloques para crear el flujo de la conversación, por ejemplo, si dentro de un bloque el bot da la opción al usuario de elegir entre dos opciones cada respuesta conducirá la conversación a un bloque diferente. Chatfuel tienes dos bloques definidos por defecto que son primordiales para que el bot funcione correctamente, “Welcome Message” y “Default Answer”. El mensaje de bienvenida (“Welcome Message”) es el mensaje o acción que realiza el bot cuando un usuario envía el primer mensaje. Suele ser un saludo para iniciar la conversación, aunque otro cometido importante es reiniciar los atributos necesarios que guarda el bot en caso de que no fuera la primera interacción. Por ejemplo, si en un chat anterior el bot guarda un atributo para saber si el usuario ha visto las promociones disponibles y en la siguiente hay que cambiar ese valor para poder volver a enseñarle esas promociones. Figura 15: “Welcome Message” de Chatfuel. La contestación por defecto (“Default Answer”) es el mensaje o acción que el bot usa cuando no reconoce algún mensaje. Chatfuel permite dar inteligencia artificial al bot en la sección “Set Up AI” que se explicara más adelante. Si hay alguna palabra o frase con la que esta inteligencia no encuentre coincidencias el bot responde con el bloque “Default Answer”. Este bloque tiene que intentar reconducir la conversación para que no se quede en un punto muerto ya sea mediante menús, buscadores o iniciando otro chat con algún miembro del personal. Aparte de los bloques predefinidos se pueden crear todos los bloques que se necesiten para incluir todo el contenido del bot. Estos bloques se clasifican en diferentes grupos según su contenido o cometido para mantener un orden en caso de que haya gran número de ellos. Estas son todas las opciones que hay para bloques: Figura 16: Tipos de contenido y acciones de los bloques de Chatfuel. • Añadir y enviar contenido: Se puede incluir texto, imágenes, videos, audios, la animación que representa que el bot está escribiendo y galerías. Estas últimas son menús en forma de imágenes y texto que contienen botones que te redireccionan a una url u otro bloque. Figura 17: Ejemplo de galería de Chatfuel Hay varias formas de recopilar datos del usuario: • Las respuestas rápidas tienen que ir siempre precedidas de un texto, que suele ser una pregunta. Al usuario se le ofrecen varias opciones predefinidas que se guardan en el atributo que se desee. Cada respuesta puede dirigir la conversación a un bloque diferente. Por ejemplo, se puede preguntar por cuál es la facultad del usuario y establecer como respuesta rápida todas las facultades de esa universidad para dirigirlo a un bloque con información como horarios, ubicación, etc. Figura 18: Ejemplo de respuestas rápidas de Chatfuel • Guardar las entradas del usuario (“Save User Input”) permite hacer diferentes preguntas para guardar la respuesta del usuario en un atributo. Tiene la posibilidad de validar si la respuesta del usuario es un email, teléfono o número, en caso de no coincidir con alguno de estos formatos te permite añadir un texto para indicar que el usuario tiene dar una respuesta valida. Figura 19: Ejemplo de guardar datos del usuario en Chatfuel. • Establecer atributo de usuario (“Set User Atribute”) permite dar un valor al atributo sin que el usuario lo seleccione. Esto es muy útil para crear variables de control para indicar por ejemplo si el usuario ya ha visto un menú. Figura 20: Ejemplo de asignar atributos de usuario en Chatfuel Exportar e importar contenido (“Export and Import”) con aplicaciones externas: • Guardar los atributos y sus valores en una hoja de Excel de Google. • Enviar emails de forma automática a algún administrador del bot. Esta opción no permite enviar al usuario un email. • Exportar e importar información mediante Zappier, que es una aplicación que permite conectar aplicaciones para automatizar procesos como enviar email, subir publicaciones a redes sociales, notificar eventos de un calendario vía SMS, etc. • Enviar datos mediante JSON API permite intercambiar datos con cualquier API o página web que este programada para usar la funciones POST y GET. Permite enviar o recibir atributos mediante la url. También es posible recibir archivos multimedia como imágenes, videos, PDF, crear botones, etc. • Enviar eventos de análisis a Facebook (“Send Analytics Events to Facebook”) permite enviar a la herramienta de Facebook notificaciones de cuando algún usuario accede a un bloque, pulsa un botón, etc. Hay 24 eventos predefinidos como suscribirse, pedir un contacto o buscar una localización, también es posible crear tus eventos personalizados. Con esto se consigue un mejor seguimiento de los contenidos a los que acceden los usuarios. Redirigir usuarios (“Redirect Users”) en este apartado hay varias opciones para conducir la conversación: • Redirigir a un bloque o flujo (“Redirect to Block or Flow”) como su nombre indica esta opción permite enviar al usuario a otro bloque o flujo. Esta función es imprescindible para que haya varios caminos que el usuario pueda seguir durante la interacción. • Suscribirse o cancelar una suscripción a una secuencia (“Subscribe to Sequence”) permite crear bloques que se accionan pasado un tiempo después de que ocurra un evento. Por ejemplo, cuando un usuario inicia el chat se puede programar que al cabo de cierto tiempo se inicia un bloque como puede ser preguntar que le ha parecido la ayuda que le ha proporcionado el bot. • Prueba A/B (“A/B Test”) permite redirigir a un porcentaje de usuarios a diferentes bloques y establecer una meta para analizar cuál de esos bloques es más eficaz para conseguirla. Por ejemplo, se usan dos bloques diferentes para promocionar la venta de algún producto y en ellos se da la opción al usuario a comprarlos, gracias a la prueba de A/B se puede comprobar el número de usuarios y porcentaje de estos que compro el producto en cada bloque para comprobar cual funciona mejor. Conectar usuarios con un humano (“Conect Users to Human”) permite iniciar un chat con algún administrador del bot. Esta función se suele utilizar para resolver consultas que el bot no puede o en caso de que la conversación alcance un punto muerto. Pluggin con suscripciones (“Pluggin with Subscriptions”) permite utilizar funciones de sitios externos. La más importantes son: • Los buscadores que permiten buscar información usando palabras clave dentro de sitios web usando motores de búsqueda como Google, Bing o Swiftype. • Importar contenido mediante RSS (“Really Simple Syndication “) que es un formato XML para compartir contenido en la web. Este formato RSS está diseñado principalmente para web que actualicen su contenido con frecuencia y se pueda compartir esta información de forma sencilla con cualquier página web o aplicación. Chatfuel permite mostrar las ultimas publicaciones en formato RSS de una página en forma de menú en el chat, siendo muy útil para mostrar novedades o noticias. Set Up AI En esta sección se crea la inteligencia artificial del bot mediante palabras o frases de entrenamiento. Se crean grupos formados por varias palabras o frases para que cuando el bot identifique alguna de estas responda con alguna de las respuestas o bloques asociados a ese grupo. Sin esta inteligencia la conversación no puede saltar de un bloque a otro si no están vinculados, obligando a llegar a ciertos bloques para que el usuario pueda obtener el resultado que busca. Figura 21: Inteligencia artificial de Chatfuel. Live Chat Esta sección permite comunicarse mediante un chat con los usuarios que lo han solicitado en algún bloque. Aparte de esto te muestra todas las conversaciones que ha mantenido el bot y todos los atributos actuales de los usuarios. Figura 22: Chat en vivo de Chatfuel. People Esta sección permite clasificar a los usuarios del bot en segmentos según condiciones como el valor de atributos, los bloques que han visitado, si hay secuencias activas, etc. Después se pueden usar para realizar acciones específicas para cada segmento como redirigir a diferentes bloques dependiendo del segmento, enviar mensajes personalizados o suscribir a secuencias. También permite sincronizarlo con Facebook Ads para enviar de forma automática publicidad. Figura 23: Apartado para agrupar usuarios de Chatfuel. Reengage Este apartado tiene funciones para captar de nuevo la atención de antiguos usuarios. Dispone de funciones como enviar mensajes difundidos, programar mensajes para determinadas fechas, enviar mensaje cuando se active un disparador y permitir que Zappier envié mensajes de forma automática cuando por ejemplo hay una nueva publicación en una página de Facebook. Configure Este apartado te permite cambiar opciones como: • Seleccionar la zona horaria en la que va a operar el bot. • Administrar el personal del bot añadiendo o eliminando miembros con un rol determinado como administrador, editor u operador de chat en vivo. • Determinar las urls de las páginas web que se autorizan para utilizar las extensiones de Messenger que permiten varias funciones relacionadas con las webviews. • Ver la lista de todos los atributos usados en un bot, permitiendo gestionarlos dando valores globales a cada uno de ellos. Analyse Este apartado permite analizar varios datos del bot dando la opción de filtrar por fechas: • Gráfica con los usuarios totales, nuevos usuarios y usuarios que ha bloqueado al bot. • Gráfica de actividad de los usuarios. • Fuentes a través de las cuales los usuarios inician el chat con el bot como pueden ser una página de Facebook, un link o una página web. • Los elementos más usados en el bot como botones, urls externas o bloques más visitados. Atributo Función messenger user ID Variable que almacena el id de Facebook Messenger del usuario first name Variable que almacena el nombre del usuario last name Variable que almacena los apellidos del usuario gender Variable que almacena el género del usuario locale Variable que almacena el país del usuario time zone Variable que almacena la zona horaria del usuario ref Variable que almacena la referencia del link mediante el cual se accedió a ese bloque. En caso que se accedería mediante otro método el valor de este atributo estará en blanco profile picture Variable que almacena la url de la imagen de perfil de Facebook del usuario source Variable que almacena la fuente desde la que se inició el chat con el bot por última vez que puede ser mediante un link, mensaje directo de la página de Facebook o desde una página web last visited block name Variable que almacena el nombre del ultimo bloque visitado por el usuario last visited block id Variable que almacena el id del ultimo bloque visitado por el usuario last clicked button name Variable que almacena el nombre del ultimo botón pulsado por el usuario sessions Variable que almacena el número de sesiones que ha realizado el usuario en el chat signed up Variable que almacena la fecha que el usuario entro al chat por primera vez last seen Variable que almacena la fecha que el usuario entro al chat por última vez chatfuel user id Variable que almacena el id del usuario en Chatfuel original source Variable que almacena la fuente desde la que se inició el chat con el bot por primera vez que puede ser mediante un link, mensaje directo de la página de Facebook o desde una página web last user freeform input Variable que almacena el último mensaje que envió el usuario a través del chat instagram user id Variable que almacena el id de la cuenta de Instagram del usuario instagram name Variable que almacena el nombre de la cuenta de Instagram del usuario original ref Variable que almacena la referencia del link mediante el cual se accedió al chat por primera vez. En caso que se accedería mediante otro método el valor de este atributo estará en blanco Tabla 8: Atributos predefinidos de Chatfuel. Una vez hecho esto, el bot se redirige a un bloque llamado “EVALUAR SALUDO” para decidir el saludo inicial según la hora del día que sea. Para ello se hace una llamada a una API externa que envía la fecha y hora actuales en diferentes formatos al bot mediante el método GET que los almacena en los siguientes atributos: Atributo Función Ejemplo dayInt Variable que almacena el número del día del mes actual 19 dayShort Variable que almacena el nombre del día de la semana abreviado Wed dayLong Variable que almacena el nombre del día de la semana Wednesday monthInt Variable que almacena el número del mes 5 monthShort Variable que almacena el nombre del mes abreviado May monthLong Variable que almacena el nombre del mes May year Variable que almacena el número del año 2021 time12h Variable que almacena el numero de la hora actual en formato 12H. 8 time24h Variable que almacena el numero de la hora actual en formato 24H. 8 timeMin Variable que almacena el número de minutos de la hora actual 26 timeSec Variable que almacena el número de segundos de la hora actual 53 timeAmPm Variable que almacena el periodo del día cuando la hora es en formato 12H AM time12hm Variable que almacena la hora en formato 12 H indicando horas y minutos 8:26 AM time12hms Variable que almacena la hora en formato 12 H indicando horas, minutos y segundos 8:26:53 AM time24hm Variable que almacena la hora en formato 24 H indicando horas y minutos 8:26 time24hms Variable que almacena la hora en formato 24 H indicando horas, minutos y segundos 8:26:53 greeting Variable que almacena el saludo que hay que usar es decir si es por la mañana, tarde o noche morning timezoneName Variable que almacena el nombre de la zona horaria Europe/London dateFormatted Variable que almacena la fecha y la hora actual en formato completo incluyendo la zona horaria 2021-05-19 08:26:53 Europe/London Tabla 9: Atributos de fecha y hora de una API externa. El atributo que se utiliza para evaluar el saludo es time24h: -Si este atributo tiene un valor menor que 7 o mayor o igual a 21 se asume que es por la noche y se elige de forma aleatoria entre dos bloques para dar las buenas noches. -Si este atributo tiene un valor menor que 13 o mayor o igual a 7 se asume que es por la mañana y se elige de forma aleatoria entre dos bloques para dar los buenos días. -Si este atributo tiene un valor menor que 21 o mayor o igual que 13 se asume que es por la tarde y se elige de forma aleatoria entre dos bloques para dar las buenas tardes. Figura 30: Redireccionando saludo en función de la hora. Dentro de los bloques de los saludos se utiliza el atributo “first name” para incluir el nombre del usuario en el saludo y emoticonos para humanizar al bot. Figura 31: Ejemplo de saludo del bot. Aparte en este bloque se suscribe al usuario a una secuencia para que pasados 15 minutos se le recuerde la opción de ver el menú. En el momento que el usuario acceda al bloque del menú cambia de valor el atributo “menu_visto” y esta secuencia no realiza ninguna acción. Figura 32.: Suscripción a secuencia de menú. “Default Answer” Este bloque como se comentó anteriormente sirve para responder cuando el bot no reconoce el mensaje del usuario. En nuestro bot se utiliza el parámetro “no entiendo” para elegir entre varios bloques y que la respuesta no sea la misma. Al entrar en este bloque se le suma 1 al valor de este parámetro y posteriormente dependiendo de este valor se redirige el flujo a diferentes bloques: -Si el valor es 1 se selecciona de manera aleatoria entro dos bloques, uno que simplemente le indica al usuario que no se comprendió el mensaje y otro que aparte de esto le redirige al bloque donde se encuentra el menú. -Si el valor es 2 se le comunica al usuario que no se ha vuelto a entender el mensaje y se le insta a que utilice otras palabras para solicitar la información que está buscando. -Si el valor es 3 se le da la opción de usar un buscador que encontrara las coincidencias con su último mensaje (atributo “last user freeform input”) en la página de la US o de contactar con algún miembro del personal. Dentro de la opción de contactar hay varias opciones que se comentaran más adelante. Aparte de esto en este bloque se resetea el atributo “no entiendo” para que la próxima vez que el bot no comprenda algo se repita el mismo proceso. Figura 33: Ultimo bloque de la secuencia “Default Answer”. Menús Dentro del chat el bot ofrece un menú para facilitar la información al usuario de forma más sencilla y visual. El menú está formado por imágenes y botones que te redirigen a otros bloques que pueden ser sub menús o a páginas web mediante la url. En el menú de nuestro bot hay las siguientes secciones: Figura 34: Menú principal del chatbot. -Bibliotecas: En esta sección se muestran la localización, horarios y teléfono de contacto de todas las bibliotecas de la US. Están agrupadas por campus para que sea más fácil buscarlas. -Deportes: En esta sección se muestra toda la información y servicios relacionados con deportes que ofrece la universidad. Este departamento llamado SADUS (“Servicios de Actividades Deportivas de la Universidad de Sevilla”) pone a disposición de los alumnos múltiples instalaciones y organiza diversas actividades. El bot redirige al usuario mediante urls a las pagina web de las instalaciones y como alquilarlas, horarios, tarifas, ofertas, etc. -Cursos: En esta sección se muestran los cursos del CFP (“Centro de Formación Permanente”), redirige a los usuarios a la página web donde aparecen las ofertas de los cursos, los teléfonos de contacto, localización, horarios e información general del centro. Aparte de esto hay otra sección conectada a la página del CFP mediante RSS que muestra las novedades en el chat en forma de menú. -Área de Asistencia y Orientación al estudiante: En esta sección a una serie de preguntas y respuestas frecuentes (FAQ) realizadas por los alumnos. -Tutorías: En esta sección se redirige al usuario a una página web donde puede reservar tutorías. En esta página web hay tres roles, estudiante, profesor y administrador, para poder gestionar las tutorías de los diferentes profesores. Se explicará más en profundidad en el apartado de las páginas web. -Noticias: En esta sección se muestran las ultimas noticias y novedades de US. El bot está conectado a la página de universidad para mostrar las ultimas publicaciones de contenido RSS en forma de menú. “Contacto” Como se comentó anteriormente el bot da la opción al usuario de dejar los datos de contacto. Para ello el bot pregunta por el email, teléfono y motivo de la consulta del usuario y guarda las preguntas en atributos para almacenarlo en una base de datos. Para ello se realizan las siguientes acciones: -Utilizar la función “Save User Input”, pregunta por el e mail, teléfono y motivo de consulta. Figura 35: Preguntas para guardar los datos de contacto del usuario. -Enviar un correo electrónico de notificación a los administradores con todos los datos del usuario mediante la función “Notify Admin via Email”. -Conectar con la API que nos proporciona la fecha explicada anteriormente para poder guardar la hora en la que se realizó la consulta. -Enviar mediante el método POST los atributos a nuestra página web que será la encargada de guardar toda la información en la base datos. Los atributos que se envían son el nombre, apellidos, email, número de teléfono, motivo de la consulta, genero, fecha, país e id de la cuenta de Facebook Messenger. Figura 36: Conexión con página web mediante el método POST. -Enviar un correo electrónico de notificación al usuario mediante la plataforma Zappier. Zappier envía de forma automática un correo al email que proporcione el usuario con sus datos de contacto y su consulta comunicándole que se resolverá su duda lo antes posible. Figura 37: Correo de notificación al usuario. “Chat en vivo” En esta sección se inicia un chat entre el usuario y los administradores del bot. En caso de que no haya ningún administrador disponible se le da la opción al usuario de escuchar música o ver videos mientras espera. Estos son los bloques que hay en este grupo: -Chat en vivo 1: Se consulta la fecha y la hora mediante una API externa para determinar si puede haber algún administrador disponible: • Primero se comprueba el mes utilizando el atributo “monthLong”, si este es Julio o Agosto se dirige la conversación a otro bloque para comunicar que es periodo de vacaciones. • Después se comprueba el día utilizando el atributo “dayLong”, si este es sábado o domingo se dirige la conversación a otro bloque para comunicar que los fines de semana no hay administradores disponibles. • Por último, se comprueba la hora utilizando el atributo “time24h”, si esta fuera del horario de 9:00 a 14:00 y de 16:00 a 20:00 se dirige la conversación a otro bloque para comunicar el horario de atención al cliente. Figura 38: Redirección a otro bloque según atributo “time24h”. Si no se da ninguno de estos casos se inicia un chat con algún administrador mediante la función “Live Chat” y se le pregunta al usuario si tuvo respuesta en el chat para en caso de no haber nadie del personal disponible redirigirlo al bloque “Esperar personal” -Esperar personal: En este bloque se notifica a los administradores mediante un correo electrónico que hay un usuario esperando para iniciar un chat en vivo y se da la opción a los usuarios a elegir entre ver un video o escuchar música mientras esperan o dejar directamente sus datos de contacto. -Esperar personal 2: Este bloque es al que se redirige al usuario si no ha visualizado todos los videos. En él se indica que ha transcurrido muy poco tiempo de espera y da la opción de escuchar música, dejar los datos de contacto o iniciar el chat en vivo. -Chat en vivo video y chat en vivo música: En estos bloques se inicia el chat en vivo cuando el usuario proviene de ver los videos o escuchar la música. Al final se le pregunta al usuario si ha sido atendido, en caso de que no se les redirige a los bloques de condición. -Condición esperar videos y Condición esperar música: Se redirige a los siguientes bloques si no se han visto todos los videos o escuchado toda la música, esto se consigue usando la condición de si se han visitado los bloques videos vistos o canciones oídas que se explican más adelante. En caso contrario se redirige al bloque Esperar personal 3. -Esperar personal video y Esperar personal música: En estos bloques se da la opción de escuchar música y ver videos o dejar los datos de contacto. -Esperar personal 3: En este bloque se finaliza el intento de iniciar el chat en vivo y se redirige al bloque para dejar los datos de contacto del usuario. Figura 39: Diagrama de flujo de conversación de bloques de chat en vivo. “Videos” En este grupo se encuentran los bloques necesarios para elegir y visionar los videos para esperar el chat en vivo. Consta de los siguientes bloques: -Elegir video: En este bloque se redirige la conversación a los bloques donde se encuentran los videos. El primer video se selecciona de forma aleatoria y ya el resto sigue esta secuencia: • Si se ha visionado el video 3 se redirige al bloque del video 2. • Si se ha visionado el video 2 se redirige al bloque del video 1. • Si se ha visionado el video 1 se redirige al bloque del video 3. Para conseguir esto se utiliza un condicional con el atributo “video” al que se le asigna un valor en los siguientes bloques. -Video 1, 2 o 3: En estos bloques se encuentran videos de la Universidad de Sevilla almacenados en Dropbox y que se reproducen a través de una webview. Cuando el usuario entra a un bloque se le asigna al atributo “video” el valor 1, 2 o 3 según corresponda y se le suma 1 al atributo “videos vistos”. A continuación, hay una condición para redirigir la conversación a otro bloque si el valor de “videos vistos” es 3. Figura 40: Bloque de videos. -Todos videos vistos: Este bloque sirve dar la opción al usuario de dejar los datos de contacto, escuchar música o iniciar el chat en vivo, pero ya no permite volver a los videos. Figura 41: Opciones del bloque “Todos videos vistos”. “Música” El funcionamiento de este grupo de bloques es muy similar al de los videos, pero con la diferencia que la música la elige el usuario no es al alzar. Para conseguir esto tenemos dos bloques de elegir música: -Elegir música 1: Es este bloque se le indica al usuario los tipos de música de los que dispone el bot y se le pregunta cual prefiere mediante la funcionalidad “Save User Input”. Después se le redirige al bloque de música que haya seleccionado. Figura 42: Bloque “Elegir música 1”. -Elegir música 2: Este bloque es igual que el anterior, pero se comprueba mediante condicionales el atributo “estilo de música” y otro atributo con el nombre del estilo como por ejemplo pop. El primer atributo almacena el ultimo estilo seleccionado por el usuario y el segundo atributo toma el valor 1 o 0 si ya se ha escuchado ese estilo. Si el usuario selecciona un estilo ya escuchado se redirige la conversación “Canciones escuchadas” para que se elija Figura 54: Enviar datos mediante método POST en Chatfuel. El siguiente paso es procesar algunas variables para conseguir el formato deseado para almacenarlos: -El idioma del género del usuario enviado por Chatfuel está en inglés para cambiarlo a español se utiliza la función str_replace($buscar, $remplazar, $cadena, int $cuenta) de PHP. Esta función busca dentro de $cadena el valor $buscar y los sustituye por el valor de $remplazar, las veces que lo haya sustituido quedan guardadas en $cuenta. Si el campo $cuenta esta vacío, ese valor no se almacena en ninguna variable. Figura 55: Cambio de idioma del atributo género. -El formato del atributo dateFormatted es el siguiente “2021-05-19 08:26:53 Europe/London” pero para almacenarlo es conveniente separar la fecha de la zona horaria. Para conseguirlo se utiliza la función substr ($variable , int $comienzo , int $longitud) para devolver de la cadena $variable todos los caracteres a partir del número $comienzo con un tamaño máximo $longitud. En nuestro caso se guardan los caracteres de la cadena a partir del número 20 que coincide con la zona horaria. Figura 56: Eliminar fecha del atributo dateFormatted. Después se realiza la operación contraria, eliminar la zona horaria para almacenar la fecha. Para esto se utiliza la función preg_replace ( $buscar, $remplazar, $cadena, int $limite , int $cuenta) que funciona igual que str_replace pero se pueden buscar expresiones regulares y establecer un límite de sustituciones. En nuestro caso se sustituyen por un espacio todos los caracteres que no sean números, “-” o “:” para eliminar la zona horaria. Figura 57: Eliminar zona horaria del atributo “dateFormatted”. -El formato del idioma y el país del atributo locale es el siguiente “es_ES” donde la primera abreviatura es el idioma y la segunda el país. Para separar ambas abreviaturas se utiliza la función strstr($cadena, $busqueda, $antes) que reconoce la primera coincidencia en la variable $cadena con la variable $busqueda y devuelve el resto caracteres a partir de esa coincidencia. Si la variable $antes tiene el valor “true” los caracteres devueltos son antes de la coincidencia. Figura 58: Separar abreviaturas del atributo “locale”. Por último, hay que convertir las abreviaturas a nombres completos usando la función switch que dependiendo del valor de la abreviatura dará a la variable un valor. Figura 59: Asignar nombre completo a la variable país según su abreviatura. Una vez ajustado el formato de las variables hay que realizar la conexión con la base de datos y guardar los valores de las variables en la tabla adecuada. Para realizar la conexión con el servidor MySQL se utiliza la función mysqli ($servername, $username, $password, $dbname) con las variables creadas al principio del archivo con los valores del nombre del servidor, usuario, contraseña y base de datos. Si ocurre algún error al conectar se notifica por pantalla. Después hay que comprobar que las variables no estén vacías e indicar en lenguaje mySQL la tabla y columnas de esta donde introducir los valores elegidos. Para ello se utiliza el comando Figura 60: Conexión con base de datos. “INSERT TO nombretabla (nombrecolumna1, nombrecolumna2) VALUES (valor1, valor 2)”. Figura 61: Crear comando para introducir datos en tabla de la base de datos MySQL. Por último, se realiza la conexión con la base de datos y se envía un mensaje al chat usando JSON indicando si la conexión se realizó correctamente o hubo errores. Figura 62: Realizar conexión y notificar al chat mediante JSON. Recuperar datos En este apartado solo se explican las nuevas funciones utilizadas para recuperar los datos ya que muchas partes del código son iguales que en el apartado anterior. La conexión con la base de datos se hace de la misma forma lo único que cambia es el comando que se utiliza para realizar la consulta que tiene este formato: “SELECT nombrecolumna1, nombrecolumna2 FROM nombrebasededatos.nombretabla WHERE nombrecolumna3=.$valor”. Con este comando se rescatan de la base de datos las columnas deseadas (no mbredecolumna1 y nombredecolumna2) de una cierta tabla(nombretabla de la base de datos nombrebasededatos) en las que el valor de una columna(nombrecolumna3) coincida con el indicado en la consulta($.valor). Figura 63: Comando para consultar datos de una tabla de la base de datos. Se realiza la consulta con la función mysqli_query($conn,$consulta) y si el resultado no es nulo se utiliza la función mysqli_fetch_row($resultado) para hacer un bucle. Esta función almacena los valores una fila de la tabla en un array enumerado, si se repite la función se almacenan los datos de la siguiente fila hasta que estén todas y el valor devuelto es nulo. Con esta función se crea un bucle en el que mientras el valor devuelto no sea nulo se crea un JSON con estos valores. A partir de la segunda fila de resultado hay que ir dividiendo el JSON en cada interacción para que mantenga este formato: ‘{ “messages”: [ {“text”: “texto1”},{“text”:”texto2”}]}’. Para ello se utiliza la función explode($busqueda, $cadena) que divide la cadena cuando encuentra una coincidencia con búsqueda y almacena las diferentes partes resultantes en un array numerado. Gracias a esta función conseguimos que el principio del código JSON sea siempre el mismo y se mantenga el formato. Por último, se vacía la variable de los resultados, se genera un JSON con un mensaje en caso de no tener ninguna coincidencia en la tabla al realizar la consulta, se cierra la conexión y se envía el JSON al chat. Figura 64: Crear variable para enviar las consultas mediante el chat. Figura 65: Crear mensaje en caso de no haber consultas en la base datos. Formulario de opinión Para crear y procesar el formulario de opinión se han utilizado dos archivos PHP. El primero de ellos es el formulario en sí y combina código en PHP, HTML y JavaScript con llamadas a archivos externos en formato CSS para el estilo de la página. El segundo archivo procesa y guarda la información del formulario, este solo usa código en lenguaje PHP y es muy similar a los vistos anteriormente. Formulario El lenguaje HTML utiliza etiquetas para definir las características del contenido del código, cada etiqueta define unas propiedades diferentes a cada elemento. Figura 65 Aparte a cada elemento se le puede añadir información que no sea visible en el resultado final de la página web mediante los atributos. Figura 66. Las siguientes tablas explican las principales etiquetas utilizadas en HTML: Preámbulo y elemento raíz Etiqueta Descripción !DOCTYPE Etiqueta para definir el tipo de documento html Etiqueta que engloba todo el documento <!-- ... --> Etiqueta para incluir un comentario que solo es visible en el código fuente Tabla 10: Etiquetas de preámbulo y raíz de HTML Metadatos Etiqueta Descripción head Etiqueta para crear el encabezado del documento title Etiqueta para crear el título del documento que aparece en la pestaña del navegador link Etiqueta para crear enlaces a otros archivos como puede ser los archivos de estilo CSS meta Etiqueta para crear metadatos sobre el documento style Etiquetas para incluir hoja de estilos en el documento Tabla 11: Etiquetas de metadatos de HTML. Figura 66: Ejemplo de etiqueta en HTML. Figura 67: Ejemplo de atributo en HTML Secciones Etiqueta Descripción body Etiqueta para crear el cuerpo principal del documento. article Etiqueta para crear un artículo, es decir para crear documentos que aparezcan en la página, pero se puedan ver de forma independiente. section Etiquetas para crear secciones, es decir clasificar en apartados el contenido principal. nav Etiquetas para agrupar enlaces a otras páginas web o partes de la misma. aside Etiqueta para crear contenido segundario que aparece en la lateral. h1 a h6 Etiquetas para crear encabezados (títulos) según su importancia. header Etiquetas para crear el contenido inicial de la página u otro elemento de la página. footer Etiquetas para crear el contenido general de la página u otro elemento que suele ir al final (pie). address Etiqueta para incluir información sobre el autor. Tabla 12: Etiquetas de secciones de HTML. Bloques de contenido Etiqueta Descripción p Etiqueta para crear un párrafo hr Etiqueta para crear un separador para indicar cambio de temática. Los navegadores la representan como una línea horizontal. div Etiqueta para agrupar elementos en diferentes divisiones. Suelen utilizarse para dar estilos diferentes a cada división. main Etiqueta para crear el contenido principal de la página web. figure Etiqueta para incluir una imagen o representación. figcaption Etiqueta para crear el pie de una imagen Tabla 13: Etiquetas de bloques de contenido de HTML. Texto (en línea) Etiqueta Descripción br Etiqueta para introducir un salto de línea wbr posible salto de línea a Etiqueta para crear enlaces a otras páginas web, suele utilizar el atributo href que contiene la url de destino span Etiqueta para crear texto genérico, suele ir acompañado del atributo class para especificar la función de la etiqueta. strong Etiqueta para dar importancia a un texto em Etiqueta para dar énfasis a un texto sub Etiqueta para crear un subíndice sup Etiqueta para crear un super índice abbr Etiqueta para crear una abreviatura dfn Etiqueta para crear una definición mark Etiqueta para resaltar texto small Etiqueta para crear un comentario time Etiqueta para introducir en su atributo date-time la información de la fecha y la hora, pero en formato apto para las maquinas Tabla 14: Etiquetas de texto de HTML. Tablas Etiqueta Descripción table Etiqueta para crear tablas caption Etiqueta para crear leyendas explicando el contenido de las tablas tbody Etiqueta para crear el cuerpo de la tabla, es decir el contenido de las filas de la tabla que no sean ni cabecera ni pie thead Etiqueta para agrupar las celdas de cabecera de las tablas, es decir el título de las columnas tfoot Etiqueta para crear el pie de la tabla, similar a la cabecera, pero en la parte de abajo de la tabla tr Etiqueta para definir cada fila de la tabla td Etiqueta para definir cada celda de una fila th Etiqueta para crear celdas de cabecera, los navegadores las remarcan en negrita Tabla 15: Etiquetas de tablas de HTML. Formularios Etiqueta Descripción form Etiqueta para crear un formulario que permite al usuario introducir y enviar datos al servidor. Los atributos más importantes son action que indica el archivo que se va a encargar de procesar los datos y method que indica el método para enviar esos datos (POST o GET). label Etiquetas para asociar un texto a un elemento de control como puede ser un botón, cuadro de texto, etc. input Etiquetas para crear un elemento de control como puede ser un botón, caja de texto, etc. El atributo más importante es type, según el valor de type se puede crear lo diferentes elementos de control(submit, reset, button, text, password, number, search, tel, url, email, date, time, color,etc). button Etiquetas para crea botones que aparte de texto pueden llevar otro tipo de contenido como imágenes select Etiquetas para crear menús con diferentes opciones para seleccionar option Etiquetas para crear las diferentes opciones de un menú textarea Etiquetas para crear un área donde introducir texto. progress barra de progreso meter indicador fieldset Etiquetas para agrupar grupos de controles, los navegadores muestran una caja alrededor. legend Etiquetas para añadir una leyenda a los grupos de controles Tabla 16: Etiquetas de formularios de HTML. A continuación, se va explicar la parte principales del código del formulario. La primera parte está escrita en lenguaje PHP y es la encargada de recibir y guardar los datos que se envían a través de Chatfuel. Por otro lado, las siguientes cabeceras indican al navegador web que no hay que guardar el cache en absoluto. Figura 67: Configuración del cache en HTML Para recibir los datos del chat se utiliza la misma estructura que en los archivos explicados anteriormente con la diferencia que se utiliza la función $_REQUEST[‘nombreatributo’] que sirve para recibir datos con el método POST y GET. Figura 68: Recibir datos por el método POST El resto del código está escrito en HTML y corresponde al formulario en sí. La primera parte es la cabecera que consta de varias partes: - Metadatos: En estos se especifican los caracteres usados, la compatibilidad con diferentes versiones de navegadores y la visualización en pagina responsivas para que la página web se vea correctamente independientemente del tamaño del dispositivo. Figura 68: Metadatos de visualización de la página web. -Título: Es el título que aparece en la pestaña del navegador. Figura 69: Título de la pestaña del navegador. -Links a archivos CSS: Enlace con los archivos de estilo en formato CSS para dar diferentes presentaciones a las partes de la página web. Figura 70: Utilizar estilos mediante archivos CSS. -Extensiones SDK de Messenger: Es una parte de código en JavaScript proporcionada por Facebook para activar funciones predefinidas en la aplicación de Messenger de Facebook. Figura 71: Activar extensiones SDK de Facebook Messenger. El resto del código es el contenido del formulario: -Se crea el formulario indicando su nombre, estilo del archivo CSS que se va utilizar mediante el atributo class, el método y el archivo al que se envían los datos. Figura 72: Atributos básicos del formulario. -Se crean los diferentes apartados de la interfaz para que el usuario introduzca los datos. Hay cuadros para introducir texto o emails, menús desplegables con varias opciones y recuadros para seleccionar una de las opciones. Figura 73: Cuadros de texto del formulario. Figura 74: Menú desplegable del formulario. Figura 81: Código CSS creando la presentación del menú desplegable del formulario. Las características del estilo del resto de elementos se crean de forma similar, pero utilizando otras propiedades de las tablas anteriores. Tutorías En este apartado se explica los archivos para crear las páginas webs necesarias para administrar las tutorías de los profesores. Es el más complejo y consta de varios archivos PHP, JavaScript, CSS e iconos agrupados de la siguiente forma: -En la carpeta principal se encuentran los archivos PHP que contienen código HTML y JavaScript y tienen representación gráfica, el usuario puede ver e interactuar con ellos, es decir las páginas web en sí. Aparte aquí están las siguientes subcarpetas que contienen el resto de archivos. -php: Esta carpeta contiene el resto de archivos PHP que son los encargados de realizar procesar la información y realizar funciones como acceder a la base de datos. -js: Esta carpeta contiene todos los archivos JavaScript que encargan de enviar información mediante el método post cuando se pulsa un botón o se llama a una función. La información que introduce el usuario se envía desde las páginas web (archivos con código HTML) a los archivos PHP de procesado de información. Aparte de estos archivos en esta carpeta esta la biblioteca multiplataforma JQuery, que contiene una serie de métodos y funciones predefinidas en JavaScript muy utilizados en el desarrollo de páginas y web, y un archivo que contiene todas las funciones de la biblioteca Bootstrap que se explica a continuación. -css: Esta carpeta contiene todos los archivos CSS de la biblioteca Bootstrap. Esta herramienta está formada por una biblioteca de archivos CSS y JavaScript que contienen múltiples modales y funciones para mejorar la interfaz del sitio web. -fonts: Esta carpeta contiene todos los iconos de la biblioteca Bootstrap. A continuación, se explica el código que sea necesario ya que mucha parte de él es similar al explicado anteriormente y la función de cada archivo. -”Index.php”: Este archivo contiene la página de inicio de sesión y registro de la página web. Estas dos funciones se realizan mediante un formulario en HT ML como el explicado en las páginas anteriores con la única diferencia es que los datos no se envían directa mente al archivo PHP que los procesa, sino que se envían al archivo JavaScript y función de este es la encargada de enviarlos al archivo PHP que los almacena en la base de datos. Figura 83 Aparte incluye los archivos JS que contienen las funciones y las bibliotecas JQuery y Bootstrap. -” frmestudiante.php”, “frmprofesor.php” y “frmadministrador.php”: Estos archivos contienen la página al iniciar sesión de lo diferentes perfiles: estudiante, profesor y administrador. En estas páginas aparece una interfaz con un menú con las diferentes opciones que tiene cada rol. Cuando se accede a una de estas secciones esta interfaz se mantiene añadiendo el contenido de la sección. Figura 84: Menú de la interfaz del rol de administrador. A continuación, se explica cada una de las secciones de cada rol. Administrador El primer rol es el de administrador que tiene permisos para acceder y modificar cualquier dato de las tutorías. Este rol tiene las siguientes secciones: -Administradores y Profesores: Permite agregar o eliminar administradores y profesores de la página web. Este archivo accede a la tabla de la base de datos donde se guardan todos los usuarios y muestra todos los que tienen el rol de la sección mediante un bucle “while”. Los nombres de los usuarios se muestran en la columna de una tabla y en la otra aparece un botón para eliminarlos, cuando se pulsa el botón se llama a una de las dos funciones de Java que envía el nombre del usuario mediante el atributo “id” al archivo eliminaradministrador.php o eliminarprofesor.php dependiendo del rol y se elimina de la base de datos. Aparte debajo de la tabla aparece un botón para agregar usuarios mediante un formulario que sigue el mismo proceso para enviar los datos al archivo agregaradmin.php o agregarprofesor.php dependiendo del rol para guárdalos en la base de datos. Figura 82: Principio del código del formulario de registro. Figura 83: Código que incluye los archivos JavaScript. Figura 85 : Sección de administradores del rol administrador. Figura 86 : Código para crear la tabla de la sección de administradores -Estudiantes: Permite agregar, eliminar o modificar los datos de los estudiantes. Este archivo sigue el mismo proceso que las secciones anteriores para mostrar, eliminar y agregar los estudiantes con la diferencia que los datos son enviados a los archivos agregarestudiante.php y eliminarestudiante.php. La función de modificar los datos permite cambiar cualquier dato del estudiante menos su correo, que es el identificador único del usuario, mediante cuadros de texto editables. Al modificar alguno de estos cuadros de texto se llama a una función JS que envía ese dato mediante el método post al archivo modificarestudiante.php que lo cambia en la base de datos. Figura 87: Sección de estudiante del rol de administrador. Figura 88: Código para la crear la tabla de la sección de estudiantes -Tutorías: Muestra el horario de tutorías de cada profesor y permite agrega y eliminar horas a este horario, para ello utiliza el mismo método anterior en el que envía los datos a los archivos nuevohorario.php y eliminarhora.php. También muestra si algún estudiante ha reservado alguna hora de tutoría y permite mover o cancelar la reserva. Al pulsar el botón de “Mover” redirige al administrador a una nueva página con los horarios de tutorías libres para que pueda seleccionar uno y se envían los datos al archivo mover moverestudiante.php para modificarlos en la base de datos. Figura 89: Sección de tutorías del rol de administrador. Figura 90: Página para mover reservas de tutorías La siguiente tabla resume las funciones del rol de administrador indicando los archivos que se utilizan para ello y las tablas de la base de datos con las que conectan estos archivos: Archivo PHP de origen Funciones Archivo JS Archivo PHP de destino Tabla de base de datos administradores.php Añadir administrador main.js agregaradministrador.php usuariostutorias Eliminar administrador eliminaradmin.php usuariostutorias profesores.php Añadir profesor main.js agregarprofesor.php usuariostutorias Eliminar profesor eliminarprofesor.php usuariostutorias estudiantes.php Añadir estudiante mainestudiante.js agregarestudiante.php usuariostutorias y datosusuario Eliminar estudiante eliminarestudiante.php usuariostutorias y datosusuario Modificar estudiante modificarestudiante.php datosusuario tutorias.php Añadir horario tutoría maintutoriaadmin.js nuevohorario.php horarios Eliminar horario tutoría eliminarhora.php horarios Mover reserva de tutoría moverestudiante.php horarios y datosusuario Eliminar reserva de tutoría cancelartutoria.php horarios y datosusuario Tabla 25: Archivos y funciones del rol de administrador. Estudiante Este rol solo tiene permisos para modificar sus datos de usuario y poder reservar o cancelar horas de tutorías. La interfaz de la página web es similar a la anterior, pero cambiando las secciones del menú que se explican a continuación: Figura 91: Menú de la interfaz del rol de estudiante. -Datos personales: En esta sección se muestran los datos de alumno y permite modificarlos mediante cuadros de texto editables. Cuando se modifican el valor de estos cuadros se llama a una función JS que envía el nombre de la variable y su nuevo valor al archivo modificarestudiante.php. -Horarios: En esta sección se muestran todos los horarios de tutorías que hay sin reservar en una tabla ordenados por profesor y horas. Cada hora dispone de un botón para reservarla, al pulsarlo se llama a una función JS que envía el “id” de la hora de tutoría y el nombre del usuario al archivo apartartutoria.php que se encarga de guardar esta información en la base de datos. Solo se permite un máximo de 2 horas de tutorías por alumno así que si el alumno ya las tiene reservadas en vez de la tabla se muestra un mensaje de notificación. Figura 92: Código para crear lista con tutorías disponibles. - Mis tutorías: En esta sección se muestran las tutorías que tiene reservadas el alumno y da la opción a eliminarlas mediante un botón, al pulsarlo se envían los datos mediante una función JS al archivo cancelartutoria.php que se encarga de eliminarlos de la base de datos. Figura 93: Lista con tutorías reservadas por el alumno. La siguiente tabla resume las funciones del rol de estudiante indicando los archivos que se utilizan para ello y las tablas de la base de datos con las que conectan estos archivos: Archivo PHP de origen Funciones Archivo JS Archivo PHP de destino Tabla de base de datos datospersonales.php Modificar datos del estudiante main.js modificarestudiante.php datosusuario horarios.php Reservar tutoría maintutoria.js apartartutoria.php horarios y datosusuario mistutorias.php Cancelar reserva de tutoría maintutoria.js cancelartutoria.php horarios y datosusuario Tabla 26: Archivos y funciones del rol de estudiante. Profesor Este rol solo tiene permisos para realizar acciones relacionadas con sus tutorías como son agregar y eliminar horas de tutoría a su horario, consultar los datos de los estudiantes que han reservado alguna tutoría y cancelar estas reservas. El menú tiene la misma presentación que en los roles anteriores. Figura 94: Página de tutorías del rol de profesor. El funcionamiento de los botones de esta página es el mismo que en las secciones de horarios de tutoría de los otros roles, lo único que varía es el botón “ver”, que permite ver los datos del alumno. Al pulsar este botón se envía el correo del estudiante mediante una función JS usando el método POST al archivo consultarestudiante.php que muestra los datos del usuario, pero en este caso no se pueden modificar. Figura 95: Código para generar la lista de las tutorías La siguiente tabla resume las funciones del rol de profesor indicando los archivos que se utilizan para ello y las tablas de la base de datos con las que conectan estos archivos: Archivo PHP de origen Funciones Archivo JS Archivo PHP de destino Tabla de base de datos tutoriasprofesor.php Añadir horario tutoría mainprofesor.js nuevohorarioprofesor.php horarios Eliminar horario tutoría eliminarhora.php horarios Cancelar reserva de tutoría cancelartutoriaprofesor.php horarios y datosusuario Ver datos del estudiante consultardatos.php datosusuario Tabla 27: Archivos y funciones del rol de profesor Archivos JavaScript Estos archivos son los encargados de enviar variables mediante el método POST cuando hay un evento como pulsar un botón a los archivos PHP que conectan con la base de datos. En la siguiente tabla se explican las funciones de la biblioteca jQuery utilizadas en el proyecto: Función Explicación Parámetros $(document).ready(function()) Ejecuta función cuando la página web se carga por completo document(opcional): Indica el DOM de la página web actual. function(obligatorio): Función a ejecutarse $(id).blur(function() Ejecuta la función cuando el elemento con ese id pierde el foco que obtuvo al ser clicado por el cursor o mediante el tabulador. id(obligatorio): identificador del elemento. function(opcional): Función a ejecutarse $(this).attr(id) Devuelve el valor del atributo de elemento seleccionado con ese id. selector(obligatorio): Elemento a examinar. El selector "this" indica que solo afecta al elemento que activo el evento. id: identificador del atributo a examinar. $(this).text(id) Devuelve el texto del elemento seleccionado. selector(obligatorio): Elemento a examinar. El selector "this" indica que solo afecta al elemento que activo el evento. id: identificador del atributo a examinar. $(id).click(function() Ejecuta la función cuando el elemento con ese id es clicado. id(obligatorio): identificador del elemento. function(opcional): Función a ejecutarse. $(id).change(function() Ejecuta la función cuando el elemento con ese id cambia de valor. id(obligatorio): identificador del elemento. function(opcional): Función a ejecutarse. document.getElementById(id).val ue Devuelve el valor del atributo con el id indicado id(obligatorio): identificador del atributo. window.location.href = archivo Redirige a la url del archivo indicado. archivo(obligatorio): nombre del archivo al que redirigir. alert(mensaje) Muestra un cuadro de alerta con un mensaje y un botón de "OK" mensaje(obligatorio): Mensaje a mostrar en el cuadro. console.log(mensaje) Muestra un mensaje en consola. mensaje(obligatorio): Mensaje a mostrar en consola. $.post(archivo, variable, función) Envía datos al archivo indicado mediante el método post y realiza una función. archivo(obligatorio): nombre del archivo al que enviar los datos. variable(opcional): Especifica la variable a enviar. función(opcional): Indica la función a realizar cuando se realice el envío. $(selector).serialize(tipo) Devuelve los valores de los campos de un formulario en el formato adecuado para enviarlos mediante una llamada AJAX(método POST o GET) selector(obligatorio): Elemento a examinar. tipo(opcional): Indica el tipo de campos a devolver. Tabla 28: Funciones de la biblioteca jQuery A continuación, se muestra un ejemplo de función JavaScript que se activa al pulsar un botón y envía los datos para eliminar un administrador, el resto de funciones de JavaScript tiene una estructura similar. Figura 96: Código en JavaScript para enviar datos a archivos PHP. Figura 97: Código en PHP para generar el botón que activa la función en JavaScript. Por último, se muestra esta tabla con todos los archivos JavaScript y la funciones que contienen: Archivo JavaScript Función Archivo PHP destino main.js Modificar los datos de un estudiante con el rol de estudiante. modificarestudiante.php Eliminar administrador con el rol de administrador. eliminaradmin.php Registrar nuevo administrador con el rol de administrador. agregaradministrador.php Registrar nuevo estudiante desde página de inicio. agregarestudiante.php Registrar nuevo profesor con el rol de administrador. agregarprofesor.php Iniciar sesión con cualquier rol. iniciarsesion.php mainestudiante.js Modificar los datos de un estudiante con el rol de administrador modificarestudiante.php Eliminar estudiante con el rol de administrador. eliminarestudiante.php Registrar nuevo estudiante con el rol de administrador. agregarestudiante.php mainmover.js Mover reserva de tutoría de un estudiante con el rol de administrador. moverestudiante.php mainprofesor.js Consultar los datos de un alumno que haya reservado una tutoría con el rol de profesor consultardatos.php Cancelar una reserva de tutoría de un alumno con el rol de profesor. cancelartutoriaprofesor.php Eliminar horas del horario de tutoría con el rol de profesor eliminarhora.php Añadir horas del horario de tutoría con el rol de profesor nuevohorarioprofesor.php maintutoria.js Reservar una hora de tutoría con el rol de alumno. apartartutoria.php Cancelar una reserva de tutoría con el rol de alumno. cancelartutoria.php 7. PRUEBAS Y ANÁLISIS DE RESULTADOS 7.1 Pruebas del servidor de producción Para realizar las pruebas del chatbot se simulan varias conversaciones con usuarios que buscan diferentes tipos de información, con el fin de detectar y resolver posibles errores para que el bot no tenga puntos muertos. Primer usuario El primer usuario que se simula busca información sobre los cursos y las instalaciones deportivas de la universidad preguntando por estos temas directamente sin acceder al menú. El usuario pregunta por los cursos después de que el bot lo salude y accede al menú con los enlaces a los apartados del Centro de Formación Permanente. Figura 101: Chat para prueba del bot con usuario 1 Figura 102: Chat para prueba del bot con usuario 1 Por último, el usuario busca información para realizar deporte y el bot le conduce al menú con la información del SADUS donde se encuentran todos los enlaces relacionados con las instalaciones deportivas de la universidad. Figura 103: Chat para prueba del bot con usuario 1 Usuario 2 El segundo usuario que se simula busca información sobre las bibliotecas disponibles de la universidad. El bot lo conduce al menú con las diferentes bibliotecas agrupadas por campus y el usuario accede a la información de los horarios y ubicación de una de ellas. Figura 104: Chat para prueba del bot con el usuario 2 Después el usuario consulta por los diferentes temas en los que el bot le puede ayudar y es redirigido al menú principal donde accede a la sección de novedades de la universidad. Figura 105:Chat para prueba del bot con el usuario 2 Una vez consultadas las novedades, el usuario quiere información sobre las asignaturas de su carrera, pero el bot no tiene asociado la palabra “asignatura” con ningún bloque y ofrece al usuario la opción de usar el buscador en la web de la universidad. Figura 106:Chat para prueba del bot con el usuario 2 La información que se encuentra en la web no es la que busca el usuario y se le da la opción de contactar con algún miembro del personal, pero al estar en verano están de vacaciones y no se puede iniciar un chat en vivo. Para mantener la calidad del servicio el bot permite al usuario dejar sus datos de contacto, que se guardan en la base de datos, para que pasadas las vacaciones alguien de personal contacte con él y resuelva su duda. Figura 107:Chat para prueba del bot con el usuario 2 Figura 108:Chat para prueba del bot con el usuario 2 Usuario 3 El tercer usuario que se simula busca información sobre la fecha de entrega de la automatrícula, como el bot no reconoce la frase inicial del usuario le contesta con una de sus frases por defecto para que el usuario simplifique la frase para buscar la información. Con la segunda frase del usuario el bot reconoce el tema “automatrícula” y conduce al usuario hasta el menú con las preguntas frecuentes sobre ese tema. Figura 109:Chat para prueba del bot con el usuario 3 Por último, el usuario busca información sobre las prácticas en empresas externas y el bot lo conduce al menú de preguntas frecuentes de las practicas siguiendo un procedimiento similar al anterior. Figura 110:Chat para prueba del bot con el usuario 3 Usuario 4 El cuarto usuario que se si mula está interesado en reservar una tutoría de uno de sus profesores y accede a la página web para ello mediante el enlace que le proporciona el bot. Después el usuario que ya había interactuado con el bot antes sabe que puede escuchar música mientras espera a alguien del personal, aunque estén de vacaciones. Figura 111:Chat para prueba del bot con el usuario 4 Figura 112: Chat para prueba del bot con el usuario 4 7.2 Respaldo de información y políticas de seguridad 7.2.1 Recopilación de información El chatbot de este proyecto solo recopilara de los usuarios la información estrictamente necesaria para poder realizar sus funciones: • Los datos del usuario proporcionados por Facebook que son nombre y apellido de la cuenta, ID de Messenger del usuario, fuente por la que accedió al chat, genero, país de localización y zona horaria. • Los datos recopilados mediante el formulario de opinión que son nombre, apellido, email, opinión sobre el bot y etapa de estudios del usuario. • Los datos de contacto para resolver dudas mediante el personal de la atención al cliente que son email, teléfono y motivo de consulta. • Los datos para registraste en la página web para reservar tutorías que son nombre, apellido, email, grado que se está estudiando en la universidad y una contraseña para la cuenta. 7.2.2 Uso de datos personales Los datos personales de los usuarios recopilados mediante Chatfuel se utilizan para los siguientes propósitos: • Verificar la identidad de los usuarios en la plataforma de Facebook. • Proporcionar los datos necesarios para el personal de atención al cliente para poder contactar con los usuarios. • Analizar el nivel de satisfacción de los usuarios con el servicio del chatbot. • Crear perfiles de usuarios con los datos relevantes del estudiante para poder reservar tutorías. 7.2.3 Divulgación de datos personales Los datos personales proporcionados por los usuarios no se divulgarán entre terceros, solo estarán disponibles para profesores, administradores del chat y personal de atención al cliente. 7.2.4 Gestión del cambio Hay una serie de procedimientos para introducir el chatbot de forma adecuada y realizar una correcta gestión del cambio, para preparar a una empresa para la implementación del chatbot. Hay varias tareas a realizar como la comunicación a las personas afectadas, la formación de los agentes o el soporte y seguimiento del chatbot. Figura 113:Tareas asociadas a la gestión del cambio Esta serie de tareas aplicadas a este proyecto son las siguientes: • Informar a los profesores y personal de la universidad sobre la integración de un chatbot. • Formar al personal encargado de administrar el contenido del bot y al personal encargado de atender a los usuarios en caso de que el bot no sea capaz de atender sus necesidades. • Comunicar a los alumnos la introducción del nuevo chatbot mediante la página web de la universidad, los profesores y emails divulgativos. • Seguimiento de las conversaciones del bot para solucionar problemas y errores. • Analizar las opiniones de los usuarios para posibles mejoras. 8. FUTURAS AMPLIACIONES Y MEJORAS 8.1 Mejoras Una vez creado el bot se plantean una serie de mejoras y ampliaciones de contenido para implementar más adelante y mejorar el servicio que se les dará a los usuarios en el futuro. Estas son las posibles mejoras planteadas: -Aumentar la base de datos de la inteligencia artificial con las frases que el bot no reconoce de las conversaciones que mantiene con los usuarios para así eliminar los puntos muertos de las conversaciones. Para ello se utiliza una herramienta de Chatfuel que te indica las frases que condujeron al bot al bloque “Default Answer” ordenadas según con la frecuencia que se utilizaron. Para mejorar aún más la inteligencia artificial conectar el chatbot con Dialogflow mediante Janis para usar funciones de su inteligencia artificial como: • Permiten utilizar contextos que perduran en la conversación durante una serie de interacciones, es decir si el bot reconoce que el usuario está hablando sobre ropa este contexto permanecerá un numero de interacciones y cualquier frase que el bot no reconozca como otro contexto se le asignará a la ropa como por ejemplo si usa una frase indicando el color. • Dispone de machine learning mediante el cual el bot aprende solo según los usuarios interactúen con él. También permite introducir textos en Word o mediante urls para que el bot aumente la base de datos de su inteligencia artificial, pero esta función solo está permitida con textos en inglés. -Mejorar la página web de tutorías añadiendo un video chat que permita realizar las tutorías de forma telemática, reduciendo el contacto y el tiempo que los estudiantes necesitan para resolver sus dudas con los profesores. -Añadir más secciones de preguntas frecuentes como: • Explicación del contenido y salidas laborales de las asignaturas de cada grado que oferta la universidad. • Resolución de dudas sobre todos los temas relacionados con el COVID-19, como si va haber exámenes presenciales, medidas a tomar cuando se asiste a algún centro de la US, etc. -Añadir una sección con información sobre colegios mayores y residencias para facilitar a los estudiantes que no residan en Sevilla a encontrar un lugar para poder realizar sus estudios. 8.2 Conclusiones Tras finalizar el proyecto se ha comprobado que utilizar un chatbot mejora el servicio al cliente en cualquier empresa proporcionando las siguientes ventajas: • Reduce los costos del servicio de atención al cliente quitándole carga de trabajo al personal. • Reduce el tiempo de respuesta a los usuarios y permite resolver cualquier duda mientras este en su base de datos. • Ofrece atención 24 horas al día permitiendo al usuario resolver sus problemas en cualquier momento.