# 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 ```bash curl -X GET https://your-domain.com/api/cron/email-sync \ -H "Authorization: Bearer YOUR_CRON_SECRET" ``` ### Antwort ```json { "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: ```bash node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" ``` ### 2. Vercel Cron Jobs (empfohlen für Vercel Hosting) Erstelle `vercel.json`: ```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`: ```ini [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`: ```ini [Unit] Description=Run SaveTheMoment Email Sync every 15 minutes [Timer] OnBootSec=5min OnUnitActiveSec=15min [Install] WantedBy=timers.target ``` Aktiviere den Timer: ```bash sudo systemctl daemon-reload sudo systemctl enable savethemoment-sync.timer sudo systemctl start savethemoment-sync.timer ``` Status prüfen: ```bash 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: ```bash # 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)