# Projektplan: BSN Chatbot (Multi-Channel Intake + RAG-Chat)

**Stand:** 11. Juni 2026  
**Server:** 185.162.249.159 (4 Kerne, 7,8 GB RAM)

---

## Übersicht

Zwei Funktionen auf einem System:
1. **Intake-System:** User schicken Meldungen per WhatsApp/Telegram — Hermes klassifiziert, speichert in DB
2. **RAG-Chatbot auf brettspiel-news.de:** Besucher fragen, Bot antwortet nur aus den Inhalten der Website

---

## Phase 1: Prototyp Intake (sofort)

### 1.1 SQLite-Datenbank
- **Tabelle `submissions`**: id, channel, sender_id, type (text/bild/audio/video), content, media_path, status, category, created_at, processed_at
- **Tabelle `knowledge`**: id, key, question_pattern, answer, category, tags, valid_from, valid_until
- **Tabelle `users`**: id, channel, phone, email, created_at (optional, nur für Kontaktformular)

### 1.2 WhatsApp Webhook-Receiver
- Flask-Endpoint: `POST /whatsapp/webhook`
- Meta-Webhook-Verifikation (GET mit verify_token)
- Nachricht parsen: Text, Bild, Audio, Video
- An Hermes-Verarbeitung weiterreichen

### 1.3 Simulierter Test
- `curl`-Skript zum Testen ohne Meta-Account
- Faked WhatsApp-Payload → DB-Eintrag → sichtbar im Dashboard

### 1.4 Admin-Dashboard (MVP)
- Einfache HTML-Tabelle mit allen Submissions
- Filter: Kanal, Status, Kategorie, Datum
- Detailansicht pro Submission
- Kein Login nötig (intern, Token-geschützt)

---

## Phase 2: WhatsApp Live (braucht Meta-Account)

### 2.1 Meta Business Setup
- App anlegen (Typ: Business)
- WhatsApp-Produkt hinzufügen
- Test-Telefonnummer
- Permanent Access Token
- Webhook-URL eintragen (HTTPS!)

### 2.2 HTTPS / Let's Encrypt
- Domain für 185.162.249.159
- Certbot / Let's Encrypt
- Nginx als Reverse Proxy

### 2.3 Produktionsumstellung
- Flask → Gunicorn (4 Worker)
- Nginx Static Files für Media-Uploads
- Systemd-Service für Autostart

---

## Phase 3: RAG-Chatbot (brettspiel-news.de)

### 3.1 Content-API auf brettspiel-news.de
- Joomla REST-Endpoint: `/api/articles?author=X&tag=Y&q=Z`
- Liefert: Titel, Datum, Excerpt, Tags, URL, ggf. Volltext
- Optional: `/api/games`, `/api/authors`, `/api/events`

### 3.2 RAG-Pipeline (Hermes-Seite)
- User-Frage → embedding → Content-API-Suche → relevante Artikel
- Hermes formuliert Antwort NUR aus diesen Daten
- Quellen-Links in jeder Antwort

### 3.3 Chat-Widget für Website
- JS-Snippet, einbindbar in Joomla
- Text-Modus / Audio-Modus (Toggle)
- Zeigt Quellen-Links an

---

## Phase 4: Spiel Essen (Zukunft)

### Datenquellen (alle in dieselbe DB)
- Hallenplan (Verlage, Stände, Hallen)
- Verlagsmeldungen (ausverkaufte Spiele)
- Neuheiten-Liste
- Live-Submissions während der Messe

### Täglicher Messe-Artikel
- Hermes aggregiert Submissions → Redaktions-Rohfassung
- Redaktion (Basti) finalisiert

---

## Infrastruktur (parallel zu allen Phasen)

| Komponente | Status |
|-----------|--------|
| Piper TTS (Thorsten) | ✅ Läuft |
| DeepSeek v4 Flash API | ✅ Läuft |
| Telegram-Bridge | ✅ Läuft |
| SQLite | 🔜 Phase 1 |
| Gunicorn | 🔜 Phase 2 |
| HTTPS/Let's Encrypt | ⏳ Braucht Domain |
| Meta WhatsApp API | ⏳ Wartet auf Zugangsdaten |
| Joomla Content API | ⏳ Nach Joomla-6-Migration |

---

## Nächste Schritte

1. SQLite-Schema anlegen + Admin-Dashboard (jetzt)
2. Webhook-Receiver bauen + simulierter Test (jetzt)
3. Meta-Account-Zugangsdaten von Daniel (morgen)
4. HTTPS einrichten (sobald Domain klar)
5. Gunicorn umstellen (Phase 2)
6. Content-API auf brettspiel-news.de (nach Joomla-Migration)
