Lo scopo del progetto è quello di realizzare un Web Service in grado di interagire con l' API di Telegram e permettere il funzionamento di "Health_Bot", un bot con svariate funzionalità, tra cui:
-
Aggiornamento parametri: peso e livello di attività fisica;
-
Calcolo del BMI (Body Mass Index), del FCG (Fabbisogno Calorico Giornaliero), del PI (Peso ideale), del BMR (Fabbisogno Metabolico a Riposo) e dell'LBM (Massa magra in kg);
-
Diagnostica della salute, sulla base del BMI e del PI;
-
Calcolo dei principali valori nutrizionali di un alimento;
-
Consigli sull'allenamento, in base al livello di attività fisica svolta dall'utente, e sulla dieta, in base al valore del suo FCG;
-
Statistiche su peso, BMI ed LBM (sia personali per ogni utente, che generali accessibili tramite richieste GET).
- Quando un utente invia ad Health_Bot (@health_fit_bot) un messaggio, esso viene salvato nei server di Telegram per circa 24 ore.
- Il nostro web service, attraverso delle richieste HTTP alla Telegram Bot API, richiede periodicamente eventuali nuovi updates inviati dagli utenti.
- Alla ricezione di nuovi messaggi, avviene l'elaborazione della richiesta dell'utente e il responso viene rimandato indietro alla Bot API.
Per poter iniziare a programmare un bot, sarà necessario crearne uno nuovo interagendo direttamente con BotFather, come mostrato nella Gif sotto:
Successivamente, seguendo le istruzioni indicate da BotFather, sarà possibile:
- Scegliere un username per il bot (deve terminare con 'Bot' o 'bot')
- Abilitare/disabilitare l'inserimento del bot nei gruppi
- Scegliere la descrizione tramite il comando '/setdescription'
- ecc...
Inoltre BotFather fornisce all'utente il token
da utilizzare per comandare il bot tramite richieste HTTP.
-
Clonare il repository (o scaricare e scompattare lo zip)
$ git clone https://github.com/fedePalazz/Health_Bot.git
-
Importare il progetto con Eclipse/IntelliJ
File --> Import --> Existing Maven Project
-
Avviare
HealthBotApplication.java
come Spring Boot App -
Ora sarà possibile interagire con Health_Bot direttamente dall'app di Telegram e, in aggiunta, eseguire le richieste GET/POST indicate di seguito all'indirizzo http://localhost:8081.
Le rotte definite sono le seguenti:
Tipo | Rotta | Param | Descrizione |
---|---|---|---|
GET |
/lvlAtt |
n/a | Livello di attività: sedentario, moderata, pesante. Restituisce la singola percentuale di utenti per ogni livello di attività fisica. |
GET |
/genere |
n/a | Genere: M, F. Restituisce la singola percentuale di utenti per genere. |
GET |
/rangeEta |
n/a | Restituisce la singola percentuale relativa al range dell'età. |
GET |
/condizioni |
n/a | Condizioni: Grave Magrezza, Sottopeso, Normopeso, Sovrappeso, Obesità Classe I (lieve), Obesità Classe II (media), Obesità Classe III (grave). Restituisce la singola percentuale relativa alla condizione fisica. |
GET |
/ultMis |
num | Restituisce le ultime num misurazioni degli utenti. |
POST |
/stats |
n/a | Restituisce le statistiche generali degli utenti filtrate secondo i parametri forniti |
POST |
/ultMis |
num | Restituisce le ultime num misurazioni registrate avendo applicato i filtri impostati |
Esempio di rotta /rangeEta
di tipo GET :
Response:
I filtri definiti sono i seguenti:
Tipo | Categoria | Parametri Filtro | Descrizione |
---|---|---|---|
Utente |
Eta |
etaMin, etaMax | Filtra in base al range di età scelto. |
Utente |
Genere |
gen | Filtra in base al genere: M, F. |
Utente |
Tipo |
tipo | Filtra in base al livello di attività fisica. |
Misurazioni |
Peso |
pesoMin, pesoMax | Filtra in base al range di peso scelto . |
Misurazioni |
Bmi |
bmiMin, bmiMax | Filtra in base al range di Bmi scelto . |
Misurazioni |
Lbm |
lbmMin, lbmMax | Filtra in base al range di Lbm scelto . |
Misurazioni |
Data |
dal, al | Filtra in base al range di date scelte . |
Esempio di rotta /stats
di tipo POST :
Body:
- Package view:
- Package dao:
- Package stats:
- Package test:
- Package exception:
- Package model:
- Package util:
- Meccanismo di richiesta degli updates ed elaborazione degli stessi
- Registrazione di un nuovo utente
- Chiamata alla Food API
- Esempio di rotta POST "/stats"
-
Software utilizzati:
Eclipse - IDE per scrivere il codice in Java
SpringBoot - framework backend Java
PostMan - Software per l'API Testing
UMLGenerator - utilizzato per il diagramma dei casi d'uso
Draw.io - utilizzato per il diagramma delle classi e delle sequenze
Typora - usato per scrivere il ReadMe.md in formato Markdown
-
Telegram BOT API:
Telegram - Documentazione API telegram
-
Implentazione per Java (librerie utilizzate):
-
REST API esterne:
CalorieNinjas - API che restituisce le info nutrizionali su di un alimento
BMICalculator - API che calcola automaticamente il BMI di un individuo