mirror of
https://github.com/complexcaresolutions/cms.c2sgmbh.git
synced 2026-03-17 17:24:12 +00:00
- Abschlussbericht für Konzept-KI erstellt - vercel.json mit 15-Minuten Cron-Schedule hinzugefügt - CRON_SECRET in .env konfiguriert (nicht committed) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
352 lines
13 KiB
Markdown
352 lines
13 KiB
Markdown
# Phase 2.2 Abschlussbericht: YouTube Auto-Sync & AI Reply Suggestions
|
|
|
|
**Datum:** 16. Januar 2026
|
|
**Status:** ✅ Vollständig implementiert
|
|
**Branch:** `develop` → `main` (merged)
|
|
**Commit:** `3464494`
|
|
|
|
---
|
|
|
|
## Zusammenfassung
|
|
|
|
Phase 2.2 des Community Management Systems wurde erfolgreich implementiert. Das System synchronisiert nun automatisch YouTube-Kommentare und generiert KI-gestützte Antwortvorschläge mit kanalspezifischen Personas.
|
|
|
|
---
|
|
|
|
## Implementierte Komponenten
|
|
|
|
### 1. YouTube Auto-Sync System
|
|
|
|
#### 1.1 Architektur
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ SYNC ARCHITECTURE │
|
|
├─────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
│ │ Cron Job │────▶│ Sync │────▶│ YouTube │ │
|
|
│ │ (15 min) │ │ Service │ │ API │ │
|
|
│ └─────────────┘ └──────┬──────┘ └─────────────┘ │
|
|
│ │ │
|
|
│ ▼ │
|
|
│ ┌─────────────┐ │
|
|
│ │ Claude │ │
|
|
│ │ Analysis │ │
|
|
│ └──────┬──────┘ │
|
|
│ │ │
|
|
│ ▼ │
|
|
│ ┌─────────────┐ │
|
|
│ │ Database │ │
|
|
│ │ (Payload) │ │
|
|
│ └─────────────┘ │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
#### 1.2 Dateien
|
|
|
|
| Datei | Beschreibung |
|
|
|-------|--------------|
|
|
| `src/types/youtube.ts` | Type Definitions für YouTube API |
|
|
| `src/lib/jobs/JobLogger.ts` | Strukturierter Logger für Background Jobs |
|
|
| `src/lib/jobs/syncAllComments.ts` | Job Runner mit Status-Tracking |
|
|
| `src/lib/integrations/youtube/YouTubeClient.ts` | YouTube API Client (Phase 1) |
|
|
| `src/lib/integrations/youtube/CommentsSyncService.ts` | Sync-Logik (Phase 1) |
|
|
|
|
#### 1.3 API Endpoints
|
|
|
|
| Endpoint | Methode | Beschreibung |
|
|
|----------|---------|--------------|
|
|
| `/api/cron/youtube-sync` | GET | Cron-Trigger mit CRON_SECRET Auth |
|
|
| `/api/cron/youtube-sync` | HEAD | Status-Check für Monitoring |
|
|
| `/api/community/sync` | POST | Manueller Sync-Trigger (Auth required) |
|
|
| `/api/community/sync` | GET | Sync-Status abfragen |
|
|
|
|
#### 1.4 Features
|
|
|
|
- **Automatischer Token-Refresh**: Abgelaufene OAuth-Tokens werden automatisch erneuert
|
|
- **Rate Limiting**: 100ms zwischen API-Calls, 1s zwischen Accounts
|
|
- **Fehlertoleranz**: Einzelne Fehler stoppen nicht den gesamten Sync
|
|
- **Status-Tracking**: `isRunning`, `lastRunAt`, `lastResult` global verfügbar
|
|
- **Concurrent-Protection**: Verhindert parallele Sync-Läufe
|
|
|
|
---
|
|
|
|
### 2. AI Reply Suggestions
|
|
|
|
#### 2.1 ClaudeReplyService
|
|
|
|
**Datei:** `src/lib/integrations/claude/ClaudeReplyService.ts`
|
|
|
|
**Features:**
|
|
- Kanalspezifische Prompts (corporate, lifestyle, business)
|
|
- 3 Tonalitäts-Varianten: freundlich, professionell, empathisch
|
|
- Medizinische Fragen-Erkennung mit Warnhinweis
|
|
- Automatische Signatur je nach Kanal
|
|
|
|
**Kanal-Personas:**
|
|
|
|
| Kanal | Typ | Persona | Signatur |
|
|
|-------|-----|---------|----------|
|
|
| zweitmeinu.ng | corporate | Dr. Caroline Porwoll (Gesundheitsberaterin) | — Caroline |
|
|
| BlogWoman | lifestyle | Caroline Porwoll (Unternehmerin, Stilexpertin) | — Caroline |
|
|
| CCS Business | business | Dr. Caroline Porwoll (CEO) | — The CCS Team |
|
|
|
|
**Medizinische Fragen:**
|
|
```
|
|
⚠️ MEDIZINISCHE FRAGE - BESONDERE VORSICHT:
|
|
- Gib KEINE medizinische Beratung
|
|
- Gib KEINE Diagnosen oder Behandlungsempfehlungen
|
|
- Verweise IMMER auf professionelle Beratung
|
|
- Standardformulierung: "Für eine persönliche Einschätzung..."
|
|
```
|
|
|
|
#### 2.2 API Endpoint
|
|
|
|
**Endpoint:** `POST /api/community/generate-reply`
|
|
|
|
**Request:**
|
|
```json
|
|
{
|
|
"interactionId": 123,
|
|
"variants": true // Optional: 3 Varianten statt 1
|
|
}
|
|
```
|
|
|
|
**Response (variants=true):**
|
|
```json
|
|
{
|
|
"variants": [
|
|
{
|
|
"text": "Vielen Dank für deinen Kommentar...",
|
|
"tone": "freundlich",
|
|
"confidence": 85,
|
|
"warnings": []
|
|
},
|
|
{
|
|
"text": "Wir freuen uns über dein Feedback...",
|
|
"tone": "professionell",
|
|
"confidence": 85,
|
|
"warnings": []
|
|
},
|
|
{
|
|
"text": "Das freut uns sehr zu hören...",
|
|
"tone": "empathisch",
|
|
"confidence": 85,
|
|
"warnings": []
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### 3. UI Integration
|
|
|
|
#### 3.1 CommunityInbox Erweiterungen
|
|
|
|
**Neue State-Variablen:**
|
|
```typescript
|
|
const [isGeneratingReply, setIsGeneratingReply] = useState(false)
|
|
const [generatedReplies, setGeneratedReplies] = useState<GeneratedReply[]>([])
|
|
const [syncStatus, setSyncStatus] = useState<SyncStatus | null>(null)
|
|
```
|
|
|
|
**Neue Funktionen:**
|
|
- `generateAIReply(interactionId, variants)` - AI-Antworten generieren
|
|
- `useGeneratedReply(text)` - Vorschlag in Editor übernehmen
|
|
- `handleSync()` - Manuellen Sync triggern
|
|
- Sync-Status Polling (alle 60 Sekunden)
|
|
|
|
#### 3.2 UI-Komponenten
|
|
|
|
**Sync Status Badge:**
|
|
```
|
|
┌──────────────────────────────────────┐
|
|
│ ● Letzter Sync: 16.01.2026, 17:05 │
|
|
└──────────────────────────────────────┘
|
|
```
|
|
- Grüner pulsierender Punkt bei aktivem Sync
|
|
- Grauer Punkt im Idle-Zustand
|
|
|
|
**AI Reply Suggestions:**
|
|
```
|
|
┌──────────────────────────────────────────────────────────┐
|
|
│ ✨ KI-Antwortvorschläge │
|
|
├──────────────────────────────────────────────────────────┤
|
|
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │
|
|
│ │ FREUNDLICH │ │ PROFESSIONELL │ │ EMPATHISCH │ │
|
|
│ │ │ │ │ │ │ │
|
|
│ │ Vielen Dank für │ │ Wir freuen uns │ │ Das freut │ │
|
|
│ │ deinen Kommen...│ │ über dein Fee...│ │ uns sehr... │ │
|
|
│ │ │ │ │ │ │ │
|
|
│ │ [Übernehmen] │ │ [Übernehmen] │ │ [Übernehmen]│ │
|
|
│ └─────────────────┘ └─────────────────┘ └─────────────┘ │
|
|
│ │
|
|
│ [Vorschläge verwerfen] │
|
|
└──────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
#### 3.3 SCSS Ergänzungen
|
|
|
|
**Neue Klassen:**
|
|
- `.sync-status` - Container für Sync-Badge
|
|
- `.sync-indicator` / `.sync-indicator.active` - Pulsierender Punkt
|
|
- `.ai-buttons` / `.btn-ai-variants` - AI-Generierungs-Buttons
|
|
- `.ai-reply-suggestions` - Container für Vorschläge
|
|
- `.suggestion-card` - Einzelne Vorschlagskarte
|
|
- `.suggestion-tone` - Tonalitäts-Badge
|
|
- `.suggestion-warnings` / `.warning-tag` - Warnhinweise
|
|
|
|
---
|
|
|
|
### 4. Cron-Konfiguration
|
|
|
|
#### 4.1 vercel.json
|
|
```json
|
|
{
|
|
"crons": [
|
|
{
|
|
"path": "/api/cron/youtube-sync",
|
|
"schedule": "*/15 * * * *"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
#### 4.2 Environment Variables
|
|
```bash
|
|
# .env
|
|
CRON_SECRET=<64-char-hex-string>
|
|
```
|
|
|
|
#### 4.3 Authentifizierung
|
|
|
|
| Request | Response |
|
|
|---------|----------|
|
|
| `GET /api/cron/youtube-sync` (ohne Auth) | 401 Unauthorized |
|
|
| `GET /api/cron/youtube-sync` (mit `Authorization: Bearer $CRON_SECRET`) | 200 OK + Sync |
|
|
|
|
---
|
|
|
|
## Technische Details
|
|
|
|
### Claude Model
|
|
- **Model:** `claude-3-5-haiku-20241022`
|
|
- **Max Tokens:** 500 (Replies), 300 (Analysis)
|
|
- **Rate Limiting:** 100ms zwischen Varianten-Generierung
|
|
|
|
### Sync-Intervall
|
|
- **Automatisch:** Alle 15 Minuten via Vercel Cron
|
|
- **Manuell:** Jederzeit über Admin UI oder API
|
|
|
|
### Datenbankzugriff
|
|
- Verwendet `getPayload({ config })` für DB-Operationen
|
|
- Depth 2 für Relations (platform, socialAccount, linkedContent)
|
|
|
|
---
|
|
|
|
## Test-Ergebnisse
|
|
|
|
### Sync Endpoint
|
|
```bash
|
|
# Mit Auth
|
|
curl -H "Authorization: Bearer $CRON_SECRET" /api/cron/youtube-sync
|
|
# → {"success":true,"message":"Sync completed: 0 new, 0 updated comments","results":[]}
|
|
|
|
# Ohne Auth
|
|
curl /api/cron/youtube-sync
|
|
# → {"error":"Unauthorized"} (401)
|
|
|
|
# HEAD für Monitoring
|
|
curl -I /api/cron/youtube-sync
|
|
# → x-sync-running: false
|
|
# → x-last-run: never
|
|
```
|
|
|
|
### Generate Reply
|
|
```bash
|
|
curl -X POST /api/community/generate-reply \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"interactionId": 1, "variants": true}'
|
|
# → {"variants": [...]}
|
|
```
|
|
|
|
---
|
|
|
|
## Dateien-Übersicht
|
|
|
|
### Neue Dateien (Phase 2.2)
|
|
```
|
|
src/
|
|
├── types/
|
|
│ └── youtube.ts # Type Definitions
|
|
├── lib/
|
|
│ ├── jobs/
|
|
│ │ ├── JobLogger.ts # Structured Logger
|
|
│ │ └── syncAllComments.ts # Job Runner
|
|
│ └── integrations/
|
|
│ └── claude/
|
|
│ └── ClaudeReplyService.ts # AI Reply Generation
|
|
├── app/(payload)/api/
|
|
│ ├── cron/
|
|
│ │ └── youtube-sync/route.ts # Cron Endpoint
|
|
│ └── community/
|
|
│ ├── sync/route.ts # Manual Sync API
|
|
│ └── generate-reply/route.ts # AI Reply API
|
|
vercel.json # Cron Configuration
|
|
```
|
|
|
|
### Geänderte Dateien
|
|
```
|
|
src/
|
|
├── lib/integrations/claude/
|
|
│ └── ClaudeAnalysisService.ts # Model Update + analyzeInteraction()
|
|
├── app/(payload)/admin/views/community/inbox/
|
|
│ ├── CommunityInbox.tsx # UI Integration
|
|
│ └── inbox.scss # New Styles
|
|
.env # CRON_SECRET
|
|
```
|
|
|
|
---
|
|
|
|
## Offene Punkte / Nächste Schritte
|
|
|
|
### Für Production
|
|
1. **YouTube-Accounts verbinden**: OAuth-Flow durchführen für jeden Kanal
|
|
2. **ANTHROPIC_API_KEY**: Sicherstellen dass gültig und mit ausreichend Quota
|
|
3. **Monitoring**: Cron-Job-Erfolg überwachen (Vercel Dashboard oder externe Tools)
|
|
|
|
### Mögliche Erweiterungen
|
|
1. **Batch-Reply**: Mehrere Antworten gleichzeitig posten
|
|
2. **Reply-Templates**: Vordefinierte Antwort-Bausteine
|
|
3. **A/B-Testing**: Tracking welche Tonalität besser performt
|
|
4. **Sentiment-Trends**: Langzeit-Analyse der Kommentar-Stimmung
|
|
|
|
---
|
|
|
|
## Abhängigkeiten
|
|
|
|
| Package | Version | Zweck |
|
|
|---------|---------|-------|
|
|
| `@anthropic-ai/sdk` | ^0.52.0 | Claude API |
|
|
| `googleapis` | ^140+ | YouTube Data API v3 |
|
|
|
|
---
|
|
|
|
## Zusammenfassung
|
|
|
|
Phase 2.2 erweitert das Community Management System um:
|
|
|
|
1. **Automatische Synchronisation** - YouTube-Kommentare werden alle 15 Minuten abgerufen
|
|
2. **KI-Antwortvorschläge** - Claude generiert kontextbezogene Antworten mit 3 Tonalitäten
|
|
3. **Kanalspezifische Personas** - Jeder Kanal hat seine eigene Stimme und Signatur
|
|
4. **Sicherheit** - CRON_SECRET schützt den Sync-Endpoint vor unbefugtem Zugriff
|
|
|
|
Das System ist produktionsbereit, sobald YouTube-Accounts via OAuth verbunden werden.
|
|
|
|
---
|
|
|
|
**Implementiert von:** Claude Opus 4.5
|
|
**Review:** Ausstehend
|
|
**Deployment:** ✅ Merged in `main`
|