diff --git a/IT_Abteilung/Automatisierung/Channable_stack.md b/IT_Abteilung/Automatisierung/Channable_stack.md
index 5ec290a..87634ca 100644
--- a/IT_Abteilung/Automatisierung/Channable_stack.md
+++ b/IT_Abteilung/Automatisierung/Channable_stack.md
@@ -2,7 +2,7 @@
title: Channable Stack LT24 Profice Dokumentation
description:
published: true
-date: 2026-03-06T11:09:09.239Z
+date: 2026-03-06T11:13:13.929Z
tags:
editor: markdown
dateCreated: 2026-03-06T11:09:09.239Z
@@ -49,48 +49,38 @@ Die Pipeline ersetzt den kommerziellen SaaS-Dienst **Channable** durch eine voll
```mermaid
graph TB
- subgraph SERVER["๐ฅ๏ธ DEBIAN SERVER โ Docker-Host"]
- direction TB
-
- subgraph N8N["โ๏ธ n8n โ Docker Container"]
- CRON["โฐ Cron-Trigger
tรคglich 00:00 Uhr"]
- ERR_HANDLER["๐ Error-Handler
E-Mail / Slack Alert"]
- end
-
- subgraph PYTHON["๐ PYTHON 3.11+ โ Virtual Environment"]
- direction LR
-
- subgraph EXTRACT["๐ฅ EXTRACT"]
- JTL["๐ JTL-WAWI
CSV-Export"]
- GAPI["โ๏ธ Google Ads/GA
API โ 90 Tage"]
- end
-
- subgraph TRANSFORM["๐ TRANSFORM"]
- DUCKDB_JOIN["๐ฆ DuckDB
LEFT JOIN
Produkte โ Sales"]
- POLARS["โก Polars
Regel-Engine
rules.yaml"]
- end
-
- subgraph LOAD["๐ค LOAD"]
- GCONTENT["๐ Google
Content API
Batch-Upload
mit Rate-Limiting"]
- end
- end
-
- DUCKDB_FILE[("๐พ DuckDB
products.duckdb")]
- LOGS["๐ Logs & Monitoring
/opt/etl-pipeline/logs/"]
+ subgraph N8N [n8n - Docker Container]
+ CRON[Cron-Trigger - 00:00 Uhr]
+ ERR_HANDLER[Error-Handler - E-Mail / Slack]
end
- CRON -->|"startet Pipeline"| JTL
- CRON -->|"startet Pipeline"| GAPI
- JTL -->|"CSV Import"| DUCKDB_JOIN
- GAPI -->|"Sales-Daten"| DUCKDB_JOIN
- DUCKDB_JOIN -->|"DataFrame"| POLARS
- POLARS -->|"transformierte Daten"| GCONTENT
- DUCKDB_JOIN -.->|"persistiert"| DUCKDB_FILE
- ERR_HANDLER -.->|"bei Exit-Code 1"| LOGS
+ subgraph EXTRACT [EXTRACT - Datenquellen]
+ JTL[JTL-WAWI CSV-Export]
+ GAPI[Google Ads/GA API - 90 Tage]
+ end
+
+ subgraph TRANSFORM [TRANSFORM - Verarbeitung]
+ DUCKDB_JOIN[DuckDB - LEFT JOIN]
+ POLARS[Polars Regel-Engine - rules.yaml]
+ end
+
+ subgraph LOAD [LOAD - Upload]
+ GCONTENT[Google Content API - Batch-Upload]
+ end
+
+ DUCKDB_FILE[(DuckDB - products.duckdb)]
+ LOGS[Logs und Monitoring]
+
+ CRON -->|startet| JTL
+ CRON -->|startet| GAPI
+ JTL -->|CSV Import| DUCKDB_JOIN
+ GAPI -->|Sales-Daten| DUCKDB_JOIN
+ DUCKDB_JOIN -->|DataFrame| POLARS
+ POLARS -->|transformierte Daten| GCONTENT
+ DUCKDB_JOIN -.->|persistiert| DUCKDB_FILE
+ ERR_HANDLER -.->|bei Fehler| LOGS
- style SERVER fill:#1a1a2e,stroke:#16213e,color:#e0e0e0
style N8N fill:#2d3436,stroke:#636e72,color:#dfe6e9
- style PYTHON fill:#2d3436,stroke:#636e72,color:#dfe6e9
style EXTRACT fill:#0a3d62,stroke:#3c6382,color:#dfe6e9
style TRANSFORM fill:#1e3799,stroke:#4a69bd,color:#dfe6e9
style LOAD fill:#6a0572,stroke:#a834a8,color:#dfe6e9
@@ -108,11 +98,11 @@ graph TB
### ETL-Datenfluss (vereinfacht)
```mermaid
-flowchart LR
- A["๐ JTL CSV
200k+ Artikel"] --> C["๐ฆ DuckDB
LEFT JOIN"]
- B["โ๏ธ Google API
Sales 90 Tage"] --> C
- C --> D["โก Polars
rules.yaml
Custom Labels
Titel-Optimierung
Preis-Logik
Ausschlรผsse"]
- D --> E["๐ Google Content API
Batch-Upload
Rate-Limiting"]
+graph LR
+ A[JTL CSV - 200k+ Artikel] --> C[DuckDB - LEFT JOIN]
+ B[Google API - Sales 90 Tage] --> C
+ C --> D[Polars - rules.yaml]
+ D --> E[Google Content API - Batch-Upload]
style A fill:#079992,stroke:#38ada9,color:#fff
style B fill:#079992,stroke:#38ada9,color:#fff
@@ -2386,17 +2376,17 @@ Die Kommunikation zwischen n8n (Docker-Container) und der Python-Pipeline auf de
## 7.2 Workflow-Architektur
```mermaid
-flowchart TD
- CRON["โฐ Cron Trigger
tรคglich 00:00 Uhr"]
- EXEC["โก Execute Command
/opt/etl-pipeline/venv/bin/python
-m scripts.main"]
- CHECK{"๐ Exit-Code
prรผfen"}
- SUCCESS["โ
Erfolgs-Meldung
Log + optionale E-Mail"]
- ERROR["โ Fehler-Alarm
E-Mail / Slack
Benachrichtigung"]
+graph TD
+ CRON[Cron Trigger - 00:00 Uhr]
+ EXEC[Execute Command - python -m scripts.main]
+ CHECK{Exit-Code pruefen}
+ SUCCESS[Erfolgs-Meldung - Log + E-Mail]
+ ERROR[Fehler-Alarm - E-Mail / Slack]
CRON --> EXEC
EXEC --> CHECK
- CHECK -->|"Exit = 0 โ OK"| SUCCESS
- CHECK -->|"Exit = 1 โ Fehler"| ERROR
+ CHECK -->|Exit 0 - OK| SUCCESS
+ CHECK -->|Exit 1 - Fehler| ERROR
style CRON fill:#e58e26,stroke:#fa983a,color:#fff
style EXEC fill:#0c2461,stroke:#1e3799,color:#fff