From 086a4a08426cf49f8f3dda54aede0b5468e26fd4 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Mon, 2 Feb 2026 14:30:27 +0000 Subject: [PATCH 1/6] docs: add technical architecture diagram for IT workshop --- ARCHITEKTUR_GCP_SETUP.md | 79 ++++++++++++++++++++++++++++++++++++++++ dashboard/index.html | 2 +- nginx-proxy.conf | 16 ++++++++ 3 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 ARCHITEKTUR_GCP_SETUP.md diff --git a/ARCHITEKTUR_GCP_SETUP.md b/ARCHITEKTUR_GCP_SETUP.md new file mode 100644 index 00000000..5fb3611b --- /dev/null +++ b/ARCHITEKTUR_GCP_SETUP.md @@ -0,0 +1,79 @@ +# Technisches Zielbild: GTM-Engine & Google Cloud Integration + +Dieses Diagramm visualisiert den geplanten Datenfluss und die Architektur für den sicheren Betrieb der GTM-Engine (Growth-Marketing) in der Unternehmensumgebung. + +## Kern-Prinzipien +1. **Trennung von Identität & Daten:** Nutzung von Unternehmens-Identitäten (Managed Google ID) statt privater Konten. +2. **Datensparsamkeit:** KI-Verarbeitung erfolgt primär auf anonymen Firmendaten (B2B), nicht auf Personendaten. +3. **Lokale Hoheit:** Die Business-Logik (Python/Docker) läuft kontrolliert lokal oder im Intranet, nicht "in der Cloud". + +## Architektur-Übersicht + +```mermaid +graph TD + %% Subgraph: Corporate Environment (Wackler/RoboPlanet) + subgraph Corporate_IT ["🏢 Wackler / RoboPlanet Umgebung"] + + subgraph User_Layer ["🧑‍💻 User & Identity"] + User[("Christian (User)")] + CorpID["Corporate Google ID
(@roboplanet.de / @wackler-group.de)"] + User --> CorpID + end + + subgraph Local_Execution ["⚙️ Execution Layer (Local/Server)"] + Docker["🐳 Docker Container
(GTM-Engine / Python)"] + + subgraph Data_Handling ["🛡️ Daten-Verarbeitung"] + RawData[("Rohdaten
(Websites, Listen)")] + Anonymizer["⚙️ Pre-Processing
(Filterung PII / Personendaten)"] + end + + ResultStorage[("Ergebnisse
(Notion / CRM / Excel)")] + end + end + + %% Subgraph: Google Cloud Platform (Managed) + subgraph Google_Cloud ["☁️ Google Cloud Platform (Enterprise Tenant)"] + + subgraph IAM_Security ["🔐 Security & Billing"] + GCP_Project["GCP Projekt
(z.B. 'gtm-engine-prod')"] + ServiceAccount["🤖 Service Account
(Technischer User für API)"] + Billing["💳 Corporate Billing
(Zentrale Abrechnung)"] + end + + subgraph AI_Services ["🧠 AI Services (Vertex AI / Gemini)"] + GeminiAPI["⚡ Gemini API
(Enterprise Mode: Zero Logging)"] + end + end + + %% Data Flow Connections + CorpID -.->|"Verwaltet"| GCP_Project + Docker -->|"Nutzt API Key"| ServiceAccount + ServiceAccount -->|"Authentifiziert"| GeminiAPI + + RawData --> Anonymizer + Anonymizer -->|"1. Anonymisierter Prompt
(Nur Firmendaten)"| Docker + Docker -->|"2. API Request (HTTPS/TLS)"| GeminiAPI + GeminiAPI -->|"3. JSON Response
(Strukturierte Daten)"| Docker + Docker -->|"4. Speicherung"| ResultStorage + + %% Styling + style Corporate_IT fill:#f9f9f9,stroke:#333,stroke-width:2px + style Google_Cloud fill:#e8f0fe,stroke:#4285f4,stroke-width:2px + style Anonymizer fill:#fff3e0,stroke:#f57c00,stroke-dasharray: 5 5 + style GeminiAPI fill:#e8f0fe,stroke:#4285f4,stroke-width:4px +``` + +## Erläuterung für die IT + +1. **Identity (IAM):** + * Es wird kein "Schatten-Account" genutzt. Christian authentifiziert sich mit seiner bestehenden Corporate Identity (`@roboplanet`). + * Für die automatisierte Ausführung (Skripte) wird später ein **Service Account** beantragt, dessen Schlüssel (JSON Key) sicher im lokalen Container verwaltet wird (Secrets Management). + +2. **Google Cloud Projekt:** + * Wir benötigen ein dediziertes GCP-Projekt (z.B. `rp-marketing-intel`), das im Rechnungskreis der Firma hängt. + * Vorteil: Volle Transparenz über Kosten und Nutzung im Admin-Dashboard der IT. + +3. **Datenschutz (DSGVO):** + * **Input:** Wir senden Webseiten-Texte und Firmennamen an die API. Wir senden *keine* Mitarbeiterlisten oder Kunden-Adressdaten zur Analyse. + * **Enterprise-Garantie:** Durch Nutzung der Enterprise-Verträge (via GCP) ist vertraglich geregelt, dass Google die Daten **nicht** zum Training eigener Modelle verwendet (anders als bei der kostenlosen ChatGPT/Gemini-Consumer-Version). diff --git a/dashboard/index.html b/dashboard/index.html index 8a581be6..f8be8b15 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -191,7 +191,7 @@

Zugriff auf die lokale Lead Engine.

- Starten → + Starten → diff --git a/nginx-proxy.conf b/nginx-proxy.conf index 792dddf5..572f4726 100644 --- a/nginx-proxy.conf +++ b/nginx-proxy.conf @@ -133,5 +133,21 @@ http { proxy_connect_timeout 1800s; proxy_send_timeout 1800s; } + + location /lead/ { + # Lead Engine (TradingTwins) + # Proxying external service on host + proxy_pass http://192.168.178.6:8501/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + # Websocket support for Streamlit + proxy_http_version 1.1; + + # Explicit timeouts + proxy_read_timeout 86400; # Long timeout for stream + } } } From e3d2e0b9454b13779877f8b727216057077d8e98 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Mon, 2 Feb 2026 14:46:19 +0000 Subject: [PATCH 2/6] docs: append company explorer API endpoint documentation --- ARCHITEKTUR_GCP_SETUP.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/ARCHITEKTUR_GCP_SETUP.md b/ARCHITEKTUR_GCP_SETUP.md index 5fb3611b..c1111e89 100644 --- a/ARCHITEKTUR_GCP_SETUP.md +++ b/ARCHITEKTUR_GCP_SETUP.md @@ -77,3 +77,43 @@ graph TD 3. **Datenschutz (DSGVO):** * **Input:** Wir senden Webseiten-Texte und Firmennamen an die API. Wir senden *keine* Mitarbeiterlisten oder Kunden-Adressdaten zur Analyse. * **Enterprise-Garantie:** Durch Nutzung der Enterprise-Verträge (via GCP) ist vertraglich geregelt, dass Google die Daten **nicht** zum Training eigener Modelle verwendet (anders als bei der kostenlosen ChatGPT/Gemini-Consumer-Version). + +## Backend API (Company Explorer) + +Das System verfügt bereits über eine standardisierte, dokumentierte API (FastAPI) zur Datenverarbeitung. Dies ermöglicht eine saubere Trennung von Frontend und Backend sowie eine granulare Zugriffskontrolle. + +**Core Endpoints:** + +| Methode | Pfad | Beschreibung | +| :--- | :--- | :--- | +| `GET` | `/api/health` | System Status Check | +| `GET` | `/api/companies` | Liste von Unternehmen (Filterbar, Sortierbar) | +| `GET` | `/api/companies/{id}` | Detailansicht eines Unternehmens | +| `POST` | `/api/companies` | Manuelle Anlage eines Unternehmens | +| `POST` | `/api/companies/bulk` | Massenimport (Batch-Processing) | +| `GET` | `/api/companies/export` | CSV Export der angereicherten Daten | + +**Enrichment & KI-Analyse:** + +| Methode | Pfad | Beschreibung | +| :--- | :--- | :--- | +| `POST` | `/api/enrich/discover` | Startet Discovery-Prozess (Website-Suche) | +| `POST` | `/api/enrich/analyze` | Startet KI-Analyse (Scraping + Klassifizierung) | +| `PUT` | `/api/companies/{id}/industry` | Manuelle Korrektur der KI-Branchenzuordnung | +| `POST` | `/api/companies/{id}/override/*` | Manuelle Overrides für kritische Datenquellen (Website, Wikipedia, Impressum) | + +**Quality Assurance:** + +| Methode | Pfad | Beschreibung | +| :--- | :--- | :--- | +| `POST` | `/api/companies/{id}/report-mistake` | Melden von Datenfehlern ("Human in the Loop") | +| `GET` | `/api/mistakes` | Übersicht gemeldeter Fehler zur Überprüfung | +| `PUT` | `/api/mistakes/{id}` | Status-Update für Fehlermeldungen (Approved/Rejected) | + +**Stammdaten & Kataloge:** + +| Methode | Pfad | Beschreibung | +| :--- | :--- | :--- | +| `GET` | `/api/robotics/categories` | Katalog der Robotik-Kategorien | +| `GET` | `/api/industries` | Katalog der Branchen | +| `GET` | `/api/job_roles` | Katalog der Job-Rollen | From dd0d2353d21b322ce77ca050dcc54a1619feb0e4 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Mon, 2 Feb 2026 19:40:31 +0000 Subject: [PATCH 3/6] docs: add strategic integration plan for SuperOffice CRM --- SUPEROFFICE_INTEGRATION_PLAN.md | 102 ++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 SUPEROFFICE_INTEGRATION_PLAN.md diff --git a/SUPEROFFICE_INTEGRATION_PLAN.md b/SUPEROFFICE_INTEGRATION_PLAN.md new file mode 100644 index 00000000..47265810 --- /dev/null +++ b/SUPEROFFICE_INTEGRATION_PLAN.md @@ -0,0 +1,102 @@ +# Technisches Konzept: SuperOffice CRM Integration + +Dieses Dokument beschreibt die Integrationsstrategie zwischen **SuperOffice CRM** (führendes System für Stammdaten) und dem **Company Explorer** (KI-gestützte Anreicherungs-Engine). + +## Zielsetzung +Automatisierte Anreicherung von B2B-Firmendaten im CRM mit KI-generierten Insights (z.B. Robotik-Affinität, Branchen-Einstufung), ohne die Hoheit über die Stammdaten zu gefährden. + +--- + +## 1. Architektur: Der "SuperOffice Connector" + +Wir implementieren einen dedizierten Microservice (`connector-superoffice`), der als Brücke fungiert. + +```mermaid +graph LR + subgraph CRM ["SuperOffice CRM (Cloud/On-Prem)"] + SO_DB[("Stammdaten
(Contact)")] + SO_UDF[("KI-Felder
(UDFs)")] + end + + subgraph Middleware ["Integration Layer (Docker)"] + Connector["🔄 SuperOffice Connector
(Python Service)"] + end + + subgraph Intelligence ["GTM Engine"] + CE_API["⚡ Company Explorer API"] + CE_DB[("Enrichment DB")] + end + + %% Data Flow + SO_DB -->|"1. Pull (Delta/Initial)"| Connector + Connector -->|"2. Push (Import)"| CE_API + CE_API -.->|"3. Enrichment Process"| CE_DB + CE_DB -->|"4. Result"| CE_API + Connector -->|"5. Poll Results"| CE_API + Connector -->|"6. Write-Back (Update UDFs)"| SO_UDF + + %% Styling + style CRM fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px + style Middleware fill:#e3f2fd,stroke:#1565c0,stroke-width:2px + style Intelligence fill:#fff3e0,stroke:#ef6c00,stroke-width:2px +``` + +## 2. Datenmodell & Erweiterung + +Um die CRM-Daten sauber zu halten, schreiben wir **niemals** in Standardfelder (wie `Name`, `Department`), sondern ausschließlich in dedizierte, benutzerdefinierte Felder (**User Defined Fields - UDFs**). + +### Benötigte Felder in SuperOffice (Anforderung an IT/Admin) +Folgende Felder sollten am Objekt `Company` (bzw. `Contact` in SuperOffice-Terminologie) angelegt werden: + +| Feldname (Label) | Typ | Zweck | +| :--- | :--- | :--- | +| `AI Robotics Potential` | List/Select | High / Medium / Low / None | +| `AI Industry` | Text (Short) | KI-ermittelte Branche (z.B. "Logistik - Intralogistik") | +| `AI Summary` | Text (Long/Memo) | Kurze Zusammenfassung der Analyse | +| `AI Last Update` | Date | Zeitstempel der letzten Anreicherung | +| `AI Status` | List/Select | Pending / Enriched / Error | + +### Benötigtes Feld im Company Explorer +| Feldname | Typ | Zweck | +| :--- | :--- | :--- | +| `external_crm_id` | String/Int | Speichert die `ContactId` aus SuperOffice zur eindeutigen Zuordnung (Primary Key Mapping). | + +--- + +## 3. Phasenplan + +### Phase 1: Initial Load (Snapshot) +*Ziel: Bestandskunden und aktive Leads einmalig bewerten.* + +1. **Filter:** Der Connector lädt alle Firmen mit Status "Kunde" oder "Prospect". +2. **Import:** Daten werden via `POST /api/companies/bulk` an den Explorer gesendet. Die `ContactId` wird mitgegeben. +3. **Verarbeitung:** Der Explorer arbeitet die Queue ab (Web-Scraping -> Klassifizierung). + +### Phase 2: Write-Back (Ergebnisse speichern) +*Ziel: Ergebnisse im CRM sichtbar machen.* + +1. Der Connector prüft regelmäßig (`GET /api/companies?status=ENRICHED`) auf fertige Analysen. +2. Für jeden Treffer sendet er ein Update an die SuperOffice API (`PUT /Contact/{id}`). +3. Es werden nur die oben definierten UDFs aktualisiert. + +### Phase 3: Continuous Sync (Polling) +*Ziel: Neue Firmen automatisch verarbeiten.* + +1. **Zyklus:** Alle 60 Minuten. +2. **Logik:** "Gib mir alle Firmen, die seit `LAST_RUN` erstellt oder geändert wurden." +3. **Aktion:** Neue Firmen werden automatisch zur Analyse geschickt. +4. **Vorteil:** Keine komplexe Firewall-Konfiguration für eingehende Webhooks nötig (Outbound-Only Traffic). + +--- + +## 4. Sicherheit & Authentifizierung + +* **Authentifizierung:** Nutzung eines **System User Tokens** (Machine-to-Machine). Dies verhindert, dass Passwörter von persönlichen Accounts im Code hinterlegt werden müssen. +* **Scope:** Der API-User benötigt Lesezugriff auf `Contact` und Schreibzugriff auf die `UDFs`. +* **Datenschutz:** Es werden nur Firmendaten (Name, Webseite, Stadt) übertragen. Personenbezogene Ansprechpartner bleiben im CRM und werden nicht an die KI gesendet. + +## 5. Vorbereitung für die IT + +Um den Connector in Betrieb zu nehmen, benötigen wir: +1. **API Zugangsdaten:** `Client ID`, `Client Secret`, `Customer ID` (Tenant) und einen `System User Token`. +2. **UDF Definitionen:** Die `ProgId` (technischen Namen) der neu angelegten Felder (z.B. `userdef_id_123`). From ca0ef5d74191cb75ac3d5a40c13c7619be0f8803 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Mon, 2 Feb 2026 19:42:38 +0000 Subject: [PATCH 4/6] chore: scaffold superoffice connector service for development --- connector-superoffice/Dockerfile | 10 ++++++++++ connector-superoffice/main.py | 21 +++++++++++++++++++++ connector-superoffice/requirements.txt | 4 ++++ 3 files changed, 35 insertions(+) create mode 100644 connector-superoffice/Dockerfile create mode 100644 connector-superoffice/main.py create mode 100644 connector-superoffice/requirements.txt diff --git a/connector-superoffice/Dockerfile b/connector-superoffice/Dockerfile new file mode 100644 index 00000000..7cd99fe7 --- /dev/null +++ b/connector-superoffice/Dockerfile @@ -0,0 +1,10 @@ +FROM python:3.9-slim + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +CMD ["python", "main.py"] diff --git a/connector-superoffice/main.py b/connector-superoffice/main.py new file mode 100644 index 00000000..acea9a6c --- /dev/null +++ b/connector-superoffice/main.py @@ -0,0 +1,21 @@ +import os +import logging +from dotenv import load_dotenv + +# Setup basic logging +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') +logger = logging.getLogger(__name__) + +# Load environment variables +load_dotenv() + +def main(): + logger.info("Starting SuperOffice Connector...") + + # TODO: Implement authentication logic here using Gemini CLI + # TODO: Implement Polling / Sync logic here + + logger.info("Connector stopped.") + +if __name__ == "__main__": + main() diff --git a/connector-superoffice/requirements.txt b/connector-superoffice/requirements.txt new file mode 100644 index 00000000..6e9be739 --- /dev/null +++ b/connector-superoffice/requirements.txt @@ -0,0 +1,4 @@ +requests +pydantic +python-dotenv +tenacity From 0dc2e12150ab4036ab0e37bd49fc279757c1926a Mon Sep 17 00:00:00 2001 From: Jarvis Date: Tue, 3 Feb 2026 09:29:13 +0000 Subject: [PATCH 5/6] docs: update gcp architecture with dev/prod environment separation strategy --- ARCHITEKTUR_GCP_SETUP.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ARCHITEKTUR_GCP_SETUP.md b/ARCHITEKTUR_GCP_SETUP.md index c1111e89..abf36e62 100644 --- a/ARCHITEKTUR_GCP_SETUP.md +++ b/ARCHITEKTUR_GCP_SETUP.md @@ -74,7 +74,12 @@ graph TD * Wir benötigen ein dediziertes GCP-Projekt (z.B. `rp-marketing-intel`), das im Rechnungskreis der Firma hängt. * Vorteil: Volle Transparenz über Kosten und Nutzung im Admin-Dashboard der IT. -3. **Datenschutz (DSGVO):** +3. **Environment Strategie (Dev/Prod Trennung):** + * Um Entwicklungskosten von Betriebskosten sauber zu trennen und die Stabilität zu gewährleisten, werden **zwei separate GCP-Projekte** empfohlen: + * **`rp-marketing-intel-dev`**: Sandbox für Entwicklung (Gemini CLI, Tests). Hier können Budgets gedeckelt und Quotas flexibel genutzt werden, ohne den Betrieb zu gefährden ("Blast Radius" Minimierung). + * **`rp-marketing-intel-prod`**: Stabile Umgebung für den Company Explorer. Exklusive Quotas und striktes Monitoring für den operativen Betrieb. + +4. **Datenschutz (DSGVO):** * **Input:** Wir senden Webseiten-Texte und Firmennamen an die API. Wir senden *keine* Mitarbeiterlisten oder Kunden-Adressdaten zur Analyse. * **Enterprise-Garantie:** Durch Nutzung der Enterprise-Verträge (via GCP) ist vertraglich geregelt, dass Google die Daten **nicht** zum Training eigener Modelle verwendet (anders als bei der kostenlosen ChatGPT/Gemini-Consumer-Version). From 11421f5871607f85cf51a83c2aa9b67530b5cf79 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Tue, 3 Feb 2026 09:37:27 +0000 Subject: [PATCH 6/6] docs: add executive summary explaining the business purpose and AI usage --- ARCHITEKTUR_GCP_SETUP.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ARCHITEKTUR_GCP_SETUP.md b/ARCHITEKTUR_GCP_SETUP.md index abf36e62..fa5b7d6b 100644 --- a/ARCHITEKTUR_GCP_SETUP.md +++ b/ARCHITEKTUR_GCP_SETUP.md @@ -1,6 +1,17 @@ # Technisches Zielbild: GTM-Engine & Google Cloud Integration -Dieses Diagramm visualisiert den geplanten Datenfluss und die Architektur für den sicheren Betrieb der GTM-Engine (Growth-Marketing) in der Unternehmensumgebung. +Dieses Dokument beschreibt die Architektur und den Datenfluss der **GTM-Engine (Go-to-Market Engine)**. + +## Executive Summary: Was wir tun +Wir automatisieren die **Qualifizierung von B2B-Accounts** (Firmen), um den Vertrieb gezielter und effizienter zu steuern ("Whale Hunting"). + +Anstatt dass ein Mitarbeiter manuell 20 Minuten lang Webseiten liest, um herauszufinden, ob eine Firma relevant ist, übernimmt dies das System automatisiert: +1. **Input:** Firmenname & Webseite (aus CRM oder Lead-Liste). +2. **Analyse:** Wir aggregieren öffentlich verfügbare Daten (Website-Text, Impressum, Wikipedia). +3. **KI-Verarbeitung:** Ein Sprachmodell (Gemini) agiert als "Lese-Assistent". Wir stellen ihm gezielte Fragen an den Kontext (z.B. *"Hat diese Firma mehr als 500 Mitarbeiter?", "Nutzen sie Roboter?", "Sind sie im Bereich Logistik tätig?"*). +4. **Output:** Strukturierte Daten (Branche, Potential-Score, Summary) fließen zurück ins CRM zur Vertriebssteuerung. + +**Wichtig:** Es findet **keine** automatisierte Entscheidung über natürliche Personen statt. Wir bewerten Firmen-Potentiale. ## Kern-Prinzipien 1. **Trennung von Identität & Daten:** Nutzung von Unternehmens-Identitäten (Managed Google ID) statt privater Konten.