Naar inhoud springen
Clevera Help Center

Webhooks instellen voor agent-gebeurtenissen

Ontvang een ondertekende POST op je eigen https-eindpunt wanneer de taak van een agent is voltooid of mislukt, een agent wacht op goedkeuring, of een documentatiesite is gepubliceerd. Gebeurtenissen, payloads, handtekeningverificatie, nieuwe pogingen en automatisch uitschakelen.

Bijgewerkt op 8 min leestijd

Een webhook stuurt een ondertekende POST naar je eigen eindpunt op het moment dat er iets gebeurt, zoals wanneer de taak van een agent is voltooid of een agent wacht op goedkeuring, zodat je systemen niet hoeven te pollen. Dit artikel behandelt het toevoegen van een eindpunt, de gebeurtenissen, de payload, het verifiëren van de handtekening en wat er gebeurt als leveringen mislukken.

Voordat je begint

  • Webhooks zijn beschikbaar in de Pro-, Business- en Custom-abonnementen ("Webhooks zijn beschikbaar vanaf Pro.").
  • Alleen de eigenaar van de werkruimte en beheerders beheren webhooks. Andere leden zien "Alleen eigenaren en beheerders beheren webhooks".
  • Je hebt een openbaar https-adres nodig dat binnen 10 seconden antwoordt met een 2xx-status.
  • Een werkruimte kan maximaal 10 webhooks hebben.

Een webhook toevoegen

  1. Open het tabblad Webhooks

    Open het menu van de werkruimte, kies AI agents & API en open vervolgens Webhooks. Klik op Nieuwe webhook.

    Het tabblad Webhooks met één eindpunt op example.com, de gebeurtenissen die het ontvangt en wanneer het voor het laatst heeft verzonden.
    Elke webhook toont zijn gebeurtenissen, wanneer het voor het laatst heeft verzonden en het einde van zijn geheim.
  2. Voer het eindpunt in

    • Endpoint URL: "Een openbaar HTTPS-adres." Bijvoorbeeld https://example.com/clevera/webhooks.
    • Beschrijving: optioneel, maximaal 200 tekens, bijvoorbeeld "Slack relay".
  3. Kies de gebeurtenissen

    Vink de gebeurtenissen aan die je wilt ontvangen, of Alle gebeurtenissen, inclusief nieuwe. Gebeurtenissen gemarkeerd als Binnenkort worden geaccepteerd, maar "Nog niets verzendt deze gebeurtenis."

    Het dialoogvenster Nieuwe webhook: endpoint URL, beschrijving en de te verzenden gebeurtenissen, waarbij gebeurtenissen die nog niet worden verzonden als Binnenkort zijn gemarkeerd.
    Gebeurtenissen gemarkeerd als Binnenkort worden geaccepteerd maar nog niet verzonden.
  4. Maak het aan en sla het geheim op

    Klik op Webhook aanmaken. Het Ondertekeningsgeheim (het begint met whsec_) wordt één keer getoond: "Kopieer het nu: je zult het niet opnieuw zien. Gebruik het om de Clevera-Signature-header te controleren." Sla het op als een wachtwoord en klik vervolgens op Ik heb het opgeslagen.

  5. Testgebeurtenis verzenden

    Open het ⋯-menu van de webhook en kies Testgebeurtenis verzenden. Clevera stuurt één keer een ondertekende ping-gebeurtenis (geen nieuwe pogingen). "Testgebeurtenis verzonden" betekent dat het Clevera heeft verlaten; controleer Leveringen voor het antwoord van je eindpunt.

Gebeurtenissen

Gebeurtenis Verzonden wanneer
job.started Een taak die een agent is gestart, begint te draaien.
job.needs_input Een taak wacht op een persoon, bijvoorbeeld een goedkeuring. Bevat de link en wanneer het verzoek verloopt.
job.succeeded De taak is voltooid.
job.failed De taak is mislukt. Bevat de foutcode.
job.canceled De taak is geannuleerd, of de goedkeuring ervan is geweigerd of verlopen.
approval.requested Een agent heeft om goedkeuring gevraagd op Agent-verzoeken.
approval.decided Iemand heeft het verzoek goedgekeurd of geweigerd, of het is verlopen.
site.published Een documentatiesite is gepubliceerd.
site.build_failed Het publiceren van een documentatiesite is mislukt.
ping Je hebt op Testgebeurtenis verzenden geklikt. Vereist geen abonnement.

Deze gebeurtenissen staan vermeld als Binnenkort en worden nog niet verzonden: job.progress, video.ready, article.ready, research.completed, insights.weekly.

Taakgebeurtenissen hebben betrekking op taken die agents starten (via een API-token of een gekoppelde app), niet op video's die mensen in de app starten.

Wat Clevera verzendt

Elke levering is een POST met een JSON-body en deze headers:

Header Waarde
Content-Type application/json
User-Agent Clevera-Webhooks/1.0
Clevera-Event De naam van de gebeurtenis, zoals job.succeeded
Clevera-Delivery Het unieke ID van de levering. Een herlevering herhaalt hetzelfde ID, dus gebruik dit om duplicaten te negeren.
Clevera-Signature t=<unix time>,v1=<signature>

Payloads bevatten ID's, links, statussen en getallen, nooit de inhoud zelf. Om een voltooide video of artikel te lezen, roep je de API aan met een token.

job.succeeded
{
  "id": "6f1c2d3e-4b5a-4c6d-8e9f-0a1b2c3d4e5f",
  "event": "job.succeeded",
  "created_at": "2026-10-20T14:03:11Z",
  "data": {
    "job": {
      "id": "job_8k2m4n6p8r0t2v4x",
      "kind": "video.create",
      "status": "succeeded",
      "error_code": null,
      "subject": { "type": "video", "id": "vid_example" },
      "credits_spent": 64
    },
    "needs_input": null,
    "workspace": { "id": "tm_example" }
  }
}
approval.requested
{
  "id": "0b9a8c7d-6e5f-4a3b-9c2d-1e0f9a8b7c6d",
  "event": "approval.requested",
  "created_at": "2026-10-20T14:01:02Z",
  "data": {
    "approval": {
      "id": "apr_example",
      "kind": "spend",
      "status": "pending",
      "credits_high": 80,
      "expires_at": "2026-10-21T14:01:02Z",
      "decided_at": null,
      "url": "https://app.clevera.ai/agents?tab=requests&team=tm_example"
    },
    "job": { "id": "job_8k2m4n6p8r0t2v4x", "kind": "video.create" },
    "workspace": { "id": "tm_example" }
  }
}

De handtekening verifiëren

Controleer elke levering voordat je deze vertrouwt. De handtekening is een HMAC-SHA256, versleuteld met je ondertekeningsgeheim, van de tijdstempel, een punt en de onbewerkte request-body: <t>.<body>.

  1. Lees t en v1 uit de Clevera-Signature-header.
  2. Bereken HMAC-SHA256(secret, t + "." + rawBody) als hex.
  3. Vergelijk het met v1 in constante tijd.
  4. Wijs leveringen af waarvan de t meer dan 5 minuten oud is, zodat een onderschept verzoek niet opnieuw kan worden afgespeeld.
verify.js
import crypto from 'node:crypto';

export function verifyClevera(rawBody, header, secret, toleranceSeconds = 300) {
  const parts = Object.fromEntries(header.split(',').map((p) => p.trim().split('=')));
  const t = Number(parts.t);
  if (!parts.v1 || !Number.isInteger(t)) return false;
  if (Math.abs(Date.now() / 1000 - t) > toleranceSeconds) return false;
  const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
  return expected.length === parts.v1.length &&
    crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}

Gebruik de body precies zoals ontvangen. Het eerst parseren en opnieuw coderen van de JSON verandert de bytes en de handtekening zal niet overeenkomen.

Nieuwe pogingen en mislukkingen

Een levering telt als afgeleverd wanneer je eindpunt antwoordt met een 2xx-status. Al het andere zorgt voor een mislukte poging:

  • elke andere status, inclusief redirects (3xx worden niet gevolgd);
  • geen antwoord binnen 10 seconden (5 seconden om verbinding te maken);
  • een adres dat niet langer naar het openbare internet verwijst.

Clevera probeert een mislukte levering 5 keer opnieuw, na 1 minuut, 5 minuten, 30 minuten, 2 uur en 6 uur. De response-body van je eindpunt wordt nooit gelezen.

Wanneer 15 leveringen achter elkaar mislukken, wordt de webhook uitgeschakeld: "Uitgeschakeld na 15 mislukte leveringen achter elkaar. Herstel het eindpunt en schakel het vervolgens in." De eigenaar en beheerders krijgen een "Webhook naar host uitgeschakeld"-melding: "De leveringen bleven mislukken. Herstel het eindpunt en schakel het vervolgens weer in." Gebeurtenissen die plaatsvinden terwijl deze is uitgeschakeld, worden niet verzonden. Testgebeurtenissen tellen hier niet voor mee.

Een webhook beheren

Klik op Leveringen bij een webhook om het logboek te bekijken, of open het ⋯-menu voor de rest:

Optie Wat het doet
Bewerken Wijzig de URL, gebeurtenissen of beschrijving.
Leveringen De laatste 100 leveringen met hun status (Afgeleverd, Mislukt, Verzenden), Pogingen en de HTTP-code. Opnieuw leveren verzendt er een opnieuw. Leveringen worden 30 dagen bewaard.
Testgebeurtenis verzenden Verzendt een ondertekende ping.
Geheim opnieuw genereren "Leveringen worden direct ondertekend met het nieuwe geheim. Werk je eindpunt bij om dit te controleren." Er is geen overlap, dus werk je eindpunt direct daarna bij.
Uitschakelen / Inschakelen Pauzeer en hervat leveringen.
Verwijderen "We stoppen met het verzenden van gebeurtenissen ernaartoe en verwijderen het leveringslogboek. Dit kan niet ongedaan worden gemaakt."

Als de werkruimte Pro verlaat

Webhooks blijven in de lijst staan en kunnen nog steeds worden bewerkt en verwijderd, maar er wordt niets verzonden. Leveringen die wachten op een nieuwe poging eindigen als mislukt met plan_locked, en Testgebeurtenis verzenden en Opnieuw leveren geven aan "Webhooks zijn niet in je abonnement inbegrepen." Upgraden naar Pro zorgt ervoor dat er weer wordt verzonden; er wordt niets verwijderd.

Probleemoplossing

Bericht Oorzaak Oplossing
"Webhooks zijn niet in je abonnement inbegrepen." De werkruimte heeft geen Pro-, Business- of Custom-abonnement. Upgrade naar Pro.
"Gebruik een https://-adres." De URL begint met http://. Serveer het eindpunt via HTTPS.
"Gebruik een hostnaam, geen IP-adres." De URL gebruikt een IP-adres. Gebruik een domeinnaam.
"Dit adres is niet bereikbaar op het openbare internet." De host verwijst naar een privé- of lokaal adres. Gebruik een openbaar eindpunt of een relay.
"Verwijder de gebruikersnaam en het wachtwoord uit het adres." De URL bevat user:password@. Verwijder ze; controleer in plaats daarvan de handtekening.
"Voer een geldig webadres in." De URL is niet geldig. Controleer op typefouten.
"Kies ten minste één gebeurtenis." Geen gebeurtenis aangevinkt. Vink ten minste één gebeurtenis aan.
"Deze werkruimte heeft al 10 webhooks." De limiet van de werkruimte. Verwijder er een die je niet gebruikt.
"Schakel de webhook eerst weer in." Je probeerde opnieuw te leveren op een webhook die is uitgeschakeld. Schakel deze in en lever vervolgens opnieuw.
"Deze levering wordt nog verzonden." De levering probeert het nog steeds opnieuw. Wacht tot het is voltooid.
Leveringen mislukken met een HTTP-code Je eindpunt antwoordde met een fout. Controleer de logboeken van je eindpunt en zorg dat het snel 2xx retourneert; doe traag werk na het antwoorden.
Handtekeningen komen nooit overeen De body is gewijzigd voor controle, of het geheim is oud. Verifieer tegen de onbewerkte body; genereer het geheim opnieuw bij twijfel.