Saltar al contenido principal

Ganchos web

Los webhooks permiten que los sistemas externos reaccionen cuando el trabajo cambia en Kanera.

Utilice webhooks cuando otro sistema deba conocer los cambios sin sondear la API constantemente. Los ejemplos comunes incluyen:

  • Actualizar un panel externo.
  • Sincronizar tarjetas cambiadas con otro sistema.
  • Activar implementación o revisar flujos de trabajo.
  • Registre la actividad de Kanera en un sistema de auditoría.

Para publicar la actividad de la tarjeta en un canal de chat del equipo, no necesita un webhook propio. Kanera tiene incorporado Destinos de chat para Slack, Discord, Telegram y Zulip que dan formato a cada mensaje para la plataforma. Utilice un webhook cuando necesite el catálogo de eventos completo, cargas útiles exactas y verificación de firma.

Los administradores del espacio de trabajo pueden crear puntos finales de webhook desde Configuración del espacio de trabajo -> API, en el Webhooks personalizados sección. los tableros independientes tienen el mismo API pestaña en su propia configuración del tablero. Las integraciones también pueden registrar puntos finales a través de la API pública o el SDK de TypeScript.

Configuración de la API del espacio de trabajo que muestra la configuración del webhook.

Cada destino de webhook puede recibir todos los eventos o solo tipos de eventos seleccionados. salir eventTypes vacío para recibir cada evento, o proporcione una o más de las cadenas de tipo de evento a continuación.

Plano y permisos​

  • Los administradores del espacio de trabajo pueden ver y administrar todos los puntos finales de webhook genéricos en ese espacio de trabajo.
  • Una credencial API con capacidad de escritura o un agente OAuth interactivo puede registrar un punto final sin autoridad de administrador cuando su usuario es miembro del espacio de trabajo. Ese punto final tiene como ámbito la conexión que se está creando: solo los mismos administradores de conexión y espacio de trabajo pueden verlo o administrarlo. Las credenciales con alcance de lectura no pueden administrar webhooks.
  • Se necesitan webhooks Pro o los 30 días prueba profesional. No están disponibles en alojamiento gratuito.
  • En el alojamiento gratuito, el formulario de creación se reemplaza por Los webhooks no están disponibles en tu plan.

Al revocar la credencial o la conexión del agente también se eliminan los puntos finales del ámbito de la conexión. Los puntos finales del espacio de trabajo creados por el administrador permanecen hasta que un administrador los elimina.

¿Qué sucede en una rebaja?​

Cuando una organización alojada pasa de Pro o una versión de prueba a Free, Kanera pausa cada punto final de webhook habilitado en lugar de eliminar nada. También revoca las claves API del espacio de trabajo (las claves personales siguen funcionando) y deshabilita las automatizaciones más allá del límite gratuito.

En alojado GratisComportamiento
Puntos finales existentesSe pausan automáticamente y no se pueden volver a habilitar mientras la organización esté en modo gratuito.
Nueva actividadNo llega a su punto final.
Algo todavía esperando para enviarRegistrado como fallido con webhooks are unavailable on the current plan en lugar de enviar tarde.
Una entrega fallidaNo se puede volver a intentar manualmente.
Configuración e historiaMantenido. Los puntos finales, las selecciones de eventos, los secretos y el historial de entrega siguen ahí.

Volver a actualizar a Pro vuelve a habilitar los puntos finales que fueron pausados por la degradación y restaura las claves API del espacio de trabajo que revocó, por lo que no es necesario reconstruir una integración reanudada.

Registrar un punto final mediante programación​

La API pública expone el mismo ciclo de vida de punto final genérico utilizado por la configuración del espacio de trabajo. Cada ruta a continuación es relativa a:

/api/v1/workspaces/{workspaceId}/webhooks
MétodoCaminouso
GET(ruta base)Enumera los puntos finales visibles para la persona que llama.
POST(ruta base)Cree un punto final y devuelva su secreto de firma una vez.
PATCH/{endpointId}Cambie su nombre, URL, filtro de eventos o estado habilitado.
POST/{endpointId}/secretGire el secreto de firma.
DELETE/{endpointId}Eliminar el punto final.
GET/{endpointId}/deliveriesLea los intentos de entrega recientes.
POST/{endpointId}/deliveries/{deliveryId}/retryVuelva a intentar una entrega fallida.

Con el SDK de TypeScript, utilice kanera.webhookEndpoints.create(), .list(), .update(), .rotateSecret(), .deliveries(), .retryDelivery(), y .delete(). El punto final devuelto tiene scope: "workspace" para un punto final administrado por administrador o scope: "connection" cuando una credencial no administrativa lo registró. Guarde el secret devuelto por creación o rotación inmediatamente; las lecturas posteriores nunca lo exponen.

Tipos de eventos de webhook​

La API pública expone la lista actual en:

https://api.kanera.app/webhook-event-types
ÁreaTipos de eventos
Listaslist:created, list:updated, list:moved, list:rebalanced, list:deleted
Separadores de tablerosseparator:created, separator:updated, separator:moved, separator:rebalanced, separator:deleted
Campos personalizadoscustomField:created, customField:updated, customField:moved, customField:rebalanced, customField:deleted
Opciones de campos personalizadoscustomFieldOption:created, customFieldOption:updated, customFieldOption:moved, customFieldOption:rebalanced, customFieldOption:deleted
Tarjetascard:created, card:updated, card:moved, card:rebalanced, card:deleted
Campos personalizados de tarjetacard:customFieldValue:set, card:customFieldValue:cleared
Etiquetas de tarjetas y asignatarioscard:labels:set, card:assignees:set
Adjuntos de tarjetascard:attachment:created, card:attachment:deleted
Listas de verificación de tarjetascard:checklist:created, card:checklist:updated, card:checklist:moved, card:checklist:rebalanced, card:checklist:deleted
Elementos de la lista de verificación de la tarjetacard:checklistItem:created, card:checklistItem:updated, card:checklistItem:moved, card:checklistItem:rebalanced, card:checklistItem:deleted
Etiquetas de tarjetas de espacio de trabajocardLabel:created, cardLabel:updated, cardLabel:moved, cardLabel:rebalanced, cardLabel:deleted
Comentarioscomment:created, comment:updated, comment:deleted
Reacciones de comentarioscomment:reaction:added, comment:reaction:removed
Alimentación de tarjetascard:feedItem:created, card:feedItem:updated, card:feedItem:deleted
Tablerosboard:created, board:updated, board:moved, board:rebalanced, board:deleted
Miembros de el tableroboard:member:added, board:member:removed
Espacios de trabajoworkspace:updated, workspace:deleted
Miembros del espacio de trabajoworkspace:member:added, workspace:member:updated, workspace:member:removed
Usuariosuser:profile:updated
Notasnote:created, note:updated, note:moved, note:rebalanced, note:deleted, note:locked, note:unlocked
El agente se ejecutaagentRun:started, agentRun:updated

Formato de carga útil​

Kanera envía cada webhook como un objeto JSON con un sobre estable y específico para el evento. data.

campoSignificado
idID de evento de webhook único. Esto coincide X-Kanera-Event-Id.
typeTipo de evento, como card:created.
workspaceIdEspacio de trabajo donde ocurrió el evento.
boardIdTablero donde ocurrió el evento, cuando el evento tiene el alcance del tablero.
cardIdTarjeta involucrada en el evento, cuando la carga útil del evento identifica una tarjeta.
occurredAtMarca de tiempo ISO 8601 de cuando ocurrió el evento.
dataCarga útil completa del evento. La forma depende de type y coincide con la carga útil del evento en tiempo real correspondiente.

Los eventos dirigidos por agentes se transmiten { boardId, cardId, run } en data, donde run es la ejecución completa del agente: su agentName, el userId actúa para, status, title, summary, externalUrl, y su startedAt, heartbeatAt, y endedAt marcas de tiempo. agentRun:updated se dispara en cada latido del corazón, así como en un cambio de estado, así que active a su controlador run.status en lugar de tratar cada entrega como un trabajo nuevo. Una carrera que deja de latir llega como una final agentRun:updated con status: "stalled".

Ejemplo card:created carga útil:

{
"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"
}
}
}

Entrega de webhook​

Kanera envía entregas de webhooks como JSON e incluye encabezados que puede utilizar para verificar la solicitud:

encabezadoSignificado
X-Kanera-Event-IdIdentificación de evento única.
X-Kanera-TimestampMarca de tiempo de Unix en segundos.
X-Kanera-Signaturesha256= además de una firma HMAC-SHA256.

La firma se calcula sobre:

${timestamp}.${rawBody}

utilizando el secreto del punto final del webhook.

Las entregas de webhook se reintentan cuando el punto final devuelve un estado que no es 2xx o no se puede alcanzar. Kanera registra el historial de entregas para que pueda revisar fallas, reintentar entregas, pausar destinos y rotar secretos desde la configuración de la API del espacio de trabajo.

Verificar firmas de webhooks​

Verifique la firma antes de confiar en la carga útil.

el SDK de mecanografiado hace esto por usted y lanza en lugar de devolver un valor booleano para que el controlador no pueda olvidarse de verificar:

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);
});

Para verificarlo usted mismo, compare el HMAC {timestamp}.{body} en tiempo constante. Tenga en cuenta la verificación de longitud: crypto.timingSafeEqual lanza cuando los dos buffers difieren en longitud, que controla un atacante.

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);
});

Verifique siempre con el cuerpo de la solicitud sin formato. Si su marco analiza JSON antes de la verificación, la verificación de firma puede fallar o dejar de ser confiable.

Kanera también envía X-Kanera-Timestamp y X-Kanera-Event-Id. Rechace las entregas cuya marca de tiempo esté fuera de unos pocos minutos para su reproducción limitada y use la identificación del evento para hacer que su controlador sea idempotente, ya que las entregas pueden volver a intentarse.

Los webhooks son la ruta de uso general. Existen dos opciones más limitadas para audiencias específicas:

CaminoAudienciaCarga útildonde configurarPlan
Ganchos webOtro sistemaJSON firmado en todo el catálogo de eventosConfiguración del espacio de trabajo -> APIPro o prueba
Destinos de chatUn canal de equipoMensajes formateados para Slack, Discord, Telegram o ZulipConfiguración del espacio de trabajo -> IntegracionesPro o prueba
Canales de entrega personalesuna personantfy, Gotify o JSON firmado para sus propias notificacionesConfiguración de perfil -> NotificacionesPro o prueba
Suscripciones a eventos de MCPEl anfitrión de un agente de IATarjeta firmada y ocurrencias de comentarios en una devolución de llamada que el agente verificóEl agente se suscribe a través de MCP; nada que configurar en KaneraCada plan

Los destinos de chat se administran por separado de los puntos finales de webhook y no aparecen en la lista de webhook, por lo que la rotación de un secreto de webhook nunca afecta un destino de chat.

una automatizacion Llamar a un webhook la acción está dirigida a un objetivo en lugar de estar basada en suscripción. envía automation:webhook:called sólo al punto final seleccionado en la regla, independientemente del valor normal de ese punto final. eventTypes filtro, manteniendo el mismo comportamiento de firma, reintento e historial de entrega. Ver Automatizaciones.