EDUtrack es parte de un proyecto de Tesis para evaluar la calidad de la educación superior en un entorno FC-ML de la Escuela Técnica Superior de Ingenierías Informática y de Telecomunicación (ETSIIT) de la Universidad de Granada.
EDUtrack es un bot para Telegram con una interface en inglés y español. Se emplea principalmente como instrumento de comunicación con el estudiante, pero está preparado para obtener métricas de evaluación de la experiencia docente que ayudan a la evaluación de la calidad de la educación superior en un entorno de metodologías combinadas, "Flipped Classroom" y "M-Learning", denominado entorno FC-ML. Así mismo proporciona un medio de detección temprana del fracaso académico.
Tabla de Contenidos
- Python 3.7 o superior
- SQLite
- Una cuenta de Telegram
La configuración de EDUtrack se puede desarrollar en 3 pasos:
Primero se debe crear un bot desde @BotFather. Al finalizar te proporcionara un enlace que podras compartir a otros usuarios para que interactuen con el bot. Y por otra parte te proporcionara el TOKEN de tu bot, que es la clave con la cual se realizara la conexión entre el bot que acabas de crear y EDUtrack.
En el ejemplo de la imágen:
Enlace: t.me/Subject_2021_bot
TOKEN: 1401345537:AAGPGnsIeRROS6500fm2bGPOGqz8kkD9O28
Para configurar los archivos de EDUtrack se puede realizar de 2 formas:
@EDUtrack_setup, es un bot que solicita la información general para EDUtrack, por ejemplo nombre del docente y de la asignatura, duración del curso, entre otros.
Al finalizar @EDUtrack_setup nos proporcionara 2 archivos comprimidos iguales, edutrack_bot.zip
y edutrack_bot.tar
, se procederá a descargar el que se adecue a nuestras necesidades y se descomprime el archivo en la ubicación deseada. Para continuar vamos a la sección 3. Terminar de configurar su bot EDUtrack
-
Clonar repositorio En la terminal de nuestro sistema, accederemos al directorio donde se alojara la instancia de EDUtrack y se escribira el siguiente comando:
git clone https://github.com/jeovani-morales/EDUtrack_bot
Presiona
Enter
para crear tu clon local y se mostraraun mensaje similar a este:> Cloning into 'EDUtrack_bot'... > remote: Enumerating objects: 868, done. > remote: Counting objects: 100% (81/81), done. > remote: Compressing objects: 100% (67/67), done. > remote: Total 868 (delta 36), reused 52 (delta 14), pack-reused 787 > Receiving objects: 100% (868/868), 5.06 MiB | 7.77 MiB/s, done. > Resolving deltas: 100% (501/501), done.
-
Configuración manual
Para realizar la configuración manual, se debe contar con:
- El nombre que tiene registrado en la aplicación de Telegram
- Su usuario de Telegram
- El ID de Telegram
El nombre y el usuario, se pueden obtener desde el menu Settings de la aplicación de Telegram.
El id se puede obtener utilizando el bot @UserInfoBot
Accedemos al directorio del reposirtorio EDUtrack_bot
# change into the `repo` directory cd EDUtrack_bot
Ahora deberás editar manualmente el archivo de configuración
config_file.py
que se encuntra en el direcotorio EDUrack_bot/config.# Linux nano config/config_file.py # Windows CMD o Power Shell notepad config/config_file.py
La información que se debe reemplazar esta indicada con el texto "replace
<element>
", donde<element>
es la variable a sustituir. Es importante dejar las comillas (""). Por ejemplo- "replace subject_id" -> "FS_2021"
- "replace subject_name" -> "Fundamentos del Software 2021"
# config_file.py #=========================================== # Data to modify #========================================= subject_data = { "_id": "replace subject_id", # Database name "name": "replace subject_name", "start_date": "replace start_date", # format dd/mm/yyyy "course_weeks": "replace num_weeks", # Number of weeks of the course excluding vacation weeks "start_vacations" : "replace start_vacations", # format dd/mm/yyyy "end_vacations": "replace end_vacations", # format dd/mm/yyyy "max_final_grade": "replace max_final_grade", # Highest grade a student can get "max_activity_grade": "replace max_activity_grade", # Maximum qualification that an activity can get "min_grade_to_pass": "replace min_grade_to_pass", # Minimum grade a student must get in order not to fail "min_ideal_grade": "replace min_ideal_grade", # A student's ideal grade should be a value between max_final_grade and min_grade_to_pass+1. See the manual for more information on this note. "activate_evaluations:": "0", # Don´t modify "active_planet_registry": "1", # Don´t modify "maintenance": "0", # Don´t modify "ignore_categories": set(), # Don´t modify } teacher_data = { "email": "replace email", # teacher email "name": "replace teacher_name", "telegram_name": "replace telegram_name", "username": "replace username", "telegram_id": "replace _id", # To know the teacher's id visit @userinfobot on Telegram from the teacher's account. "language": "replace language", # es for Spanish, en for english "is_teacher": 1, # Don´t modify }
Para finalizar la configuración de EDUtrack bot se deberá crear los grupos de telegram y asignar el bot creado como ADMINISTRADOR en cada uno de ellos.
NOTA IMPORTANTE: Es muy importante que el bot se encuentre como administrador en cada grupo de Telegram, ya que solo como administrador tendra acceso a la información necesaria para realizar sun funciones.
NOTA IMPORTANTE: Al crear los planetas se ofrece la opción Historial del chat para nuevos miebros que por default esta como
HIDDEN
si se cambia porVISIBLE
, Telegram modifica el estatus de grupo a supergrupo por lo que los administradores previamente dados de alta se resetearan, es una cuestion de Telegram, por lo que es necesario volver a dar de alta al bot como administrador.
Para finalizar la configuración se deben subir a nuestro bot 2 archivos students_format.csv
y activities_format.csv
. La plantilla de estos archivos nos la entregara nuestro bot EDUtrak al iniciar una conversación con el después de realizar el despligue. El despliegue se explica en la siguiente sección.
El despliegue de EDUtrack nos permitirá entablar una conversación con nuestro bot. Se puede realizar en un servidor local, o en un servidor en Internet a través de un webhook, para este último se explicará como hacerlo dentro de HEROKU.
Es importante recordar que para poner en marcha EDUtrack de forma local, se debe tener previamente instalado Python en su version 3.7 o superior y SQLite.
Se recomienda crear un entorno virtual previamente
para instalar las librerias requeridas que se encuentran en el archivo requirements.txt
:
colorama>=0.4.3
pandas>=1.1.2
python-telegram-bot>=12.7
- coloroma: Permite en un entorno local, mostrar los errores en color para identificarlos con facílidad.
- pandas: Manejo y análisis de estructura de datos
- python-telegram-bot: Interfaz para conectar Python con la API Bot Telegram
Desde la terminal de tu sistema, ya en el entorno virtual, nos aseguramos de estar en el directorio de EDUtrack_bot y ejecutamos:
pip install -r requirements.txt
Se debe establecer la variable de entorno TOKEN, la cual contendrá el TOKEN proporcionado por BotFather para nuestro bot. Esto se realiza por seguridad para que el TOKEN no se encuentre alojado directamente en los archivos.
NOTA IMPORTANTE esta forma de configurar las variables de entorno son temporales, es decir, se deben de establecer las variables de entorno cada vez que se abre una nueva terminal.
#Linux
export TOKEN="<TOKEN_proporcionado_por_BotFather>"
export MODE="dev"
# Windows Powershell
$env:TOKEN="<TOKEN_proporcionado_por_BotFather>"
$env:MODE="dev"
# Windows CMD
set TOKEN="<TOKEN_proporcionado_por_BotFather>"
set MODE="dev"
Si todo ha salido correctamente hasta este momento solo nos queda ejecutar el script de python:
python edutrack.py
Al ejecutar nuestro script se mostrara el siguiente mensaje, el cuál indicará que el bot se ha cargado correctamente.
====================================================
| EDUtrack_bot Copyright (C) 2021 Jeovani Morales
| This program comes with ABSOLUTELY NO WARRANTY.
| This is free software, and you are welcome
| to redistribute it under certain conditions see
| https://github.com/jeovani-morales/EDUtrack_bot
=====================================================
Loaded Bot
- Ingresa/crea una cuenta de Heroku desde su sitio web. Heroku ofrece un plan especial si tienes una cuenta de estudiante/profesor en GitHub Education. Si cuentas con una cuenta educativa ingresa a Heroku for GitHub Students
- Instala Git (Para despliegue en terminal)
- Instala Heroku CLI (Para despliegue en terminal)
NOTA IMPORTANTE: El plan gratuito en heroku, pone a dormir su bot después de 30 minutos de inactividad. Al recibir una solicitud despertará, pero provoca un breve retraso para esta primera solicitud, despúes respondera casi inmediatamente hasta que vuelva a dormir por inactividad. Tambien es importante considerar que el plan gratuito incluye 450 horas de uso mensuales, que se pueden incrementar a 1000 si se añande una tarjeta de credito a su cuenta (mientras no rebase el límite de uso no se realizara ningún cargo). Al dormir un bot (o una heroku app), no gasta horas. Para mas información visite Free Dyno Hours.
Romain Butteaud desarrollo una app para evitar que tu aplicación gratuita de Heroku vuelva a quedarse dormida. Sólo tienes que añadir la tuya aquí kaffeine.herokuapp.com.
Para realizar el despliegue en Heroku se debe de haber modificado el archivo config_file
del directorio config
(Si se utilizo el boto EDUtrack_setup ya está configurado). Además se debe contar con 2 archivos (los cuales ya se encuentran en el repositorio), requirements.txt
que ya se ha utilizado previamente y Procfile
(este archivo no debe tener ninguna extensión de archivo como .txt, porque no funcionará), el cual debe contener el siguiente texto:
web: python3 edutrack.py
-
Antes de realizar el despligue con este método debes crear una copia del repositorio EDUtrack_bot en tu propia cuenta de GitHub.
-
Ingresa/crea tu cuenta en el sitio web de Heroku y crea una nueva app donde alojaras tu instancia de EDUtrack_bot.
-
Selecciona la app que acabas de crear y en el menú selecciona la opción de Settings.
-
En la sección
Confif Vars
presiona el botónReveal Config Vars
y añade las variables: -
En el menu de la aplicación selecciona la opción Deploy y en el apartado
Deployment method
selecciona la opciónGithub Connect to GitHub
.
- Te pedirá iniciar sesión en tu cuenta de GitHUb y te permitirá buscar entre tus repositorios, busca aquél donde alojaste EDUtrack_bot. Presiona el botón Connect.
- Heroku nos presetnara dos opciones para realziar el despliegue, de forma manual y de forma automática. La forma automática reiniciara el despligue cada que se realice un cambio en el repositorio. En ambas nos pedirá que seleccionemos la rama que desplegaremos, seleccionamos
Main
y presionamos el botónDeploy Branch
para la forma manual oEnabled Automatic Deploys
.
Inicie sesión una cuenta en Heroku desde la terminal de tu sistema.
heroku login
heroku: Press any key to open up the browser to login or q to exit:
Heroku CLI solicitara presionar una tecla para abrir el navegador y sólo tiene que hacer clic en el botón para iniciar sesión.
Si ya cuenta con una web app puede omitir estos pasos. Vaya al punto 4.- Establecer las variables de entorno.
Una vez que haya iniciado la sesión, vuelva a la línea de comandos. Para crear una nueva webapp ingrese:
# Si no se indica <your_app_name> heroku proporcionara un nombre aleatorio
$ heroku create <your_app_name>
Creating ⬢ <your_app_name>... done
https://<your_app_name>.herokuapp.com/ | https://git.heroku.com/<your_app_name>.git
Las varaibles de entorno se pueden establecer directamente desde el sitio web de Heroku en la sección de Settings
. Tambien se puede establcer utilizando la terminal con Heroku CLI como se describe a continuación:
-
HEROKU_APP_NAME
$ heroku config:set HEROKU_APP_NAME=<your_app_name> -a <your_app_name> Setting HEROKU_APP_NAME and restarting ⬢ <your_app_name>.. done, v3 ! Warning: The "HEROKU_" namespace is protected and shouldn't be used. HEROKU_APP_NAME: <your_app_name>
-
TOKEN
$ heroku config:set TOKEN=<paste_your_TOKEN_bot> -a <your_app_name> Setting TOKEN and restarting ⬢ <your_app_name>.. done, v3 TOKEN: <your_TOKEN_bot>
-
MODE (debe ser prod)
$ heroku config:set MODE=prod -a <your_app_name> Setting MODE and restarting ⬢ <your_app_name>.. done, v3 MODE: prod
- Crear un nuevo respositorio de Git:
git init
- Indicar a Git los archivos que se van a actualizar en el siguiente commit. Con el punto "." indicamos que queremos actualizar todos los archivos:
git add .
- Realizam:os el commit especificando una descripción
git commit -m "update files"
- Asignamos un control remoto al repositorio local:
heroku git:remote -a <your_app_name>
- Se envia todo al servidor heroku:
git push heroku main
Al finalizar se mostrará un mensaje similar a este:
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 347 bytes | 347.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-20 stack
remote: -----> Using buildpack: heroku/python
remote: -----> Python app detected
remote: -----> No Python version was specified. Using the same version as the last build: python-3.9.5
remote: To use a different version, see: https://devcenter.heroku.com/articles/python-runtimes
remote: -----> No change in requirements detected, installing from cache
remote: -----> Using cached install of python-3.9.5
remote: -----> Installing pip 20.2.4, setuptools 47.1.1 and wheel 0.36.2
remote: -----> Installing SQLite3
remote: -----> Installing requirements with pip
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote:
remote: -----> Compressing...
remote: Done: 85.9M
remote: -----> Launching...
remote: Released v18
remote: https://<your_app_name>.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/<your_app_name>.git
c705235..9154a1d main -> main
Para ver el estatus de nuestra aplicaciónpresionamos el botón More
que se encuentra en la parte superior derecha del sitio web de la app y seleccinamos la opción View Logs
Desde la terminal podemos también podemos mostrar los logs:
heroku logs -t -a <your_app_name>
Y nos mostrará un mensaje similar a este
2021-05-25T17:11:25.000000+00:00 app[api]: Build started by user **********
2021-05-25T17:12:01.937808+00:00 app[api]: Deploy 9154a1d2 by user **********
2021-05-25T17:12:01.937808+00:00 app[api]: Release v18 created by user **********
2021-05-25T17:12:02.209351+00:00 heroku[web.1]: State changed from down to starting
2021-05-25T17:12:11.086495+00:00 heroku[web.1]: Starting process with command `python3 edutrack.py`
2021-05-25T17:12:16.000000+00:00 app[api]: Build succeeded
2021-05-25T17:12:20.650217+00:00 app[web.1]: Conexión exitosa
2021-05-25T17:12:21.374078+00:00 app[web.1]:
2021-05-25T17:12:21.374117+00:00 app[web.1]: ====================================================
2021-05-25T17:12:21.374118+00:00 app[web.1]: | EDUtrack_bot Copyright (C) 2021 Jeovani Morales
2021-05-25T17:12:21.374118+00:00 app[web.1]: | This program comes with ABSOLUTELY NO WARRANTY.
2021-05-25T17:12:21.374118+00:00 app[web.1]: | This is free software, and you are welcome
2021-05-25T17:12:21.374119+00:00 app[web.1]: | to redistribute it under certain conditions see
2021-05-25T17:12:21.374119+00:00 app[web.1]: | https://github.com/jeovani-morales/EDUtrack_bot
2021-05-25T17:12:21.374119+00:00 app[web.1]: ====================================================
2021-05-25T17:12:21.374120+00:00 app[web.1]:
2021-05-25T17:12:21.374188+00:00 app[web.1]: Loaded Bot
Y listo ya podemos ir a la app de Telegram e iniciar un conversación con nuestro bot para terminar de configurar nuestra asignatura: .
- Python
- [Python Telegram Bot] (https://github.com/python-telegram-bot/python-telegram-bot) - Libreria que proporciona la interface con Telegram API Bot
- SQLite - Motor de Base de Datos
- Jeovani M. Morales Nieto - Doctorando Desarrollador
- Rosana Montes Soldado - Directora de Tesis y Asesora
- Francisco Herrera Triguero - Director de Tesis
También puedes mirar la lista de todos los contribuyentes quíenes han participado en este proyecto.
Por favor lee el CONTRIBUTING.md para detalles de nuestro código de conducta, y el proceso para enviarnos pull requests.
Puedes encontrar mucho más de cómo utilizar este proyecto en nuestra Wiki
Usamos SemVer para el versionado. Para todas las versiones disponibles, mira los tags en este repositorio.
Este proyecto está bajo la Licencia (Tu Licencia) - mira el archivo LICENSE.md para detalles
- En la elaboración de un proyecto como este es imposible reinvertar la rueda, por lo que agradezco a:
- Artem Rys y su artículo Creating Telegram Bot and Deploying it to Heroku
- HOUI y su artículo How to Deploy a Telegram Bot using Heroku for FREE quienes facilitaron la compresión del despligue de nuestro bot.
- Villanuevand quien proporciono la plantilla para la realización de este Readme