Files
EKDOS/docs/N8N.md
T
Kyle Müller 940b2d4767
EK-DOS-WEB bauen und ausrollen / backend-pruefen (push) Failing after 2s
EK-DOS-WEB bauen und ausrollen / bauen-und-ausrollen (push) Skipped
Refactor deployment process and update documentation
- Removed nginx configuration file as it is no longer needed.
- Updated README.md to reflect changes in deployment structure.
- Enhanced DEPLOYMENT.md with detailed directory structure and user permissions.
- Added release.sh and rollback.sh scripts for managing deployments.
- Improved N8N.md to clarify file access and document handling.
- Adjusted health check and cache flushing procedures in deployment scripts.
2026-09-06 22:41:04 +02:00

8.3 KiB
Raw Blame History

n8n-Schnittstelle

Alle Fachdaten von EK-DOS-WEB liegen in n8n. Das Backend hält davon nichts vor ausser einem kurzlebigen Cache.

Adressen

Der n8n-Hauptdienst auf Port 5678 ist ausschliesslich über https://n8n.elektro-krueger.eu erreichbar. Jeder weitere n8n-Dienst auf einem anderen Port ist nicht veröffentlicht und wird über 10.0.11.131 angesprochen.

In backend/src/N8n/Endpoints.php:

$url->webhook('/offene-tickets');            // https://n8n.elektro-krueger.eu/webhook/ek-dos-web/offene-tickets
$url->internal(5679, '/webhook/irgendwas');  // http://10.0.11.131:5679/webhook/irgendwas

Neue Adressen gehören in diese Klasse, nicht verstreut in die Controller.

Endpunkte

Alle unter /webhook/ek-dos-web. Die Spalte Cache nennt Gruppe sowie frische und Rückfall-Haltbarkeit in Sekunden.

Pfad Verwendung Cache
/offene-tickets Ticketliste tickets 15 / 600
/offene-tickets/kundenruecksprache Ergebnis speichern schreibend
/tickets/digitale-akte PDF
/tickets/servicebericht PDF
/angebote Angebotsliste offers 30 / 600
/angebote/versendet /beauftragt /zuruecksetzen /loeschen Aktionen schreibend
/kundenstamm Kundenliste, Anlage, Änderung customers 120 / 1800
/kundenstamm/digitale-akte PDF
/rechnungen Rechnungen eines Kunden invoices 30 / 600
/rechnungen/alle Gesamtübersicht (geschützt) invoices 30 / 600
/rechnungen/zuordnen /sync Zuordnung, Abgleich (geschützt) schreibend
/rechnungen/pdf PDF
/rechnungen-anfertigen Aufgabenliste invoices-create 30/600
/rechnungen-anfertigen/erledigt Aufgabe abschließen schreibend
/rechnungen-pruefen Prüfliste invoices-review 30/600
/rechnungen-versenden Versandliste und -bestätigung invoices-send 30/600
/digitale-akte PDF als base64 im JSON
/interne-aufgaben (+ /erledigt /bearbeiten /loeschen) Aufgaben tasks 20 / 600
/online-kaeufe (+ /erledigt /loeschen) Online-Käufe purchases 30 / 600
/stundennachweise Monatsreport hours 300 / 3600

Geteilte Geheimnisse

Kopfzeile aus wofür
x-ekdos-invoice-sync N8N_INVOICE_SYNC_SECRET Rechnungsübersicht, Zuordnung, Abgleich, Kundenanlage, Angebot zurücksetzen
X-EK-DOS-Customer-Key N8N_CUSTOMER_KEY Lesen und Ändern im Kundenstamm
x-ekdos-webhook-secret N8N_REFRESH_SECRET n8n meldet EK-DOS eine Ticketänderung

Fehlt eines davon, antworten die betroffenen Routen mit 503 und einer Meldung, die genau das sagt -- sie schlagen nicht stumm fehl.

Der Kundenschlüssel stand in der Next.js-Fassung als Literal im Quelltext (app/api/customers/route.ts). Er liegt jetzt in .env. Er sollte in n8n gewechselt werden, weil der alte Wert in der Versionsgeschichte steht.

n8n meldet eine Ticketänderung

Der Workflow Datenübergabe an EK-DOS-WEB darf weiter auf seinen Endpunkt zeigen, nur ohne Port:

POST https://schulung.elektro-krueger.local/api/tickets/refresh
x-ekdos-webhook-secret: <N8N_REFRESH_SECRET>

Anders als früher ist das kein Platzhalter mehr. In der Next.js-Fassung antwortete die Route nur {ok:true} und tat sonst nichts; die Oberfläche sah neue Tickets rein zufällig beim nächsten 20-Sekunden-Takt. Jetzt verwirft der Aufruf den Ticket-Cache, sodass die nächste Abfrage die neuen Daten garantiert sieht.

Ohne gesetztes N8N_REFRESH_SECRET verlangt die Route eine angemeldete Sitzung und weist den Aufruf aus n8n mit 401 ab.

Feldabbildung Tickets

Die einzige Stelle, an der das Backend n8n-Felder umbenennt (backend/src/Relay/TicketsController.php):

n8n Oberfläche
ticketnummer / id id
kunde / customer customer
liegenschaft / property property
letzter_servicebericht_status reportStatus
fortsetzung continuation
entscheidung_code decisionCode
kundenruecksprache_ergebnis consultationResult
kundenruecksprache_am / _von consultationUpdatedAt / By

requiresCustomerConsultation wird abgeleitet: entweder entscheidung_code === "TEILERLEDIGUNG_RUECKSPRACHE_KUNDE", oder der Fortsetzungstext enthält „nimmt mit Kunden für das weitere Vorgehen Kontakt auf". Zeilen ohne Ticketnummer werden verworfen.

Bekannte Kopplung

Interne Aufgaben kennen in n8n genau zwei Empfänger: sascha und svenja. Ein drittes EK-DOS-Konto kann sich anmelden und alle Ansichten nutzen, aber noch keine Aufgaben zugewiesen bekommen. Dafür müsste der n8n-Workflow Interne Aufgaben einen freien Empfängerschlüssel annehmen.

Wo die Dateien tatsächlich liegen

EK-DOS-WEB liest keine einzige Datei. Weder die Next.js-Fassung noch das PHP-Backend enthalten einen Dateisystemzugriff; der alte Container hatte auch keinen Mount. Es gibt auch keinen PDF-Renderer: nichts wird erzeugt, nur weitergereicht.

Alle Dokumente kommen als HTTP-Antwort aus n8n:

Route n8n liefert EK-DOS-WEB tut
/api/tickets/digitale-akte PDF-Bytes durchreichen
/api/tickets/servicebericht PDF-Bytes durchreichen
/api/customers/digitale-akte PDF-Bytes durchreichen
/api/customer-invoices/pdf PDF-Bytes Pfad prüfen, durchreichen
/api/invoices-create/digitale-akte base64 im JSON dekodieren, durchreichen
/api/hours JSON-Report Felder abbilden

Der Mount /mnt/n8n-nas gehört zum n8n-Container, nicht zu dieser Anwendung. Dort wird die Datei gelesen; EK-DOS-WEB fragt nur über HTTP danach. Für den Webserver heisst das: er braucht keinen NAS-Zugang, keine SMB-Zugangs- daten und keinen Mount. Ein Umzug des Webservers auf eine andere Maschine berührt die Dateiablage nicht.

Zwei Dinge, die häufig hierher vermutet werden, aber nicht hier liegen:

  • Stundennachweise sind kein Dokument. /api/hours liefert einen JSON-Report, den n8n aus mehreren Quellen zusammensetzt. Es wird keine Datei gelesen.
  • Tageszusammenfassung und Tagesübersicht kommen in der Anwendung nicht vor. „Tageszusammenfassung" ist die Beschriftung von Workflow 9/13 im Schulungs- diagramm; „TAGESÜBERSICHT" ist die Überschrift über der Begrüssung auf der Startseite. Keines von beidem lädt Daten.

Zeitgesteuerte Abläufe (Druckaufträge, morgendliche Berichte) gibt es in EK-DOS-WEB nicht. Es existiert kein Zeitplaner, kein Cron-Eintrag und kein Druckcode -- weder alt noch neu. Solche Abläufe sind Schedule-Trigger in n8n und laufen unabhängig von dieser Anwendung weiter. Der Umbau auf PHP berührt sie nicht.