Ereignisse nach außen
COMPASS meldet sich bei euren Systemen, wenn sich ändert, was gilt. Die
Richtung ist wichtig: COMPASS ruft raus, euer System nimmt an. Ihr braucht
dafür keinen Zugang zu COMPASS einzurichten und nichts abzufragen — ihr gebt
eine Adresse an, und COMPASS schickt dorthin einen POST, sobald etwas
passiert.
Damit hängt ihr COMPASS an eine Automatisierung wie n8n, Zapier oder Make, an einen Chat-Kanal oder an einen eigenen kleinen Endpunkt. Was danach passiert, entscheidet euer System.
Die fünf Ereignisse
| Name | Wann er ausgelöst wird |
|---|---|
regel.gesetzt |
Eine Regel wird gesetzt und gilt ab jetzt. |
regel.abgeloest |
Eine geltende Regel wird abgelöst, widerlegt oder beendet. |
abweichung.neu |
Ein Prüfweg findet eine Abweichung, die vorher nicht da war. |
abweichung.behoben |
Eine Abweichung ist verschwunden. |
frage.beantwortet |
Eine offene Frage ist entschieden. |
Die beiden abweichung-Ereignisse feuern nur beim Wechsel, nicht bei jedem
Lauf, der weiterhin abweicht. Ein Prüfweg, der eine Woche lang jede Nacht
dieselbe Abweichung findet, schickt ein Ereignis, nicht sieben.
Anmelden
curl -sS -X POST "$COMPASS_URL/webhooks" \
-H "X-Compass-Key: $COMPASS_KEY_RW" -H "Content-Type: application/json" \
-d '{
"url": "https://eure-automatisierung.example/compass",
"ereignisse": ["regel.gesetzt", "regel.abgeloest"]
}'
Die Antwort enthält ein geheimnis. Es wird genau dieses eine Mal
ausgeliefert — danach kennt COMPASS nur noch seine verschlüsselte Form, und
es gibt keinen Weg, es wieder auszulesen. Leg es dort ab, wo euer Endpunkt es
findet. Habt ihr es verloren, meldet ihr den Webhook ab und legt einen neuen an.
Die Zieladresse muss https:// sein und öffentlich auflösen. Adressen im
privaten Netz, auf localhost oder im Link-lokalen Bereich werden abgelehnt —
beim Anlegen und noch einmal unmittelbar vor jedem Versand, damit ein Name
nicht nachträglich auf eine interne Adresse zeigen kann.
Was ankommt
POST /compass HTTP/1.1
Content-Type: application/json
X-Compass-Signatur: sha256=4f1c…
X-Compass-Zeit: 1758380400
X-Compass-Zustellung: 812
{"id": 812, "ereignis": "regel.gesetzt", "zeitpunkt": "2026-09-20T16:20:00Z",
"kunde": "eure-firma", "daten": {"…": "…"}}
Die Signatur prüfen
Prüfe immer die Signatur, bevor ihr dem Inhalt glaubt — sonst kann jeder, der eure Adresse kennt, euch Ereignisse unterschieben.
Gebildet wird sie als HMAC-SHA256 über den Zeitstempel, einen Punkt und den
rohen Anfragekörper: <X-Compass-Zeit>.<body>. Schlüssel ist euer
geheimnis.
import hashlib, hmac
def signatur_gueltig(geheimnis: str, zeit: str, body: bytes, kopf: str) -> bool:
mac = hmac.new(geheimnis.encode(), f"{zeit}.".encode() + body, hashlib.sha256)
return hmac.compare_digest(f"sha256={mac.hexdigest()}", kopf)
Zwei Dinge, die leicht schiefgehen: rechne über den unveränderten Körper,
nicht über neu zusammengesetztes JSON — ein anderes Leerzeichen ergibt eine
andere Signatur. Und vergleiche mit compare_digest, nicht mit ==.
Den Zeitstempel solltet ihr zusätzlich gegen eure Uhr prüfen und alles ablehnen, was zu alt ist; damit lässt sich eine einmal mitgeschnittene Zustellung nicht beliebig oft wiederholen.
Ausprobieren, bevor es ernst wird
curl -sS -X POST "$COMPASS_URL/webhooks/$ID/test" -H "X-Compass-Key: $COMPASS_KEY_RW"
Das schickt eine Zustellung mit dem Ereignis ping — unabhängig davon, was ihr
abonniert habt. Danach seht ihr nach, was daraus wurde:
curl -sS "$COMPASS_URL/webhooks/$ID/zustellungen?limit=50" -H "X-Compass-Key: $COMPASS_KEY_RO"
Jede Zeile nennt Versuch, Status, den letzten HTTP-Code und den letzten Fehler. Das ist die Stelle, an der ihr nachseht, wenn etwas nicht ankommt — nicht eure eigenen Logs.
Wenn es schiefgeht
Antwortet euer Endpunkt nicht mit 2xx, versucht COMPASS es erneut: nach einer
Minute, dann 5 Minuten, 30 Minuten, 2, 6, 12, 24 und noch einmal 24 Stunden.
Nach acht Versuchen gilt die Zustellung als gescheitert und wird nicht weiter
verfolgt. Das Zeitlimit je Versuch ist 5 Sekunden, Weiterleitungen werden
nicht verfolgt.
Nimm die Zustellung also schnell an und arbeite sie hinterher ab — antworte mit
200, sobald ihr sie sicher abgelegt habt, statt während der Anfrage zu
verarbeiten.
Dieselbe Zustellung kann euch mehr als einmal erreichen, etwa wenn eure
Antwort unterwegs verloren geht. Nutze X-Compass-Zustellung, um eine bereits
verarbeitete Zustellung wiederzuerkennen.
Abmelden
curl -sS -X POST "$COMPASS_URL/webhooks/$ID/deaktivieren" -H "X-Compass-Key: $COMPASS_KEY_RW"
Der Webhook hört auf zu senden, bleibt aber samt seiner Zustellungen lesbar —
gelöscht wird in COMPASS nichts. Welche Webhooks ihr habt, zeigt
GET /webhooks; das Geheimnis ist dort nicht dabei.
Wenn POST /webhooks mit 422 antwortet
Dann sind ausgehende Aufrufe auf dieser Installation nicht eingerichtet, und die Antwort sagt das im Klartext. Das ist keine Einstellung, die ihr selbst ändern kannst — wende euch an die Person, die diese Installation betreibt.