WhatsApp-Reminder: Automatische monatliche Nachrichten selbst hosten

Selbst gehosteter WhatsApp-Bot der jeden Monat automatisch eine personalisierte Nachricht an die richtige Person schickt – ohne Business-Account, nur Docker.

Manchmal braucht es eine monatliche Erinnerung – z.B. wer diesen Monat für etwas zuständig ist. Statt das manuell zu tracken habe ich whatsapp-reminder gebaut: ein selbst gehosteter, dockerisierter Bot der automatisch eine personalisierte WhatsApp-Nachricht nach einem konfigurierbaren Jahresplan versendet. Kein WhatsApp Business Account, keine Cloud-Services – nur Docker auf dem eigenen Server.

Der Quellcode liegt auf Gitea: gitea.aontech.ch/neyer/whatsapp-reminder


Features

  • Monatliche personalisierte Nachrichten nach konfigurierbarer Rotation
  • Monate ohne Eintrag werden automatisch übersprungen
  • Cron-basierte Planung mit Zeitzonen-Support
  • Session-Persistierung über Container-Neustarts hinweg
  • Web-Dashboard zur Übersicht und manuellen Auslösung
  • Docker Healthcheck integriert

Voraussetzungen

  • Docker und Docker Compose
  • Ein WhatsApp-Account (normaler Account, kein Business)

1. Repository klonen

git clone https://gitea.aontech.ch/neyer/whatsapp-reminder.git
cd whatsapp-reminder

2. Konfigurationsdateien anlegen

Kopiere die Beispieldateien und passe sie an:

cp config/contacts.example.json config/contacts.json
cp config/settings.example.json config/settings.json

contacts.json – Deine Kontakte mit ID, Name und Telefonnummer:

[
  { "id": "alice", "name": "Alice Müller", "phone": "+41791234567" },
  { "id": "bob",   "name": "Bob Meier",    "phone": "+41797654321" }
]

settings.json – Betrag, Cron-Ausdruck, Nachrichtenvorlage und Jahresplan:

{
  "amount": 25,
  "currency": "CHF",
  "cron": "0 7 1 * *",
  "timezone": "Europe/Zurich",
  "message": "Hallo {vorname}, diesen Monat bist du dran. Bitte überweise {amount} {currency}.",
  "schedule": ["alice", "bob", null, "carol", "alice", "bob", null, "carol", "alice", "bob", null, "carol"]
}

Der schedule-Array hat 12 Einträge – einen pro Monat. null bedeutet, dieser Monat wird übersprungen.

Verfügbare Platzhalter in der Nachricht: {vorname}, {name}, {amount}, {currency}, {month}, {year}


3. Container starten

docker compose up --build -d

4. WhatsApp verknüpfen

Beim ersten Start muss der Account einmalig per QR-Code verknüpft werden. Öffne im Browser:

http://<SERVER-IP>:3001/qr

Scanne den QR-Code in WhatsApp unter Verknüpfte Geräte → Gerät hinzufügen. Die Session wird lokal in data/ gespeichert und übersteht Neustarts.


Web-Interface

Nach dem Start steht ein einfaches Dashboard auf Port 3001 zur Verfügung:

  • http://<IP>:3001 – Jahresplan-Übersicht
  • /qr – QR-Code zur Erstkonfiguration
  • /send-now – Nachricht manuell auslösen (optionale Parameter: ?year=2026&month=5)
  • /status – JSON-Statusabfrage

Hinweis: Das Interface sollte nicht öffentlich erreichbar sein – am besten nur im lokalen Netz oder hinter einem VPN zugänglich machen.


Das Projekt ist MIT-lizenziert. Wer Verbesserungen hat, gerne per Pull Request auf Gitea.