Zum Hauptinhalt springen

Nutzdaten ausgehender Ereignis-Webhooks

Diese Seite dokumentiert die Nutzdaten, die Almirant über ausgehende Ereignis-Webhooks an deinen Server sendet. Sie dokumentiert nicht die eingehenden Agenten-Webhooks.

Alle Almirant-Webhooks senden HTTP-POST-Anfragen mit einem JSON-Body, der einer konsistenten Struktur folgt. Diese Seite dokumentiert das allgemeine Format und die spezifischen Payloads für jedes Ereignis.

Allgemeines Format

Alle Payloads haben diese Basisstruktur:

{
"id": "evt_abc123def456",
"type": "work_item.created",
"timestamp": "2025-03-15T10:30:00.000Z",
"projectId": "proj_a1b2c3d4",
"data": {
// Ereignisspezifische Daten
}
}
FeldTypBeschreibung
idstringEindeutige Kennung des Ereignisses
typestringEreignistyp (siehe Ereignistabelle unten)
timestampstringDatum und Uhrzeit des Ereignisses im Format ISO 8601 (UTC)
projectIdstringID des Projekts, in dem das Ereignis aufgetreten ist
dataobjectEreignisspezifische Daten

HTTP-Header

Jede Anfrage enthält diese Header:

HeaderBeschreibungBeispiel
Content-TypeInhaltstypapplication/json
X-Almirant-SignatureHMAC-SHA256-Signatur des Bodysa1b2c3d4e5f6...
X-Almirant-TimestampZeitstempel des Versands (Unix-Epoch in Sekunden)1710495000
X-Almirant-EventEreignistypwork_item.created
X-Almirant-DeliveryEindeutige ID der ausgehenden Zustellung zur Deduplizierungdlv_xyz789
User-AgentKennung des AbsendersAlmirant-Webhooks/1.0
Idempotenz ausgehender Zustellungen

Verwende X-Almirant-Delivery, um doppelte ausgehende Zustellungen zu erkennen. Wenn zwei Zustellungen dieselbe ID haben, verarbeite nur die erste. Dies unterscheidet sich vom Header Idempotency-Key, den der Aufrufer eines eingehenden Agenten-Webhooks bereitstellt; vertausche diese beiden Verträge nicht.

Work-Item-Ereignisse

work_item.created

Wird ausgelöst, wenn ein neues Work Item auf einem Board erstellt wird.

{
"id": "evt_wi_created_001",
"type": "work_item.created",
"timestamp": "2025-03-15T10:30:00.000Z",
"projectId": "proj_a1b2c3d4",
"data": {
"workItem": {
"id": "wi_abc123",
"taskId": "MC-T-42",
"title": "Implementar validacion de formulario de registro",
"description": "Agregar validacion client-side y server-side al formulario...",
"type": "task",
"priority": "high",
"boardId": "board_xyz",
"boardColumnId": "col_todo",
"boardColumnName": "To Do",
"assigneeId": "user_456",
"parentId": "wi_parent_789",
"sprintId": "sprint_001",
"createdAt": "2025-03-15T10:30:00.000Z"
}
}
}

work_item.updated

Wird ausgelöst, wenn Felder eines Work Items geändert werden (Titel, Beschreibung, Priorität, Zuweisung usw.).

{
"id": "evt_wi_updated_002",
"type": "work_item.updated",
"timestamp": "2025-03-15T11:00:00.000Z",
"projectId": "proj_a1b2c3d4",
"data": {
"workItem": {
"id": "wi_abc123",
"taskId": "MC-T-42",
"title": "Implementar validacion de formulario de registro",
"type": "task",
"priority": "critical",
"boardId": "board_xyz",
"boardColumnId": "col_todo",
"boardColumnName": "To Do",
"assigneeId": "user_456",
"updatedAt": "2025-03-15T11:00:00.000Z"
},
"changes": {
"priority": {
"from": "high",
"to": "critical"
}
}
}
}

Das Feld changes enthält nur die Felder, die sich geändert haben, mit ihrem vorherigen Wert (from) und dem neuen Wert (to).

work_item.moved

Wird ausgelöst, wenn ein Work Item zwischen Spalten des Boards verschoben wird (zum Beispiel von "To Do" zu "In Progress").

{
"id": "evt_wi_moved_003",
"type": "work_item.moved",
"timestamp": "2025-03-15T14:20:00.000Z",
"projectId": "proj_a1b2c3d4",
"data": {
"workItem": {
"id": "wi_abc123",
"taskId": "MC-T-42",
"title": "Implementar validacion de formulario de registro",
"type": "task",
"boardId": "board_xyz",
"boardColumnId": "col_in_progress",
"boardColumnName": "In Progress"
},
"move": {
"fromColumnId": "col_todo",
"fromColumnName": "To Do",
"toColumnId": "col_in_progress",
"toColumnName": "In Progress"
}
}
}

work_item.archived

Wird ausgelöst, wenn ein Work Item archiviert wird.

{
"id": "evt_wi_archived_004",
"type": "work_item.archived",
"timestamp": "2025-03-15T16:00:00.000Z",
"projectId": "proj_a1b2c3d4",
"data": {
"workItem": {
"id": "wi_abc123",
"taskId": "MC-T-42",
"title": "Implementar validacion de formulario de registro",
"type": "task",
"boardId": "board_xyz",
"archivedAt": "2025-03-15T16:00:00.000Z"
}
}
}

Lead-Ereignisse

lead.created

Wird ausgelöst, wenn ein neuer Lead im CRM erstellt wird.

{
"id": "evt_lead_created_001",
"type": "lead.created",
"timestamp": "2025-03-15T09:00:00.000Z",
"projectId": "proj_a1b2c3d4",
"data": {
"lead": {
"id": "lead_abc123",
"name": "Maria Garcia",
"email": "[email protected]",
"company": "Empresa S.L.",
"source": "website",
"tags": ["enterprise", "demo-requested"],
"createdAt": "2025-03-15T09:00:00.000Z"
}
}
}

lead.updated

Wird ausgelöst, wenn Daten eines Leads aktualisiert werden.

{
"id": "evt_lead_updated_002",
"type": "lead.updated",
"timestamp": "2025-03-15T10:15:00.000Z",
"projectId": "proj_a1b2c3d4",
"data": {
"lead": {
"id": "lead_abc123",
"name": "Maria Garcia",
"email": "[email protected]",
"company": "Empresa S.L.",
"source": "website",
"updatedAt": "2025-03-15T10:15:00.000Z"
},
"changes": {
"company": {
"from": "Empresa S.L.",
"to": "Empresa Internacional S.A."
}
}
}
}

lead.stage_changed

Wird ausgelöst, wenn ein Lead die Phase innerhalb eines Funnels wechselt.

{
"id": "evt_lead_stage_001",
"type": "lead.stage_changed",
"timestamp": "2025-03-15T11:30:00.000Z",
"projectId": "proj_a1b2c3d4",
"data": {
"lead": {
"id": "lead_abc123",
"name": "Maria Garcia",
"email": "[email protected]"
},
"funnel": {
"id": "funnel_xyz",
"name": "Ventas Enterprise"
},
"stageChange": {
"fromStageId": "stage_discovery",
"fromStageName": "Discovery",
"toStageId": "stage_proposal",
"toStageName": "Proposal"
}
}
}

Sprint-Ereignisse

sprint.created

Wird ausgelöst, wenn ein neuer Sprint erstellt wird.

{
"id": "evt_sprint_created_001",
"type": "sprint.created",
"timestamp": "2025-03-15T08:00:00.000Z",
"projectId": "proj_a1b2c3d4",
"data": {
"sprint": {
"id": "sprint_abc123",
"name": "Sprint 14",
"goal": "Completar modulo de facturacion y tests E2E",
"startDate": "2025-03-15",
"endDate": "2025-03-29",
"boardId": "board_xyz",
"workItemCount": 12,
"createdAt": "2025-03-15T08:00:00.000Z"
}
}
}

sprint.closed

Wird ausgelöst, wenn ein Sprint geschlossen wird.

{
"id": "evt_sprint_closed_001",
"type": "sprint.closed",
"timestamp": "2025-03-29T18:00:00.000Z",
"projectId": "proj_a1b2c3d4",
"data": {
"sprint": {
"id": "sprint_abc123",
"name": "Sprint 14",
"goal": "Completar modulo de facturacion y tests E2E",
"startDate": "2025-03-15",
"endDate": "2025-03-29",
"closedAt": "2025-03-29T18:00:00.000Z"
},
"summary": {
"totalItems": 12,
"completedItems": 10,
"incompleteItems": 2,
"completionRate": 83.3
}
}
}

Übersicht der Ereignistypen

EreignistypEntitätBeschreibung
work_item.createdWork ItemNeues Work Item erstellt
work_item.updatedWork ItemFelder des Work Items geändert
work_item.movedWork ItemWork Item zwischen Spalten verschoben
work_item.archivedWork ItemWork Item archiviert
lead.createdLeadNeuer Lead erstellt
lead.updatedLeadLead-Daten aktualisiert
lead.stage_changedLeadLead wechselt die Phase im Funnel
sprint.createdSprintNeuer Sprint erstellt
sprint.closedSprintSprint geschlossen
Neue Ereignisse

Almirant kann künftig neue Ereignistypen hinzufügen. Dein Server sollte Ereignisse, die er nicht erkennt, ignorieren, anstatt einen Fehler zu verursachen, um Vorwärtskompatibilität zu gewährleisten.