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:
- Gehe zu Vercel Dashboard → Settings → Environment Variables
- Füge
CRON_SECRETmit deinem generierten Wert hinzu - Deploy das Projekt
3. Externe Cron Services
Cron-job.org
- Registriere dich bei https://cron-job.org
- Erstelle einen neuen Cronjob:
- URL:
https://your-domain.com/api/cron/email-sync - Schedule:
*/15 * * * *(alle 15 Minuten) - Headers:
Authorization: Bearer YOUR_CRON_SECRET
- URL:
- Aktiviere den Job
EasyCron
- Registriere dich bei https://www.easycron.com
- Erstelle einen neuen Cron Job:
- URL:
https://your-domain.com/api/cron/email-sync - Cron Expression:
*/15 * * * * - HTTP Header:
Authorization: Bearer YOUR_CRON_SECRET
- URL:
- 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:
- Gehe zu Dashboard → Standorte
- Klicke bei einem Standort auf "E-Mails abrufen"
- 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_SECRETmuss 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)