Aller au contenu
Centre d'aide Clevera

Configurer des webhooks pour les événements d'agent

Recevez une requête POST signée sur votre propre point de terminaison https lorsqu'une tâche d'agent se termine ou échoue, qu'un agent attend une approbation ou qu'un site de documentation est publié. Événements, charges utiles, vérification de signature, tentatives et désactivation automatique.

Mis à jour 9 min de lecture

Un webhook envoie une requête POST signée à votre propre point de terminaison dès qu'un événement se produit, comme la fin d'un travail d'agent ou un agent en attente d'approbation, afin que vos systèmes n'aient pas à effectuer de sondage. Cet article explique comment ajouter un point de terminaison, les événements, la charge utile, la vérification de la signature et ce qui se passe en cas d'échec des livraisons.

Avant de commencer

  • Les webhooks sont disponibles sur les forfaits Pro, Business et Custom (« Les webhooks sont disponibles à partir du forfait Pro »).
  • Seuls le propriétaire de l'espace de travail et les administrateurs peuvent gérer les webhooks. Les autres membres voient le message « Seuls les propriétaires et les administrateurs peuvent gérer les webhooks ».
  • Vous avez besoin d'une adresse https publique qui répond avec un statut 2xx en moins de 10 secondes.
  • Un espace de travail peut avoir jusqu'à 10 webhooks.

Ajouter un webhook

  1. Ouvrir l'onglet Webhooks

    Ouvrez le menu de l'espace de travail, choisissez AI agents & API, puis ouvrez Webhooks. Cliquez sur Nouveau webhook.

    L'onglet Webhooks avec un point de terminaison sur example.com, les événements qu'il reçoit et la date de son dernier envoi.
    Chaque webhook affiche ses événements, la date de son dernier envoi et la fin de son secret.
  2. Saisir le point de terminaison

    • URL du point de terminaison : « Une adresse HTTPS publique. » Par exemple https://example.com/clevera/webhooks.
    • Description : facultative, jusqu'à 200 caractères, par exemple « Relais Slack ».
  3. Choisir les événements

    Cochez les événements à recevoir, ou Tous les événements, y compris les nouveaux. Les événements marqués Bientôt sont acceptés mais « Aucun événement de ce type n'est encore envoyé. »

    La boîte de dialogue Nouveau webhook : URL du point de terminaison, description et événements à envoyer, avec les événements non encore envoyés marqués Bientôt.
    Les événements marqués Bientôt sont acceptés mais pas encore envoyés.
  4. Créer le webhook et enregistrer le secret

    Cliquez sur Créer un webhook. Le Secret de signature (il commence par whsec_) ne s'affiche qu'une seule fois : « Copiez-le maintenant : vous ne le verrez plus. Utilisez-le pour vérifier l'en-tête Clevera-Signature. » Enregistrez-le comme un mot de passe, puis cliquez sur Je l'ai enregistré.

  5. Envoyer un événement de test

    Ouvrez le menu ⋯ du webhook et choisissez Envoyer un événement de test. Clevera envoie un événement ping signé une seule fois (sans nouvelle tentative). « Événement de test envoyé » signifie qu'il a quitté Clevera ; vérifiez les Livraisons pour voir la réponse de votre point de terminaison.

Événements

Événement Envoyé quand
job.started Un travail lancé par un agent commence à s'exécuter.
job.needs_input Un travail attend une intervention humaine, par exemple une approbation. Inclut le lien et la date d'expiration de la requête.
job.succeeded Le travail est terminé.
job.failed Le travail a échoué. Inclut le code d'erreur.
job.canceled Le travail a été annulé, ou son approbation a été refusée ou a expiré.
approval.requested Un agent a demandé une approbation sur Requêtes de l'agent.
approval.decided Quelqu'un a approuvé ou refusé la requête, ou elle a expiré.
site.published Un site de documentation a été publié.
site.build_failed La publication d'un site de documentation a échoué.
ping Vous avez cliqué sur Envoyer un événement de test. Ne nécessite aucun abonnement.

Ces événements sont marqués comme Bientôt et ne sont pas encore envoyés : job.progress, video.ready, article.ready, research.completed, insights.weekly.

Les événements de travail concernent les tâches lancées par les agents (via un jeton API ou une application connectée), et non les vidéos lancées par les utilisateurs dans l'application.

Ce que Clevera envoie

Chaque livraison est une requête POST avec un corps JSON et les en-têtes suivants :

En-tête Valeur
Content-Type application/json
User-Agent Clevera-Webhooks/1.0
Clevera-Event Le nom de l'événement, comme job.succeeded
Clevera-Delivery L'identifiant unique de la livraison. Une nouvelle tentative répète le même identifiant, utilisez-le donc pour ignorer les doublons.
Clevera-Signature t=<unix time>,v1=<signature>

Les charges utiles contiennent des identifiants, des liens, des statuts et des nombres, jamais le contenu lui-même. Pour lire une vidéo ou un article terminé, appelez l'API avec un jeton.

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

Vérifier la signature

Vérifiez chaque livraison avant de lui faire confiance. La signature est un HMAC-SHA256, généré avec votre secret de signature, à partir de l'horodatage, d'un point et du corps de la requête brut : <t>.<body>.

  1. Lisez t et v1 depuis l'en-tête Clevera-Signature.
  2. Calculez HMAC-SHA256(secret, t + "." + rawBody) en hexadécimal.
  3. Comparez-le avec v1 en temps constant.
  4. Rejetez les livraisons dont le t a plus de 5 minutes, afin qu'une requête capturée ne puisse pas être rejouée.
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));
}

Utilisez le corps exactement tel qu'il a été reçu. Analyser et réencoder le JSON modifie les octets et la signature ne correspondra plus.

Tentatives et échecs

Une livraison est considérée comme effectuée lorsque votre point de terminaison répond avec un statut 2xx. Tout autre résultat entraîne l'échec de la tentative :

  • tout autre statut, y compris les redirections (les 3xx ne sont pas suivies) ;
  • aucune réponse dans les 10 secondes (5 secondes pour se connecter) ;
  • une adresse qui ne se résout plus sur l'internet public.

Clevera effectue 5 tentatives pour une livraison échouée, après 1 minute, 5 minutes, 30 minutes, 2 heures et 6 heures. Le corps de la réponse de votre point de terminaison n'est jamais lu.

Lorsque 15 livraisons consécutives échouent, le webhook est désactivé : « Désactivé après 15 échecs de livraison consécutifs. Corrigez le point de terminaison, puis activez-le. » Le propriétaire et les administrateurs reçoivent une notification « Webhook vers hôte désactivé » : « Ses livraisons ont continué d'échouer. Corrigez le point de terminaison, puis réactivez-le. » Les événements qui se produisent pendant qu'il est désactivé ne sont pas envoyés. Les événements de test ne sont pas comptabilisés dans ce total.

Gérer un webhook

Cliquez sur Livraisons sur un webhook pour voir son journal, ou ouvrez son menu ⋯ pour le reste :

Option Ce qu'elle fait
Modifier Change l'URL, les événements ou la description.
Livraisons Les 100 dernières livraisons avec leur statut (Livré, Échec, Envoi), les Tentatives et le code HTTP. Relivrer renvoie un événement. Les livraisons sont conservées pendant 30 jours.
Envoyer un événement de test Envoie un ping signé.
Régénérer le secret « Les livraisons sont immédiatement signées avec le nouveau secret. Mettez à jour votre point de terminaison pour le vérifier. » Il n'y a pas de chevauchement, mettez donc à jour votre point de terminaison immédiatement après.
Désactiver / Activer Met en pause et reprend les livraisons.
Supprimer « Nous cessons de lui envoyer des événements et supprimons son journal de livraison. Cette action est irréversible. »

Si l'espace de travail quitte le forfait Pro

Les webhooks restent listés et peuvent toujours être modifiés et supprimés, mais rien n'est envoyé. Les livraisons en attente d'une nouvelle tentative échouent avec plan_locked, et Envoyer un événement de test ainsi que Relivrer indiquent « Les webhooks ne sont pas inclus dans votre forfait. » La mise à niveau vers le forfait Pro relance les envois ; rien n'est supprimé.

Dépannage

Message Cause Solution
« Les webhooks ne sont pas inclus dans votre forfait. » L'espace de travail n'est pas sur un forfait Pro, Business ou Custom. Passez au forfait Pro.
« Utilisez une adresse https://. » L'URL commence par http://. Servez le point de terminaison via HTTPS.
« Utilisez un nom d'hôte, pas une adresse IP. » L'URL utilise une adresse IP. Utilisez un nom de domaine.
« Cette adresse n'est pas accessible sur l'internet public. » L'hôte se résout vers une adresse privée ou locale. Utilisez un point de terminaison public ou un relais.
« Supprimez le nom d'utilisateur et le mot de passe de l'adresse. » L'URL contient user:password@. Supprimez-les ; vérifiez plutôt la signature.
« Saisissez une adresse web valide. » L'URL n'est pas valide. Vérifiez les fautes de frappe.
« Choisissez au moins un événement. » Aucun événement coché. Cochez au moins un événement.
« Cet espace de travail a déjà 10 webhooks. » Limite de l'espace de travail atteinte. Supprimez un webhook inutilisé.
« Réactivez d'abord le webhook. » Vous avez tenté une relivraison sur un webhook désactivé. Activez-le, puis relivrez.
« Cette livraison est en cours d'envoi. » La livraison est en cours de nouvelle tentative. Attendez qu'elle se termine.
Les livraisons échouent avec un code HTTP Votre point de terminaison a répondu avec une erreur. Vérifiez les journaux de votre point de terminaison et assurez-vous qu'il renvoie 2xx rapidement ; effectuez les tâches longues après avoir répondu.
Les signatures ne correspondent jamais Le corps a été modifié avant la vérification, ou le secret est ancien. Vérifiez par rapport au corps brut ; régénérez le secret en cas de doute.