An intelligent dialogue assistant built on Rasa Open Source and integrated with a Home Assistant Calendar and Duckling. The project provides both a textual dialogue interface and a modern browser-based web chat interface.
See demo: https://youtu.be/VffBAKj67zk
- Modern Browser UI: An interactive chat room interface served at
http://localhost:8080to communicate with the assistant. - Direct Meeting Scheduling: Arrange meetings by topic, duration, time, and participants.
- Calendar Interruption queries: Ask "what do I have tomorrow?" while selecting a meeting time. The assistant lists availability without losing your form progress.
- Flexible Amendments: Change specific fields (e.g. title, participants, duration, time) at the confirmation stage before event creation.
- Standalone Calendar Queries: Ask directly about schedule availability (e.g., "what do I have on Friday?").
- Secure Home Assistant Sync: Updates your Home Assistant Calendar API automatically, securely masking API tokens in all logs and user messages.
User Browser
↓ HTTP POST
Static Chat UI (localhost:8080)
↓
Rasa REST Channel (localhost:5005)
↓
Rasa NLU + Dialogue Management
↓
Rasa Action Server (localhost:5055)
↓
Home Assistant Calendar API
Duckling provides time/date/duration extraction for Rasa. (localhost:8000)
Copy .env.example to .env and fill in the parameters:
HA_URL=https://your-home-assistant-domain-or-ip:8123
HA_TOKEN=your_long_lived_access_token
HA_CALENDAR_ENTITY=calendar.your_calendar_entity
DEFAULT_MEETING_DURATION_MINUTES=30
TIMEZONE=Europe/Warsawpython3.10 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt./run.sh- Options:
--skip-train: Skip retraining Rasa models if they are already up to date.--stop-duckling: Stop the Duckling container automatically upon exiting the script.--no-browser: Do not automatically attempt to open the default web browser.
This script opens the browser to http://localhost:8080 automatically.
To cleanly stop background servers (Rasa server, action server, HTTP server, and Duckling):
./stop.sh- Options:
--keep-duckling: Keep the Duckling Docker container running (stopped by default).
User: schedule a meeting
Bot: What is the meeting about? For example: "Project planning".
User: Project planning
Bot: Who should participate? You can give names or emails, for example: "Anna and Tom".
User: Anna and Tom
Bot: How long should the meeting be? For example: "30 minutes" or "1 hour".
User: 30 minutes
Bot: When would you like to schedule it?
User: tomorrow at 3 pm
Bot: Please confirm:
Title: Project planning
Participants: Anna and Tom
Duration: 30 minutes
Start: tomorrow at 3 pm
End: 2026-05-31T15:30:00+02:00
You can write "confirm", or write "change title", "change participants", "change duration", or "change time".
User: change duration
Bot: What should the new duration be? For example: "30 minutes" or "1 hour".
User: 1 hour
Bot: Updated duration to 1 hour. The end time was recalculated.
Please confirm:
...
User: confirm
Bot: Meeting scheduled and added to Home Assistant calendar.
- Symptom:
run.shreportsDuckling is not responding on http://localhost:8000. - Fix: Ensure Docker daemon is running. Try executing
docker compose up -d ducklingmanually and testing with:curl -XPOST http://localhost:8000/parse --data 'locale=en_GB&text=tomorrow at 8'
- Symptom: Red warning banner appears at the top of the browser chat page stating:
Could not connect to the assistant. Please check that Rasa is running. - Fix: Check
logs/rasa_server.logfor compilation or startup errors. Ensure Rasa is running on port5005by executing:curl http://localhost:5005
- Symptom: Rasa replies with warnings that it cannot run custom actions, or log output shows connection errors to port
5055. - Fix: Inspect
logs/action_server.logfor traceback errors. Ensure python modules compile correctly by running:PYTHONPATH=. pytest tests/test_actions.py
- Symptom: Chat client responds with:
I scheduled the meeting in the assistant, but I could not add it to Home Assistant calendar. Reason: ... - Fix: Open
.envand verify the tokenHA_TOKENand entity nameHA_CALENDAR_ENTITY. Ensure the token has not expired and has admin/calendar scopes.
- Symptom: The servers fail to bind to ports
5005,5055, or8080. - Fix: The
./run.shscript automatically checks and terminates processes running on these ports before startup. If conflicts persist, kill them manually:kill -9 $(lsof -t -i:5005) $(lsof -t -i:5055) $(lsof -t -i:8080) 2>/dev/null || true
Detailed system documentation is located in the docs/ directory:
- Overview - System overview and main scenarios.
- Architecture - Rasa, Duckling, Core, and REST integrations.
- Web Interface - REST API connection, local storage persistence, styling.
- Conversation Flows - Complete transcripts for all four core flows.
- Home Assistant Integration - Token authentication, payload mappings, and API details.
- Rasa Design - Intents, slots, forms, actions, rules, and stories.
- Setup and Run - Full list of setup, run, train, and validate commands.
- Limitations and Future Work - Exclusions and future roadmap features.