4.9 KiB
SuperOffice Connector ("The Muscle") - GTM Engine
Dies ist der "dumme" Microservice zur Anbindung von SuperOffice CRM an die Company Explorer Intelligence. Der Connector agiert als reiner Bote ("Muscle"): Er nimmt Webhook-Events entgegen, fragt das "Gehirn" (Company Explorer) nach Instruktionen und führt diese im CRM aus.
1. Architektur: "The Intelligent Hub & The Loyal Messenger"
Wir haben uns für eine Event-gesteuerte Architektur entschieden, um Skalierbarkeit und Echtzeit-Verarbeitung zu gewährleisten.
Der Datenfluss:
- Auslöser: User ändert in SuperOffice einen Kontakt (z.B. Status ->
Init). - Transport: SuperOffice sendet ein
POSTEvent an unseren Webhook-Endpunkt (:8003/webhook). - Queueing: Der
Webhook Receivervalidiert das Event und legt es sofort in eine lokaleSQLite-Queue (connector_queue.db). - Verarbeitung: Ein separater
Worker-Prozess holt den Job ab. - Provisioning: Der Worker fragt den Company Explorer (
POST /api/provision/superoffice-contact): "Was soll ich mit Person ID 123 tun?". - Write-Back: Der Company Explorer liefert das fertige Text-Paket (Subject, Intro, Proof) zurück. Der Worker schreibt dies via REST API in die UDF-Felder von SuperOffice.
2. Kern-Komponenten
-
webhook_app.py(FastAPI):- Lauscht auf Port
8000(Extern:8003). - Nimmt Events entgegen, prüft Token (
WEBHOOK_SECRET). - Schreibt Jobs in die Queue.
- Endpunkt:
POST /webhook.
- Lauscht auf Port
-
queue_manager.py(SQLite):- Verwaltet die lokale Job-Queue.
- Status:
PENDING->PROCESSING->COMPLETED/FAILED. - Persistiert Jobs auch bei Container-Neustart.
-
worker.py:- Läuft als Hintergrundprozess.
- Pollt die Queue alle 5 Sekunden.
- Kommuniziert mit Company Explorer (Intern:
http://company-explorer:8000) und SuperOffice API. - Behandelt Fehler und Retries.
-
superoffice_client.py:- Kapselt die SuperOffice REST API (Auth, GET, PUT).
- Verwaltet Refresh Tokens.
3. Setup & Konfiguration
Docker Service
Der Service läuft im Container connector-superoffice.
Startet via start.sh sowohl den Webserver als auch den Worker.
Konfiguration (.env)
Der Connector benötigt folgende Variablen (in docker-compose.yml gesetzt):
environment:
API_USER: "admin"
API_PASSWORD: "..."
COMPANY_EXPLORER_URL: "http://company-explorer:8000" # Interne Docker-Adresse
WEBHOOK_SECRET: "changeme" # Muss mit SO-Webhook Config übereinstimmen
# Plus die SuperOffice Credentials (Client ID, Secret, Refresh Token)
4. API-Schnittstelle (Intern)
Der Connector ruft den Company Explorer auf und liefert dabei Live-Daten aus dem CRM für den "Double Truth" Abgleich:
Request: POST /api/provision/superoffice-contact
{
"so_contact_id": 12345,
"so_person_id": 67890,
"crm_name": "RoboPlanet GmbH",
"crm_website": "www.roboplanet.de",
"job_title": "Geschäftsführer"
}
Response:
{
"status": "success",
"texts": {
"subject": "Optimierung Ihrer Logistik...",
"intro": "Als Logistikleiter kennen Sie...",
"social_proof": "Wir helfen bereits Firma X..."
}
}
5. Offene To-Dos (Roadmap für Produktionsfreigabe)
Um den Connector für den stabilen Betrieb in der Produktivumgebung freizugeben, sind folgende Härtungsmaßnahmen erforderlich:
- Konfigurationshärtung (UDFs & Endpunkte):
- Alle umgebungsspezifischen Werte (SuperOffice Base URL, Customer ID, alle UDF ProgIDs für Vertical, Subject, Intro, Social Proof, etc.) müssen aus dem Code entfernt und über Umgebungsvariablen (
.env) konfigurierbar gemacht werden. Dies stellt sicher, dass derselbe Container ohne Code-Änderung in DEV und PROD läuft.
- Alle umgebungsspezifischen Werte (SuperOffice Base URL, Customer ID, alle UDF ProgIDs für Vertical, Subject, Intro, Social Proof, etc.) müssen aus dem Code entfernt und über Umgebungsvariablen (
- Werkzeug zur UDF-ID-Findung:
- Erstellung eines Python-Skripts (
discover_fields.py), das die SuperOffice API abfragt und alle verfügbaren UDFs mit ihrenProgIds auflistet. Dies vereinfacht die Erstkonfiguration in neuen Umgebungen.
- Erstellung eines Python-Skripts (
- Feiertags-Logik (Autarkie SuperOffice):
- Erstellung einer dedizierten SuperOffice Y-Tabelle (
y_holidays) zur Speicherung von Feiertagen. - Erstellung eines Python-Skripts (
import_holidays_to_so.py) zur einmaligen und periodischen Befüllung dieser Tabelle. - Anpassung des SuperOffice CRMScripts, um diese Tabelle vor dem Versand zu prüfen.
- Erstellung einer dedizierten SuperOffice Y-Tabelle (
- Webinterface (Settings -> Job Role Mapping): Erweiterung des UI zur Darstellung und Verwaltung der neuen Persona-Archetypen und ihrer Mappings. Dies beinhaltet auch eine Überarbeitung der bestehenden Job-Titel-Mappungsansicht, um die Zuordnung zu den Archetypen zu verdeutlichen und ggf. zu editieren.
- Skalierung (Optional/Zukunft):
- Bei sehr hoher Last (>100 Events/Sekunde) sollte die interne SQLite-Queue durch eine performantere Lösung wie Redis ersetzt werden.