Auto-Reply & Klassifizierung
Wie eingehende Nachrichten kategorisiert werden und wann der Agent von selbst antwortet.
Eingehende Nachrichten laufen durch eine mehrstufige Pipeline, bevor sie als „antwortpflichtig" in deiner Inbox landen. Ziel: Lärm rausfiltern, Standardfälle automatisch beantworten, alles andere mit Kontext-Tag an einen Menschen geben.
Die Pipeline
eingehende Nachricht
↓
[1] Auto-Resolve (regelbasiert, keine LLM-Kosten)
↓ (durchgelassen, wenn keine Match)
[2] Klassifizierung (LLM, kategorie + kategorie-confidence)
↓
[3] Auto-Reply-Guards (Policy-Check)
↓
[4] Antwort-Modus: AUTO | DRAFT | HUMAN
Stufe 1 — Auto-Resolve
Regelbasiert, keine LLM-Kosten, sofortige Entscheidung. Threads, die hier resolved werden, tauchen nicht in der Inbox auf.
Standard-Resolver:
| Resolver | Match | Aktion |
|---|---|---|
bounce |
DSN-Header, „Delivery failed", X-Failed-Recipients | resolved + bounce-Tag, Email-Adresse markiert |
out-of-office |
Auto-Submitted: auto-replied, Autoresponse-Header | resolved + ooo-Tag, kein Reply versucht |
spam |
X-Spam-Status: Yes, Sender-Reputation niedrig | resolved + spam-Tag |
unsubscribe |
„bitte austragen", List-Unsubscribe-Header | resolved + unsub-Tag, Email-Adresse opt-out |
notification |
bekannte System-Mails (GitHub, Stripe, …) | je nach Tenant: resolved oder unterer Inbox-Bereich |
Du kannst eigene Resolver definieren in config/tenants/<code>/inbox.php:
'inbox' => [
'auto_resolve' => [
'newsletter_promotions' => [
'match' => [
'subject_contains' => ['Newsletter', 'unsere Angebote', 'exklusive'],
'from_domain' => ['@newsletter.de', '@mailchimp.com'],
],
'action' => 'resolve',
'tag' => 'newsletter',
],
],
],
Stufe 2 — Klassifizierung
Wenn die Nachricht den Auto-Resolve passiert hat, läuft eine LLM-basierte Klassifizierung. Standard-Modell ist claude-haiku-4-5 (günstig, schnell, gut bei Kategorien).
Die Kategorien sind pro Tenant konfiguriert. Beispiel für einen E-Commerce-Tenant:
'inbox' => [
'classification' => [
'profile' => 'ecommerce',
'categories' => [
'bestellstatus' => 'Anfrage zu einer konkreten Bestellung',
'reklamation' => 'Beschwerde, defekte Ware, Problem mit Lieferung',
'produktfrage' => 'Frage zu einem Produkt vor Kauf',
'retoure' => 'Anfrage zu Rückgabe oder Tausch',
'rechnung' => 'Rechnungs-, Zahlungs-, Buchhaltungsfrage',
'partnerschaft' => 'B2B-Anfrage, Wholesale, Kooperation',
'presse' => 'Presse- oder Influencer-Anfrage',
'sonstiges' => 'Alles, was nicht passt',
],
'default_model' => 'claude_haiku',
],
],
Das LLM bekommt die Kategorien-Liste und den Mail-Body, gibt zurück:
category(eine der Keys)confidence(0.0 – 1.0)summary(1-Satz-Zusammenfassung, fürs Inbox-UI)
Confidence unter 0.6 führt automatisch zu sonstiges und HUMAN-Mode.
Stufe 3 — Auto-Reply-Guards
Bevor der Agent antwortet, läuft ein Policy-Check (src/Service/Inbox/AutoReplyGuards.php). Auch wenn die Kategorie für AUTO freigegeben ist, kann der Guard ein HUMAN-Override auslösen.
Standard-Guards:
| Guard | Auslöser | Wirkung |
|---|---|---|
| Sentiment | Sentiment-Score < negative_threshold (Default 0.35) |
erzwingt DRAFT, niemals AUTO |
| Loop-Detection | mehr als 3 Auto-Replies an die gleiche Adresse in 24h | erzwingt HUMAN, mögliche Endlosschleife |
| Sensitive Topics | Match auf „anwalt", „presse", „kündigung", „gericht", "DSGVO" | erzwingt HUMAN |
| Sender Reputation | Bekannte Beschwerde-Domain, frühere Eskalation | erzwingt DRAFT |
| Confidence | Klassifizierungs-Confidence < auto_min_confidence (Default 0.85) |
erzwingt DRAFT |
Du kannst Guards konfigurieren oder eigene hinzufügen — alle sind pure-PHP, keine zusätzlichen LLM-Kosten.
Stufe 4 — Antwort
Ab hier verzweigt sich:
AUTO:
- Der Agent (
AiAgentResolverwählt das Modell pro Kategorie) erstellt eine Antwort - Pre-Send-Validation (siehe
PreSendValidator.php): URL-Check, Compliance-Phrases, Branding-Check - Versand über den passenden Channel-Adapter
- Thread wechselt zu
resolvedoder bleibtopenfür Folgefragen
DRAFT:
- Der Agent erstellt einen Antwort-Draft
- Mensch sieht den Draft, klickt „Senden" oder ändert
- Bei Änderung: Thread geht in HUMAN
HUMAN:
- Kein Agent-Aktion
- Push-Notification an Bearbeiter
- Sidebar mit Backend-Kontext (Bestellung, Knowledge-Base-Treffer, etc.)
Klassifizierungs-Profile pro Branche
Damit du nicht bei null anfängst, gibt es vorkonfigurierte Profile:
| Profil | Use-Case | Kategorien |
|---|---|---|
ecommerce |
Onlineshop | bestellstatus, reklamation, produktfrage, retoure, rechnung, partnerschaft, presse |
coaching |
Coaches/Trainer | erstanfrage, terminanfrage, content-frage, rechnung, partnerschaft |
b2b-services |
Agenturen, Beratung | lead, kunden-projekt, rechnung, partnerschaft, support |
verein |
Verein/Verband | mitgliedsfrage, beitrag, veranstaltung, austritt, presse |
Die Profile sind nicht final — du kannst eines als Basis nehmen und Kategorien hinzufügen oder umbenennen.
Korrektur-Logging und Lernen
Jedes Mal, wenn ein Mensch in der Inbox eine Auto-Reply korrigiert (Draft ändert, vorm Senden) oder eine falsche Kategorisierung anpasst, wird das im CorrectionLogger festgehalten. Daraus generiert das System wöchentlich einen Verbesserungs-Report:
- Welche Kategorien wurden am häufigsten umkategorisiert?
- Welche Auto-Reply-Antworten wurden inhaltlich überarbeitet?
- Vorschläge für Anpassungen an Prompts oder Kategorien-Definitionen
Den Report findest du im Dashboard unter „Inbox → Quality".
Aufpassen bei
- Zu früh AUTO aktivieren: erste 2–4 Wochen alles in DRAFT lassen und manuell prüfen
- Confidence-Schwelle zu niedrig: lieber mehr Drafts als ein falscher AUTO-Reply an einen wütenden Kunden
- Loop-Detection ernst nehmen: wenn dieselbe Adresse innerhalb von 24h drei Mal AUTO geantwortet bekommen hat, läuft etwas schief — könnte ein Auto-Responder auf der Gegenseite sein oder ein nicht erkanntes Bounce-Pattern
- DSGVO-relevante Kategorien: Anfragen mit Worten wie „Auskunft nach DSGVO", „Daten löschen", „Recht auf Vergessenwerden" niemals AUTO beantworten — Guard hat das standardmäßig drin