Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Universidad Politécnica de Madrid Escuela Técnica Superior de Ingenieros Informáticos Grado en Ingeniería Informática Trabajo Fin de Grado ChatBot para Proyecto Mentor Autor: Sara Sánchez Mota Tutor(a): Guillermo Román Díez Madrid, junio 2023 Este Trabajo Fin de Grado se ha depositado en la ETSI Informáticos de la Universidad Politécnica de Madrid para su defensa. Trabajo Fin de Grado Grado en Ingeniería Informática Título: ChatBot para Proyecto Mentor Junio 2023 Autor: Sara Sánchez Mota Tutor: Guillermo Román Díez Lenguajes, Sistemas Informáticos e Ingeniería de Software ETSI Informáticos Universidad Politécnica de Madrid i Resumen En este Trabajo Final de Grado se realiza una introducción a la construcción de chatBots. Se describirá la metodología seguida para construir un prototipo capaz de interactuar con el alumno. Se realizará un pequeño estudio del estado del arte de las principales tecnologías para la creación de este y las explicaciones correspondientes en el uso de la API de Telegram por la que se ha optado para la realización de este trabajo, así como otras posibles opciones o alternativas. El Proyecto tiene como objetivo implementar un asistente virtual o chatBot que permita facilitar la búsqueda de datos que suelen ser frecuentados y consultados por los alumnos de nuevo ingreso de la Universidad Politécnica de Madrid. Este chatBot está especialmente implementado para los alumnos de primero de carrera, aunque se ha tenido en cuenta que sea escalable de cara a un futuro por si se quieren añadir el resto de los cursos. De momento, solo los alumnos de primer curso, estos tendrán toda la información necesaria sobre sus asignaturas, profesores, y temas de interés para esta nueva etapa en la Universidad. El diseño completo del proyecto requiere el diseño y desarrollo estructural tanto de una base de datos en la que se van a almacenar los elementos necesarios para el proyecto (profesores, asignaturas, aulas, horarios, porcentajes, etc.) como de una API que sirva como controlador y ofrezca servicios entre la base de datos y el chatBot y futuras herramientas que pueden requerirla. Además, se ha desarrollado una versión preliminar del chatBot para realizar las pruebas necesarias y así consolidar las tecnologías y servicios a utilizar en este proyecto. También se harán ver todos los escenarios posibles, así como la arquitectura del proyecto. Por último, se muestra el producto final, explicando cómo funciona y mostrando el resultado mediante imágenes y capturas de pantalla desde el propio chat. ii Abstract This Final Degree Project is an introduction to the construction of chatBots. The methodology followed to build a prototype capable of interacting with the student will be described. A small study of the state of the art of the main technologies for the creation of chatBots and the corresponding explanations in the use of Telegram's API, which has been chosen for the realization of this work, as well as other possible options or alternatives, will be made. The Project aims to implement a virtual assistant or chatBot to facilitate the search for data that are usually frequented and consulted by new students at the Polytechnic University of Madrid. This chatBot is specially implemented for first year students, although it has been considered that it is scalable in the future in case the rest of the courses are added. For the moment, only first year students will have all the necessary information about their subjects, professors, and topics of interest for this new stage in the University. The complete design of the project requires the design and structural development of both a database in which the necessary elements for the project will be stored (teachers, subjects, classrooms, schedules, percentages, etc.) and an API that serves as a controller and provides services between the database and the chatBot and future tools that may require it. In addition, a preliminary version of the chatBot has been developed to perform the necessary tests and thus consolidate the technologies and services to be used in this project. All possible scenarios will also be shown, as well as the architecture of the project. Finally, the final product will be shown, explaining how it works and showing the result through images and screenshots from the chat itself. iii Tabla de contenidos 1 Introducción ......................................................................................1 1.1 Motivación .......................................................................................... 2 1.2 Objetivos ............................................................................................ 3 1.3 Planificación ....................................................................................... 5 1.4 Estructura de la Memoria ................................................................... 6 2 Desarrollo ..........................................................................................7 2.1 Estudio de las necesidades de los alumnos ........................................ 8 2.1.1 Requisitos .................................................................................... 8 2.2 Tecnologías empleadas ....................................................................... 9 2.2.1 SQL ............................................................................................ 10 2.2.2 MySQL Workbench (Gestor de Bases de Datos) .......................... 10 2.2.3 API de Telegram ......................................................................... 11 2.2.4 Conector de Python con Base de Datos ...................................... 13 2.2.5 Threads de Python ..................................................................... 15 3 Análisis y Diseño ............................................................................. 16 3.1 Creación de la Base de Datos ........................................................... 17 3.2 Inserción de los datos en la Base de Datos ....................................... 18 3.3 Conexión entre Python y la Base de Datos ........................................ 20 3.3.1 Creación de Bot con BotFather................................................... 21 3.4 Código Python .................................................................................. 22 4 Manual de usuario............................................................................ 27 5 Resultados y conclusiones ............................................................... 42 6 Análisis de Impacto ......................................................................... 43 7 Bibliografía ...................................................................................... 45 iv TABLA DE FIGURAS FIGURA 1 DIAGRAMA DE GANTT ...................................................................................... 5 FIGURA 2. EJEMPLO DE EJECUCIÓN DE BUCLE INFINITO ...................................................... 9 FIGURA 3. LOGO DE SQL ............................................................................................ 10 FIGURA 4. LOGO DE MYSQL WORKBENCH ..................................................................... 10 FIGURA 5. MÓDULOS DE TELEBOT ................................................................................ 11 FIGURA 6. EFECTO DE FORCEREPLY ............................................................................. 11 FIGURA 7. EFECTO DE REPLYKEYBOARDMARKUP ............................................................ 12 FIGURA 8. EFECTO DE REPLYKEYBOARDREMOVE ............................................................ 12 FIGURA 9. MÓDULO DE MYSQL CONNECTOR .................................................................. 13 FIGURA 10. CÓDIGO DE CONEXIÓN A LA BASE DEDATOS ................................................... 13 FIGURA 11 CÓDIGO DE SELECT .................................................................................. 14 FIGURA 12 CÓDIGO DE UPDATE ................................................................................. 14 FIGURA 13 CÓDIGO DE INSERT ................................................................................... 14 FIGURA 14. MÓDULO DE THREADS EN PYTHON ................................................................ 15 FIGURA 15. CÓDIGO DE EJEMPLO DE USO DE THREADS .................................................... 15 FIGURA 16. ESTRUCTURA DEL PROYECTO ....................................................................... 16 FIGURA 17. TABLAS DE LA BASE DE DATOS ..................................................................... 17 FIGURA 18 EJEMPLO DE TABLA DE USUARIOS .................................................................. 18 FIGURA 19 EJEMPLO DE TABLA TIENE_GRUPO ................................................................. 18 FIGURA 20 EJEMPLO DE TABLA TABLA_ASIGNATURAS ........................................................ 19 FIGURA 21 EJEMPLO DE TABLA AULAS ........................................................................... 19 FIGURA 22 EJEMPLO DE TABLA GRUPO .......................................................................... 19 FIGURA 23 EJEMPLO DE TABLA HORARIOS ...................................................................... 19 FIGURA 24 EJEMPLO DE TABLA TIENE_PROFE .................................................................. 19 FIGURA 25 EJEMPLO DE TABLA PORCENTAJE_ASIGNATURAS ............................................... 20 FIGURA 26 MÓDULO DE CONECTOR SQL EN PYTHON........................................................ 20 FIGURA 27 FUNCIONAMIENTO DE CONECTOR SQL ............................................................ 20 FIGURA 28 GENERACIÓN DE BOT CON TOKEN EN PYTHON .................................................. 21 FIGURA 29 EJEMPLO DE BOT EN LA APLICACIÓN DE TELEGRAM ........................................... 22 FIGURA 30 MENÚ DE COMANDOS DESDE TELEGRAM ........................................................ 28 FIGURA 31 CONVERSACIÓN PARA DARSE DE ALTA ............................................................. 29 FIGURA 32 DADA DE ALTA ESTANDO REGISTRADO ............................................................ 29 FIGURA 33 CAMBIO DE NOMBRE ................................................................................... 30 FIGURA 34 RESULTADOS DE LLAMAR A /MI_INFO ............................................................. 30 FIGURA 35 INTRODUCCIÓN DE CAMPO ERRÓNEO .............................................................. 31 FIGURA 36 EJEMPLO DE CONVERSACIÓN CON BOTONES .................................................... 32 FIGURA 37 LLAMADA A COMANDO DE /MIS_ASIGANTURAS .................................................. 33 FIGURA 38 TECLADO PARA SELECCIONAR ASIGNATURA ...................................................... 33 FIGURA 39 TECLADO CON OPCIONES DE INFORMACIÓN ...................................................... 34 FIGURA 40 SOLICITUD DE INFORMACIÓN SOBRE PROFESOR DE ÁLGEBRA LINEAL .................... 34 FIGURA 41 SOLICITUD DE INFORMACIÓN SOBRE HORARIO DE ÁLGEBRA LINEAL ...................... 35 FIGURA 42 SOLICITUD DE INFORMACIÓN SOBRE COORDINADOR DE ÁLGEBRA LINEAL .............. 35 FIGURA 43 SOLICITUD DE INFORMACIÓN COMPLETA DE ÁLGEBRA LINEAL ............................. 35 FIGURA 44 TECLADO CON OPCIONES DE TASAS ................................................................ 36 FIGURA 45 EJEMPLO DE TASAS DE UN AÑO CONCRETO ...................................................... 37 FIGURA 46 MEDIA DE TASAS ........................................................................................ 37 FIGURA 47 TASAS MÁXIMAS Y MÍNIMAS ........................................................................... 38 FIGURA 48 SELECCIÓN DE CURSO PARA /TASAS_CURSO .................................................... 38 FIGURA 49 SELECCIÓN DE CÁLCULO PARA /TASAS_CURSO ................................................. 39 FIGURA 50 SELECCIÓN DE TASA PARA /TASAS_CURSO....................................................... 39 FIGURA 51 OPCIONES DENTRO DEL COMANDO DE /FAQ .................................................... 39 FIGURA 52 OPCIONES DENTRO DE TRÁMITES ................................................................... 40 FIGURA 53 OPCIONES DENTRO DE RESERVAS .................................................................. 40 FIGURA 54 RESULTADO AL SELECCIONAR OTRAS INSTALACIONES ........................................ 40 file:///C:/Users/saras/Downloads/ChatBot%20Proyecto%20Mentor%20-%20Sara%20Sánchez%20(1).docx%23_Toc138172522 file:///C:/Users/saras/Downloads/ChatBot%20Proyecto%20Mentor%20-%20Sara%20Sánchez%20(1).docx%23_Toc138172523 file:///C:/Users/saras/Downloads/ChatBot%20Proyecto%20Mentor%20-%20Sara%20Sánchez%20(1).docx%23_Toc138172550 v FIGURA 55 MENSAJE DE CONFIRMACIÓN PARA ABRIR UN ENLACE ........................................ 41 FIGURA 56 EJEMPLO DE PÁGINA WEB ABIERTA DESDE EL BOT ............................................ 41 FIGURA 57 OPCIONES DE OTROS ................................................................................... 41 1 1 Introducción El termino bot es una abreviatura de la palabra robot en el ámbito de la informática. Los bots son programas informáticos que interactúan en la red simulando ser una persona. Los chatBots fueron uno de los primeros bots desarrollados, es un sistema que entiende el lenguaje natural y tiene inteligencia sobre un cierto contexto de forma que puede interactuar con el usuario para resolver un determinado problema. En otras palabras, un chatBot es un derivado de un buscador tradicional, con el que puedes comunicarte mediante mensajes de texto. Esta tecnología comenzó en la década de los años 60 con el objetivo de mostrar si estos sistemas eran capaces de exhibir un comportamiento inteligente. Hoy en día, son muchísimas las empresas que han introducido esta tecnología visto su potencial y beneficios. Uno de los puntos clave en la creciente popularidad de los chatBots, ha sido la importancia con la que actualmente cuentan las aplicaciones de mensajería, puesto que concentran la mayor cantidad de usuarios activos en Internet. Con la ayuda de estos los usuarios no tienen que buscar la información o preguntar, si no que pueden interactuar directamente con ellos por el canal preferido, escribiendo mensajes directos para llevar a cabo pedidos, compras, cambios de reserva y muchísimas otras operaciones [1]. Las tareas que desempeñan los chatBots son variadas, los hay que prestan soporte a los usuarios resolviendo dudas, brindando información, realizando acciones por ellos, o recopilando información. Sus aplicaciones son casi ilimitadas. Los chatBots en un principio eran simples, a menudo se limitaban a ventanas emergentes del navegador web y solo podían enviar saludos directos a los visitantes del sitio web, pero gracias a las innovaciones en el área de la inteligencia artificial, las tecnologías cognitivas y procesado de lenguaje natural cada vez son más capaces de desempeñar funciones de mayor complejidad y comprender mejor el lenguaje natural. Lo que al principio podía parecer una moda pasajera o una estrategia de marketing, se está convirtiendo en una necesidad real, debido a que los chatBots tienen potencial para automatizar tareas que consumen mucho tiempo, dinero y mano de obra. Además, proporcionan interfaces de lenguaje natural que están transformando la forma en la que interactuamos con la tecnología, cambiando la experiencia del usuario y la forma de consumir los contenidos, haciendo que la interacción sea más simple y eficiente. Prueba de ello es que los usuarios de smartphones se descargan cada vez menos aplicaciones y tienden apasar más tiempo en aplicaciones de mensajería instantánea. Podría decirse que las conversaciones son la nueva interfaz de usuario, y los bots son las nuevas aplicaciones [2] [3]. Sin embargo, la reputación que acompaña los chatBots no siempre es positiva, ya que muchos de ellos se emplean con fines poco éticos, como, por ejemplo, automatizar la propaganda, extraer la información delicada del usuario, descifrar las contraseñas de entradas a páginas web, crear perfiles falsos en las redes sociales para conseguir likes o ganar sorteos, etc., nada que ver con lo que se pretende hacer en este proyecto. Por otro lado, creaciones como Siri, Cortana, Alexa o Google Now han hecho recuperar la confianza de los usuarios y nos han dado una idea de cómo sería comunicarse directamente con las máquinas y las ventajas que pueden proporcionar en un futuro cercano. 2 Por toda su utilidad y eficiencia se ha querido desarrollar uno de ellos para el Proyecto Mentor que tiene como finalidad acoger, integrar y orientar a los alumnos de nuevo ingreso desde el inicio de sus estudios. Dicha labor la suelen llevar a cabo alumnos de cursos superiores desde el Proyecto Inicio, y continua a través de reuniones periódicas a lo largo del primer cuatrimestre. Temas que pueden resultar de interés a los nuevos alumnos son abordados por los mentores, quienes a su vez están coordinados por la Subdirección de Alumnos. La intención de este Trabajo de Fin de Grado no es sustituir a esa idea si no servirle de apoyo y ayuda, ya que la relación entre alumno y mentor la veo “obligatoria” para la bienvenida a los alumnos que lo deseen (no todos entran a través del Proyecto Mentor) y hay algunos factores que el ser humano echaría de menos a la hora de comunicarse con el chat, aunque este chat también es usable por aquellos alumnos que no se han unido al Proyecto Mentor, la única condición para usar el chatBot en cuestión es estar en primero de carrera. El hecho de tener a una persona de referencia te ayuda más a un nivel emocional y humano, así como opiniones que son subjetivas, esta faceta no la tendrá el chatBot, es por ello por lo que ambas serán necesarias [4]. 1.1 Motivación Este trabajo de fin de grado surge del deseo de ayudar e informar a los alumnos sobre la cantidad de dudas que pueden surgir cuando eres un estudiante de nuevo ingreso que empieza una nueva etapa, donde puede ser de gran utilidad y ayuda el hecho de tener un chat habilitado que resuelva tus dudas y te de la información en la que estés interesado. También surge por la propia experiencia de haber sido una nueva alumna en la universidad, me hubiera gustado tener un chatBot como este que me diera la información al momento sobre las cuestiones de interés. En este caso, la idea es crear un asistente virtual. El objetivo del trabajo a realizar es el desarrollo de un chatBot, el cual permita a los nuevos alumnos conocer más acerca de la Universidad y del Grado que vayan a cursar. Pretende ser parecido a un guía, quien acoge, integra y orienta a los alumnos de nuevo ingreso, pero cumpliendo solo con la función de orientación. El Bot permitirá a los alumnos obtener la información relevante de las asignaturas en las que este matriculado, como el porcentaje de aprobados, profesores que las cursan, aulas en la que se imparten, etc. También, dará a conocer los servicios que ofrece la universidad como reservas de aulas de estudio, préstamo de libros y otros materiales, conexión a VPN y Wifi de la universidad, horario de bibliotecas, etc. El número de créditos se pretendió meter en la base de datos, pero finalmente no se ha añadido dado que en primero de carrera todas las asignaturas tienen el mismo número de créditos y todas son Obligatorias. Así mismo, dará a conocer la información sobre las becas disponibles en la universidad (ayudas oficiales para el alumno, de investigación, para la movilidad académica y laboral o bolsas de viaje). De esta forma, el objetivo es dar a conocer la información relevante a tus intereses y asignaturas de una forma más independiente, sin la necesidad de recurrir a las páginas web de la universidad cada vez que se necesite, ya que se ve mucho más práctico y rápido el hecho de tener un asistente virtual que te pueda resolver las dudas en el momento y de una manera interactiva. 3 La idea de hacer un chatBot me parecía muy interesante ya que despiertan el interés en cualquier usuario debido a las numerosas ventajas que conllevan su uso. Algunas de ellas: - Son muy accesibles, no hace falta ni si quiera descargarlo como las aplicaciones, ni actualizarlas, además de no ocupar espacio en la memoria del dispositivo desde el que vaya a ser utilizado. El usuario tampoco precisa de ser autenticado, pueden usarse directamente desde la plataforma del chat. - La disponibilidad de estos es de veinticuatro horas del día y durante todos los días del año. - Permiten notificar a los usuarios por medio de los chats sin esperar a que ellos inicien la conversación. - Son muy escalables, pueden atender a varios usuarios al mismo tiempo, la respuesta es proporcionada en un breve periodo de tiempo. - Muchas empresas se ahorran dinero ya que puede ahorrar costes en el trabajo humano. - Los alumnos de nuestra facultad además hacen uso de las tecnologías de manera casi experta, por lo que les resultará muy fácil y cómodo de utilizar. También existen algunas desventajas ya que según The Information los chatBots solo pueden cumplir un 30% de lo que se requiere sin la intervención humana [5]. Y en muchos casos esto es una desventaja. Aun sabiendo esto, el caso del chatBot enfocado al Proyecto Mentor es una herramienta de apoyo para la universidad y el alumno y cumplirá con la mayoría de los objetivos previstos que se comentarán a continuación. 1.2 Objetivos El objetivo principal del proyecto consiste en reducir el tiempo de búsqueda que un usuario tarda en encontrar una página dentro de la web de la facultad de informática, ya que, especialmente para un usuario nuevo en la web, le puede llevar tiempo encontrar exactamente lo que busca. De esta otra forma, será muy rápida la búsqueda y en cuánto hayas usado un par de veces el chatBot tendrás el dominio completo de este. También uno de los objetivos es cumplir con la mayoría de las necesidades de los alumnos, para ello, se ha optado por la experiencia propia además de preguntar a compañeros de la universidad para orientar y decidir cuál sería la información más relevante, y la que trataremos durante el desarrollo del chatBot. Los objetivos con los que el chatBot tiene que cumplir: • Se quiere producir una interacción usuario-chatBot con una lista de comandos a poder usar, de manera que el usuario pueda accionar dichos comandos, y el chatBot responda con la información necesaria. 4 • Para otro tipo de preguntas, el objetivo es que el chatBot sea capaz de redirigir al usuario hacia el contexto de la facultad, ya que no está diseñado para ser un chatBot con el que conversar sobre todos los temas relacionados con la universidad, como bien son las becas, programas de intercambio, reserva de aulas o de libros... • Esto será además una evolución del buscador ya existente en la facultad, se ha comprobado que muchas de las páginas no están registradas. • Ofrecer al usuario la mejor experiencia posible durante la interacción con el chat, tanto en el manejo como en las respuestas. En segundo lugar, como objetivos necesarios para el desarrollo del proyecto, podemos destacar: • Diseño y desarrollo de la arquitectura de la base de datos del proyecto. • Familiarización con lenguaje de programación Python. • Introducción a los sistemas de diálogo. • Familiarización con la API de Telegram. • Integración de la API con la base de datos. • Implementación del prototipo. • Aprendizaje de la gestión del proyecto software.• Evaluación de los resultados: dificultades, ventajas y desventajas encontrados durante la fase de análisis e implementación. Y por último añadir los beneficios y ventajas que nos va a proporcionar el chatBot: - Ahorro de tiempo en búsquedas en las páginas de la universidad. - Mejora la visibilidad de los alumnos frente a las asignaturas y a los profesores. - Facilita la búsqueda de formas de contacto con los coordinadores y profesores. - Ayuda para que hagan un balance del esfuerzo a emplear en cada asignatura de acuerdo con los porcentajes de éxito, rendimiento y absentismo que presenta cada una de ellas. - Mejora la accesibilidad a las páginas de reservas de recursos y solicitudes de información. - Sirve de soporte al mentor para que este no tenga que conocer de memoria toda la información relacionada con el curso. 5 1.3 Planificación En la Ilustración I se muestra como se ha definido el plan de trabajo, además de listar numéricamente las tareas necesarias para el desarrollo e implementación del chatBot: T01. Estudio de la API de Telegram para la creación de Bots T02. Investigación sobre herramientas alternativas para la creación de Bots T03. Estudio de Python o posibles opciones T04. Estudio de control de versiones de Git T05. Creación de la base de datos T06. Analizar y diseñar una solución fácil para que sea accesible a todos los alumnos de nuevo ingreso T07. Analizar requisitos del usuario T08. Analizar requisitos del sistema T09. Desarrollo del chatBot y análisis de su implementación T10. Conectar código y base de datos para poder desarrollar funcionalidades T11. Testear chatBot T12. Estudio de las posibles mejoras T13. Realización de la Memoria Final y Presentación Final Figura 1 Diagrama de Gantt 6 1.4 Estructura de la Memoria La memoria de este proyecto se divide en 5 capítulos diferentes. Los capítulos son los siguientes: 1. Introducción. Se presenta una introducción general al documento y se expone de forma breve las motivaciones y objetivos del trabajo realizado. 2. Desarrollo del chatBot. Este capítulo muestra todo el trabajo realizado desde el inicio y en orden cronológico. Además, se explica brevemente las diferentes tecnologías utilizadas en cada etapa. 3. Análisis y Diseño. En este otro capítulo se explicará todo lo relacionado con la implementación del código, así como de la creación de la base de datos y la conexión entre ambas. 4. Conclusiones. Donde se presentará el resumen de los resultados obtenidos y de los aspectos más destacables durante la realización del proyecto. Así como ver si se ha cumplido con los objetivos propuestos antes de la realización del trabajo. 5. Análisis del impacto. Se analizará el impacto causado en los alumnos de nuevo ingreso que puede tener la solución desarrollada en esta memoria. Así como las posibles mejoras futuras. 6. Bibliografía. En este último capítulo se incluirán todos los enlaces a las páginas de interés que se han utilizado durante el desarrollo de la Memoria Final del Proyecto de Fin de Grado. 7 2 Desarrollo Un chatBot es un programa informático especialmente utilizado como apoyo a páginas web basados normalmente en inteligencias artificiales qué simulan conversaciones humanas [6]. Puede haber chatBot de forma sencilla, respondiendo a cuestionarios con conversaciones sencillas o adquiriendo una mayor complejidad en el que el chatBot pueda aprender y evolucionar para ofrecer un mejor servicio. Hay distintos tipos de chatBot: - Orientado a tareas: programas de un solo propósito, se centran en realizar una función en concreto. Suelen ser respuestas automatizadas pese a seguir las conversaciones de los usuarios. - Basados en datos y predictivos: son mucho más complejos debido a una interacción más realista y de personalidad más completa. Suelen ser asistentes virtuales o digitales. Existe un marco básico que describe las tres funciones principales que se esperan de estos: - Agente de diálogo, este debe captar la petición del mensaje del usuario. - Agente racional, este debe tener acceso a la base de datos externa de manera que pueda responder y almacenar adecuadamente a las preguntas e información de los usuarios. - Agente personificado, el lenguaje del bot debe ser lo más natural y real posible. A continuación, se explicarán de forma breve algunos de los chatBots más famosos en la actualidad: - Siri (Apple): asistente virtual de Apple con la idea de imitar la conversación con un amigo y ayudar a realizar tareas que pueden resultar complicadas o tediosas en la configuración. - Cortana (Windows): asistente virtual de Windows, ayuda a configurar un ordenador, a organizar el calendario con todas las entradas que se necesiten o abrir aplicaciones. - Alexa (Amazon): servicio de voz de la nube de Amazon. Se pueden crear conversaciones de voz naturales para que los clientes menos acostumbrados puedan interactuar con la tecnología a diario. 8 2.1 Estudio de las necesidades de los alumnos Este chatBot va dirigido a todos los alumnos de primer curso como se ha mencionado anteriormente, únicamente deberán tener acceso a la plataforma de Telegram. Actualmente, el cien por cien de los alumnos de Ingeniería Informática disponen de un móvil u ordenador para poder hacer uso del chatBot y de esta forma que les sirva de ayuda. Está únicamente implementado en español. En mis años de universidad se ha usado chatBots por el estilo para las paradas de buses con los correspondientes autobuses y horarios de salida y para conocer la opinión de las optativas de los alumnos que anteriormente la hubieran cursado (este último en Discord). Todos ellos muy útiles y usados entre los alumnos de la facultad y con muy buena reputación. Se ha visto que estos chatBots son útiles dentro del ámbito de la facultad de Ingeniería Informática. 2.1.1 Requisitos El chatBot debe estar siempre a la espera de nuevas órdenes por parte de los usuarios, es decir, en escucha activa. También el chatBot deberá proporcionar los comandos que tiene a su disposición para hacer un uso correcto de este. Se intentará hacer todo lo más interactivo posible, para hacerle al usuario de esta experiencia, algo de uso fácil a lo que recurrir en caso de necesitarlo. Además de facilitarle al usuario las ayudas necesarias para un correcto uso de este, hay algún caso en el que importará la forma en la que sea escrita, para estos casos, se le brindará al usuario en cuestión una lista de respuestas a modo comandos para que no dé lugar a errores. Por ejemplo, las clases son: 1M, 1M-B, 2M y 2M-B, como veis se puede escribir tanto en mayúsculas, como minúsculas, separado o junto… y es por eso por lo que se deciden dar las opciones para hacer más sencillo el desarrollo del bot. Este chatBot ha de tener una base de datos externa en la que se guardarán todos los datos relaciones con los usuarios de Telegram que hagan uso del Bot, como de la información necesaria para poder resolver todas las cuestiones que serán planteadas. Más adelante en este capítulo, vendrá toda la información sobre la base de datos explicada, así como los comandos disponibles. 9 2.2 Tecnologías empleadas Nuestro chatBot va a hacer de usuario autónomo el cual va a poder ser también controlado por botones interactivos además de secuencias de texto. La API para desarrollar Bots de Telegram está disponible en la mayoría de los lenguajes principales de la programación, por lo cual le permite el uso a cualquiera que tenga unos conocimientos básicos sobre la programación para la creación de su propio Bot. Telegram Messenger es un servicio de mensajería por internet desarrollado desde el año 2013 por unos hermanos, enfocado ala gestión de la mensajería de texto y multimedia. Inicialmente fue únicamente diseñado para móviles, pero al año siguiente ya lo hicieron para multiplataforma. Además, existen muchas ventajas para la creación de un chatBot en esta plataforma y hay un montón de documentación y guías para hacerlo, es de los más comunes para esto. También es accesible por todos los alumnos y es de las plataformas de mensajería con más seguridad que existe, debido a su cifrado de extremo a extremo. El sistema operativo en el que se ha decidido trabajar ha sido en Windows 11, que es el que usado durante toda la carrera. La elección de este sistema operativo ha sido por comodidad ya que es el que tengo instalado en el ordenador y no tengo partición de disco, y es el que mejor domino. De este modo, el modo de trabajo ha sido de forma local por lo que la realización y la depuración del código ha sido en mi ordenador personal. Como inconveniente, el sistema funciona mediante un bucle infinito que debe estar ejecutándose continuamente. Esto sería un aspecto a tener en cuenta a la hora de poner este trabajo en producción ya que habría que utilizar diferentes tecnologías que permitieran ejecutar el código en un servidor. Figura 2. Ejemplo de ejecución de bucle infinito Una de las grandes ventajas que hay para desarrollar chatBots son las APIs, en este caso se usó apiTelegram [7], en mi caso desarrollado con el lenguaje Python. Python es un lenguaje de alto nivel de programación interpretado cuya filosofía hace hincapié en la legibilidad de su código, se utiliza para desarrollar aplicaciones de todo tipo. Es un lenguaje interpretado, dinámico y multiplataforma y de los más populares. Es un lenguaje que no había visto a lo largo de la carrera y que tenía interés por él y resulto serme muy útil y práctico. En el mundo del bot de Telegram, suele ser el más usado, lo que me ha facilitado la búsqueda de ejemplos de funcionamientos de chatBots y a encontrar respuesta a todas las dudas que me han surgido a lo largo del desarrollo, hay una gran comunidad de desarrolladores implementando chatBots de Telegram con Python que están dispuestos a ayudar. Se ha utilizado Pycharm como entorno de desarrollo. Es un IDE multiplataforma utilizado en programación informática, concretamente para el lenguaje de programación Python. Esta desarrollada por la empresa checa JetBrains. Proporciona análisis de código, un depurador gráfico, un probador de unidades integrado, integración con sistemas de control de versiones (VCS), y soporta el desarrollo web con Django, así como la ciencia de datos con Anaconda. 10 2.2.1 SQL Es un lenguaje de dominio especifico, diseñado para administrar, y recuperar información de sistemas de gestión de bases de datos relacionales y es también la que se ha utilizado para nuestra base de datos. Este paso a ser el estándar el Instituto Nacional Estadounidense de Estándares (ANSI) y de la Organización Internacional de Normalización (ISO). Esta parte es esencial para realizar todas las consultas que demande el usuario final desde el bot de Telegram. Se ha querido utilizar este lenguaje de gestión de bases de datos ya que durante mis estudios en el grado en multitud de asignaturas ha sido una herramienta de referencia. Figura 3. Logo de SQL 2.2.2 MySQL Workbench (Gestor de Bases de Datos) Decidí decantarme por este programa ya que es el que utilizamos en la asignatura de base de datos en la universidad, por lo que no tuve que aprender a utilizarlo de nuevo. Se trata de una herramienta visual de diseño de bases de datos que integra desarrollo de software, administración de base de datos, gestión y mantenimiento para el sistema de base de datos de MySQL. Desde su introducción, MySQL Workbench se ha hecho popular dentro de la comunidad MySQL. Desde 2010, ahora es el segundo producto más descargado del sitio web de MySQL con más de 250.000 descargas al mes. Me ha resultado muy útil para el manejo e inserción de datos [8]. Figura 4. Logo de MySQL Workbench 11 2.2.3 API de Telegram A la hora de hacer uso de los servicios que ofrece Telegram, es necesario establecer una conexión con una API que nos permita de forma sencilla controlar las diferentes funcionalidades de Telegram y crear nuestro bot. Por ello, se ha decidido utilizar una API llamada Telebot desarrollada específicamente para el lenguaje de programación Python ya que nos permite de forma muy intuitiva y sencilla realizar la tarea deseada. Se ha decidido utilizar tres módulos de esta API que nos permiten controlar el flujo de la conversación entre el usuario y el bot. A continuación, se muestran dichos módulos: - ForceReply: al recibir un mensaje con esta opción seleccionada, el próximo mensaje enviado por los usuarios de Telegram será forzado a ser la respuesta del último mensaje enviado por el Bot. (actúa como si el usuario hubiera seleccionado el mensaje del bot y tocado “responder”). Muestra la interfaz de respuesta al usuario. El valor predeterminado es TRUE. - ReplyKeyboardMarkup: Telegram permite al desarrollador crear teclados con opciones personalizadas de respuesta. Para ello, se debe crear un objeto ReplyKeyboardMarkup con los siguientes parámetros. o one_time_keyboard: en caso de estar asignado un True en esta opción, una vez el usuario marque una respuesta, Telegram cambiará al teclado por defecto. o input_field_placeholder: el mensaje que acompaña a las diferentes opciones de teclado personalizado. o resize_keyboard: en caso de estar asignado un True en esta otra opción, será Telegram el encargado de establecer la disposición de las diferentes opciones de teclado. Una vez creado el objeto, invocando el argumento add se deben introducir las opciones que aparecerán en el teclado personalizado. Figura 5. Módulos de Telebot Figura 6. Efecto de ForceReply 12 Figura 7. Efecto de ReplyKeyboardMarkup En Figura 7 se puede observar un teclado personalizado que facilitara al alumno la selección del curso en el que se encuentra. Con esto minimizaremos los posibles errores que puede introducir el usuario controlando al cien por cien todas las opciones. - ReplyKeyboardRemove: al recibir un mensaje con este objeto, los usuarios de Telegram eliminaran el teclado personalizado actual y mostraran el teclado de letras predeterminado. Los teclados personalizados se muestran hasta que un bot envía uno de nuevo. Se hace una excepción para los teclados de un solo uso que se ocultan inmediatamente después de que el usuario presiona un botón. Telegram almacena de forma temporal todos los teclados que se han creado mediante ReplyKeyboardMarkup. Es necesario que los usuarios no puedan volver a abrir teclados que fueron creados para ser utilizados una única vez. La opción ReplyKeyboardRemove elimina el ultimo teclado creado impidiendo que el usuario pueda volver a hacer uso de él. Manejar correctamente las opciones ReplyKeyboardMarkup y ReplyKeyboardRemove dotara al chatBot un gran dinamismo haciendo que la interacción con él sea mucho más sencilla, pero aumenta considerablemente la complejidad del desarrollo. Figura 8. Efecto de ReplyKeyboardRemove En la Figura 8 se puede ver indicado con una flecha azul el icono que almacenara los teclados personalizados para el usuario. Al hacer uso de ReplyKeyboardRemove este icono desaparece eliminando a su vez el ultimo teclado personalizado. Esta funcionalidad es esencial ya que durante el transcurso de las diferentes conversaciones el bot es capaz de ofrecer multitud de teclados con respuestas personalizadas. El valor predeterminado es TRUE. 13 2.2.4 Conector de Python con Base de Datos Para poder realizar todas las operaciones SQL a la base de datos desde Pycharm se ha utilizado el lenguaje Python. Esto va a ser de gran ayuda a la hora de utilizar la base de datos y la APIde Telegram de forma conjunta. Figura 9. Módulo de MySQL Connector Se ha creado la base de datos por un lado y el bot de Telegram es un programa de Python, pero gracias a la conexión que establecemos desde el chatBot a la base de datos podremos realizar todas las operaciones a la base de datos desde Pycharm. Básicamente, este conector de Python nos va a permitir hacer los SELECT, UPDATE, DELETE o INSERT de manera conjunta [9]. En la Figura 10 se puede ver un ejemplo básico sobre el uso del conector de Python para establecer una conexión a la base de datos. En primer lugar, se ha de establecer mediante el metodo connect() los siguientes parámetros: - Host: ubicación de la base de datos, en el caso de este proyecto es la maquina local. - Database: nombre de la base de datos a la que hacemos referencia. - User: nombre de usuario, en el caso de este proyecto se ha utilizado root para simplificar el proceso ya que el producto no esta en produccion. - Password: contraseña de acceso a la base de datos. Una vez introducidos estos parametros de forma correcta se debe inicializar un cursor que sera el encargado de ejecutar las diferentes consultas a la base de datos. Figura 10. Código de conexión a la base de datos 14 A continuación, se va a explicar los comandos que hemos utilizado en este proyecto con el ejemplo correspondiente del código [9]: - SELECT: mostrando datos de una tabla. Figura 11 Código de SELECT Esta query por ejemplo nos saca toda la información relevante a la tabla porcentaje asignaturas en función de la asignatura. - UPDATE: cambiando datos de una tabla. Figura 12 Código de UPDATE En esta query se va a actualizar dependiendo de si el usuario ya está en la base de datos, si está, la información relevante a dicho alumno será actualizada con la nueva que le pasará el propio alumno usuario. - INSERT: insertar datos en una tabla. Figura 13 Código de INSERT Esta query es parecida a la anterior pero este caso trata la situación de que el alumno no esté en la base de datos y haya que insertarlo de cero. 15 2.2.5 Threads de Python Para ejecutar el bot se ha hecho uso de los llamados threads de Python. Esta herramienta nos permite paralelizar procesos de forma sencilla. Con el propósito de evitar que el bucle infinito del programa principal se ejecute en primer plano se ha tomado la decisión de iniciar dicho método en un hilo propio para poder realizar otras tareas. Figura 14. Módulo de threads en Python Figura 15. Código de ejemplo de uso de threads 16 3 Análisis y Diseño Para que el chatBot funcione constantemente tendría que estar en un servidor para que estuviera ejecutándose continuamente. Una vez que hemos visto todos los requisitos que necesitamos podemos presentar el caso de uso nominal que podrá tener un usuario con este bot: Figura 16. Estructura del proyecto En la Figura 16 se puede observar la estructura del proyecto junto con los elementos principales. Como se puede observar el trabajo consta de las siguientes partes: - Base de datos: esta parte contiene toda la información necesaria para realizar los cálculos que se explicaran en apartados posteriores además de la información sobre los usuarios que se registren en el chatBot. - Servidor local: esta parte contiene todos los códigos que hacen consultas a la base de datos, realizan cálculos y se comunican con el usuario final. - API Telegram: esta parte hace referencia a un servicio externo al que realizaremos todas peticiones necesarias para poder ofrecer un correcto funcionamiento del bot al usuario final [10]. - Usuario final: esta parte se corresponde con el dispositivo ya sea móvil, tablet u ordenador personal, mediante el cual el usuario (alumno) puede interactuar de forma sencilla y sin conocimientos informáticos del servicio ofrecido. Cada vez que un usuario hable al chat de Telegram le va a preguntar la matricula que es la forma que tenemos de comprobar que el usuario ya exista en la base de datos y en caso de que no, registrarle en la base de datos para empezar a usar las funcionalidades del chatBot. 17 3.1 Creación de la Base de Datos En este apartado se va a explicar cómo se ha creado y estructura la base de datos que usa el chatBot. A la hora de crear la base de datos podemos distinguir entre dos tipos de tablas: - Tablas de almacenamiento: estas tablas hacen referencia a aquellas que únicamente contienen información fija que no varía con el tiempo. Estas tablas son utilizadas para realizar consultas y hacer los cálculos que sean necesarios. - Tablas dinámicas: en este grupo se encuentra la tabla usuarios la cual contiene información sobre el alumno que se registra en el servicio. La forma de introducir datos en esta tabla es mediante una conversación desde el propio bot de Telegram. Figura 17. Tablas de la base de datos Las tablas que se han pensado son las que se ven en la Figura 17. El contenido de las tablas es el siguiente: Nombre Contenido Asignaturas Contiene información básica sobre las asignaturas del primer año Aulas Contiene información sobre las aulas en las que se imparten las diferentes asignaturas de forma física Grupo Contiene información sobre los grupos que se forman en el primer año Horarios Contiene información sobre los horarios de cada asignatura Porcentaje_Asignaturas Contiene múltiples métricas de rendimiento sobre las asignaturas (tasas de rendimiento, éxito y absentismo) 18 Profe Contiene información sobre cada profesor, como su email o su despacho Tabla_horarios Esta tabla no se utiliza, fue sustituida por la tabla horarios Tiene_grupo Esta tabla relaciona las asignaturas, los grupos, los horarios y los usuarios Usuarios Contiene información de cada usuario en el momento en el que se dan de alta en Telegram, incluyendo su identificador único Tabla 1 Detalles de las tablas de la base de datos 3.2 Inserción de los datos en la Base de Datos A continuación, se observa más en profundidad los atributos y variables de las tablas: • Tabla usuarios: esta tabla irá siendo actualizada según el número de alumnos que hagan uso de chatBot de Telegram. Todos ellos tendrán un id_chat_telegram que los identificará y les hará únicos, de esta forma obtendremos toda la información relacionada con el alumno. Figura 18 Ejemplo de tabla de usuarios • Tabla tiene_grupo: esta tabla simplemente relaciona los diferentes ids de las otras tablas. No se adjunta toda la tabla ya que esta esta simplemente conformada por números identificativos de otras tablas de la base de datos. Figura 19 Ejemplo de tabla tiene_grupo • Tabla asignaturas: esta tabla contiene toda la información relacionada con la asignatura como se puede observar en la imagen adjunta. Durante el desarrollo del proyecto se ha visto útil el horario de las tutorías y ha sido añadido a posteriori. 19 Figura 20 Ejemplo de tabla tabla_asignaturas • Tabla aulas y Tabla grupo: estas tablas son las más sencillas que hay en la base de datos, ya que su única función es dar nombre a las clases y a los grupos y relacionarlos entre sí. Figura 21 Ejemplo de tabla aulas Figura 22Ejemplo de tabla grupo • Tabla horarios: esta tabla la conforman diferentes campos que posteriormente en el código del chatBot serán parseados para darle esta información al usuario de la manera más clara posible (ej.: L:10-12h y M:12-14h) relacionada a la asignatura en cuestión. Tampoco se adjuntará la tabla entera ya que sigue la misma estructura que como se ve en la imagen. 19 Figura 23 Ejemplo de tabla horarios • Tabla profe: esta tabla contiene toda la información relacionada con los profesores y estánasociados a un grupo en concreto. El resto de esta tabla sigue la misma estructura. Figura 24 Ejemplo de tabla tiene_profe Hay profesores que no disponen de despacho, el chatBot se ha diseñado para cuando entrara un 0 como numero de despacho, envíe en mensaje al usuario que no tiene despacho. • Tabla porcenaje_asignaturas: en esta tabla se ha obtenido todas las tasas de todas las asignaturas en los últimos tres cursos (2021-2022, 2020-2021, 2019-2020). Así como el número de aprobados, matriculados, de presentados y no presentados. En la imagen solo se adjunta del último curso. 20 Figura 25 Ejemplo de tabla porcentaje_asignaturas 3.3 Conexión entre Python y la Base de Datos En la Figura 27 se muestra anteriormente se ve como se envía una solicitud de conexión al conector Python de MySQL, cómo se acepta en la base de datos y como se ejecuta el cursor con los datos de resultados. Figura 26 Módulo de conector SQL en Python Figura 27 Funcionamiento de conector SQL Existe un método dentro del módulo mysql.connector que será el que establezca la conexión entre la base de datos y el código de Python. Importante a mencionar respecto a esta conexión, se va a explicar brevemente a continuación los métodos del módulo y variables importantes: - mysql.connector permite que los programas de Python accedan a bases de datos MySQL. - El método connect() de la clase MySQL Connector con los argumentos se conectará a MySQL y devolverá un objeto MySQLConnection si la conexión se establece correctamente. 21 - user = “nombredeusuario”, debe ser el mismo nombre de usuario que configuró durante la instalación de MySQL. - contraseña = “contraseña”, debe ser la misma contraseña que estableciste durante la instalación de MySQL. - cursor() se usa para ejecutar las declaraciones SQL en Python. - El método execute() se usa para compilar una declaración SQL. A modo resumen de los pasos a seguir para conectarnos a la base de datos y ejecutar cualquier consulta: 1. Abrir la conexión como hemos explicado y crear un puntero. 2. Ejecutar la consulta que queremos. 3. Traer los resultados (si es un SELECT) o hacer efectiva la escritura (INSERT, UPDATE, DELETE). 4. Cerrar el puntero y la conexión creada previamente. 3.3.1 Creación de Bot con BotFather Telegram dispone de un chat llamado BotFather, un bot oficial que la plataforma pone a disposición de todos sus usuarios y que sirve precisamente para generar nuevos bots. De ahí su nombre. Este se inicia con un comando y a continuación pondremos el nombre que le queremos dar a nuestro chatBot. Nos ofrecerá un token de autenticación único para cada chatBot, asignado por el sistema, es necesario para poder acceder a la API de Telegram Bot. Figura 28 Generación de bot con token en Python En la Figura 29 se puede observar el usuario que habría sido creado directamente en la aplicación de Telegram. El propio servicio de Telegram se ocupa de configurar la interfaz y las animaciones de la aplicación. Además, comunicándose con BotFather es posible también cambiar la descripción del bot, la foto de perfil, si puede ser unido a grupos o no… 22 Figura 29 Ejemplo de bot en la aplicación de Telegram 3.4 Código Python En este apartado se va a explicar brevemente la parte del programa implementado en Python asociado a Telegram, el cuál detecta que comando seleccionado y dependiendo de cuál se ejecutarán los métodos y funciones correspondientes. Se ha realizado un diagrama que se muestra en la Figura 30 con toda la información sobre los métodos auxiliares, las funciones correspondientes a cada comando, además de los teclados personalizables que saldrán para el usuario en Telegram. Algunos de estos métodos harán consultas a la base de datos bien sea para obtener información o actualizarla. Para mucho de los métodos se tuvieron que declarar varios diccionarios que nos permitieran manejar la opción seleccionada por el usuario y dependiendo de esta, darle la información adecuada. Los diccionarios que han sido necesarios han sido: - dic["lista_asignaturas"]: contiene todas las asignaturas asociadas al alumno según al grupo que pertenezca. - dic["lista_profesores"]: contiene todos los profesores correspondientes al grupo al que pertenezca el alumno. - dic["lista_correos_profesores"]: contiene los respectivos correos de los profesores. - dic["lista_despachos_profesores"]: contiene todos los despachos de los profesores. Aquellos que no tienen despacho también vienen indicados. - dic["lista_coordinadores"]: contiene los diferentes coordinadores de cada asignatura correspondientes al grupo al que pertenezca el alumno. 23 - dic["lista__correos_coordinadores"]: contiene los respectivos correos de los coordinadores. - dic["lista__despachos_coordinadores"]: contiene todos los despachos de los coordinadores. Igualmente viene indicado en caso de no tener despacho. - dic["lista_hora_ini"]: contiene todas las horas de inicio de las asignaturas en cuestión. - dic["lista_hora_fin"]: contiene todas las horas de finalización de las asignaturas en cuestión. - dic["lista_dia"]: contiene todos los días de la semana en los que se imparten las asignaturas del alumno. Del mismo modo se tuvieron que declarar otros diccionarios adicionales para facilitar el manejo de la opción elegida por el usuario: - usuarios {}: contendrá todos los usuarios que ya se han dado de alta en el sistema - selected_infoasignatura {}: diccionario para almacenar la asignatura que elegia el user en /tasas_asignaturas - selected_infocurso {}: diccionario para almacenar información sobre el curso que elige user en comando /tasas_curso - selected_opciontasa {}: diccionario para almacenar la opción de tasa en comando /tasas_curso - selected_seccion {}: diccionario para el manejo de la opción de sección en comando /faq Posteriormente se definen todas las funciones que interactúan con la BD de MySQL y el bot de Telegram. Los métodos que realizan consultas a la base de datos vienen señalados en el diagrama como viene indicado en la . A continuación, se explicará cada uno de ellos brevemente: - buscar_usuario(cursor, id_chat): función que realiza una consulta en la base de datos para verificar si existe un usuario con un ID de chat dado - insertar_usuario(cursor, nombre, apellidos, matricula, grupo, id_chat): función que inserta la información del usuario en la base de datos - actualizar_datos(cursor, nombre, apellidos, matricula, grupo, id_chat): función que realiza una actualización de la BD para modificar los datos de un usuario existente - get_asignatura_profe(cursor, id_chat_telegram): función para obtener información sobre asignaturas, coordinador y profesores asociados con el grupo de usuario de Telegram - tasas_asginaturas_metodoaux(cursor, asignatura): función para obtener las respectivas tasas de la asignatura elegida - tasas_curso_metodoaux(cursor, curso): función para obtener las respectivas tasas del curso seleccionado 24 Por otro lado, tenemos los controladores de mensajes del bot de Telegram, se ejecutan cuando se invoca al comando en cuestión o cuando se reciben ciertos mensajes, estos son: /start, /help y /ayuda. simplemente envía un mensaje para que el usuario se dé de alta en el sistema ya que si no se da de alta no podrá hacer un uso corrector del chatBot. En el siguiente Figura 30. Diagrama chatBot Telegram, se ha querido mostrar el funcionamiento entero del chatBot de Telegram. El usuario desde el chatBot elegirá uno de los comandos, siendo el primero /alta. Cuando el usuario empiece a hacer uso del chatBot bien sea por texto o por los comandos /start, /help o /ayuda, se le recomendará darse de alta en el sistema para poder usar el resto de los comandos. Una vez dado dealta en el sistema podrá utilizar cualquiera de los comandos que vienen en el diagrama y que se explicaran más adelante con mayor detenimiento. En cada comando del diagrama se mostrarán los métodos implementados para cada uno de ellos, así como si tiene teclado personalizable para el usuario. Adjunto el enlace al repositorio que contiene la implementación del código: https://costa.ls.fi.upm.es/gitlab/tfg-groman/tfg-ssm-2223/- /blob/main/UPMalumnos_bot.py https://costa.ls.fi.upm.es/gitlab/tfg-groman/tfg-ssm-2223/-/blob/main/UPMalumnos_bot.py https://costa.ls.fi.upm.es/gitlab/tfg-groman/tfg-ssm-2223/-/blob/main/UPMalumnos_bot.py 25 26 Figura 30. Diagrama chatBot Telegram Figura 31. Leyenda diagrama Telegram 27 4 Manual de usuario El diseño de cualquier proyecto software es una parte muy importante y fundamental en el desarrollo, tanto como la implementación del código. Se han desarrollado una serie de comandos, pensando en todos los nuevos alumnos que ingresan en la facultad cada año, que ofrecen ayuda de la forma más eficiente posible a los problemas más comunes como, por ejemplo, conocer la localización de los despachos de los profes, o información detallada de cada asignatura. Los comandos que han sido implementados son: - /start: Sirve para dar la bienvenida. - /alta: Sirve para dar de alta a un alumno, muy importante ya que con esta información trabajara el chatBot para distinguir entre clases, profesores, etc. Y dar la información apropiada y correspondiente para el alumno que esté utilizando el chatBot. Las funciones personalizadas funcionan a nivel de grupo en la universidad. - /mi_info: Sirve para mostrar los datos del alumno en que solicite dicha información. - /actualiza_info: se pensó para los casos en los que los alumnos introdujeran mal sus datos ya que el bot no es capaz de detectar ciertas cosas, por ejemplo, si te has confundido al escribir tu apellido, un nombre propio. Esto da la opción de actualizar esa información correctamente. De este modo, no es necesario acceder a la base de datos en ningún caso. - /mis_asignaturas: muestra un listado de todas las asignaturas de primer curso, con el profesor incluido. Gracias al comando /alta en el que obtendremos el grupo, ya que de este dependerá el profesor y el horario que tenga el alumno. - /info_asignatura: obtienes la información detallada acerca de la asignatura que elijas entre las opciones que dará el chatBot. - /tasas_asignatura: para conseguir las tasas de los últimos tres años sobre las asignaturas en las que esté interesado el alumno, para así poder hacer una comparativa y poder hacerse a la idea de lo que va a ser la asignatura en cuestión. Una vez ejecutado el comando saldrá un desplegable con las siguientes opciones: las tasas por curso, la media de las tasas o el máximo y mínimo de cada tasa. - /tasas_curso: parecido al comando anterior con la diferencia de que anteriormente veíamos las tasas por asignatura y este comando nos permitirá hacerlo por curso. Una vez que se selecciona el comando, igual 28 que el anterior saldrá un desplegable con los distintos cursos sobre los que podemos obtener las tasas. - /faq: comando dedicado a responder con los hipervínculos a la página web de la universidad con los temas que no los cubre el resto de los comandos. Dentro de este comando habrá varias opciones: trámites, reservas y otros. Dentro de trámites encontraremos lo relacionado a: las actividades acreditables, la acreditación del nivel de inglés B2, las becas y ayudas que ofrece la universidad, los recursos de información y la información referente al cambio de grupo. En la siguiente sección de reservas encontraremos: reserva de aulas informáticas, reserva de los recursos de la biblioteca, y reserva en otras instalaciones. Por último, en “otros” veremos lo relacionado a la matriculación, al carnet universitario, los documentos de la UPM, preguntas frecuentes UPM e información adicional. Figura 32 Menú de comandos desde Telegram Lo primero que tendrá que hacer el usuario es darse de alta en el sistema para que el chatBot pueda recoger la información necesaria de la base de datos para brindar al alumno de los datos que esté interesado en conocer. Antes de esto, tenemos que ejecutar el comando /start para iniciar el bot y posteriormente será este el que te dirija al siguiente y primer comando a usar. Como se puede ver en la Figura 33, el propio chatbot no te dejara hacer otra cosa hasta que no se haya dado de alta el usuario en el sistema. 29 Figura 33 Conversación para darse de alta El sistema de dado de alta es rápido y eficaz. El objetivo es que un nuevo alumno no pierda mucho tiempo en esta sección para poder empezar cuanto antes a resolver sus dudas. De lo contrario, si el usuario ya se hadado de alta e intenta volver a hacerlo, le saldrá el siguiente mensaje, ofreciéndole cambiar sus datos con el comando correspondiente: Figura 34 Dada de alta estando registrado Lo único que el usuario querría hacer al darse de alta sería cambiar y/o actualizar algún dato ya sea por un error al introducir alguno de los campos pedidos o por un cambio de grupo u otras circunstancias, como se puede ver en la Figura 35. 30 Para obtener nuestra información se ha creado un comando llamado /mi_info que nos dará los datos que anteriormente hayamos introducido: Figura 36 Resultados de llamar a /mi_info Además, como se puede ver en la Figura 36, la matricula es un entero de 6 dígitos por lo que si algún alumno introduce de otra forma este dato se le enviará un mensaje para que el usuario sepa cómo escribirlo correctamente para el uso apropiado. Además, es importante mencionar que se ha optado por darle un formato en el que se resalte el nombre del campo en mayúsculas y azul para hacer más llamativo el mensaje. A continuación, se muestra un ejemplo actualizando mi información con una matrícula de formato erróneo. Al igual que si ya te has dado de alta en el sistema e intentas volver a hacerlo, el chatBot te aconsejara con otro mensaje que comando utilizar, ya que en este caso lo que va a pretender el alumno es actualizar alguno de los datos, el comando /actualiza_info obliga al alumno a introducir todos los datos otra vez, aunque solo sea uno de ellos el que quisiera cambiar. Figura 35 Cambio de nombre 31 Figura 37 Introducción de campo erróneo Como se puede observar existe una gestión de errores que evita cualquier fallo en el sistema. Se han introducido en varias ocasiones botones como las posibles opciones a algunas respuestas. Ya que como se ha comentado hay alguna información que se requiere de una forma en específico, por ejemplo, el grupo tiene que ser obligatoriamente en mayúsculas y con guión en caso de ser M-B, de otra forma el chatBot no reconocerá dicho valor y por tanto no se ofrecerá el comportamiento esperado. 32 Figura 38 Ejemplo de conversación con botones Esto además de hacer que la forma de introducir datos sea mucho más rápida, la usabilidad mejora considerablemente ya que el usuario tiene menos dudas a la hora de introducir los datos. Otra ventaja es que Telegram es una plataforma ya implantada en el mercado, por lo que la posición de teclado con botones y su funcionamiento es algo con lo que muchos usuarios están familiarizados, aumentando la comodidad de estos a la hora de usar el bot. Una vez se tienen los datos pedidos al darse de alta, ya con esto, se puede trabajar y obtener cualquier información. En función del grupo del usuario se tendra unos profesores u otros, en el caso de primero de carrera todos los alumnos tienen las mismas asignaturas. Al ser escalable esto vendrá bien para cursos superiores cuándo empiezan a elegir optativas y tener cada vez másasignaturas el comando de /mis_asignaturas les será de gran ayuda. A los de primero les ayudará sobre todo para acordarse de los profesores que tienen en cada una de ellas, entre otras cosas. 33 Figura 39 Llamada a comando de /mis_asiganturas También se puede obtener toda la información relevante al profesor y a la asignatura en cuestión. Con el comando /info_asignatura, les saldrá un menú con las 10 asignaturas de primero de grado a elegir una. Figura 40 Teclado para seleccionar asignatura 34 Posteriormente le preguntará al alumno que información desea obtener, mediante las siguientes opciones: Figura 41 Teclado con opciones de información Si la opción elegida es la del profesor, vendrán con él su correo y su despacho en caso de querer pedirle una tutoría o querer localizarle. Esto evitará en muchas ocasiones el acceso a las guías de cada asignatura para encontrar esta información. Figura 42 Solicitud de información sobre profesor de Álgebra Lineal 35 Por otro lado, el horario que como su nombre bien indica nos permitirá saber que días y que horarios tienen en dicha asignatura. Como se observa es todo bastante intuitivo y útil, que ahorrara mucho tiempo a los alumnos. Figura 43 Solicitud de información sobre horario de Álgebra Lineal En caso de que la información que se desea obtener sea la del coordinador de la asignatura en vez de la del profesor, también podrá ser recogida por el alumno: Figura 44 Solicitud de información sobre coordinador de Álgebra Lineal Por último, si la opción elegida es la de obtener toda la información, se le enviará de forma organizada en un mensaje la misma información que hemos visto que se puede obtener de forma separada en un solo mensaje. Figura 45 Solicitud de información completa de Álgebra Lineal 36 El siguiente comando, según los usuarios que han testado el chatBot, es de las funcionalidades más interesantes y prácticas. Todos los alumnos están interesados en ver cuáles son las tasas de las asignaturas para poder hacer una previsión del esfuerzo que tendrán que realizar en cada una de las asignaturas, siendo conscientes que cada alumno es diferente y a cada uno se le da mejor ciertas asignaturas y les motivan otras, podría variar en el caso particular, a modo orientación es cómo hay que procesar la información que recibiremos con este comando. Al igual que con el comando anterior al ejecutarlo nos listará todas las asignaturas para que elijamos de cuál de ellas queremos obtener sus tasas de rendimiento. Dentro de las tasas de rendimiento, nos encontramos con tres tipos de tasas: - Tasa de rendimiento: se define como la relación porcentual entre el número total de créditos ordinarios superados por los estudiantes en un determinado curso académico y el número total de créditos ordinarios matriculados por los mismos. - Tasa de éxito: se define como la relación porcentual entre el número total de créditos superados por los alumnos en un estudio y el número total de créditos presentados al examen. - Tasa de absentismo: se define como la relación porcentual entre el número total de créditos matriculados menos los créditos presentados, entre el número total de créditos ordinarios matriculados de los mismos. Y las opciones que nos ofrece este comando son: Figura 46 Teclado con opciones de tasas Una vez recibidos los porcentajes, en el mismo mensaje, vendrá explicado brevemente cuál es el significado de cada una de las tasas como se puede ver en las próximas figuras. Cada vez que se quiera obtener los porcentajes habrá que ejecutar el comando, no se podrá pedir a la vez el rendimiento máximo y mínimo con la media de las tasas, por ejemplo, para cada calculo es necesario la ejecución del comando indicado. En un futuro se implementará para que, de toda la información de golpe, se hizo así por el tamaño del mensaje. 37 Cada opción corresponde a: - Tasas por año: donde en tasas de rendimiento por año, nos dará las tres tasas explicadas previamente de la asignatura elegida. Figura 47 Ejemplo de tasas de un año concreto - Media de tasas: directamente obtendremos las medias del curso actual en cada tasa en la asignatura correspondiente. Figura 48 Media de tasas 38 - Tasas máximas y mínimas: en esta última opción veremos las tasas máximas y mínimas de cada una de las tres tasas de la respectiva asignatura. Figura 49 Tasas máximas y mínimas Por otro lado, tenemos otro comando parecido al anterior con la diferencia de que previamente adquiríamos la información según la asignatura y esta vez será por curso. De igual modo que el comando /tasas_asignaturas ayuda a hacer la comparativa entre las asignaturas del primer curso, el comando de /tasas_curso nos ayudará a ver la evolución de la asignatura en la que estemos interesados por año. Estas son las opciones del comando: A continuación, se muestran unas figuras con las opciones de teclado que se muestran al invocar al comando mencionado: Figura 50 Selección de curso para /tasas_curso 39 Figura 51 Selección de cálculo para /tasas_curso Figura 52 Selección de tasa para /tasas_curso Por último, el comando /faq es el típico comando o ayuda que se encuentra en muchas webs. Este comando, va a englobar los asuntos restantes relacionados a la universidad. Este comando se encargará a redirigir al alumno a la página correspondiente de la universidad según lo que hayan pedido, hay ciertos casos en los que en vez de un redireccionamiento se encontrarán con varios. Se ha separado por secciones para facilitar la búsqueda. Estas secciones son: Figura 53 Opciones dentro del comando de /faq 40 Dentro de trámites encontraremos: Figura 54 Opciones dentro de trámites Dentro de reservas obtendremos el siguiente menú: Figura 55 Opciones dentro de reservas La forma en la que se muestran los datos es mediante unos botones en el propio chat que al pulsarlos redirigen automáticamente a la web con la información correspondiente. Figura 56 Resultado al seleccionar Otras instalaciones 41 Al pulsar un botón Telegram, por seguridad, muestra el siguiente mensaje. Figura 57 Mensaje de confirmación para abrir un enlace Figura 58 Ejemplo de página web abierta desde el Bot Y dentro de otros estará todo aquello que no ha podido ser clasificado ni como reserva ni como tramite: Figura 59 Opciones de otros 42 5 Resultados y conclusiones Tras haber explicado en detalle cómo se ha desarrollado el chatBot y las distintas tareas que se han llevado a cabo en este trabajo de fin de grado, es la hora de sacar las conclusiones de este. Desde que conocí el mundo de Telegram y la gran variedad de chatBots que posee, siempre tuve la curiosidad por saber cómo se hacía uno y gracias a este trabajo de fin de grado que me brindo la oportunidad de conocer más a fondo este mundo y poder crear el mío propio. La funcionalidad de este bot es algo que no existe actualmente en la universidad y que puede servir de gran utilidad. He aprendido un nuevo lenguaje de programación, en este caso ha sido Python, con el cual me he encontrado muy cómoda trabajando y he ampliado mis conocimientos. La base de datos ha sido creada para que en un futuro se puedan añadir nuevas funcionalidades y sea escalable para otros cursos y alumnos. Dejando abierta la posibilidad como trabajo futuro de seguir mejorando y trabajando en el bot, sobre todo en el aspecto de abarcar a un mayor número de alumnos. Se ha conseguido crear un chatBot desde cero y que responde a la mayoría de las peticiones acerca de la facultad de informática ante un usuario que busque ayuda. También es cierto que no ha sido diseñado para mantenerconversaciones con el usuario. Algunas de las mejoras que podrían ser implementadas son: - Añadir voz y audio al chatBot. De esta forma les proporcionaríamos acceso a personas que tienen algún tipo de disfunción visual o no dominan la lectura/escritura. - Implementarlo en inglés también para así llegar a posibles alumnos de otros países. - Añadir inteligencia artificial para mantener conversaciones más humanas. - Añadir los horarios de tutorías o el número de créditos, aunque en el caso del primer curso todas las asignaturas tienen los mismos. Para concluir me gustaría dar una reflexión más personal sobre lo que me ha aportado realizar este Trabajo de Fin de Grado ya que le puede servir de motivación a otros estudiantes que quieran indagar en el mundo de los chatBots, muy interesante y amplio. Además, hay muchísima documentación en internet. De hecho, actualmente existen muchas maneras de implementar un chatBot sin la necesidad de programar, en mi caso no quería eso. Por otro lado, personalmente me ha servido en mi crecimiento como ingeniera, ya que es interesante crear un proyecto desde cero, y realizar desde su planificación en el tiempo que se tiene, hasta el desarrollo, pruebas e implementación y la documentación que le acompaña. He reforzado mis conocimientos adquiridos durante el grado como en ingeniería de software, bases de datos y programación. Como aspecto mejorable durante este proceso haría una mejor gestión del tiempo puesto que no lo logré los primeros meses compaginando estudios, trabajo y TFG. 43 6 Análisis de Impacto En este capítulo se destacarán también aquellas decisiones tomadas a lo largo del trabajo que tienen como base la consideración del impacto. En todo desarrollo, hay un impacto en diferentes contextos: personal, empresarial, social… todo depende del enfoque que se le dé al servicio prestado. A continuación, proporciono un análisis del potencial impacto de tu proyecto en los diferentes contextos: 1. Personal: puede ayudar a los estudiantes a resolver dudas y a orientarse en cuanto a los temas relacionados con la universidad, lo que puede mejorar su experiencia académica y reducir el estrés y la ansiedad. Además, el chatBot les puede ayudar a sentirse más conectados con la universidad y con otros estudiantes. 2. Empresarial: podría ser útil para la universidad para hacer uso de el para los posteriores cursos y quizás podría ser útil para las empresas que deseen contratar a nuevos graduados de esta universidad, ya que estos estudiantes tendrían una mejor experiencia académica y podrían estar mejor preparados para trabajar en su sector. 3. Social: podría ayudar a reducir la brecha educativa, especialmente entre los estudiantes universitarios de primer año que tienen más dificultades para orientarse en cuanto a los temas relacionados con la universidad. Además, podría ayudar a mejorar la calidad de la educación superior y a aumentar la participación en la universidad. 4. Económico: podría ayudar a reducir la tasa de abandono en los primeros años de la universidad, lo que a su vez podría ayudar a mejorar la retención de estudiantes y aumentar el número de graduados. Además, podría ser beneficioso para la economía en general, ya que los graduados con una mejor educación suelen tener mayores oportunidades laborales y ganar salarios más altos. 5. Medioambiental: no tendría un impacto directo en el medio ambiente, pero podría ayudar a promover prácticas más sostenibles en la universidad y en la sociedad en general si se incluyen mensajes o sugerencias al respecto. 6. Cultural: podría ayudar a los estudiantes a sentirse más cómodos y a entender mejor la cultura y el ambiente universitario, lo que podría ser beneficioso para su integración y adaptación en la comunidad universitaria. En cuanto a los Objetivos de Desarrollo Sostenible (ODS) de la Agenda 2030, el proyecto podría tener un impacto positivo en varios de ellos, como la educación de calidad (ODS 4), el trabajo decente y el crecimiento económico (ODS 8), de industria, innovación e infraestructura (ODS 9), la reducción de las desigualdades (ODS 10), la producción y consumo responsables (ODS 12) y el de paz, justicia e instituciones sólidas (ODS 16) [11]. 44 En primer lugar, en cuanto al ODS 4 de educación de calidad, el chatBot desarrollado puede tener un impacto positivo al facilitar a los estudiantes universitarios de primer año el acceso a información precisa y actualizada sobre los temas relacionados con la universidad, como los profesores, las asignaturas, los datos más importantes de estas, etc. De esta manera, el chatBot puede ayudar a mejorar la calidad de la educación superior, al proporcionar una fuente de información confiable y accesible que pueda complementar la formación académica de los estudiantes. Además, en cuanto al ODS 8 de trabajo decente y crecimiento económico, el chatBot puede tener un impacto positivo al ayudar a reducir la tasa de abandono en los primeros años de la universidad, lo que a su vez puede aumentar la retención de estudiantes y el número de graduados. Al tener una educación de calidad y completar sus estudios, los estudiantes pueden estar mejor preparados para el mercado laboral y tener mayores oportunidades de trabajo y de crecimiento económico. En tercer lugar, en cuanto al ODS 10 de reducción de las desigualdades, el chatBot puede ayudar a disminuir la brecha educativa entre los estudiantes universitarios de primer año que tienen más dificultades para orientarse en cuanto a los temas relacionados con la universidad. Al proporcionar información relevante y accesible, el chatBot puede ayudar a nivelar las oportunidades de éxito académico y a reducir la desigualdad en el acceso a la información. Cuarto lugar, el ODS 9 de industria, innovación e infraestructura, podría verse favorecido por este proyecto, ya que la implementación de chatBots en la educación podría ser considerada una innovación tecnológica en el sector educativo. El ODS 12 de producción y consumo responsables también podría verse impactado, ya que el uso de chatBots para proporcionar información sobre la universidad podría reducir el uso de papel y otros materiales que podrían ser considerados desperdicio en la producción de material impreso. Por último, el ODS 16 de paz, justicia e instituciones sólidas también podría verse impactado positivamente, ya que el proyecto de chatBot puede ayudar a promover la transparencia y la rendición de cuentas al proporcionar información objetiva y confiable sobre la universidad. En resumen, este proyecto puede contribuir de manera significativa a los Objetivos de Desarrollo Sostenible de la Agenda 2030, y puede tener un impacto positivo en la educación de calidad, la reducción de las desigualdades y el trabajo decente y el crecimiento económico. Es importante tener en cuenta este impacto positivo de cara a evaluar el valor del proyecto y considerar las posibles aplicaciones que puede tener en otros contextos. 45 7 Bibliografía [1] Futurizable, «Estado del arte en el desarrollo de chatbots a nivel mundial», Futurizable | Sngular, sep. 2017, [En línea]. Disponible en: https://futurizable.com/chatbot/ [2] Fi, «Trabajo de Fin de Grado-ETS de Ingenieros Informáticos (UPM)». https://www.etsiinf.upm.es/?pagina=1835 [3] Fi, «Recomendaciones sobre el contenido y formato de la Memoria Final-ETS de Ingenieros Inform ticos (UPM)». https://www.fi.upm.es/?pagina=1475 [4] Fi, «Proyecto Mentor-ETS de Ingenieros Informáticos (UPM)». https://www.fi.upm.es/?id=proyectomentor [5] I. Corporativa, «Chatbots, una nueva forma de atender a los clientes», Iberdrola. https://www.iberdrola.com/innovacion/que-es-un- chatbot [6] A. L. B. Asenjo, «Los clientes prefieren personas en vez de bots personalizados», linkedin.com, [En línea]. Disponible en: https://linkedin.com/pulse/los-clientes-prefieren-personas-en-
Compartir