Webhooks

Apprenez à intégrer des notifications en temps réel dans votre application

Que sont les webhooks ?

Les webhooks sont des messages automatiques envoyés par des applications lorsque quelque chose se produit. Ils ont un message—ou payload—et sont envoyés à une URL unique (votre endpoint).

Au lieu de vérifier constamment notre API pour de nouvelles données (polling), les webhooks envoient les données à votre application en temps réel lorsque des événements se produisent. C'est plus efficace et fournit des notifications instantanées.

Lorsqu'un utilisateur soumet une enquête ou un formulaire sur votre site web, Ask Users peut instantanément notifier votre application via webhook, vous permettant de :

  • Synchroniser automatiquement les données avec votre CRM (Salesforce, HubSpot, etc.)
  • Envoyer des notifications à votre équipe via Slack ou email
  • Déclencher des workflows personnalisés dans votre application
  • Mettre à jour votre base de données en temps réel
  • Alimenter les données dans des plateformes d'analyse

Comment fonctionnent les webhooks

1

Événement se produit

Un utilisateur soumet une enquête ou un formulaire sur votre site web. Ask Users capture cet événement et se prépare à notifier votre application.

2

Webhook déclenché

Ask Users vérifie quels webhooks sont configurés pour cet événement. Si votre webhook est configuré pour recevoir ce type d'événement, nous préparons le payload avec toutes les données pertinentes.

3

Requête HTTP POST envoyée

Nous envoyons une requête HTTP POST à votre URL webhook avec les données de l'événement au format JSON. La requête inclut des en-têtes de sécurité (signature HMAC) pour vérifier l'authenticité.

4

Votre endpoint traite les données

Votre application reçoit le webhook, vérifie la signature et traite les données. Vous pouvez les stocker dans votre base de données, déclencher des notifications, mettre à jour des enregistrements ou effectuer toute logique personnalisée.

5

Réponse et nouvelle tentative

Votre endpoint doit répondre avec un code de statut 2xx (typiquement 200 OK) dans les 30 secondes. Si nous ne recevons pas de réponse réussie, nous réessayerons automatiquement la livraison jusqu'à 5 fois avec un backoff exponentiel :

  • Tentative 1 : Immédiate
  • Tentative 2 : 1 minute plus tard
  • Tentative 3 : 5 minutes plus tard
  • Tentative 4 : 15 minutes plus tard
  • Tentative 5 : 1 heure plus tard
  • Tentative 6 : 6 heures plus tard

Caractéristiques clés

Livraison sécurisée

Tous les webhooks sont signés avec des signatures HMAC-SHA256 pour vérifier l'authenticité

Nouvelles tentatives automatiques

Les livraisons échouées sont automatiquement réessayées jusqu'à 5 fois avec backoff exponentiel

Livraison en temps réel

Les webhooks se déclenchent immédiatement lorsque des événements se produisent, généralement en millisecondes

Déduplication des événements

Les IDs d'événements uniques empêchent le traitement en double même pendant les tentatives

Événements supportés

survey.response.created

Déclenché lorsqu'une nouvelle réponse d'enquête est soumise. Contient les données complètes de la réponse, y compris toutes les réponses, les informations du répondant et les métadonnées de l'enquête.

form.submission.created

Déclenché lorsqu'une nouvelle soumission de formulaire est créée. Inclut toutes les données des champs du formulaire, le statut de soumission et les détails de configuration du formulaire.

Démarrage rapide

1

Configurer le webhook dans le tableau de bord

1. Allez dans votre tableau de bord

2. Naviguez vers Paramètres → Webhooks

3. Cliquez sur Créer un Webhook

4. Entrez l'URL de votre endpoint et sélectionnez les types d'événements

5. Enregistrez et copiez votre clé secrète

2

Testez votre webhook

Soumettez une enquête ou un formulaire de test pour déclencher votre webhook et vérifier qu'il fonctionne correctement. Vérifiez les journaux de livraison dans votre tableau de bord pour voir la requête et la réponse.

Implémentation de référence webhook

Voici un exemple complet de la façon de créer et de vérifier un endpoint webhook dans votre application :

// Node.js/Express example
const crypto = require('crypto');

app.post('/webhooks/askusers', (req, res) => {
  const signature = req.headers['x-webhook-signature'];

  // Verify signature (see security section)
  if (!verifySignature(req.body, signature)) {
    return res.status(401).send('Invalid signature');
  }

  // Process webhook
  const { event_type, data } = req.body;

  // Return 200 OK immediately
  res.status(200).send('OK');

  // Process async
  processWebhookAsync(event_type, data);
});

Exemple de payload webhook

Voici un exemple de ce à quoi ressemble un payload webhook :

{
  "event_type": "survey.response.created",
  "event_id": "550e8400-e29b-41d4-a716-446655440000",
  "timestamp": "2025-01-15T10:30:00.000Z",
  "data": {
    "response": {
      "id": "response-uuid",
      "survey_id": "survey-uuid",
      "response_data": {
        "question-id-1": "Answer 1",
        "question-id-2": "Answer 2"
      },
      "completion_status": "completed",
      "created_at": "2025-01-15T10:30:00.000Z"
    },
    "survey": {
      "id": "survey-uuid",
      "title": "Product Feedback Survey"
    }
  }
}

Sécurité et vérification

Vérifiez toujours les signatures webhook pour vous assurer que les requêtes proviennent d'Ask Users. Chaque webhook inclut un en-tête X-Webhook-Signature avec une signature HMAC-SHA256.

Exemple de vérification (Node.js)

const crypto = require('crypto');

function verifySignature(payload, signature) {
  const secret = process.env.ASKUSERS_WEBHOOK_SECRET;
  const payloadString = JSON.stringify(payload);

  const expectedSignature = crypto
    .createHmac('sha256', secret)
    .update(payloadString)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expectedSignature)
  );
}

Exemple de vérification (Python)

import hmac
import hashlib
import os

def verify_signature(payload: str, signature: str) -> bool:
    secret = os.environ['ASKUSERS_WEBHOOK_SECRET']

    expected_signature = hmac.new(
        secret.encode('utf-8'),
        payload.encode('utf-8'),
        hashlib.sha256
    ).hexdigest()

    return hmac.compare_digest(signature, expected_signature)

Bonnes pratiques

1. Répondez rapidement

Retournez toujours 200 OK immédiatement, puis traitez le webhook de manière asynchrone. Gardez le temps de réponse sous 30 secondes pour éviter les timeouts.

2. Gérez les livraisons en double

Utilisez l'event_id pour dédupliquer les événements. Stockez les IDs d'événements traités pour éviter le traitement en double. C'est important car les tentatives peuvent causer la livraison du même événement plusieurs fois.

3. Utilisez HTTPS

Utilisez toujours des URLs HTTPS pour les endpoints webhook en production pour garantir la sécurité des données et prévenir les attaques man-in-the-middle.

4. Surveillez les journaux de livraison

Vérifiez vos journaux de livraison webhook dans le tableau de bord pour surveiller les taux de succès et identifier les problèmes. Les journaux montrent la requête/réponse complète pour le dépannage.

5. Implémentez une gestion appropriée des erreurs

Enveloppez votre logique de traitement webhook dans des blocs try-catch et enregistrez les erreurs. Retournez les codes de statut HTTP appropriés : 200-299 pour le succès, 4xx pour les erreurs client (qui ne seront pas réessayées), 5xx pour les erreurs serveur (qui déclencheront des tentatives).

Intégration sans code

Vous ne voulez pas écrire de code ? Utilisez les webhooks avec Zapier ou Make :

  1. Créez un nouveau trigger "Catch Webhook" dans Zapier ou Make
  2. Copiez l'URL du webhook fournie
  3. Créez un webhook dans Ask Users avec cette URL
  4. Testez-le en soumettant un formulaire ou une enquête
  5. Construisez votre workflow d'automatisation !

Besoin d'aide ?

Si vous avez des questions ou besoin d'assistance avec les webhooks :

  • Vérifiez les journaux de livraison dans votre tableau de bord
  • Consultez la section de dépannage ci-dessus
  • Contactez-nous à support@askusers.org