This script has been largely broken since March 9, when Impfterminservice.de introduced a bunch of anti-scraping measures.
The 116117 Impfterminservice provides COVID-19 vaccination appointments for a wide range of German states. Unfortunately, it does not alert registered users when appointments become available, so users are required to manually monitor it. This is a proof of concept for a simple Puppeteer-powered bot that monitors the site and alerts via STDOUT and optionally push notification once appointments are available.
🦠 The 116117 booking engine changes regularly and this bot may be non-functional. It is more intended as a proof-of-concept and inspiration for own experiments than as a single point of truth, best practice or ready-for-use script. Please use it responsibly and read the complete Readme beforehand. PRs and issues will only be monitored sporadically.
…my project Impfterminmonitor.de, which provides an easy way to track appointment availability using a clean web interface.
- Node.js (>v14)
- If you want to receive push notifications for available appointments, a Pushover account.
- One or multiple URLs to be monitored (see below).
116117bot requires one or multiple URLs to be monitored as its input. Right now, two types of URLs are supported:
- URLs like
https://123-iz.impfterminservice.de/impftermine/service?plz=12345
. You are redirected to these in the browser after you have selected a location for vaccination on impfterminservice.de. You can copy them from the browser address bar. - URLs like
https://123-iz.impfterminservice.de/terminservice/suche/XXXX-XXXX-XXXX/12345/
. These are provided via e-mail after elegibility for a vaccination has been confirmed. Attention: Since a recent change of the booking engine, monitoring URLs like this immediately results in reserved appointments, making them unavailable to the public. I therefore advise against monitoring personalized URLs like this one using the bot.
116117bot reads all configuration from environment variables. Only one is actually required:
Variable | Required | Default | Description |
---|---|---|---|
URLS |
✅ | The URLs to be monitored (see above). If you provide more than one separated by commas, they will be checked round-robin style. | |
PUSHOVER_TOKEN |
If you want to receive alerts via Pushover, the app token generated there. | ||
PUSHOVER_USER |
If you want to receive alerts via Pushover, the recipient ID (user or group) generated there. | ||
TIMEOUT_REGULAR |
300 |
The number of seconds 116117bot will wait between polls. | |
TIMEOUT_ERROR |
300 |
The number of seconds 116117bot will pause in case an error has been encountered during a poll. | |
NO_PUPPETEER_SANDBOX |
false |
Set this to true to run Puppeteer without a sandbox. This is required for some hosting services. |
|
LOG_HTML |
false |
Set this to true to log raw HTML from polls (if it has changed). |
|
HEADLESS |
false |
Set this to true to run Puppeteer in headless mode. |
|
PORT |
3000 |
The port 116117bot will run on. It is not actively used at this point, but should still be available. |
$ npm install
$ npm start
Build the docker container inside the repository folder:
$ docker build -t 116117bot .
Run the docker container:
$ docker run --name 116117bot -e URLS="YourUrlHere" 116117bot