# AI-gestützte IT-Support-Automatisierung Implementation Plan > **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development or superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** Ein produktives Hybrid-System bauen, das Freescout-Mails analysiert, KI-Vorschläge macht, Mensch-Approval einholt, und eine selbstlernende Wissensdatenbank aufbaut. **Architecture:** 4-phasiger Ansatz: 1. **Phase 1 (Setup):** Docker Compose + Vector DB + Freescout Custom Fields 2. **Phase 2 (Workflows):** n8n Workflows A (Mail-Processing), B (Approval), C (KB-Update) 3. **Phase 3 (Integration):** End-to-End Testing + API Connections 4. **Phase 4 (Production):** Monitoring + Dokumentation + Go-Live **Tech Stack:** - **Orchestrierung:** n8n (vorhanden, Docker) - **Vector DB:** Milvus (Docker) - **KI:** LiteLLM API (extern: http://llm.eks-ai.apps.asgard.eks-lnx.fft-it.de) - **Mail-Source:** Freescout API (extern: https://ekshelpdesk.fft-it.de) - **Job-Execution:** Baramundi Management Server API (extern) - **Audit Trail:** PostgreSQL (Docker) --- ## Chunk 1: Infrastructure & Setup ### Task 1.1: Vector Database in Docker Compose integrieren **Files:** - Modify: `compose.yaml` - Create: `.env.example` (aktualisieren mit neuen Vars) - [ ] **Step 1: compose.yaml lesen und Struktur verstehen** Schau dir die aktuelle Struktur an (Traefik, n8n). - [ ] **Step 2: Milvus Service zu compose.yaml hinzufügen** ```yaml milvus: image: milvusdb/milvus:latest restart: always environment: COMMON_STORAGETYPE: local COMMON_LOG_LEVEL: info ports: - "127.0.0.1:19530:19530" - "127.0.0.1:9091:9091" volumes: - milvus_data:/var/lib/milvus healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"] interval: 30s timeout: 10s retries: 5 postgres: image: postgres:15-alpine restart: always environment: POSTGRES_DB: n8n_kb POSTGRES_USER: kb_user POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} ports: - "127.0.0.1:5432:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U kb_user"] interval: 10s timeout: 5s retries: 5 volumes: traefik_data: n8n_data: milvus_data: postgres_data: ``` - [ ] **Step 3: .env mit neuen Variablen aktualisieren** ```bash # Existing SSL_EMAIL=your-email@example.com SUBDOMAIN=n8n DOMAIN_NAME=example.com GENERIC_TIMEZONE=Europe/Berlin # New für KB POSTGRES_PASSWORD=secure_password_change_me MILVUS_API_URL=http://milvus:19530 ``` - [ ] **Step 4: Services starten und healthcheck testen** ```bash docker-compose up -d milvus postgres docker-compose logs -f milvus # Expected: "Milvus is ready to serve" curl http://127.0.0.1:9091/healthz # Expected: 200 OK ``` - [ ] **Step 5: Commit** ```bash git add compose.yaml .env.example git commit -m "infra: add Milvus vector DB and PostgreSQL for KB audit trail" ``` --- ### Task 1.2: PostgreSQL Audit Schema erstellen **Files:** - Create: `sql/01-audit-schema.sql` - [ ] **Step 1: Erstelle SQL Schema Datei** ```sql -- Audit Trail für KB Updates CREATE TABLE knowledge_base_updates ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), ticket_id INTEGER NOT NULL, problem_text TEXT NOT NULL, kategorie VARCHAR(100), lösung TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, approved_at TIMESTAMP, executed_at TIMESTAMP, status VARCHAR(50) CHECK (status IN ('PENDING', 'APPROVED', 'REJECTED', 'EXECUTED')), freescout_note TEXT ); CREATE INDEX idx_kbu_ticket ON knowledge_base_updates(ticket_id); CREATE INDEX idx_kbu_status ON knowledge_base_updates(status); CREATE INDEX idx_kbu_kategorie ON knowledge_base_updates(kategorie); CREATE TABLE kb_feedback ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), kb_entry_id VARCHAR(255) NOT NULL, feedback VARCHAR(50) CHECK (feedback IN ('helpful', 'not_helpful')), reason TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX idx_kbf_entry ON kb_feedback(kb_entry_id); CREATE TABLE workflow_executions ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), workflow_name VARCHAR(255), ticket_id INTEGER, status VARCHAR(50), error_message TEXT, execution_time_ms INTEGER, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX idx_we_ticket ON workflow_executions(ticket_id); CREATE INDEX idx_we_workflow ON workflow_executions(workflow_name); ``` - [ ] **Step 2: Initialisiere PostgreSQL mit Schema** ```bash docker-compose exec postgres psql -U kb_user -d n8n_kb < sql/01-audit-schema.sql # Expected: CREATE TABLE, CREATE INDEX messages ``` - [ ] **Step 3: Teste Schema** ```bash docker-compose exec postgres psql -U kb_user -d n8n_kb -c "\dt" # Expected: 3 tables angezeigt ``` - [ ] **Step 4: Commit** ```bash git add sql/01-audit-schema.sql git commit -m "infra: PostgreSQL audit schema for KB tracking" ``` --- ### Task 1.3: Freescout Custom Fields erstellen (manuell) **Dokumentation:** Freescout API Docs - [ ] **Step 1: Freescout API Key vorbereiten** Erstelle `.env` Eintrag: ```bash FREESCOUT_API_KEY=your_api_key_here FREESCOUT_API_BASE=https://ekshelpdesk.fft-it.de/api/v1 FREESCOUT_MAILBOX_ID=1 ``` - [ ] **Step 2: Test Freescout API Verbindung** ```bash curl -H "Authorization: Bearer $FREESCOUT_API_KEY" \ https://ekshelpdesk.fft-it.de/api/v1/mailboxes/1 # Expected: Mailbox JSON angezeigt ``` - [ ] **Step 3: Erstelle Setup-Skript für Custom Fields** Datei: `scripts/setup-freescout-fields.sh` ```bash #!/bin/bash API_BASE="${FREESCOUT_API_BASE}" API_KEY="${FREESCOUT_API_KEY}" MAILBOX_ID="${FREESCOUT_MAILBOX_ID}" echo "Creating Freescout Custom Fields..." # Field 1: AI_SUGGESTION (Text für JSON) curl -X POST "$API_BASE/mailboxes/$MAILBOX_ID/custom-fields" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "AI_SUGGESTION", "title": "KI-Vorschlag", "type": "text", "required": false }' && echo "✅ AI_SUGGESTION created" # Field 2: AI_SUGGESTION_STATUS (Dropdown) curl -X POST "$API_BASE/mailboxes/$MAILBOX_ID/custom-fields" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "AI_SUGGESTION_STATUS", "title": "KI-Status", "type": "select", "required": false, "options": ["PENDING", "APPROVED", "REJECTED", "EXECUTED"] }' && echo "✅ AI_SUGGESTION_STATUS created" # Field 3: PROCESSED_BY_AI (Boolean) curl -X POST "$API_BASE/mailboxes/$MAILBOX_ID/custom-fields" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "PROCESSED_BY_AI", "title": "Von KI verarbeitet", "type": "checkbox", "required": false }' && echo "✅ PROCESSED_BY_AI created" echo "✅ All custom fields created!" ``` - [ ] **Step 4: Führe Setup Skript aus** ```bash bash scripts/setup-freescout-fields.sh # Expected: 3x ✅ created ``` - [ ] **Step 5: Commit** ```bash git add scripts/setup-freescout-fields.sh git commit -m "scripts: setup Freescout custom fields" ``` --- ## Chunk 2: n8n Workflows Setup & Workflow A (Mail Processing) ### Task 2.1: n8n Credentials & Collections vorbereiten **Files:** - Create: `n8n-workflows/00-SETUP.md` - Create: `n8n-workflows/workflow-a-mail-processing.json` - [ ] **Step 1: Verstehe n8n Workflow Export Format** n8n Workflows werden als JSON exportiert. Struktur: ```json { "name": "Workflow Name", "nodes": [...], "connections": {...}, "active": true } ``` - [ ] **Step 2: Erstelle Setup-Dokumentation** Datei: `n8n-workflows/00-SETUP.md` ```markdown # n8n Workflows Setup ## Benötigte Credentials 1. **Freescout API:** - Type: HTTP Request (Generic Credentials) - Base URL: https://ekshelpdesk.fft-it.de/api/v1 - Auth: Bearer Token (von .env FREESCOUT_API_KEY) 2. **LiteLLM API:** - Type: HTTP Request - Base URL: http://llm.eks-ai.apps.asgard.eks-lnx.fft-it.de - No auth needed (lokal) 3. **PostgreSQL:** - Host: postgres (Docker) - Port: 5432 - Database: n8n_kb - User: kb_user - Password: (von .env POSTGRES_PASSWORD) 4. **Milvus:** - Host: milvus - Port: 19530 - No auth ## Workflow Import Importiere folgende Workflows in n8n: 1. workflow-a-mail-processing.json 2. workflow-b-approval-execution.json 3. workflow-c-kb-update.json Schalte sie in dieser Reihenfolge an: 1. Workflow A (Mail Processing) – hauptziel 2. Workflow B (Approval) – triggered bei Field-Änderung 3. Workflow C (KB Update) – triggered nach Workflow B ``` - [ ] **Step 3: Commit Setup Dokumentation** ```bash git add n8n-workflows/00-SETUP.md git commit -m "docs: n8n setup and credential configuration" ``` --- ### Task 2.2: Workflow A – Mail Processing (Polling + KI-Analyse) **Files:** - Create: `n8n-workflows/workflow-a-mail-processing.json` **Logik:** 1. Trigger: Cron (alle 5 Min) 2. Freescout API: neue Tickets fetchen 3. Für jedes Ticket: Vector DB Query + LLM Call 4. Speichere Vorschlag in Freescout - [ ] **Step 1: Workflow-Struktur in n8n UI bauen** Node 1: **Cron Trigger** - Cron: `*/5 * * * *` (alle 5 Min) Node 2: **Freescoot API – Get Conversations** - Method: GET - URL: `https://ekshelpdesk.fft-it.de/api/v1/mailboxes/1/conversations?status=active` - Auth: Bearer Token - Params: `status=active&limit=20&processed_by_ai=false` Node 3: **Loop through Conversations** - Use: Loop node über Array aus Node 2 Node 4: **Extract Conversation Details** - Use: Set node um Subject, Body zu extrahieren ```javascript { ticket_id: item.id, subject: item.subject, body: item.threads[0].body, customer_email: item.customer.email } ``` Node 5: **Vector DB Query (Milvus)** - Python node um ähnliche KB-Einträge zu finden ```python from pymilvus import Collection # Connect to Milvus collection = Collection("knowledge_base") # Search for similar problems results = collection.search( data=[embedding_vector], # zu erzeugen via LLM anns_field="embedding", param={ "metric_type": "L2", "params": {"nprobe": 10} }, limit=3, output_fields=["problem_text", "kategorie", "lösung"] ) return results ``` Node 6: **LLM Call (LiteLLM)** - HTTP Request zu LiteLLM - Method: POST - URL: `http://llm.eks-ai.apps.asgard.eks-lnx.fft-it.de/v1/chat/completions` - Body: ```json { "model": "available-model", "messages": [ { "role": "system", "content": "Du bist IT-Support-Assistent..." }, { "role": "user", "content": "Ticket: [subject]\n[body]\n\nÄhnliche Lösungen aus KB: [top 3 results]" } ], "temperature": 0.3 } ``` Node 7: **Parse LLM Response** - Extract JSON aus response ```javascript { kategorie: json.kategorie, lösung_typ: json.lösung_typ, vertrauen: json.vertrauen, antwort_text: json.antwort_text, begründung: json.begründung } ``` Node 8: **Save to Freescout (Custom Fields)** - HTTP Request - Method: PUT - URL: `https://ekshelpdesk.fft-it.de/api/v1/conversations/{ticket_id}` - Body: ```json { "custom_fields": { "AI_SUGGESTION": "{{$node[\"Parse LLM Response\"].json}}", "AI_SUGGESTION_STATUS": "PENDING", "PROCESSED_BY_AI": true } } ``` - [ ] **Step 2: Exportiere Workflow als JSON** In n8n: Menu → Export → Full Workflow JSON Speichere als `n8n-workflows/workflow-a-mail-processing.json` - [ ] **Step 3: Teste Workflow manuell** - Starte Workflow manuell (Test-Button) - Check Freescout UI: neue Custom Fields angezeigt? - Check n8n Logs auf Fehler - [ ] **Step 4: Aktiviere Cron Trigger** Schalte Workflow an. Sollte jetzt alle 5 Min laufen. - [ ] **Step 5: Commit** ```bash git add n8n-workflows/workflow-a-mail-processing.json git commit -m "feat: workflow A – mail processing and KI analysis" ``` --- ## Chunk 3: Workflow B & C (Approval + KB Update) ### Task 3.1: Workflow B – Approval & Execution **Files:** - Create: `n8n-workflows/workflow-b-approval-execution.json` **Logik:** 1. Trigger: Webhook oder Polling (wenn AI_SUGGESTION_STATUS geändert) 2. Validiere: APPROVED oder REJECTED 3. Wenn APPROVED: Branching - Baramundi Job? → Baramundi API Call - Automatische Antwort? → Email senden 4. Trigger Workflow C - [ ] **Step 1: Baue Trigger Node** Option A: **Webhook Trigger** (empfohlen) - Freescout muss Webhook supportieren - Trigger bei Field-Änderung Option B: **Polling via HTTP** - Alle 2 Min abfragen: welche Conversations haben AI_SUGGESTION_STATUS = APPROVED - Fallback wenn Webhook nicht verfügbar Für MVP: **Option B (Polling)** - [ ] **Step 2: Baue Approval Check Node** HTTP Request zu Freescout: ``` GET /api/v1/conversations?custom_field_AI_SUGGESTION_STATUS=APPROVED&processed_approval=false ``` - [ ] **Step 3: Baue Branching Logic** Für jedes approved Ticket: - Parse AI_SUGGESTION - Check: ist `lösung_typ == "BARAMUNDI_JOB"` oder `"AUTOMATISCHE_ANTWORT"`? - [ ] **Step 4: Baramundi Job Node** Wenn Baramundi: ``` POST /api/jobs (Baramundi Management Server) { "name": "{{$node[...].json.baramundi_job.name}}", "parameter": {...} } ``` - [ ] **Step 5: Email/Reply Node** Wenn Automatische Antwort: ``` POST /api/v1/conversations/{id}/threads { "from": "support@company.com", "to": "{{customer_email}}", "subject": "Re: {{subject}}", "body": "{{antwort_text}}" } ``` - [ ] **Step 6: Mark as Executed** Nach Success: Update Custom Field ``` PUT /api/v1/conversations/{id} { "custom_fields": { "AI_SUGGESTION_STATUS": "EXECUTED" } } ``` - [ ] **Step 7: Trigger Workflow C** Webhook Call zu Workflow C: ``` POST http://n8n:5678/webhook/kb-update { "ticket_id": "...", "status": "EXECUTED" } ``` - [ ] **Step 8: Exportiere & Teste** ```bash # Export Workflow B # In n8n: Menu → Export git add n8n-workflows/workflow-b-approval-execution.json git commit -m "feat: workflow B – approval gate and execution" ``` --- ### Task 3.2: Workflow C – Knowledge Base Update **Files:** - Create: `n8n-workflows/workflow-c-kb-update.json` **Logik:** 1. Trigger: Webhook von Workflow B 2. Hole Lösungs-Details 3. Generiere Embedding (LLM) 4. Speichere in Milvus 5. Update Häufigkeit bestehender Einträge 6. Log in PostgreSQL - [ ] **Step 1: Webhook Trigger Node** ``` POST http://n8n:5678/webhook/kb-update ``` Payload: ```json { "ticket_id": "123", "problem_text": "...", "kategorie": "Hardware", "lösung": "Drucker-Treiber neu installiert" } ``` - [ ] **Step 2: Embedding Generation Node** LLM Call für Embedding: ``` POST http://llm.eks-ai.apps.asgard.eks-lnx.fft-it.de/v1/embeddings { "model": "available", "input": "Hardware: {{kategorie}} + {{problem_text}}" } ``` - [ ] **Step 3: Milvus Insert Node** Python Node: ```python from pymilvus import Collection import json collection = Collection("knowledge_base") entity = { "id": uuid4(), "problem_text": "{{problem_text}}", "kategorie": "{{kategorie}}", "lösung": "{{lösung}}", "häufigkeit": 1, "embedding": embedding_vector, "timestamp": datetime.now(), "freescout_ticket_id": ticket_id } collection.insert([entity]) collection.flush() return {"status": "inserted"} ``` - [ ] **Step 4: Update Häufigkeit (Optional)** Suche ähnliche KB-Einträge und erhöhe deren Häufigkeit: ```python results = collection.search( data=[embedding_vector], limit=5, threshold=0.85 ) for result in results: # Update entry collection.delete(id=result.id) result.häufigkeit += 1 collection.insert([result]) ``` - [ ] **Step 5: PostgreSQL Audit Log Node** PostgreSQL Node: ```sql INSERT INTO knowledge_base_updates (ticket_id, problem_text, kategorie, lösung, status, created_at, approved_at, executed_at) VALUES ('{{ticket_id}}', '{{problem_text}}', '{{kategorie}}', '{{lösung}}', 'EXECUTED', NOW(), NOW(), NOW()) ``` - [ ] **Step 6: Error Handling** Wenn einer der Steps fehlschlägt: - Log Error in PostgreSQL - Notify Admin (optional Email) - STOP (nicht crashen) - [ ] **Step 7: Exportiere & Teste** ```bash git add n8n-workflows/workflow-c-kb-update.json git commit -m "feat: workflow C – knowledge base auto-update" ``` --- ## Chunk 4: Integration, Testing & Production ### Task 4.1: End-to-End Testing **Files:** - Create: `tests/e2e-test-scenario.md` - Create: `tests/curl-test-collection.sh` - [ ] **Step 1: Schreibe E2E Test Szenario** ```markdown # E2E Test: Full Workflow ## Setup - Milvus läuft - PostgreSQL läuft - n8n läuft - Freescout erreichbar - LiteLLM erreichbar ## Test Steps 1. **Create Test Ticket in Freescout** - Subject: "Drucker funktioniert nicht" - Body: "Jeder Druck-Befehl wird abgelehnt. Fehlercode 5." - Customer: test@example.com 2. **Warte 5 Min** (Workflow A Cycle) - Check n8n Logs: Mail verarbeitet? - Check Freescout: Custom Field AI_SUGGESTION gefüllt? 3. **Approve Vorschlag** - Freescout: AI_SUGGESTION_STATUS = APPROVED 4. **Warte 2 Min** (Workflow B Cycle) - Check n8n: Job ausgelöst oder Email gesendet? - Check Baramundi: Job erstellt? 5. **Warte 1 Min** (Workflow C Cycle) - Check PostgreSQL: INSERT in knowledge_base_updates? - Check Milvus: KB-Eintrag erstellt? 6. **Vector DB Search Test** - Query Milvus mit ähnlichem Problem - Sollte neuen Eintrag finden mit hoher Similarity ``` - [ ] **Step 2: Schreibe Test Curl Commands** `tests/curl-test-collection.sh`: ```bash #!/bin/bash echo "=== E2E Test Collection ===" # 1. Check Milvus Health echo "✓ Testing Milvus..." curl http://127.0.0.1:9091/healthz # 2. Check PostgreSQL echo "✓ Testing PostgreSQL..." docker-compose exec postgres psql -U kb_user -d n8n_kb -c "SELECT COUNT(*) FROM knowledge_base_updates;" # 3. Check Freescout API echo "✓ Testing Freescout API..." curl -H "Authorization: Bearer $FREESCOUT_API_KEY" \ https://ekshelpdesk.fft-it.de/api/v1/mailboxes/1/conversations?limit=5 # 4. Check LiteLLM echo "✓ Testing LiteLLM..." curl -X POST http://llm.eks-ai.apps.asgard.eks-lnx.fft-it.de/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "any", "messages": [{"role": "user", "content": "test"}] }' echo "=== All tests passed ===" ``` - [ ] **Step 3: Führe Tests aus** ```bash bash tests/curl-test-collection.sh # Expected: ✓ All tests passed ``` - [ ] **Step 4: Erstelle echtes Test-Ticket in Freescout** Manuell oder via Freescout UI: - Subject: "Drucker funktioniert nicht" - Body: "Fehlercode 5 beim Drucken" Überwache: - n8n Logs - Freescout Custom Fields - PostgreSQL - [ ] **Step 5: Commit** ```bash git add tests/ git commit -m "test: E2E test scenarios and curl collection" ``` --- ### Task 4.2: Monitoring & Logging Setup **Files:** - Create: `docker-compose.override.yml` (für Logging) - Create: `docs/MONITORING.md` - [ ] **Step 1: Füge n8n Logging zu Compose hinzu** `docker-compose.override.yml`: ```yaml services: n8n: environment: - N8N_LOG_LEVEL=debug - N8N_LOG_OUTPUT=stdout logging: driver: "json-file" options: max-size: "100m" max-file: "10" ``` - [ ] **Step 2: Erstelle Monitoring Dokumentation** `docs/MONITORING.md`: ```markdown # Monitoring & Debugging ## Key Metrics 1. **Mail Processing Rate** - N8N Logs: "processed X conversations" - PostgreSQL: `SELECT COUNT(*) FROM workflow_executions WHERE workflow_name='workflow-a'` 2. **Approval Rate** - PostgreSQL: `SELECT status, COUNT(*) FROM knowledge_base_updates GROUP BY status` - Expected: Meiste APPROVED 3. **KB Growth** - Milvus: `SELECT COUNT(*) FROM knowledge_base` (via Python) - Expected: +1 pro appropierten Ticket 4. **Error Rate** - PostgreSQL: `SELECT * FROM workflow_executions WHERE status='ERROR'` - Expected: < 5% ## Troubleshooting ### Workflow A läuft nicht - Check: Cron trigger aktiv? - Check: n8n credentials valid? - Check: Freescout API erreichbar? ### Workflow B triggert nicht - Check: AI_SUGGESTION_STATUS im Freescout updatet? - Check: Polling Interval (2 Min)? ### Workflow C speichert nicht in KB - Check: Milvus läuft? - Check: Embedding generiert? ## Logs ```bash # n8n Logs docker-compose logs -f n8n # PostgreSQL docker-compose exec postgres psql -U kb_user -d n8n_kb -c "SELECT * FROM workflow_executions LIMIT 10;" # Milvus docker-compose logs -f milvus ``` ``` - [ ] **Step 3: Commit** ```bash git add docker-compose.override.yml docs/MONITORING.md git commit -m "infra: logging and monitoring setup" ``` --- ### Task 4.3: Production Dokumentation & Go-Live Checklist **Files:** - Create: `docs/DEPLOYMENT.md` - Create: `docs/GO-LIVE-CHECKLIST.md` - [ ] **Step 1: Schreibe Deployment Guide** `docs/DEPLOYMENT.md`: ```markdown # Deployment Guide ## Prerequisites - Docker & Docker Compose installed - Freescout API Key - Baramundi API Access - PostgreSQL Backup Strategy ## Deployment Steps 1. Clone Repository 2. Setup .env (siehe .env.example) 3. Run Docker Services: `docker-compose up -d` 4. Run DB Schema: `sql/01-audit-schema.sql` 5. Setup Freescout Custom Fields: `bash scripts/setup-freescout-fields.sh` 6. Import n8n Workflows (manual via n8n UI) 7. Run E2E Tests: `bash tests/curl-test-collection.sh` 8. Enable Workflows (schalte alle 3 Workflows an) ## Monitoring See docs/MONITORING.md ## Rollback 1. Deaktiviere alle n8n Workflows 2. Lösche PostgreSQL Daten (optional) 3. Setze KB zurück (optional) ``` - [ ] **Step 2: Go-Live Checklist** `docs/GO-LIVE-CHECKLIST.md`: ```markdown # Go-Live Checklist ## 1 Week Before - [ ] E2E Tests durchgeführt (alle ✓) - [ ] Staging Environment getestet - [ ] Team Training abgeschlossen - [ ] Backup-Strategie definiert ## Go-Live Day - [ ] Alle Docker Services laufen - [ ] All n8n Workflows aktiv - [ ] Monitoring Dashboard aktiv - [ ] Backup vor Go-Live ## Während Launch - [ ] Monitor n8n Logs - [ ] Monitor Freescout - [ ] Monitor Baramundi Job Queue - [ ] Alert System aktiv ## Nach 24h - [ ] KI-Vorschläge angezeigt? - [ ] Approvals funktionieren? - [ ] Jobs werden ausgelöst? - [ ] KB wächst? ## Nach 1 Woche - [ ] Statistiken: Wie viele Mails verarbeitet? - [ ] Wie viele Approvals? - [ ] Wie viele Baramundi Jobs? - [ ] Feedback vom Team sammeln ``` - [ ] **Step 3: Commit** ```bash git add docs/DEPLOYMENT.md docs/GO-LIVE-CHECKLIST.md git commit -m "docs: deployment and go-live documentation" ``` --- ### Task 4.4: Final Testing & Acceptance - [ ] **Step 1: Führe alle E2E Tests durch** ```bash bash tests/curl-test-collection.sh ``` - [ ] **Step 2: Teste mit echtem Ticket (Staging)** Erstelle Test-Ticket in Freescout: - Subject: "Test: Drucker funktioniert nicht" - Body: "Fehlercode 5" Überwache 15 Min: - Mail analysiert? - KI-Vorschlag angezeigt? - Approve Vorschlag - Job ausgelöst oder Email gesendet? - KB aktualisiert? - [ ] **Step 3: Dokumentiere Ergebnisse** Wenn alles ✓: Go-Live bereit! - [ ] **Step 4: Final Commit** ```bash git add . git commit -m "feat: AI-support-automation MVP complete and tested" ``` --- ## Summary ✅ **Phase 1:** Milvus + PostgreSQL + Freescout Custom Fields ✅ **Phase 2:** Workflow A (Mail Processing) + Workflow B (Approval) + Workflow C (KB Update) ✅ **Phase 3:** E2E Testing + Monitoring ✅ **Phase 4:** Production Ready **Status:** Bereit für Implementation via `superpowers:subagent-driven-development` oder `superpowers:executing-plans` --- ## Next Steps 🚀 **Sollen wir starten?** - Wenn ja: Nutze `superpowers:executing-plans` um den Plan zu implementieren - Wenn nein: Änderungen an Plan vornehmen