95 lines
4.4 KiB
Markdown
95 lines
4.4 KiB
Markdown
# Lead Engine: Multi-Source Automation v1.4 [31988f42]
|
|
|
|
## 🚀 Übersicht
|
|
Die **Lead Engine** ist ein spezialisiertes Modul zur autonomen Verarbeitung von B2B-Anfragen. Sie fungiert als Brücke zwischen dem E-Mail-Postfach und dem **Company Explorer**, um innerhalb von Minuten hochgradig personalisierte Antwort-Entwürfe auf "Human Expert Level" zu generieren.
|
|
|
|
## 🛠 Hauptfunktionen
|
|
|
|
### 1. Intelligenter E-Mail Ingest
|
|
* **Multi-Source:** Überwacht das Postfach `info@robo-planet.de` via **Microsoft Graph API**.
|
|
* **Filter & Routing:** Unterscheidet Anfragen von **TradingTwins** und dem **Kontaktformular**.
|
|
* **Parsing:** Spezialisierte HTML-Parser extrahieren strukturierte Daten (Firma, Kontakt, Bedarf).
|
|
|
|
### 2. Contact Research (LinkedIn Lookup)
|
|
* **Automatisierung:** Sucht via **SerpAPI** und **Gemini 2.0 Flash** nach der beruflichen Position.
|
|
* **Ergebnis:** Identifiziert Rollen (z.B. "CFO"), um den Tonfall anzupassen.
|
|
|
|
### 3. Company Explorer Sync & Monitoring
|
|
* **Integration:** Legt Accounts und Kontakte automatisch im CE an.
|
|
* **Monitor:** Hintergrund-Prozess (`monitor.py`) überwacht den Analyse-Status.
|
|
* **Daten-Pull:** Übernimmt Branche und Dossier in die lokale Lead-Datenbank.
|
|
|
|
### 4. Expert Response Generator
|
|
* **KI-Engine:** Gemini 2.0 Flash erstellt E-Mail-Entwürfe.
|
|
* **Kontext:** Kombiniert Lead-Daten + CE-Daten + Matrix-Argumente (Pains/Gains).
|
|
|
|
### 5. Trading Twins Autopilot (PRODUKTIV v2.1)
|
|
Der vollautomatische "Zero Touch" Workflow für Trading Twins Anfragen.
|
|
|
|
* **Human-in-the-Loop:** Elizabeta Melcer erhält eine Teams-Nachricht ("Approve/Deny").
|
|
* **Feedback-Server:** Ein integrierter FastAPI-Server (Port 8004) verarbeitet Klicks.
|
|
* **Direct Calendar Booking (Micro-Service):**
|
|
* **Logik:** Prüft den Kalender von `e.melcer` auf **echte Verfügbarkeit**.
|
|
* **Raster:** Termine starten nur im **15-Minuten-Takt** (:00, :15, :30, :45).
|
|
* **Abstand:** Bietet zwei Termine an, mit ca. **3 Stunden Pause** dazwischen.
|
|
* **Buchung:** Klick auf Link -> Server erstellt Outlook-Termin von `info@` mit `e.melcer` als Teilnehmer.
|
|
|
|
## 🏗 Architektur
|
|
|
|
```text
|
|
/app/lead-engine/
|
|
├── app.py # Streamlit Web-Interface
|
|
├── trading_twins_ingest.py # E-Mail Importer (Graph API)
|
|
├── monitor.py # Monitor + Trigger für Orchestrator
|
|
├── trading_twins/ # Autopilot Modul
|
|
│ ├── manager.py # Orchestrator, FastAPI, Graph API Logic
|
|
│ ├── test_calendar_logic.py # Interner Test für Kalender-Zugriff
|
|
│ └── signature.html # HTML-Signatur
|
|
└── db.py # Lokale SQLite Lead-Datenbank
|
|
```
|
|
|
|
## 🚨 Lessons Learned & Critical Fixes
|
|
|
|
### 1. Microsoft Graph API: Kalender-Zugriff
|
|
* **Problem:** `debug_calendar.py` scheiterte oft mit `Invalid parameter`.
|
|
* **Ursache:** URL-Encoding von Zeitstempeln (`+` wurde zu Leerzeichen) und Mikrosekunden (7 Stellen statt 6).
|
|
* **Lösung:** Nutzung von `requests(params=...)` und Abschneiden der Mikrosekunden.
|
|
* **Endpoint:** `/users/{email}/calendar/getSchedule` (POST) ist robuster als `/calendarView` (GET).
|
|
|
|
### 2. Exchange AppOnly AccessPolicy (Buchungs-Workaround)
|
|
* **Problem:** `Calendars.ReadWrite` erlaubt einer App oft nicht, Termine in *fremden* Kalendern (`e.melcer@`) zu erstellen (`403 Forbidden`).
|
|
* **Lösung:** Der Termin wird im **eigenen Kalender** des Service-Accounts (`info@`) erstellt. Der Mitarbeiter (`e.melcer@`) wird als **Teilnehmer** hinzugefügt. Das umgeht die Policy.
|
|
|
|
### 3. Docker Environment Variables
|
|
* **Problem:** Skripte im Container fanden Credentials nicht, obwohl sie in `.env` standen.
|
|
* **Lösung:** Explizites `load_dotenv` ist in Standalone-Skripten (`test_*.py`) nötig. Im Hauptprozess (`manager.py`) reicht `os.getenv`, solange Docker Compose die Vars korrekt durchreicht.
|
|
|
|
## 🚀 Inbetriebnahme
|
|
|
|
```bash
|
|
# Neustart des Dienstes
|
|
docker-compose up -d --build --force-recreate lead-engine
|
|
|
|
# Manueller Test (intern)
|
|
docker exec lead-engine python /app/trading_twins/test_calendar_logic.py
|
|
```
|
|
|
|
**Zugriff:** `https://floke-ai.duckdns.org/lead/` (Passwortgeschützt)
|
|
|
|
## 📝 Credentials (.env)
|
|
|
|
```env
|
|
# Info-Postfach (App 1 - Schreiben)
|
|
INFO_Application_ID=...
|
|
INFO_Tenant_ID=...
|
|
INFO_Secret=...
|
|
|
|
# E.Melcer Kalender (App 2 - Lesen)
|
|
CAL_APPID=...
|
|
CAL_TENNANT_ID=...
|
|
CAL_SECRET=...
|
|
|
|
# URLs
|
|
TEAMS_WEBHOOK_URL=...
|
|
FEEDBACK_SERVER_BASE_URL=https://floke-ai.duckdns.org/feedback
|
|
``` |