Zum Hauptinhalt springen

Webhooks

Mit Webhooks können externe Systeme reagieren, wenn sich die Arbeit in Kanera ändert.

Verwenden Sie Webhooks, wenn ein anderes System über Änderungen informiert werden soll, ohne die API ständig abzufragen. Häufige Beispiele sind:

  • Aktualisieren Sie ein externes Dashboard.
  • Geänderte Karten mit einem anderen System synchronisieren.
  • Lösen Sie Bereitstellungs- oder Überprüfungsworkflows aus.
  • Zeichnen Sie die Kanera-Aktivitäten in einem Auditsystem auf.

Um Kartenaktivitäten in einem Team-Chat-Kanal zu posten, benötigen Sie keinen eigenen Webhook. Kanera hat eingebaut Chat-Ziele für Slack, Discord, Telegram und Zulip, die jede Nachricht für die Plattform formatieren. Verwenden Sie einen Webhook, wenn Sie den vollständigen Ereigniskatalog, genaue Nutzlasten und eine Signaturüberprüfung benötigen.

Workspace-Administratoren können Webhook-Endpunkte erstellen Arbeitsbereichseinstellungen -> API, im Benutzerdefinierte Webhooks Abschnitt. Standalone-Boards haben das Gleiche API Registerkarte in ihren eigenen Board-Einstellungen. Integrationen können Endpunkte auch über die öffentliche API oder das TypeScript SDK registrieren.

Workspace-API-Einstellungen, die die Webhook-Konfiguration zeigen.

Jedes Webhook-Ziel kann alle Ereignisse oder nur ausgewählte Ereignistypen empfangen. Geh eventTypes leer, um jedes Ereignis zu empfangen, oder geben Sie eine oder mehrere der folgenden Ereignistypzeichenfolgen an.

Plan und Genehmigungen​

  • Arbeitsbereichsadministratoren können jeden generischen Webhook-Endpunkt in diesem Arbeitsbereich sehen und verwalten.
  • Ein schreibfähiger API-Anmeldedaten- oder interaktiver OAuth-Agent kann einen Endpunkt ohne Administratorberechtigung registrieren, wenn sein Benutzer ein Arbeitsbereichsmitglied ist. Dieser Endpunkt ist auf die erstellende Verbindung beschränkt: Nur die gleichen Verbindungs- und Arbeitsbereichsadministratoren können ihn sehen oder verwalten. Anmeldeinformationen mit Lesebereich können keine Webhooks verwalten.
  • Webhooks brauchen Pro oder die 30-Tage Pro-Testversion. Sie sind nicht auf gehosteten Free verfügbar.
  • Bei gehosteten kostenlosen Versionen wird das Erstellungsformular durch ersetzt Webhooks sind in Ihrem Plan nicht verfügbar.

Durch das Widerrufen der Anmeldeinformationen oder Agentenverbindung werden auch die verbindungsbezogenen Endpunkte entfernt. Vom Administrator erstellte Arbeitsbereichsendpunkte bleiben bestehen, bis ein Administrator sie löscht.

Was passiert bei einem Downgrade?​

Wenn eine gehostete Organisation von Pro oder einer Testversion auf Free umsteigt, pausiert Kanera jeden aktivierten Webhook-Endpunkt, anstatt etwas zu löschen. Es widerruft außerdem Arbeitsbereichs-API-Schlüssel (persönliche Schlüssel funktionieren weiterhin) und deaktiviert Automatisierungen über das kostenlose Limit hinaus.

Auf gehostetem FreeVerhalten
Vorhandene EndpunkteWird automatisch angehalten und kann nicht erneut aktiviert werden, während die Organisation im kostenlosen Modus läuft.
Neue AktivitätErreicht Ihren Endpunkt nicht.
Alles, was noch auf den Versand wartetAls fehlgeschlagen mit aufgezeichnet webhooks are unavailable on the current plan anstatt zu spät zu versenden.
Eine fehlgeschlagene LieferungKann nicht manuell wiederholt werden.
Konfiguration und GeschichteBehalten. Endpunkte, Ereignisauswahl, Geheimnisse und Zustellungsverlauf sind alle noch vorhanden.

Beim Zurück-Upgrade auf Pro werden die Endpunkte, die durch das Downgrade angehalten wurden, wieder aktiviert und die widerrufenen Arbeitsbereich-API-Schlüssel wiederhergestellt, sodass eine wieder aufgenommene Integration nicht neu erstellt werden muss.

Registrieren Sie einen Endpunkt programmgesteuert​

Die öffentliche API stellt denselben generischen Endpunkt-Lebenszyklus bereit, der von Workspace-Einstellungen verwendet wird. Jeder untenstehende Pfad ist relativ zu:

/api/v1/workspaces/{workspaceId}/webhooks
MethodePfadBenutzen
GET(Basispfad)Für den Anrufer sichtbare Endpunkte auflisten.
POST(Basispfad)Erstellen Sie einen Endpunkt und geben Sie sein Signaturgeheimnis einmal zurück.
PATCH/{endpointId}Ändern Sie den Namen, die URL, den Ereignisfilter oder den Aktivierungsstatus.
POST/{endpointId}/secretRotieren Sie das Signaturgeheimnis.
DELETE/{endpointId}Löschen Sie den Endpunkt.
GET/{endpointId}/deliveriesLesen Sie die letzten Zustellversuche.
POST/{endpointId}/deliveries/{deliveryId}/retryVersuchen Sie eine fehlgeschlagene Zustellung erneut.

Verwenden Sie mit dem TypeScript SDK kanera.webhookEndpoints.create(), .list(), .update(), .rotateSecret(), .deliveries(), .retryDelivery(), und .delete(). Der zurückgegebene Endpunkt hat scope: "workspace" für einen vom Administrator verwalteten Endpunkt oder scope: "connection" wenn eine Nicht-Administrator-Anmeldeinformation es registriert hat. Speichern Sie die secret wird durch Erstellen oder Drehen sofort zurückgegeben; Spätere Lektüren enthüllen es nie.

Webhook-Ereignistypen​

Die öffentliche API stellt die aktuelle Liste unter folgender Adresse bereit:

https://api.kanera.app/webhook-event-types
BereichVeranstaltungstypen
Listenlist:created, list:updated, list:moved, list:rebalanced, list:deleted
Bretttrennerseparator:created, separator:updated, separator:moved, separator:rebalanced, separator:deleted
Benutzerdefinierte FeldercustomField:created, customField:updated, customField:moved, customField:rebalanced, customField:deleted
Benutzerdefinierte FeldoptionencustomFieldOption:created, customFieldOption:updated, customFieldOption:moved, customFieldOption:rebalanced, customFieldOption:deleted
Kartencard:created, card:updated, card:moved, card:rebalanced, card:deleted
Benutzerdefinierte Kartenfeldercard:customFieldValue:set, card:customFieldValue:cleared
Kartenetiketten und Beauftragtecard:labels:set, card:assignees:set
Kartenanhängecard:attachment:created, card:attachment:deleted
Karten-Checklistencard:checklist:created, card:checklist:updated, card:checklist:moved, card:checklist:rebalanced, card:checklist:deleted
Elemente der Kartenchecklistecard:checklistItem:created, card:checklistItem:updated, card:checklistItem:moved, card:checklistItem:rebalanced, card:checklistItem:deleted
Etiketten für ArbeitsplatzkartencardLabel:created, cardLabel:updated, cardLabel:moved, cardLabel:rebalanced, cardLabel:deleted
Kommentarecomment:created, comment:updated, comment:deleted
Kommentarreaktionencomment:reaction:added, comment:reaction:removed
Karteneinzugcard:feedItem:created, card:feedItem:updated, card:feedItem:deleted
Boardsboard:created, board:updated, board:moved, board:rebalanced, board:deleted
Vorstandsmitgliederboard:member:added, board:member:removed
Arbeitsbereicheworkspace:updated, workspace:deleted
Mitglieder des Arbeitsbereichsworkspace:member:added, workspace:member:updated, workspace:member:removed
Benutzeruser:profile:updated
Notizennote:created, note:updated, note:moved, note:rebalanced, note:deleted, note:locked, note:unlocked
Agent läuftagentRun:started, agentRun:updated

Nutzlastformat​

Kanera sendet jeden Webhook als JSON-Objekt mit stabilem Umschlag und ereignisspezifisch data.

FeldBedeutung
idEindeutige Webhook-Ereignis-ID. Das passt X-Kanera-Event-Id.
typeEreignistyp, z. B card:created.
workspaceIdArbeitsbereich, in dem das Ereignis aufgetreten ist.
boardIdBoard, auf dem das Ereignis stattgefunden hat, wenn das Ereignis auf das Board beschränkt ist.
cardIdAm Ereignis beteiligte Karte, wenn die Ereignisnutzlast eine Karte identifiziert.
occurredAtISO 8601-Zeitstempel für das Auftreten des Ereignisses.
dataVollständige Event-Nutzlast. Die Form hängt davon ab type und stimmt mit der entsprechenden Echtzeit-Ereignisnutzlast überein.

Von Agenten ausgeführte Ereignisse werden übertragen { boardId, cardId, run } in data, wo run ist der vollständige Agentenlauf: its agentName, die userId es wirkt für, status, title, summary, externalUrl, und es ist startedAt, heartbeatAt, und endedAt Zeitstempel. agentRun:updated Wird bei jedem Herzschlag sowie bei einer Statusänderung ausgelöst, also schalten Sie Ihren Handler ein run.status anstatt jede Lieferung als neue Arbeit zu behandeln. Ein Lauf, der den Herzschlag zum Stillstand bringt, ist ein Finale agentRun:updated mit status: "stalled".

Beispiel card:created Nutzlast:

{
"id": "7e5c982a-e6c9-4ea7-9647-b14fe73ed50a",
"type": "card:created",
"workspaceId": "a069fd45-3bb3-4928-bac9-cb574a050d20",
"boardId": "48a52a55-763e-4c64-8a76-51ac56247f5c",
"cardId": "70c39cef-1aec-44e6-a8f5-f36f765a818d",
"occurredAt": "2026-05-28T12:34:56.000Z",
"data": {
"boardId": "48a52a55-763e-4c64-8a76-51ac56247f5c",
"card": {
"id": "70c39cef-1aec-44e6-a8f5-f36f765a818d",
"boardId": "48a52a55-763e-4c64-8a76-51ac56247f5c",
"listId": "3bb3c1b3-8fc7-4807-854d-2d5ff62df147",
"title": "Prepare kickoff agenda",
"position": "1000.0000000000"
}
}
}

Webhook-Zustellung​

Kanera sendet Webhook-Lieferungen als JSON und enthält Header, die Sie zur Überprüfung der Anfrage verwenden können:

KopfzeileBedeutung
X-Kanera-Event-IdEindeutige Ereignis-ID.
X-Kanera-TimestampUnix-Zeitstempel in Sekunden.
X-Kanera-Signaturesha256= plus eine HMAC-SHA256-Signatur.

Die Signatur wird berechnet über:

${timestamp}.${rawBody}

Verwenden des Webhook-Endpunktgeheimnisses.

Webhook-Zustellungen werden wiederholt, wenn der Endpunkt einen Nicht-2xx-Status zurückgibt oder nicht erreichbar ist. Kanera zeichnet den Lieferverlauf auf, sodass Sie Fehler überprüfen, Lieferungen wiederholen, Ziele pausieren und Geheimnisse aus den Workspace-API-Einstellungen rotieren können.

Webhook-Signaturen überprüfen​

Überprüfen Sie die Signatur, bevor Sie der Nutzlast vertrauen.

Die TypeScript-SDK erledigt dies für Sie und gibt einen booleschen Wert aus, anstatt ihn zurückzugeben, damit ein Handler nicht vergessen kann, Folgendes zu überprüfen:

import { parseWebhook } from "@kanera/sdk";

app.post("/kanera/webhook", express.raw({ type: "application/json" }), async (req, res) => {
const event = await parseWebhook({
secret: process.env.KANERA_WEBHOOK_SECRET!,
payload: req.body, // the raw bytes
headers: req.headers,
});
// Handle event.type, event.workspaceId, event.boardId, event.cardId, and event.data.
res.sendStatus(204);
});

Um es selbst zu überprüfen, vergleichen Sie den HMAC {timestamp}.{body} in konstanter Zeit. Beachten Sie die Längenprüfung: crypto.timingSafeEqual wirft, wenn die beiden Puffer unterschiedliche Längen haben, die ein Angreifer kontrolliert.

import crypto from "node:crypto";
import express from "express";

const app = express();

app.post("/kanera/webhook", express.raw({ type: "application/json" }), (req, res) => {
const timestamp = req.header("X-Kanera-Timestamp") ?? "";
const signature = req.header("X-Kanera-Signature") ?? "";
const expected = "sha256=" + crypto
.createHmac("sha256", process.env.KANERA_WEBHOOK_SECRET!)
.update(`${timestamp}.${req.body.toString("utf8")}`)
.digest("hex");

const received = Buffer.from(signature);
const digest = Buffer.from(expected);
if (received.length !== digest.length || !crypto.timingSafeEqual(received, digest)) {
return res.status(401).send("invalid signature");
}

const event = JSON.parse(req.body.toString("utf8"));
// Handle event.type, event.workspaceId, event.boardId, event.cardId, and event.data.
res.sendStatus(204);
});

Überprüfen Sie immer anhand des rohen Anforderungstexts. Wenn Ihr Framework JSON vor der Überprüfung analysiert, schlägt die Signaturprüfung möglicherweise fehl oder wird unzuverlässig.

Kanera sendet auch X-Kanera-Timestamp und X-Kanera-Event-Id. Lehnen Sie Lieferungen ab, deren Zeitstempel außerhalb einiger Minuten liegt, um die Wiedergabe zu binden, und verwenden Sie die Ereignis-ID, um Ihren Handler idempotent zu machen, da Lieferungen möglicherweise wiederholt werden.

Webhooks sind der Allzweckpfad. Für bestimmte Zielgruppen gibt es zwei engere Optionen:

PfadPublikumNutzlastWo einzurichtenTarif
WebhooksEin anderes SystemSigniertes JSON im gesamten VeranstaltungskatalogArbeitsbereichseinstellungen -> APIPro oder Testversion
ChatzieleEin TeamkanalFormatierte Nachrichten für Slack, Discord, Telegram oder ZulipArbeitsbereichseinstellungen -> IntegrationenPro oder Testversion
Persönliche LieferkanäleEine Personntfy, Gotify oder signiertes JSON für Ihre eigenen BenachrichtigungenProfileinstellungen -> BenachrichtigungenPro oder Testversion
MCP-VeranstaltungsabonnementsDer Gastgeber eines KI-AgentenSignierte Karten- und Kommentarvorkommnisse zu einem Rückruf, den der Agent überprüft hatDer Agent abonniert über MCP; In Kanera gibt es nichts einzurichtenJeder Plan

Chat-Ziele werden getrennt von Webhook-Endpunkten verwaltet und erscheinen nicht in der Webhook-Liste, sodass sich die Rotation eines Webhook-Geheimnisses nie auf ein Chat-Ziel auswirkt.

Eine Automatisierung Rufen Sie einen Webhook auf Die Aktion ist zielgerichtet und nicht abonnementbasiert. Es sendet automation:webhook:called nur für den in der Regel ausgewählten Endpunkt, unabhängig vom Normalwert dieses Endpunkts eventTypes Filtern, wobei Signatur, Wiederholungsversuche und Zustellungsverlaufsverhalten beibehalten werden. Siehe Automatisierungen.