Files
Atlas/CRON-SETUP.md
2025-11-12 20:21:32 +01:00

3.9 KiB

Automatische E-Mail-Synchronisation

Die automatische E-Mail-Synchronisation ruft regelmäßig E-Mails von allen konfigurierten Standorten ab und erstellt automatisch Buchungen aus Ninjaforms-Anfragen.

Cron Endpoint

URL: /api/cron/email-sync
Methode: GET
Authentifizierung: Bearer Token (CRON_SECRET)

Beispiel-Aufruf

curl -X GET https://your-domain.com/api/cron/email-sync \
  -H "Authorization: Bearer YOUR_CRON_SECRET"

Antwort

{
  "totalLocations": 5,
  "totalEmails": 12,
  "totalBookings": 8,
  "results": [
    {
      "locationId": "...",
      "locationName": "Lübeck",
      "success": true,
      "newEmails": 3,
      "newBookings": 2,
      "errors": []
    }
  ]
}

Einrichtung

1. Umgebungsvariable setzen

Füge in .env hinzu:

CRON_SECRET="your-secure-random-string-here"

Generiere einen sicheren Zufallsstring:

node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

2. Vercel Cron Jobs (empfohlen für Vercel Hosting)

Erstelle vercel.json:

{
  "crons": [
    {
      "path": "/api/cron/email-sync",
      "schedule": "*/15 * * * *"
    }
  ]
}

Dies führt die Synchronisation alle 15 Minuten aus.

Wichtig: Vercel Cron Jobs senden automatisch den Authorization Header mit dem in den Vercel Environment Variables gespeicherten CRON_SECRET.

Deployment:

  1. Gehe zu Vercel Dashboard → Settings → Environment Variables
  2. Füge CRON_SECRET mit deinem generierten Wert hinzu
  3. Deploy das Projekt

3. Externe Cron Services

Cron-job.org

  1. Registriere dich bei https://cron-job.org
  2. Erstelle einen neuen Cronjob:
    • URL: https://your-domain.com/api/cron/email-sync
    • Schedule: */15 * * * * (alle 15 Minuten)
    • Headers:
      • Authorization: Bearer YOUR_CRON_SECRET
  3. Aktiviere den Job

EasyCron

  1. Registriere dich bei https://www.easycron.com
  2. Erstelle einen neuen Cron Job:
    • URL: https://your-domain.com/api/cron/email-sync
    • Cron Expression: */15 * * * *
    • HTTP Header: Authorization: Bearer YOUR_CRON_SECRET
  3. Aktiviere den Job

4. Eigener Server (systemd Timer)

Erstelle /etc/systemd/system/savethemoment-sync.service:

[Unit]
Description=SaveTheMoment Email Sync
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/curl -X GET https://your-domain.com/api/cron/email-sync -H "Authorization: Bearer YOUR_CRON_SECRET"

Erstelle /etc/systemd/system/savethemoment-sync.timer:

[Unit]
Description=Run SaveTheMoment Email Sync every 15 minutes

[Timer]
OnBootSec=5min
OnUnitActiveSec=15min

[Install]
WantedBy=timers.target

Aktiviere den Timer:

sudo systemctl daemon-reload
sudo systemctl enable savethemoment-sync.timer
sudo systemctl start savethemoment-sync.timer

Status prüfen:

sudo systemctl status savethemoment-sync.timer
sudo journalctl -u savethemoment-sync.service

Manuelle Synchronisation

Admins können jederzeit eine manuelle Synchronisation auslösen:

  1. Gehe zu Dashboard → Standorte
  2. Klicke bei einem Standort auf "E-Mails abrufen"
  3. Die Synchronisation läuft sofort und zeigt das Ergebnis an

Zeitpläne

Empfohlene Synchronisationsintervalle:

  • Hochsaison: Alle 10-15 Minuten
  • Normalbetrieb: Alle 30 Minuten
  • Ruhige Zeit: Jede Stunde

Fehlerbehandlung

Der Cron-Endpoint:

  • Loggt alle Fehler in der Console
  • Synchronisiert alle Standorte unabhängig voneinander
  • Setzt die Synchronisation fort, auch wenn ein Standort fehlschlägt
  • Gibt detaillierte Fehlerinformationen zurück

Überwachung

Überwache die Logs:

# Vercel
vercel logs --follow

# Next.js Development
npm run dev

# Production (PM2)
pm2 logs atlas

Sicherheit

  • Der CRON_SECRET muss geheim bleiben
  • Verwende einen starken, zufälligen String (min. 32 Zeichen)
  • Speichere das Secret niemals im Code-Repository
  • Rotiere das Secret regelmäßig (z.B. alle 90 Tage)