Files
whatsapp-reminder/README.md
T
2026-05-28 11:19:11 +02:00

4.4 KiB

📲 WhatsApp Reminder

Ein selbst gehosteter, dockerisierter Bot der automatisch personalisierte WhatsApp-Erinnerungen nach einem monatlichen Plan versendet — jeden Monat eine andere Person aus einer frei konfigurierbaren Rotation.

Basiert auf whatsapp-web.js und läuft vollständig auf deinem eigenen Server. Kein WhatsApp Business-Konto nötig, keine Cloud-Dienste, komplett kostenlos.


Features

  • Schickt jeden Monat eine personalisierte Nachricht an den Kontakt der laut Plan dran ist
  • Überspringt Monate ohne zugewiesenen Kontakt (z.B. der eigene Monat)
  • Cron-basierte Planung mit Zeitzonenunterstützung
  • Session bleibt über Neustarts erhalten — QR-Code einmal scannen, fertig
  • Einfaches Web-Interface zur Übersicht und zum manuellen Auslösen
  • Docker Healthcheck inklusive

Voraussetzungen

  • Docker + Docker Compose

Das wars.


Einrichtung

1. Repo klonen

git clone ssh://git@gitea.aontech.ch:222/neyer/whatsapp-reminder.git
cd whatsapp-reminder

2. Kontakte konfigurieren

config/contacts.json aus der Vorlage erstellen:

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

Dann anpassen:

[
  { "id": "alice",  "name": "Alice Müller",   "phone": "+41791234567" },
  { "id": "bob",    "name": "Bob Schmidt",    "phone": "+41797654321" },
  { "id": "carol",  "name": "Carol Weber",    "phone": "+41791112233" }
]

Telefonnummern im internationalen Format, Leerzeichen und Bindestriche werden automatisch entfernt.

3. Zeitplan und Nachricht konfigurieren

config/settings.json aus der Vorlage erstellen:

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

Dann anpassen:

{
  "amount": 25,
  "currency": "CHF",
  "cron": "0 7 1 * *",
  "timezone": "Europe/Zurich",
  "message": "Hallo {vorname}, diesen Monat bist du wieder dran mit {amount} {currency} ;)\nDanke.",
  "schedule": [
    "alice",
    "bob",
    null,
    "carol",
    "alice",
    "bob",
    null,
    "carol",
    "alice",
    "bob",
    null,
    "carol"
  ]
}
  • schedule — Array mit 12 Einträgen (Januar → Dezember). Kontakt-id oder null zum Überspringen.
  • cron — Standard-Cron-Ausdruck. "0 7 1 * *" = jeden 1. des Monats um 07:00 Uhr.
  • Der Zeitplan wiederholt sich jedes Jahr automatisch — kein jährliches Anpassen nötig.

Verfügbare Platzhalter in message:

Platzhalter Beschreibung
{vorname} Vorname des Kontakts
{name} Vollständiger Name
{amount} Betrag aus den Einstellungen
{currency} Währung aus den Einstellungen
{month} Name des aktuellen Monats
{year} Aktuelles Jahr

4. Container starten

docker compose up --build -d

5. QR-Code scannen

Im Browser öffnen:

http://<server-ip>:3001/qr

In WhatsApp: Verknüpfte Geräte → Gerät verknüpfen → QR-Code scannen.

Fertig. Die Session wird in data/ gespeichert und bleibt auch nach Neustarts erhalten.


Web-Interface

URL Beschreibung
http://<ip>:3001 Übersicht mit Monatsplan
http://<ip>:3001/qr QR-Code zur Erstanmeldung
http://<ip>:3001/send-now Erinnerung für diesen Monat manuell senden
http://<ip>:3001/status JSON-Status (wird vom Healthcheck genutzt)

Einen bestimmten Monat manuell auslösen:

http://<ip>:3001/send-now?year=2026&month=5

Konfigurationsreferenz

config/contacts.json

[
  {
    "id": "eindeutige-id",
    "name": "Vollständiger Name",
    "phone": "+41791234567"
  }
]

config/settings.json

{
  "amount": 25,
  "currency": "CHF",
  "cron": "0 7 1 * *",
  "timezone": "Europe/Zurich",
  "message": "Hallo {vorname}, ...",
  "schedule": ["id-oder-null", ...]
}

Änderungen an beiden Dateien werden live übernommen — kein Neustart des Containers nötig.


Port

Das Web-Interface läuft standardmässig auf Port 3001. Änderbar in docker-compose.yml:

ports:
  - "3001:3000"  # 3001 durch einen freien Port ersetzen

Sicherheit

  • Die WhatsApp-Session wird lokal in data/ auf deinem eigenen Server gespeichert.
  • Das Web-Interface hat keine Authentifizierung — Port 3001 nicht ins öffentliche Internet exponieren.
  • Dieses Projekt nutzt WhatsApp Web intern. Es ist inoffiziell und steht in keiner Verbindung zu WhatsApp/Meta.

Lizenz

MIT