Un bot Telegram intelligente per accedere in tempo reale alle informazioni del trasporto pubblico Cotral
Funzionalità • Installazione • Utilizzo • API • Contribuire
- Panoramica
- Funzionalità
- Requisiti di Sistema
- Installazione
- Configurazione
- Utilizzo
- Architettura
- API Reference
- Sviluppo
- Troubleshooting
- Contribuire
- Roadmap
- Licenza
Cotral Telegram Bot è un'interfaccia conversazionale avanzata che permette agli utenti di accedere facilmente alle informazioni del trasporto pubblico Cotral direttamente da Telegram. Il bot offre un'esperienza utente intuitiva con menu interattivi, gestione dei preferiti e informazioni in tempo reale su paline, fermate, transiti e veicoli.
- 🚀 Accesso Rapido: Informazioni immediate su orari e transiti
- 📍 Geolocalizzazione: Trova paline e fermate vicine alla tua posizione
- ⭐ Sistema Preferiti: Salva le tue paline più utilizzate
- 🔄 Aggiornamenti Real-Time: Posizione veicoli e stato transiti in tempo reale
- 🎨 UI Intuitiva: Menu interattivi e navigazione semplificata
- 🔐 Sessioni Persistenti: Mantiene le preferenze utente
| Funzione | Descrizione | Comando |
|---|---|---|
| Preferiti ✨ | Gestisci le tue paline salvate | /getfavoritepoles |
| Ricerca Codice 🔢 | Trova paline per codice | /getpolesbycode |
| Ricerca Posizione 📍 | Paline vicine a te | /getpolesbyposition |
| Arrivo/Destinazione 🚶🏁 | Collegamenti tra località | /getpolebyarrivalanddestination |
| Destinazioni 🚶 | Tutte le destinazioni da una località | /getallpolesdestinationsbyarrival |
| Funzione | Descrizione | Comando |
|---|---|---|
| Per Località 🌐 | Tutte le fermate in una località | /getstopsbylocality |
| Prima Fermata ☝️ | Prima fermata disponibile | /getfirststopbylocality |
| Funzione | Descrizione | Comando |
|---|---|---|
| Per Palina 🔢 | Orari e informazioni transiti | /gettransitsbypolecode |
| Funzione | Descrizione | Comando |
|---|---|---|
| Tracking 📍 | Posizione real-time del veicolo | /getvehiclerealtimepositions |
- Node.js: v16.0.0 o superiore
- npm: v8.0.0 o superiore
- TypeScript: v4.5.0 o superiore
- RAM: Minimo 512MB
- Connessione Internet: Stabile per comunicazione con API
git clone https://github.com/tuoutente/cotral-telegram-bot.git
cd cotral-telegram-botnpm install- Apri Telegram e cerca @BotFather
- Crea un nuovo bot con
/newbot - Scegli un nome e username per il bot
- Copia il token fornito
# Crea il file .env
cp .env.example .env
# Modifica il file con il tuo editor preferito
nano .envContenuto del file .env:
# Telegram Configuration
TELEGRAM_BOT_TOKEN=your_bot_token_here
# Server Configuration (opzionale)
API_BASE_URL=http://localhost:3000
NODE_ENV=production
# Session Configuration (opzionale)
SESSION_DB_PATH=./session_db.jsonIl bot richiede il Cotral Server API in esecuzione.
- Configura l'URL del server in
src/services/axiosService.ts:
const api = axios.create({
baseURL: process.env.API_BASE_URL || 'http://localhost:3000',
});- Verifica la connessione:
curl http://localhost:3000/healthPer personalizzare ulteriormente il bot, modifica:
src/bot/bot.ts- Logica principale e comandisrc/interfaces/- TypeScript interfacessrc/apiHandlers/- Gestori delle chiamate API
npm run devnpm run build
npm startdocker build -t cotral-bot .
docker run -d --name cotral-bot --env-file .env cotral-bot-
Avvia una conversazione: Cerca il tuo bot su Telegram e premi
/start -
Navigazione Menu: Usa i pulsanti interattivi per navigare
-
Condivisione Posizione:
- Tocca l'icona 📎 (graffetta)
- Seleziona "Posizione"
- Invia la tua posizione attuale
-
Gestione Preferiti:
- Cerca una palina
- Premi "Aggiungi ai preferiti ⭐"
- Accedi rapidamente dal menu principale
cotral-telegram-bot/
│
├── src/
│ ├── bot/
│ │ ├── bot.ts # Entry point del bot
│ │ ├── actions/ # Azioni del bot
│ │ └── handlers/ # Gestori eventi
│ │
│ ├── apiHandlers/ # Interfaccia con API Cotral
│ │ ├── polesApiHandler.ts
│ │ ├── stopsApiHandler.ts
│ │ ├── transitsApiHandler.ts
│ │ └── vehiclesApiHandler.ts
│ │
│ ├── commands/ # Definizioni comandi
│ ├── interfaces/ # TypeScript interfaces
│ ├── services/ # Servizi (axios, etc.)
│ └── utils/ # Funzioni utility
│
├── tests/ # Test suite
├── docs/ # Documentazione
└── docker/ # File Docker
graph LR
A[Utente Telegram] --> B[Telegram Bot]
B --> C[Command Handler]
C --> D[API Handler]
D --> E[Cotral Server API]
E --> F[Servizi Cotral]
F --> E
E --> D
D --> C
C --> B
B --> A
// Ottieni paline per codice
getPolesByCode(ctx: Context, code: string, params: { userId?: number }): Promise<void>
// Ottieni paline per posizione
getPolesByPosition(ctx: ExtendedContext, params: {
latitude: number,
longitude: number,
range?: number
}): Promise<void>
// Gestione preferiti
addFavoritePole(ctx: Context, poleCode: string, stopCode: string, userId: number): Promise<void>
removeFavoritePole(ctx: Context, poleCode: string, userId: number): Promise<void>// Ottieni transiti per codice palina
getTransitsByPoleCode(ctx: Context, poleCode: string): Promise<void># Sviluppo con hot-reload
npm run dev
# Build per produzione
npm run build
# Esegui test
npm test
# Linting
npm run lint
# Formattazione codice
npm run formatPer aggiungere un nuovo comando:
- Definisci il comando in
src/commands/ - Crea l'handler in
src/apiHandlers/ - Registra l'azione in
src/bot/actions/ - Aggiungi al menu in
src/bot/bot.ts
# Test unitari
npm run test:unit
# Test integrazione
npm run test:integration
# Coverage
npm run test:coverage| Problema | Soluzione |
|---|---|
| Token non valido | Verifica il token nel file .env |
| Connessione API fallita | Controlla che il server API sia attivo |
| Sessioni non persistenti | Verifica permessi scrittura su session_db.json |
| Posizione non funzionante | Abilita GPS e permessi Telegram |
Abilita il debug verbose:
DEBUG=telegraf:* npm run devControlla i log:
tail -f logs/bot.logAccettiamo contributi! Ecco come partecipare:
- Fork il repository
- Crea un branch (
git checkout -b feature/AmazingFeature) - Commit le modifiche (
git commit -m 'Add AmazingFeature') - Push al branch (
git push origin feature/AmazingFeature) - Apri una Pull Request
- Segui lo stile di codice esistente
- Aggiungi test per nuove funzionalità
- Aggiorna la documentazione
- Usa commit semantici
Questo progetto è completamente gratuito e open source. Se lo trovi utile e vuoi supportare il suo sviluppo continuo e gli aggiornamenti futuri, considera di fare una donazione. Il tuo supporto aiuta a mantenere vivo il progetto e mi motiva ad aggiungere nuove funzionalità e miglioramenti!
Ogni contributo, non importa quanto piccolo, è molto apprezzato! ❤️
Distribuito sotto licenza MIT. Vedi LICENSE per maggiori informazioni.
