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

187 lines
3.9 KiB
Markdown

# 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)