Explorer
/opt/struktur/lead-engine/OUTREACH.md
← Zurück ↓ Download
# Outreach-System -- Deployment & Bedienungsanleitung

**Zweck:** Personalisierte B2B-Kaltakquise-Emails fuer LP (Lueftungsprofi) und AG (Agent Solutions / Mario's Portier-Projekt).

---

## Setup (einmalig)

```bash
cd K:\projekte-AG\email_agent
pip install -r requirements.txt
```

**Umgebungsvariablen** (in `.env` Datei):
```
ANTHROPIC_API_KEY=sk-ant-...
SENDGRID_API_KEY=SG....
OUTREACH_FROM_EMAIL_AG=karlo@agentsolutions.tech
OUTREACH_FROM_EMAIL_LP=karlo@mallorcaairservices.com
```

---

## Workflow (Schritt fuer Schritt)

### Schritt 1 -- Excel importieren

Mario liefert Excel-Datei. Datei in den Projektordner legen, dann:

```bash
# AG-Kontakte (KI-Automatisierung)
python excel_importer.py --file leads_mario.xlsx --campaign "Mario Leads April 2026" --icp AG

# LP-Kontakte (Lueftung Mallorca)
python excel_importer.py --file hotels_mallorca.xlsx --campaign "Hotels Mallorca Q2" --icp LP
```

**Output:** "47 Kontakte importiert, 3 Duplikate, 2 ohne Email"

---

### Schritt 2 -- Kontakte anreichern (Website-Scraping + Claude)

```bash
# Kampagne komplett anreichern
python contact_enricher.py --campaign 1

# Oder: Erste 50 rohe Kontakte
python contact_enricher.py --batch 50
```

**Was passiert:**
- Website aus Email-Domain abgeleitet
- Website gescrapt (Titel, Text)
- Claude bestimmt: Branche, Firmenbeschreibung, Schmerzpunkt

Wenn Kontakte nicht automatisch angereichert werden koennen:
```bash
python contact_enricher.py --manual
# Interaktiver Modus: Branche + Problem manuell eingeben
```

---

### Schritt 3 -- ICP-Klassifikation

```bash
# Alle enriched Kontakte klassifizieren
python icp_classifier.py --campaign 1
```

**Output:**
- LP-Kontakte: Lueftungsanlage anbieten
- AG-Kontakte: Email/Telefon Agent oder Portier anbieten
- Beide: Kontakt bekommt erstmal das Produkt mit hoeherem Fit

---

### Schritt 3.5 -- Excel-Export (optional aber empfohlen)

Nach jedem Schritt kannst du die Daten zu Excel exportieren fuer Kontrolle/Reporting:

```bash
# Export nach Enrichment/Klassifikation
python excel_exporter.py --campaign 1

# Mit eigenem Dateinamen
python excel_exporter.py --campaign 1 --output "portier_status_2026-04-24.xlsx"
```

**Was wird exportiert:**
- Sheet 1: Kampagnen-Info (Kontakt-Zahlen, Status)
- Sheets 2-6: Kontakte nach Status (raw, enriched, active, replied, converted)
- Sheets 7+: Sequenzen nach Status (pending, sent, failed)

Die Excel-Datei oeffnet sich direkt mit Spalten-Filterung und ist einfach sortierbar.

---

### Schritt 4 -- Emails generieren

```bash
# Step-1 Emails generieren (erste Kontaktaufnahme)
python outreach_generator.py --step 1 --campaign 1
```

**Was Claude generiert:**
- Personalisierter Betreff
- Email-Text (80-120 Woerter, bezieht sich konkret auf die Firma)
- Personalisierungs-Score (muss >= 0.6 sein)
- Emails mit niedrigem Score werden automatisch verworfen oder regeneriert

---

### Schritt 5 -- Review (PFLICHT vor Versand)

```bash
python review_cli.py --campaign 1
```

**Tasten:**
- `g` -- Genehmigen (Email wird versendet)
- `e` -- Editieren (Editor oeffnet sich)
- `s` -- Ueberspringen (Email wird nicht gesendet)
- `r` -- Regenerieren (neue Version generieren lassen)
- `q` -- Review beenden

**WICHTIG:** Keine Email wird ohne deine Genehmigung versendet.

---

### Schritt 6 -- Emails versenden

```bash
# Test-Modus (nichts wird wirklich gesendet)
python outreach_orchestrator.py --send-approved --dry-run

# Wirklich senden
python outreach_orchestrator.py --send-approved
```

**Anti-Spam:**
- Max 50 Emails/Tag
- Nur Mo-Fr, 9:00-17:00 Uhr
- 30 Sekunden Pause zwischen Emails

---

### Schritt 7 -- Follow-Up Emails (Tag 4 und 8)

Am Tag 4 nach dem Erstversand:
```bash
# Pruefen ob Step-2 Emails faellig sind
python outreach_orchestrator.py --check-due

# Dann Review + Versand wie in Schritt 5-6
python review_cli.py
python outreach_orchestrator.py --send-approved
```

---

### Schritt 8 -- Reply-Detection (automatisch)

Wenn `agent.py` laeuft (Inbound-Loop), wird automatisch erkannt wenn jemand antwortet.
- Kontakt-Status wird auf "replied" gesetzt
- Alle weiteren Sequenz-Emails werden gestoppt
- Log-Eintrag: "OUTREACH-ANTWORT von xyz@firma.de"

---

## Statistiken

```bash
# Alle Kampagnen
python outreach_orchestrator.py --stats

# Einzelne Kampagne
python outreach_orchestrator.py --stats --campaign 1
```

---

## Dateien & Module

```
email_agent/
├── excel_importer.py       -- Excel/CSV -> cold_contacts (NEU)
├── contact_enricher.py     -- Website-Scraping + Claude-Analyse (NEU)
├── icp_classifier.py       -- LP/AG/beide Zuordnung (NEU)
├── knowledge_retriever.py  -- RAG-Zugriff auf YouTube Research DB (NEU)
├── outreach_generator.py   -- Personalisierte Email-Generierung via Claude (NEU)
├── review_cli.py           -- Interaktiver Review vor Versand (NEU)
├── outreach_orchestrator.py -- Workflow-Steuerung + Versand (NEU)
├── excel_exporter.py       -- Exportiert Daten zu Excel fuer Kontrolle (NEU)
├── cold_outreach_db.py     -- Datenbank (ERWEITERT)
├── agent.py                -- Inbound-Loop + Reply-Detection (ERWEITERT)
├── OUTREACH.md             -- Diese Datei
└── OUTREACH_AGENT_KONZEPT.md -- Vollstaendiges Konzept-Dokument
```

---

## Datenbank-Schema

```
cold_contacts               -- Kontakte (mit Enrichment-Feldern)
cold_sequences              -- 3-Step Email-Sequenzen pro Kontakt
outreach_campaigns          -- Kampagnen-Verwaltung
enrichment_cache            -- Website-Scraping Cache (kein Doppel-Scraping)
```

Neue Felder in cold_contacts:
- `website` -- Unternehmens-Website
- `phone` -- Telefonnummer
- `company_description` -- Was macht die Firma (1 Satz, von Claude)
- `enrichment_source` -- auto_website / auto_email_domain / manual
- `icp_confidence` -- Wie sicher ist die ICP-Zuordnung (0-1)
- `icp_recommended_product` -- lueftung / email_agent / telefon_agent / portier
- `language` -- de / es / en

Status-Werte fuer cold_contacts:
- `raw` -- Frisch importiert
- `enriched` -- Angereichert, bereit fuer Generierung
- `needs_manual` -- Muss manuell gepflegt werden
- `active` -- Sequenz laeuft
- `replied` -- Hat geantwortet (Sequenz gestoppt)
- `converted` -- Wurde Kunde
- `bounced` -- Email ungueltig
- `unsubscribed` -- Abgemeldet

---

## YouTube Research Knowledge Base

Der `knowledge_retriever.py` greift auf die YouTube Research Datenbank zu:
- `K:/projekte-AG/YouTube_Research/dist/knowledge.db`
- 468 Videos ueber Claude Code, KI-Automatisierung, AI Voice Agents
- FTS5-Suche nach branchenrelevanten Inhalten
- Wird als Wissens-Snippet in Step-2 AG-Emails eingebettet

LP-Emails nutzen stattdessen eine statische Faktenbasis (Schimmelstatistiken,
Energiekosten, spanische Baunormen CTE/RITE).

---

## Kosten

| Service | Verwendung | Kosten/Monat |
|---------|------------|--------------|
| Claude API (Haiku) | Enrichment + ICP | ~2-5 EUR |
| Claude API (Sonnet) | Email-Generierung | ~5-10 EUR |
| SendGrid | 50 Emails/Tag | 0-15 EUR |
| **Gesamt** | | **~7-30 EUR** |

---

*Erstellt: 2026-04-24*
*Status: Produktionsbereit*