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.