A conversational AI chatbot designed to help electric vehicle users find charging stations and get relevant information using Rasa framework.
- Location-based charging station finder
- Real-time traffic-aware routing
- Charging station filtering by preferences
- Detailed station information
- Web-based chat interface
- Planned: live connector availability, ML-powered ETA
EVAT_Chatbot/
βββ rasa/ # Rasa chatbot configuration
β βββ domain.yml # Intent, entity, and action definitions
β βββ config.yml # NLU pipeline and policy configuration
β βββ endpoints.yml # API endpoints
β βββ credentials.yml # Authentication settings
β βββ actions/ # Custom action implementations
β βββ data/ # Training data (intents, stories, rules)
βββ backend/ # Core business logic
β βββ real_time_apis.py # TomTom client used by actions
β βββ utils/ # Utility functions
βββ frontend/ # Web interface
β βββ index.html # Main chat interface
β βββ script.js # Frontend logic
β βββ style.css # Styling
βββ data/ # Datasets
β βββ raw/ # CSV files (charging stations, coordinates)
βββ ml/ # Machine learning models
β βββ classification.py # Station classification
β βββ regression.py # ETA prediction
β βββ README.md # ML documentation
βββ config/ # Configuration files
βββ README.md # Project overview
βββ requirements.txt # Dependencies
βββ .gitignore # Git ignore rules
cd EVAT_Chatbot
python -m venv rasa_env && source rasa_env/bin/activate
pip install -r requirements.txt
cd rasa && rasa train
Tab 1: rasa run actions --port 5055
Tab 2: rasa run --enable-api --cors "*"
Open frontend/index.html (or serve frontend/ via python -m http.server 8080)- Open
frontend/index.htmlin your browser. It posts tohttp://localhost:5005/webhooks/rest/webhook. - Ensure the Rasa server was started with
--cors "*"so the browser can call it.
cd frontend
python -m http.server 8080
# open http://localhost:8080- Route planning:
1βfrom Carlton to Geelongβget_directions plsβget_traffic_info - Emergency charging:
2βRichmondβ type a station name βget directions pls - Preferences:
3βfastest(orcheapest/premium) βMelbourneβ type a station name
- Locations resolve from CSV names to coordinates; if a name isnβt in the CSV, youβll be asked to try another.
- TomTom provides real-time distance/ETA/traffic when both start and destination coords exist.
- The frontend is wired to Rasa REST and also sends browser geolocation (
lat,lon) as metadata; actions currently do not use this metadata yet.
Handled via backend/real_time_apis.py (used by Rasa actions)
-
The chat UI in
frontend/is already wired to the Rasa REST webhook. -
It sends
lat/lonfrom the browser asmetadatawith each message. -
Limitations today:
- Actions do not yet use the
metadata.lat/lonto improve results. - Plain text rendering only (no quick-reply buttons or cards yet).
- Live availability is not implemented.
- Actions do not yet use the
data/raw/Co-ordinates.csvfor suburb coordinatesdata/raw/charger_info_mel.csvfor stations
- Done:
- Key in
.env(TOMTOM_API_KEY) used by backend - Real-time routing + traffic via TomTom (CSV-backed locations)
- Frontend wired via REST; or use Rasa shell
- Key in
- How it works now:
- Names (start/end) resolve to coordinates via CSV only; then TomTom provides route/traffic
- Frontend sends metadata lat/lon, but actions currently resolve start/end from CSV
- Gaps:
- Start from user location (metadata lat/lon) not yet used by actions
- Stations are CSV-based (no TomTom station search or availability yet)
- Dataset: missing/null values; some station names/addresses inconsistent
- Matching: station lookup is strict; fuzzy matching can be added for better tolerance
- Next:
- Use browser lat/lon (metadata) as start coords; keep CSV for names.
- Add along-route/nearby station search (TomTom) as fallback when CSV returns no results.
- Add live availability (new API) and fold into ranking.
- Add fuzzy matching + CSV cleanup.
- Frontend: UI enhancements and interactivity β quick-reply buttons (send payloads), clickable options, station βcardsβ with details and CTAs (Get directions, Show traffic)...
- Optional: incorporate ML ranking/ETA once wired into actions.