8.9 KiB
8.9 KiB
🚀 Automatisierter Buchungs-Workflow - Implementierungsplan
Datum: 2025-11-12
Ziel: Vollautomatischer Workflow von E-Mail-Eingang bis Kalender-Reservierung
🔄 GEWÜNSCHTER WORKFLOW
Phase 1: E-Mail-Eingang → KI-Analyse
E-Mail kommt rein
↓
KI extrahiert automatisch:
- Kundendaten
- Event-Details
- Gewünschtes Datum
↓
System erstellt:
- Angebot-Entwurf (LexOffice)
- Mietvertrag-Entwurf (PDF)
- E-Mail-Antwort-Entwurf (GPT-4)
↓
Status: PENDING_REVIEW (Wartet auf Admin-Freigabe)
Phase 2: Admin-Review im Dashboard
Dashboard zeigt: "Offene Anfragen" (Queue)
↓
Admin öffnet Anfrage und sieht:
- ✅ KI-generierte E-Mail (Vorschau)
- ✅ Angebot-PDF (Vorschau)
- ✅ Mietvertrag-PDF (Vorschau)
- ✅ Extrahierte Daten
↓
Admin prüft und klickt:
- [✓ Korrektur vornehmen] (optional)
- [✓ Senden] (alles in einem Rutsch)
Phase 3: Automatischer Versand
System sendet gleichzeitig:
1. E-Mail an Kunden (mit Anhängen):
- Angebot (PDF)
- Mietvertrag (PDF)
- Personalisierte Nachricht
2. Erstellt Kalender-Eintrag:
- Reservierung im Format: "[KUNDE] - [ORT] - [PHOTOBOX]"
- Synchronisiert mit Plesk-Kalender
3. Status-Update:
- RESERVED (Warte auf Vertrag)
Phase 4: Vertragsrücklauf & Bestätigung
Kunde unterschreibt Vertrag
↓
Cron-Job prüft:
- Hochgeladenen Vertrag (signiert)
- Oder Online-Signatur
↓
System erstellt automatisch:
- LexOffice Auftragsbestätigung
- Bestätigungs-E-Mail an Kunden
- Kalender-Update: RESERVED → CONFIRMED
📅 KALENDER-INTEGRATION
Option 1: CalDAV-Synchronisation (Empfohlen)
SaveTheMoment Atlas (DB)
↓
CalDAV Server (z.B. ownCloud/Nextcloud)
↓
Plesk Kalender (liest über CalDAV)
Vorteile:
- Bidirektionale Sync
- Standard-Protokoll
- Konflikt-Erkennung
Implementierung:
// lib/calendar-sync.ts
import { CalDAVClient } from 'tsdav';
class CalendarService {
async createReservation(booking: Booking) {
const event = {
summary: `${booking.customerName} - ${booking.eventCity} - ${booking.photobox.model}`,
dtstart: booking.eventDate,
dtend: booking.setupTimeLatest,
location: `${booking.eventAddress}, ${booking.eventZip} ${booking.eventCity}`,
description: `Buchungsnr: ${booking.bookingNumber}\\nFotobox: ${booking.photobox.serialNumber}`,
};
await caldavClient.createCalendarObject({
calendar: this.calendar,
filename: `${booking.bookingNumber}.ics`,
data: this.generateICS(event),
});
}
}
Option 2: iCal-Export (Einfacher, aber manuell)
SaveTheMoment Atlas
↓
Generiert .ics Datei
↓
Download-Link für Admin
↓
Manueller Import in Plesk-Kalender
Vorteile:
- Einfache Implementierung
- Keine Extra-Software
Nachteile:
- Kein automatischer Sync
- Manueller Schritt notwendig
Option 3: Google Calendar API (Flexibel)
SaveTheMoment Atlas
↓
Google Calendar API
↓
Shared Calendar (von Plesk abrufbar)
Vorteile:
- API vorhanden
- Echtzeit-Updates
- Kann mit Plesk synchronisiert werden
🏗️ BENÖTIGTE ÄNDERUNGEN
1. Neuer Booking-Status-Flow
// Aktuell:
RESERVED → CONFIRMED → COMPLETED
// Neu:
AI_PENDING → REVIEW_PENDING → RESERVED → CONTRACT_PENDING → CONFIRMED → COMPLETED
// Zusätzliche Stati:
- AI_PENDING: KI analysiert gerade
- REVIEW_PENDING: Wartet auf Admin-Freigabe
- CONTRACT_PENDING: Wartet auf unterschriebenen Vertrag
2. Neue Datenbank-Felder
model Booking {
// ... existing fields
// Workflow-Status
aiDraftReady Boolean @default(false)
adminReviewedAt DateTime?
adminReviewedBy String?
// E-Mail-Entwurf
emailDraft String? // GPT-4 generierter Text
emailDraftApproved Boolean @default(false)
// Dokument-Entwürfe
quotationDraftUrl String? // LexOffice PDF Preview
contractDraftUrl String? // Mietvertrag PDF Preview
// Versand-Status
documentsSentAt DateTime?
documentsSentTo String?
// Kalender-Sync
calendarEventId String? // CalDAV Event ID
calendarSynced Boolean @default(false)
calendarSyncedAt DateTime?
}
3. Neue API-Endpunkte
POST /api/bookings/[id]/approve-and-send
→ Admin klickt "Senden"
→ Sendet E-Mail + PDFs
→ Erstellt Kalender-Eintrag
→ Update Status
GET /api/admin/pending-reviews
→ Liste aller Anfragen mit aiDraftReady=true
→ Für Dashboard-Queue
POST /api/bookings/[id]/calendar-sync
→ Synchronisiert Buchung mit Kalender
→ Nutzt CalDAV oder Google Calendar API
POST /api/cron/process-pending-bookings
→ Neue Cron-Job
→ Prüft E-Mails
→ Startet KI-Analyse
→ Erstellt Entwürfe
4. Neues Dashboard-Widget: "Offene Anfragen"
// components/PendingReviewsQueue.tsx
export default function PendingReviewsQueue() {
const [pendingBookings, setPendingBookings] = useState([]);
return (
<div className="bg-gray-800 p-6 rounded-xl">
<h2>📋 Offene Anfragen ({pendingBookings.length})</h2>
{pendingBookings.map(booking => (
<div key={booking.id} className="border-b py-4">
<div className="flex justify-between">
<div>
<h3>{booking.customerName}</h3>
<p>{booking.eventCity} · {formatDate(booking.eventDate)}</p>
</div>
<button onClick={() => openReview(booking.id)}>
Prüfen →
</button>
</div>
</div>
))}
</div>
);
}
5. Review-Modal (Admin-Prüfung)
// components/BookingReviewModal.tsx
<Modal open={showReview}>
<h2>Anfrage prüfen: {booking.customerName}</h2>
<Tabs>
<Tab label="E-Mail-Entwurf">
<EmailPreview content={booking.emailDraft} />
<button onClick={editEmail}>Bearbeiten</button>
</Tab>
<Tab label="Angebot">
<PDFPreview url={booking.quotationDraftUrl} />
</Tab>
<Tab label="Mietvertrag">
<PDFPreview url={booking.contractDraftUrl} />
</Tab>
<Tab label="Kundendaten">
<CustomerDataForm data={booking} onEdit={handleEdit} />
</Tab>
</Tabs>
<div className="flex gap-4">
<button onClick={handleReject}>Ablehnen</button>
<button onClick={handleEdit}>Korrigieren</button>
<button onClick={handleApproveAndSend} className="bg-green-600">
✓ Prüfen & Senden
</button>
</div>
</Modal>
⏱️ IMPLEMENTIERUNGS-ZEITPLAN
Sprint 1: Workflow-Basis (2-3 Tage)
- Neue Booking-Stati hinzufügen
- DB-Migration für neue Felder
- API:
/api/admin/pending-reviews - Dashboard-Widget: "Offene Anfragen"
Sprint 2: Auto-Generierung (3-4 Tage)
- Cron-Job: E-Mail-Prüfung + KI-Analyse
- Auto-Generierung: Angebot-Entwurf (LexOffice)
- Auto-Generierung: Vertrag-Entwurf (PDF)
- Auto-Generierung: E-Mail-Antwort (GPT-4)
Sprint 3: Admin-Review-UI (2-3 Tage)
- Review-Modal mit Tabs
- PDF-Preview-Komponenten
- E-Mail-Editor (falls Korrektur nötig)
- "Approve & Send" Funktion
Sprint 4: Automatischer Versand (2 Tage)
- API:
/api/bookings/[id]/approve-and-send - E-Mail-Versand mit Anhängen (Angebot + Vertrag)
- Status-Update nach Versand
Sprint 5: Kalender-Integration (3-4 Tage)
- CalDAV-Client implementieren
- Oder: Google Calendar API
- Oder: iCal-Export
- Plesk-Kalender-Anbindung konfigurieren
- Bidirektionale Synchronisation
Sprint 6: Testing & Optimierung (2 Tage)
- End-to-End-Tests
- Performance-Optimierung
- Fehlerbehandlung
- Admin-Schulung
Gesamt-Aufwand: ~14-19 Tage (3-4 Wochen)
🔐 KALENDER-OPTIONEN: ENTSCHEIDUNGSMATRIX
| Kriterium | CalDAV | iCal Export | Google Calendar |
|---|---|---|---|
| Auto-Sync | ✅ Ja | ❌ Nein | ✅ Ja |
| Plesk-kompatibel | ✅ Ja | ✅ Ja | ⚠️ Indirekt |
| Implementierungs-Aufwand | 🟡 Mittel | 🟢 Gering | 🟡 Mittel |
| Konflikt-Erkennung | ✅ Ja | ❌ Nein | ✅ Ja |
| Kosten | 🟢 Kostenlos | 🟢 Kostenlos | 🟢 Kostenlos |
| Empfehlung | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ |
Empfehlung: CalDAV, falls Plesk CalDAV unterstützt. Sonst: Google Calendar API.
❓ NÄCHSTE SCHRITTE
Fragen an dich:
-
Kalender-System:
- Welches Kalender-System nutzt ihr aktuell in Plesk?
- Unterstützt es CalDAV?
- Oder soll ich Google Calendar API nutzen?
-
E-Mail-Versand:
- Über welchen SMTP-Server sollen die Entwürfe versendet werden?
- Sind die SMTP-Einstellungen schon in den Locations hinterlegt?
-
Priorität:
- Was ist wichtiger: Kalender-Sync oder Auto-Workflow?
- Soll ich mit dem Auto-Workflow (Sprint 1-4) starten?
-
Testing:
- Soll ich zuerst einen kleinen Prototyp bauen zum Testen?
Status: Planung abgeschlossen, warte auf deine Entscheidungen! 🎯