Webhooks

Recevez des notifications HTTP POST en temps réel lorsque des événements se produisent.

Aperçu

Les webhooks vous permettent de recevoir des notifications HTTP POST en temps réel lorsque des événements se produisent dans InboundFlow — un appel se termine, un rendez-vous est réservé, un prospect est créé ou un appel est transféré. Utilisez les webhooks pour synchroniser les données avec votre CRM, envoyer des notifications Slack, mettre à jour des feuilles de calcul ou déclencher tout workflow personnalisé.

Intégrations Supportées

Zapier
Connect to 5,000+ apps
🔄
Make (Integromat)
Advanced workflow automation
🔧
n8n
Self-hosted automation
🌐
Webhook Personnalisé
Toute URL acceptant HTTP POST

Configuration

1

Accédez à votre tableau de bord InboundFlow → Paramètres → Intégrations

2

Cliquez sur « Connecter » sur Zapier, Make ou Webhook Personnalisé

3

Collez votre URL de webhook (doit être HTTPS)

4

Sélectionnez les événements à recevoir

5

Cliquez sur « Tester le Webhook » pour vérifier

6

Enregistrer

Types d'Événements

ÉvénementDéclencheurDescription
call.completedChaque appel terminéSe déclenche après la fin d'un appel avec résumé, transcription et infos appelant
call.transferredAppel transféré vers un humainSe déclenche lorsque l'IA transfère un appel vers une destination configurée
appointment.bookedRéservation calendrier effectuéeSe déclenche lorsque l'IA réserve un rendez-vous pendant un appel
lead.createdNouveau prospect capturéSe déclenche lorsqu'un nouveau prospect est créé à partir d'un appel

Format de Livraison

Toutes les livraisons de webhook sont des requêtes HTTP POST avec un corps JSON :

En-têtes

En-têtes HTTP
Content-Type: application/json
X-InboundFlow-Event: call.completed
X-InboundFlow-Delivery-Id: unique-uuid
X-InboundFlow-Timestamp: 1709064000
User-Agent: InboundFlow-Webhook/1.0

Si vous avez configuré un secret de signature :

En-tête de Signature
X-InboundFlow-Signature: sha256=abc123...

Charges Utiles

call.completed

JSON
{
  "event": "call.completed",
  "timestamp": "2026-02-24T21:00:00.000Z",
  "organization_id": "uuid",
  "delivery_id": "unique-uuid",
  "data": {
    "call_id": "uuid",
    "caller_phone": "+1234567890",
    "caller_name": "Dave",
    "caller_email": "dave@example.com",
    "duration_seconds": 55,
    "summary": "Called about auto repair appointment. Customer wants to bring in a 2019 Honda Civic for brake inspection.",
    "intent": "book appointment",
    "urgency": "medium",
    "recording_url": "https://...",
    "started_at": "2026-02-24T20:59:00Z",
    "ended_at": "2026-02-24T21:00:00Z"
  }
}

call.transferred

JSON
{
  "event": "call.transferred",
  "timestamp": "2026-02-24T21:00:00.000Z",
  "organization_id": "uuid",
  "delivery_id": "unique-uuid",
  "data": {
    "call_id": "uuid",
    "caller_phone": "+1234567890",
    "caller_name": "Dave",
    "duration_seconds": 47,
    "summary": "Caller requested to speak with manager about pricing.",
    "transferred_to_label": "Manager",
    "transferred_to_number": "+18154264329",
    "urgency": "medium",
    "reason": "Wants to discuss pricing for full body repair"
  }
}

appointment.booked

JSON
{
  "event": "appointment.booked",
  "timestamp": "2026-02-24T21:00:00.000Z",
  "organization_id": "uuid",
  "delivery_id": "unique-uuid",
  "data": {
    "call_id": "uuid",
    "caller_phone": "+1234567890",
    "caller_name": "Sarah",
    "appointment_date": "2026-02-25",
    "appointment_time_start": "2026-02-25T11:00:00Z",
    "appointment_time_end": "2026-02-25T12:00:00Z",
    "service_type": "Auto Repair Appointment",
    "calendar_event_id": "google_event_id",
    "calendar_event_link": "https://calendar.google.com/..."
  }
}

lead.created

JSON
{
  "event": "lead.created",
  "timestamp": "2026-02-24T21:00:00.000Z",
  "organization_id": "uuid",
  "delivery_id": "unique-uuid",
  "data": {
    "call_id": "uuid",
    "caller_phone": "+1234567890",
    "caller_name": "Dave",
    "caller_email": "dave@example.com",
    "intent": "pricing inquiry",
    "urgency": "high",
    "interest": "auto body work",
    "call_summary": "Called about getting a quote for front bumper repair on a 2019 Honda Civic."
  }
}

Vérification des Signatures

Si vous définissez un secret de signature lors de la configuration de votre webhook, chaque livraison inclut une signature HMAC-SHA256 pour vérification :

verify-webhook.js
const crypto = require('crypto');

function verifyWebhook(body, timestamp, signature, secret) {
  const signatureInput = `${timestamp}.${JSON.stringify(body)}`;
  const expectedSignature = 'sha256=' + 
    crypto.createHmac('sha256', secret)
      .update(signatureInput)
      .digest('hex');
  
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expectedSignature)
  );
}

// In your webhook handler:
const isValid = verifyWebhook(
  req.body,
  req.headers['x-inboundflow-timestamp'],
  req.headers['x-inboundflow-signature'],
  'your_signing_secret'
);

Reprises & Fiabilité

  • Délai d'attente : Les webhooks ont un délai de livraison de 10 secondes. Répondez rapidement avec un statut 2xx.
  • Suivi des échecs : Les livraisons échouées sont suivies. Après 10 échecs consécutifs, le webhook est automatiquement désactivé.
  • Réactiver : Si votre webhook est auto-désactivé, allez dans Paramètres → Intégrations pour vous reconnecter.
  • Idempotence : Utilisez le champ delivery_id pour dédupliquer les événements si votre gestionnaire est appelé deux fois.

Bonnes Pratiques

Répondre rapidement
Retourner 200 immédiatement, puis traiter de manière asynchrone
🔒
Utiliser HTTPS
Les URLs de webhook doivent utiliser HTTPS
Vérifier les signatures
Si vous traitez des données sensibles, activez les secrets de signature
🔁
Gérer les doublons
Utilisez delivery_id pour l'idempotence
📊
Surveiller les échecs
Vérifiez le statut de votre intégration dans le tableau de bord