Webhooks

Les webhooks ne sont disponibles que dans le forfait Business et pendant la période d'essai.

Un site web peut avoir jusqu'Ă  cinq webhooks. Une fois configurĂ©, Hyvor Talk enverra une requĂȘte HTTP POST Ă  cette URL lors de certains Ă©vĂ©nements (ex. : lorsqu'un nouveau commentaire est créé). Vous pouvez agir sur ces Ă©vĂ©nements (ex. : envoyer un e-mail Ă  l'auteur du commentaire). Veillez Ă  valider les requĂȘtes de webhook pour vous assurer qu'elles proviennent bien de Hyvor Talk.

Configurer les webhooks

Vous pouvez configurer les webhooks dans Console → ParamĂštres → Webhooks → Ajouter un webhook. Vous pouvez sĂ©lectionner n'importe quel Ă©vĂ©nement, et chaque webhook peut s'abonner Ă  un nombre quelconque d'Ă©vĂ©nements.

  • L'URL doit ĂȘtre accessible publiquement
  • Utilisez https (fortement recommandĂ©)
Ajouter un webhook

Réponse

Pour chaque requĂȘte de webhook, nous attendons de votre serveur un code de rĂ©ponse 200 OK. Si la requĂȘte Ă©choue (nous recevons un autre code de rĂ©ponse), nous rĂ©essaierons deux fois de plus. Ensuite, nous marquerons la requĂȘte de webhook comme Ă©chouĂ©e et cesserons d'envoyer d'autres requĂȘtes pour cet Ă©vĂ©nement.

RequĂȘte HTTP POST

Le corps de la requĂȘte est une chaĂźne encodĂ©e en JSON avec la structure de donnĂ©es suivante.

{
	"event": "comment.create",
	"data": {} // un objet
}

ÉvĂ©nements et donnĂ©es

Le champ event et le champ data diffÚrent selon le type d'événement. Voici la liste de tous les types d'événements et de leurs données.

ÉvĂ©nement
Déclenché
Données
Commentaire
comment.create
Un nouveau commentaire est créé
{ comment: Comment }
comment.update
Un commentaire est mis Ă  jour
{ comment: Comment }
comment.delete
Un commentaire est supprimé
{ comment: Comment }
Réaction
reaction.created
Une nouvelle réaction est publiée
{ reaction: Reaction }
reaction.updated
Une réaction est mise à jour
{ reaction: Reaction }
reaction.deleted
Une réaction est supprimée
{ reaction: Reaction }
Note
rating.created
Une nouvelle note est publiée
{ rating: Rating }
rating.updated
Une note est mise Ă  jour
{ rating: Rating }
rating.deleted
Une note est supprimée
{ rating: Rating }
Signalement
flag.created
Un nouveau signalement est effectué
{ comment: Comment, flag: Flag }
flag.deleted
Un signalement est supprimé
{ comment: Comment, flag: Flag }
Vote
vote.created
Un nouveau vote est publié
{ comment: Comment, vote: Vote }
vote.updated
Un vote est mis Ă  jour
{ comment: Comment, vote: Vote }
vote.deleted
Un vote est supprimé
{ comment: Comment, vote: Vote }
Utilisateur
user.created
Un nouvel utilisateur est créé
{ user: User }
user.updated
Un utilisateur est mis Ă  jour
{ user: User }
user.deleted
Un utilisateur est supprimé
{ user: User }
Média
media.created
Un nouveau média est téléversé
{ media: Media }
media.deleted
Un média est supprimé
{ media: Media }
Abonnement
memberships.subscription.created
Un nouvel abonnement est créé
{ subscription: MembershipSubscription }
memberships.subscription.updated
Un abonnement est mis Ă  jour
{ subscription: MembershipSubscription }
memberships.subscription.deleted
Un abonnement est supprimé
{ subscription: MembershipSubscription }

Valider les webhooks

Dans les paramĂštres des webhooks, veillez Ă  gĂ©nĂ©rer une clĂ© secrĂšte. Elle sera utilisĂ©e pour signer les requĂȘtes de webhook. Vous pourrez ensuite vĂ©rifier la signature de la requĂȘte pour vous assurer qu'elle provient bien de Hyvor Talk. La signature est un hash HMAC-SHA256 du corps JSON de la requĂȘte. La clĂ© secrĂšte est utilisĂ©e comme clĂ©. Pour valider, vous devez gĂ©nĂ©rer une signature avec le mĂȘme algorithme, le corps de requĂȘte fourni et la clĂ© secrĂšte. Ensuite, comparez la signature gĂ©nĂ©rĂ©e avec la signature de l'en-tĂȘte X-Signature. Si elles correspondent, la requĂȘte est valide.

Validation d'un webhook

Voici un exemple en PHP de validation de la signature.

// rĂ©cupĂ©rer le corps complet de la requĂȘte sous forme de chaĂźne
$requestBody = file_get_contents('php://input');

// générer la signature à comparer
$signature = hash_hmac('sha256', $requestBody, $secretKey);

// signature fournie dans l'en-tĂȘte X-Signature
$givenSignature = $_SERVER['HTTP_X_SIGNATURE'];

if (hash_equals($signature, $givenSignature)) {
    // valide
} else {
    // invalide
}

IP de confiance (liste blanche d'IP)

Les requĂȘtes de webhook transitent par deux adresses IP :

  • 78.47.223.80
  • 2a01:4f8:1c17:b1d7::

Pour plus de sécurité, vous pouvez mettre ces adresses sur liste blanche pour le trafic HTTPS entrant (port 443) vers votre point de terminaison de webhook. Cependant, la liste blanche d'IP est facultative et ne doit pas remplacer la vérification de la signature.