# Webhooks

Recevez les événements de conversations et d'appels d'un client sur votre propre point de terminaison, signés et vérifiables

> Full REST + WebSocket API reference: https://api.happ.tools/reference

Recevez en temps réel les événements de conversations et d'appels sur votre propre serveur — Happ envoie du JSON en POST quand quelque chose se produit, pour alimenter des alertes Slack, des recherches CRM, de l'analytique ou des workflows personnalisés.

<WebhooksPageDemo />

## Connexion [#connect]

1. Ouvrez le catalogue **Intégrations** et cliquez sur **Connecter** sur **Webhook de conversation** ou **Webhook d'appel**.
2. Dans la fenêtre, saisissez votre **URL Webhook** — le point de terminaison HTTPS qui reçoit les événements.
3. Définissez éventuellement un **Secret du webhook** pour vérifier les requêtes.
4. Cliquez sur **Connecter**.

Il n'y a pas de page de webhooks séparée, pas d'options d'abonnement aux événements et pas de journal de livraisons dans l'application — la fenêtre se limite à l'URL + un secret facultatif.

## Événements envoyés [#events-sent]

| Webhook      | Se déclenche                                                                                                                    |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------- |
| Conversation | À chaque message dans une conversation suivie — du client, de l'agent et d'un opérateur                                         |
| Appel        | À la fin d'un appel — une seule livraison après l'appel avec la durée, les métadonnées et l'URL de l'enregistrement s'il existe |

## Événement d'appel [#call-event]

Le webhook d'appel envoie un objet JSON plat par appel terminé (pas de `result_json` imbriqué). Champs principaux :

| Champ                       | Signification                                                                                                                                                                                 |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `event_type`                | Toujours `post_call`                                                                                                                                                                          |
| `call_uuid`                 | ID unique de l'appel — dédupliquez dessus, le même appel peut arriver plusieurs fois                                                                                                          |
| `externalNumber`            | Numéro du client, le même que dans l'historique des appels ; `null` s'il n'y en avait pas (p. ex. appel web)                                                                                  |
| `direction`                 | `inbound`, `outbound` ou `null`                                                                                                                                                               |
| `summary`, `callSuccessful` | Résumé et verdict de l'IA : `success`, `failure` ou `unknown`                                                                                                                                 |
| `dynamicVariables`          | Les variables avec lesquelles l'appel a été lancé, renvoyées — passez votre ID de contact CRM ou de commande au lancement et lisez-le ici. Les variables système VA (`system__*`) sont omises |

Schéma complet et exemple : [api.happ.tools/reference](https://api.happ.tools/reference).

## Vérifier les requêtes [#verifying-requests]

Définissez un secret de webhook et chaque livraison porte deux en-têtes :

| En-tête         | Valeur                                                                              |
| --------------- | ----------------------------------------------------------------------------------- |
| `Authorization` | `Basic <secret>` — votre secret tel quel, pas le base64 de `user:password`          |
| `X-Signature`   | `sha256=<hex>` — HMAC-SHA256 du corps brut de la requête, calculé avec votre secret |

Vérifiez en recalculant le HMAC-SHA256 sur le corps brut (avant de parser le JSON) et en comparant en temps constant. Si votre plateforme ne donne pas accès au corps brut, vérifiez plutôt l'en-tête `Authorization`. Sans secret défini, aucun des deux en-têtes n'est envoyé. Même mécanisme que pour les [outils](/docs/agents/tools) de l'agent.

Utilisez uniquement HTTPS, répondez `200` rapidement (traitez en asynchrone) et gérez les livraisons en double de manière idempotente.

## Webhooks ou webhooks d'outils [#webhooks-vs-tool-webhooks]

|             | Webhooks d'intégration               | Webhooks d'outils                       |
| ----------- | ------------------------------------ | --------------------------------------- |
| Déclencheur | Automatique sur événement            | Appelé par l'IA pendant la conversation |
| Sens        | Happ → votre serveur                 | Happ → votre serveur → réponse → IA     |
| Réponse     | Accusé HTTP 200                      | JSON utilisé par l'agent                |
| Cas d'usage | Supervision, journalisation, alertes | Recherches dynamiques, actions          |

Pour les webhooks que l'IA appelle pendant la conversation, voir [Outils](/docs/agents/tools).

**API :** [api.happ.tools/reference](https://api.happ.tools/reference)

## Pour aller plus loin [#next]

* [Outils](/docs/agents/tools) — webhooks appelés par l'IA
* [Notifications](/docs/integrations/notifications) — alertes intégrées
* [Intégrations](/docs/integrations) — le catalogue complet
