Intelligente E-Mail-Klassifikation und Routing mit AWS Bedrock und n8n. Automatisiert Eingangs-Triage für Mittelstandsunternehmen.
┌─────────────────┐
│ E-Mail-Input │
│ (Webhook) │
└────────┬────────┘
│
▼
┌─────────────────────────────────┐
│ AWS Bedrock Klassifikation │
│ (Claude 3.5 Sonnet / Nova) │
│ │
│ • Kategorie-Erkennung │
│ • Prioritäts-Bewertung │
│ • Sentiment-Analyse │
│ • Zusammenfassung │
└────────┬────────────────────────┘
│
▼
┌─────────────────────────────────┐
│ Kategorisierung & Routing │
│ │
│ anfrage → Vertrieb │
│ beschwerde → Support │
│ bewerbung → HR │
│ rechnung → Buchhaltung │
│ spam → Papierkorb │
└────────┬────────────────────────┘
│
▼
┌──────────────────┐
│ JSON-Response │
│ mit Route │
└──────────────────┘
| Kategorie | Abteilung | Priorität | Beispiel |
|---|---|---|---|
| anfrage | Vertrieb | hoch/mittel/niedrig | "Angebot für KI-Lösung" |
| beschwerde | Support | hoch/mittel | "Systemausfall seit heute" |
| bewerbung | HR | mittel/niedrig | "Bewerbung als Dev-Lead" |
| rechnung | Buchhaltung | mittel | "Rechnung #2026-045" |
| spam | Papierkorb | niedrig | Newsletter, Werbung |
- hoch: Beschwerden, System-Ausfälle, Mahnungen, dringende Anfragen
- mittel: Standard-Anfragen, normale Beschwerden, Bewerbungen
- niedrig: Info-Anfragen, Newsletter, nicht-dringend
- Docker & Docker Compose (mindestens v2.0)
- AWS Account mit Bedrock-Zugriff auf Claude-Modelle
- GNU Make (optional, für Makefile)
- curl (für Test-Requests)
make setupDies erstellt .env aus .env.example. Jetzt die AWS-Credentials eintragen:
nano .envAWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=...
AWS_REGION=eu-central-1make upn8n ist nun erreichbar unter http://localhost:5678.
make smokeErwartet: "n8n UI erreichbar auf :5678"
- Browser:
http://localhost:5678 - Menu: Workflows → Import from File
- Datei wählen:
workflows/email-classification.json - AWS-Credentials im Bedrock-Node eintragen
- Activate klicken
Siehe Sektion Demo.
make downcurl -X POST http://localhost:5678/webhook/email-classification \
-H "Content-Type: application/json" \
-d '{
"from": "kunde@example.de",
"subject": "Rechnung Februar 2026",
"body": "Anbei die Rechnung für Februar. Bitte begleichen Sie diese innerhalb von 14 Tagen."
}'{
"success": true,
"classification": {
"kategorie": "rechnung",
"prioritaet": "mittel",
"zusammenfassung": "Rechnung für Februar mit 14-Tage Zahlungsfrist.",
"empfohlene_abteilung": "Buchhaltung",
"dringend": false
},
"route": "buchhaltung"
}Die Demo-Emails decken alle Kategorien ab:
| Datei | Kategorie | Routing |
|---|---|---|
anfrage-klein.txt |
anfrage | vertrieb |
anfrage-enterprise.txt |
anfrage | vertrieb |
beschwerde.txt |
beschwerde | support |
beschwerde-lieferung.txt |
beschwerde | support |
support-technisch.txt |
beschwerde | support |
bewerbung.txt |
bewerbung | hr |
bewerbung-initiativ.txt |
bewerbung | hr |
rechnung.txt |
rechnung | buchhaltung |
rechnung-saas.txt |
rechnung | buchhaltung |
spam-newsletter.txt |
spam | papierkorb |
partnerschaft-anfrage.txt |
anfrage | vertrieb |
Schnelltest: Siehe test-emails/README.md für curl-Befehle pro E-Mail.
Request-Body:
{
"from": "sender@example.de",
"subject": "Betreff der E-Mail",
"body": "Inhalt der E-Mail..."
}Response (200):
{
"success": true,
"classification": {
"kategorie": "anfrage|beschwerde|bewerbung|rechnung|spam",
"prioritaet": "hoch|mittel|niedrig",
"zusammenfassung": "2-3 Sätze Deutsch",
"empfohlene_abteilung": "Vertrieb|Support|HR|Buchhaltung|Papierkorb",
"dringend": boolean
},
"route": "vertrieb|support|hr|buchhaltung|papierkorb|manuell-pruefen"
}Fehler (400, 500):
{
"success": false,
"error": "Beschreibung des Fehlers"
}.
├── Makefile # make setup, up, down, smoke, logs, import
├── docker-compose.yml # n8n + volumes
├── .env.example # AWS-Template
├── .gitignore # Git-Ausschlüsse
├── LICENSE # MIT (2026 Bojatschkin LTD.)
├── README.md # Diese Datei (Deutsch)
├── workflows/
│ └── email-classification.json # n8n Workflow (Bedrock + Routing)
├── prompts/
│ └── email-classifier.txt # System-Prompt für Bedrock
├── test-emails/
│ ├── README.md # Test-Dokumentation
│ ├── anfrage-klein.txt
│ ├── anfrage-enterprise.txt
│ ├── beschwerde.txt
│ ├── beschwerde-lieferung.txt
│ ├── bewerbung.txt
│ ├── bewerbung-initiativ.txt
│ ├── rechnung.txt
│ ├── rechnung-saas.txt
│ ├── spam-newsletter.txt
│ ├── support-technisch.txt
│ └── partnerschaft-anfrage.txt
├── iam/
│ └── n8n-automation-policy.json # AWS IAM Policy für n8n-User
└── .github/
└── workflows/
└── ci.yml # GitHub Actions (optional)
| Komponente | Version | Zweck |
|---|---|---|
| n8n | 1.76+ | Workflow-Automation Engine |
| AWS Bedrock | Latest | KI-Klassifikation (Claude 3.5 Sonnet / Nova Micro) |
| Docker Compose | v2.0+ | Container-Orchestrierung |
| Node.js | 20+ | n8n Runtime |
Für den n8n-Service-User braucht es diese Permissions (siehe iam/n8n-automation-policy.json):
{
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream",
"bedrock:ListFoundationModels"
],
"Resource": "*"
}Einrichtung:
- AWS Console: IAM → Users → Create User
- Name:
n8n-automation(oder ähnlich) - Create access key (access key type)
- Policy: JSON-Inhalt aus
iam/n8n-automation-policy.jsoneinfügen - Access Key ID + Secret Key in
.enveintragen
Der n8n-Workflow (workflows/email-classification.json) besteht aus 6 Nodes:
- Webhook Trigger — Empfängt POST-Request auf
/webhook/email-classification - Normalize Input — Validiert und normalisiert from/subject/body
- Basic LLM Chain — Bedrock-Prompt mit E-Mail-Inhalt
- AWS Bedrock Chat Model — Bedrock-Integration (Claude-Modelle)
- Parse und Route — JSON-Antwort parsen, Routing-Regel applizieren
- Respond to Webhook — JSON-Response an Client zurückgeben
Routing-Logik:
anfrage→vertriebbeschwerde→supportbewerbung→hrrechnung→buchhaltungspam→papierkorb- Unbekannt →
manuell-pruefen
make setup # .env aus .env.example erstellen
make up # Docker Container starten (docker compose up -d)
make down # Docker Container stoppen
make logs # Live-Logs folgen (docker compose logs -f)
make smoke # Health-Check: n8n UI erreichbar?
make import # Workflow aus JSON importieren (curl to API).env.example als Template:
# AWS Bedrock Credentials (erforderlich)
AWS_ACCESS_KEY_ID=AKIAXXXXXXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AWS_REGION=eu-central-1
# IMAP Zugangsdaten (optional, für Live-Integration)
IMAP_HOST=imap.gmail.com
IMAP_PORT=993
IMAP_USER=dein-test-email@gmail.com
IMAP_PASS=xxxx-xxxx-xxxx-xxxx
# Slack Integration (optional)
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/T00000000/B00000000/XXXXXXX
SLACK_CHANNEL_VERTRIEB=#vertrieb
SLACK_CHANNEL_SUPPORT=#support
SLACK_CHANNEL_HR=#hr
SLACK_CHANNEL_BUCHHALTUNG=#buchhaltungAWS Bedrock — Pro API-Call:
- Claude 3.5 Sonnet: ~0,01-0,05 EUR pro E-Mail (abhängig von Länge)
- Claude 3.5 Haiku: ~0,001-0,005 EUR pro E-Mail (schneller, günstiger)
- Nova Micro: ~0,0005-0,002 EUR pro E-Mail (optimal für Classification)
Beispiel: 1.000 E-Mails/Monat ≈ 1-10 EUR mit Nova Micro.
- Ursache: Bedrock gibt ungültiges JSON zurück
- Lösung: System-Prompt (prompts/email-classifier.txt) auf Genauigkeit prüfen, Bedrock-Modell testen
- Ursache:
.envnicht konfiguriert - Lösung:
make setuplaufen lassen,.envmit Credentials füllen
- Ursache: Container nicht gestartet oder Port 5678 belegt
- Lösung:
make down && make upneu starten,netstat -tuln | grep 5678prüfen
- AWS Credentials: Niemals in Git committen —
.envsteht in.gitignore - IAM Policy: Least-Privilege — nur Bedrock + S3/CloudFormation/etc. (siehe
iam/) - Webhook: Keine Auth in diesem PoC — für Production: API-Key / OAuth2 ergänzen
- DSGVO: E-Mail-Daten gehen an AWS Bedrock — Datenschutzerklärung anpassen
- ✗ Routing ist regelbasiert (statisch)
- ✗ Kein echtes Ticketing/CRM angebunden
- ✗ IMAP-Polling muss für Production gehärtet werden
- ✗ Keine Rate-Limiting oder Authentifizierung
- ✗ Keine Logging/Audit-Trail in DB
- ✓ Aber: Klare Architektur, leicht erweiterbar
- Kategorien kalibrieren — Mit echten historischen E-Mails trainieren
- Slack/Teams Integration — Automatisches Routing zu Channels
- CRM/Ticketing — Direct Integration (HubSpot, Freshdesk, etc.)
- Sentiment-Tracking — Kundenzufriedenheits-Metriken
- SLA-Metriken — Response-Zeit pro Kategorie monitoren
- Multi-Tenant — Mehrere Unternehmen unterstützen
- Fine-Tuning — Custom Bedrock Model trainieren
Wenn du aus diesem PoC eine belastbare Service-Inbox-Automatisierung machen willst, erstelle ich dir die Zielarchitektur inkl. Rollout-Plan.
Kontakt: https://bojatschkin.de
Blog-Post (mit Schritt-für-Schritt Anleitung): E-Mails mit KI klassifizieren
Dieses Projekt wird "as-is" bereitgestellt. Es ist ein PoC (Proof of Concept) für interne Demonstrations-Zwecke.
Vor Production-Einsatz:
- Vollständiger Security-Review
- Compliance-Check (DSGVO, Audit-Trail)
- Load-Testing & Capacity-Planning
- Fehlerbehandlung & Monitoring
- Backup-Strategie
- Disaster-Recovery-Plan
MIT License — Copyright 2026 Vitalij Bojatschkin / BOJATSCHKIN LTD.
Siehe LICENSE für Details.
Contributions sind willkommen! Siehe CONTRIBUTING.md.
Projekt: KI-Email-Classification-Routing | GitHub: vibtellect/email-classification-routing