This skill wraps a small Python client (ebusy_api.py) to log into
eBusy-based booking systems and fetch reservations for a given
court-module and date.
It is designed to work with multiple halls by switching
configuration via environment variables. All hall- and user-specific
values are provided by the environment, not hard-coded in the skill.
> Important: No usernames/passwords should be committed into this
> skill folder. Keep real credentials in a local .env, your shell
> environment, or OpenClaw's gateway config.
skills/ebusy-courts/ebusy_api.py – core Python clientskills/ebusy-courts/SKILL.md – this documentationOptional (local-only, do not publish):
skills/.env – local environment file with hall-specific credentialsThe client is written to be generic; it reads all hall-specific
config from environment variables:
EBUSY_BASE_URL # e.g. https://myclub.ebusy.de
EBUSY_USERNAME # login user for the chosen hall
EBUSY_PASSWORD # login password for the chosen hall
EBUSY_COURT_ID # eBusy court-module id for this hall
EBUSY_FIRST_COURT_NO # first court number inside that module
Usage (in a venv with requests + beautifulsoup4 installed):
source venv/bin/activate
export EBUSY_BASE_URL="https://myclub.ebusy.de"
export EBUSY_USERNAME="<your-user>"
export EBUSY_PASSWORD="<your-password>"
export EBUSY_COURT_ID="<module-id>"
export EBUSY_FIRST_COURT_NO="<first-court-no>"
python skills/ebusy-courts/ebusy_api.py 03/07/2026
The script will:
username/password.
```text
Reservierung Platz 1: 09:00 - 10:00 von
Reservierung Platz 2: 10:00 - 11:00 von
...
```
This section shows example configurations for two real halls in
Germany. Other users can copy the pattern and plug in their own club
URLs and module IDs.
https://medenhalle.ebusy.deEBUSY_COURT_ID = 1EBUSY_FIRST_COURT_NO = 1MEDENHALLE_USERMEDENHALLE_PASSWORDExample shell setup:
source venv/bin/activate
# load your local secrets, e.g. from skills/.env
export EBUSY_BASE_URL="https://medenhalle.ebusy.de"
export EBUSY_USERNAME="$MEDENHALLE_USER"
export EBUSY_PASSWORD="$MEDENHALLE_PASSWORD"
export EBUSY_COURT_ID="1"
export EBUSY_FIRST_COURT_NO="1"
python skills/ebusy-courts/ebusy_api.py 03/07/2026
https://ktev.ebusy.deEBUSY_COURT_ID = 807EBUSY_FIRST_COURT_NO = 2135KTEV_USERKTEV_PASSWORDExample shell setup:
source venv/bin/activate
# load your local secrets, e.g. from skills/.env
export EBUSY_BASE_URL="https://ktev.ebusy.de"
export EBUSY_USERNAME="$KTEV_USER"
export EBUSY_PASSWORD="$KTEV_PASSWORD"
export EBUSY_COURT_ID="807"
export EBUSY_FIRST_COURT_NO="2135"
python skills/ebusy-courts/ebusy_api.py 03/07/2026
When a user asks for availability in a given hall (e.g. "Suche freie
Zeiten in der Tennishalle XYZ am Sonntag"), an OpenClaw agent can:
either from TOOLS.md or agent-specific config.
EBUSY_* are set for that hall (credentials supplied by the runtime or skills/.env).
ebusy_api.py for the relevant date, parse the JSON, and buildan availability table (free vs booked) per court and time slot.
The decision logic (which profile to choose for which user request)
should live in the agent and/or TOOLS.md, not in this skill's code.
skills/.env or any file containing realcredentials to ClawHub.
.gitignore excludes skills/.env and similar secret-bearingfiles.
SKILL.md + ebusy_api.py) contains onlygeneric logic and non-secret configuration; the example profiles are
illustrative and can be replaced by any other eBusy-based club.
共 1 个版本