Native Webhooks in GLPI 11: Konfiguration und die 3 Details, die die Integration blockieren

Wir haben die Webhooks von GLPI 11 in unserem Support getestet: Eine URL mit Port wird ohne Hinweis abgelehnt, der Versand kommt ohne Content-Type und hängt vom Cron ab. Konfiguration Feld für Feld, HMAC-Signatur, Wiederholungsversuche und Checkliste.

In diesem Artikel7 Abschnitte

GLPI 11 hat einen nativen Webhook: Bei jedem erstellten, geänderten oder gelöschten Ticket benachrichtigt er ein anderes System per HTTP, mit Signatur und Wiederholungsversuchen. Wir haben ihn in unserem Support-GLPI getestet, und die erste Konfiguration hat nichts zugestellt. Der Grund stand auf keinem Bildschirm: GLPI lehnt jede URL mit Port ab, etwa :8080 oder den Standardport :5678 von n8n. Diese Anleitung zeigt, wie Sie ihn konfigurieren, was der Test gemessen hat und welche drei Details die Integration blockieren.

Sie brauchen mehr als einen ausgehenden Webhook, mit Bedingungen, mehreren Schritten oder dem Empfang von Daten von außen? Siehe Automatisierungen und Webhooks im GLPI mit NexTool.

Was der native Webhook tut (und was nicht)

Der Webhook von GLPI 11 ist ausgehend: Wenn bei einem Element etwas passiert, erstellt GLPI eine Nachricht und sendet sie an eine URL. Damit können Sie ein ERP benachrichtigen, eine Karte in Teams öffnen, ein Dashboard speisen oder einen Flow in n8n auslösen.

  • Ereignisse: neu, Aktualisierung und Löschung.
  • Elemente: dieselben wie in der neuen API von GLPI 11, etwa Tickets, Probleme, Änderungen, Assets und Benutzer.
  • Nachricht: standardmäßig ein Element im API-Format (Status, Anforderer, Team, Einheit, Datumsangaben), mit Variablen bearbeitbar.

Er empfängt nichts. Damit ein anderes System Tickets im GLPI erstellt oder ändert, führt der Weg über die API.

Wo Sie ihn konfigurieren

Unter Einrichtung > Webhooks > Hinzufügen:

Feld Wofür es dient
Einheit und rekursiv Löst nur für Elemente dieser Einheit aus (und der untergeordneten, wenn rekursiv)
Elementtyp und Ereignis Z. B. Ticket + Neu
URL Ziel. Akzeptiert Variablen, etwa die ID des Elements im Pfad
HTTP-Methode POST, PUT, PATCH oder GET
Anzahl der Versuche Wie oft erneut gesendet wird, wenn ein Ziel fehlschlägt
Protokoll in der Historie des Elements Erfasst jeden Versand in der Historie des Tickets
Antworttext speichern Speichert, was ein Ziel geantwortet hat (muss in der Serverkonfiguration freigegeben werden)

Und in den Registerkarten:

  • Kriterien: filtert, welche Elemente auslösen, mit denselben Kriterien wie die Suche. Z. B. nur Tickets der Kategorie „Einkauf“.
  • Payload-Editor: ersetzt die Standardnachricht durch Ihre eigene Vorlage, mit Vorschau.
  • Sicherheit: Geheimnis für die Signatur, Validierungs-Challenge der URL und OAuth-Authentifizierung.
  • Benutzerdefinierte Header: etwa Authorization oder Content-Type.

Der Test: was wir gemessen haben

Wir haben zwei Webhooks in der Testeinheit unseres Support-GLPI angelegt (fiktives Unternehmen Acme) und Tickets erstellt. Einer zeigte auf ein Ziel, das mit 200 antwortet; der andere auf ein Ziel, das mit Fehler 500 antwortet.

Zeitleiste des Tests: URL mit Port abgelehnt, Ziel mit Antwort 200 nach 8 Sekunden beliefert und Ziel mit Fehler 500 mit 3 Versuchen, einer pro Minute
Eine URL mit Port verlässt GLPI nicht; der Versand dauert so lange wie der Cron-Takt; bei Fehlern versucht GLPI es jede Minute erneut. NexTool-Test, 3.10.2026.
Was wir geprüft haben Ergebnis
URL mit Port (http://destino:8080/...) Abgelehnt als „unsafe“, nichts wird gesendet
Dieselbe URL ohne Port Akzeptiert
Zeit zwischen Ticketerstellung und Zustellung 8 Sekunden (nächster Cron-Durchlauf)
Ziel mit Fehler 500 und „Anzahl der Versuche“ = 2 3 Sendungen, eine pro Minute, dann gibt GLPI auf
Signatur X-GLPI-signature Stimmt: HMAC-SHA256 des Body + X-GLPI-timestamp
Header Content-Type Fehlt
Body {"event": "new", "item": {...}} mit 2,1 KB für ein einfaches Ticket

Die drei Details, die die Integration blockieren

1. Eine URL mit Port wird abgelehnt

GLPI 11 ruft nur URLs auf, die eine Zulassungsliste passieren (Schutz vor Missbrauch des Servers). Die Standardregel akzeptiert Domain, IP und Pfad, aber keinen Port. Der Fehler erscheint nicht auf dem Bildschirm: Er steht in webhook.log, als „Webhook target URL ... is unsafe“.

Wir haben die Funktion von GLPI selbst getestet:

URL Ergebnis
https://n8n.empresa.com.br/webhook/abc akzeptiert
https://n8n.empresa.com.br:5678/webhook/abc abgelehnt
http://localhost:5678/webhook/abc abgelehnt
http://localhost/webhook/abc akzeptiert

Lösung: Veröffentlichen Sie ein Ziel auf dem Standardport (443 oder 80), in der Regel hinter einem Reverse Proxy. So lösen Sie auch HTTPS. Die Liste lässt sich mit der Konstante GLPI_SERVERSIDE_URL_ALLOWLIST erweitern, aber sie gilt für jeden Zugriff des Servers auf externe URLs, ändern Sie sie also mit Bedacht.

2. Ohne Content-Type versteht ein Ziel JSON möglicherweise nicht

GLPI sendet den Body als JSON, aber ohne den Header Content-Type. Werkzeuge wie n8n und viele Frameworks lesen den Body nur dann als JSON, wenn der Header dies angibt.

Lösung: Fügen Sie unter Benutzerdefinierte Header Content-Type: application/json hinzu.

3. Ohne Cron geht nichts raus

Der Webhook wird nicht sofort gesendet: Er kommt in eine Warteschlange, und die automatische Aktion queuedwebhook sendet jede Minute, bis zu 50 auf einmal. Läuft der GLPI-Cron nicht, wächst die Warteschlange nur.

Lösung: Cron über die Kommandozeile jede Minute (siehe Schritt 6 in So installieren Sie GLPI 11) und ab und zu ein Blick auf Einrichtung > Webhooks > Webhook-Warteschlange (Webhook queue auf dem Bildschirm).

So validieren Sie die Signatur beim Ziel

Jede Sendung enthält zwei Header: X-GLPI-timestamp (Zeitpunkt des Ereignisses) und X-GLPI-signature. Die Signatur ist der HMAC-SHA256 des Body, gefolgt vom Timestamp, mit dem Geheimnis des Webhooks. In Python:

import hmac, hashlib

def assinatura_valida(corpo: bytes, timestamp: str, assinatura: str, segredo: str) -> bool:
    calc = hmac.new(segredo.encode(), corpo + timestamp.encode(), hashlib.sha256).hexdigest()
    return hmac.compare_digest(calc, assinatura)

Zwei Vorsichtsmaßnahmen: - Der Timestamp stammt vom Ereignis, nicht vom Versand. Bei Wiederholungsversuchen bleibt er gleich. Wenn Sie „alte“ Nachrichten ablehnen, lassen Sie ein Zeitfenster, das die Versuche abdeckt (einige Minuten). - Verwenden Sie den rohen Body, so wie er angekommen ist. Wenn Ihr Code JSON dekodiert und erneut kodiert, stimmt die Signatur nicht.

Wer mehr Sicherheit braucht, findet in der Registerkarte Sicherheit die Validierungs-Challenge: Vor dem Versand ruft GLPI die URL mit einem crc_token auf, und ein Ziel muss mit dem HMAC dieses Tokens antworten. Außerdem gibt es OAuth (client credentials): GLPI holt sich einen Token beim Autorisierungsserver und sendet ihn als Bearer.

Wann der native Webhook nicht ausreicht

  • Daten empfangen von einem anderen System: Dafür brauchen Sie die API.
  • Logik mit mehreren Bedingungen und Schritten, etwa „wenn die Kategorie X ist und der Anforderer zur Geschäftsleitung gehört, einen Kanal benachrichtigen und eine Aufgabe anlegen“: Die Kriterien filtern, verketten aber keine Aktionen.
  • Auf einem einzigen Bildschirm sehen, was fehlgeschlagen ist, und mit einem Klick erneut senden. Die Warteschlange zeigt den Status, aber die Diagnose steht in webhook.log.

In diesen Fällen kommen ein Orchestrator wie n8n oder ein Modul wie Automations von NexTool ins Spiel.

Checkliste vor dem Einschalten in der Produktion

  1. Ziel über HTTPS, auf dem Standardport, ohne :porta in der URL.
  2. Header Content-Type: application/json.
  3. Signatur beim Ziel validiert, mit rohem Body und Zeitfenster für die Versuche.
  4. Kriterien, damit nicht bei allem ausgelöst wird.
  5. „Anzahl der Versuche“ je nach Wichtigkeit (3 ist ein guter Anfang).
  6. GLPI-Cron läuft jede Minute.
  7. „Protokoll in der Historie des Elements“ aktiviert, damit der Techniker sieht, was gesendet wurde.
  8. Test mit einem fiktiven Ticket, bevor Sie es für alle freigeben.

NexTool-Test vom 3. Oktober 2026, in GLPI 11.0.7 unseres Supports, Testeinheit mit fiktiven Daten. Die Webhooks und Testtickets wurden anschließend gelöscht. Das Verhalten wurde zusätzlich im Quellcode von GLPI 11 überprüft.

Häufig gestellte Fragen

Ja. Unter Einrichtung > Webhooks wählen Sie den Elementtyp, das Ereignis (neu, Aktualisierung oder Löschung) und die Ziel-URL. Der Versand ist signiert und hat Wiederholungsversuche.

Die häufigsten Ursachen sind eine URL mit Port (etwa :8080 oder :5678), die GLPI als „unsafe“ ablehnt, und ein gestoppter GLPI-Cron, weil die Sendungen über eine Warteschlange laufen, die jede Minute verarbeitet wird. Den Grund finden Sie in der Datei webhook.log.

Ja, sofern n8n auf dem Standardport läuft (in der Regel hinter einem Proxy mit HTTPS) und Sie den Header Content-Type: application/json hinzufügen, den GLPI nicht von selbst sendet.

Berechnen Sie den HMAC-SHA256 des rohen Body, gefolgt vom Header X-GLPI-timestamp, mit dem Geheimnis des Webhooks, und vergleichen Sie ihn mit dem Header X-GLPI-signature.

Das Feld Anzahl der Versuche legt die Wiederholungen nach dem ersten Versand fest. In unserem Test gab es mit 2 Versuchen 3 Sendungen, eine pro Minute, an ein Ziel, das mit Fehler 500 antwortete.

Nein. Der native Webhook ist nur ausgehend. Damit ein anderes System Tickets erstellt oder ändert, verwenden Sie die API von GLPI.

Brauchen Sie Hilfe?