# Webhook

L'intégration d'un Webhook vous permet de déclencher des actions à distances, hébergées dans vos systèmes, depuis vos scénarios d'automatisation.

## Intégration d'un Webhook <a href="#integration-de-postmark" id="integration-de-postmark"></a>

Pour intégrer un Webhook à Captain Metrics il vous faut :

1. Ajouter une intégration Webhook
2. Renseigner l'URL de votre système qui recevra le webhook

![](https://3988754291-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M3qLgc05uobPjWj6gZE%2F-MTuXUUxtphSG05FFrtN%2F-MTugFo5BP1j5bRmOcUk%2Fwebhook-add.png?alt=media\&token=a8ab0937-70b7-45ff-8b93-ac6cce48582e)

![](https://3988754291-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M3qLgc05uobPjWj6gZE%2F-MTuXUUxtphSG05FFrtN%2F-MTugLo-jDwJa2_dr0Ne%2Fwebhook-endpoint.png?alt=media\&token=ab14d500-8b90-44cb-bb4f-d568cfc3dd93)

![](https://3988754291-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M3qLgc05uobPjWj6gZE%2F-MTuXUUxtphSG05FFrtN%2F-MTugQPZbKHutI8R8JIf%2Fwebhook-connected.png?alt=media\&token=08d73be9-48c8-4a4e-a08e-144316cbd0b5)

## Automatiser l'envoi d'un webhook

Pour envoyer un webhook il vous faut :

1. Connecter un Webhook à votre projet Captain Metrics
2. Créer un scénario d'automatisation dans Captain Metrics
3. Ajouter une action "Envoyer un Webhook" et sélectionner le Webhook que vous avez connecté

![](https://3988754291-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M3qLgc05uobPjWj6gZE%2F-MTuXUUxtphSG05FFrtN%2F-MTugXYTvZqnLlPQOowJ%2Fwebhook-action.png?alt=media\&token=61de66f1-a6f8-4b41-ab80-b855ecabb8f7)

![Sélectionnez le webhook](https://3988754291-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M3qLgc05uobPjWj6gZE%2F-MTuXUUxtphSG05FFrtN%2F-MTugjr9ghs4qm6pE-t_%2Fwebhook-selection.png?alt=media\&token=31b8bb7e-b044-474d-9c0b-3fe4c3dc66aa)

![Vous pouvez désormais envoyer un webhook dans votre scenario.](https://3988754291-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M3qLgc05uobPjWj6gZE%2F-MTuXUUxtphSG05FFrtN%2F-MTugofbdTHFkUh3k9Ts%2Fwebhook-scenario.png?alt=media\&token=a3915a4a-5aae-4f69-9ee5-e3ed9e864d51)

## Spécification du Webhook

Le webhook est transmis sur l'URL configurée lors de sa création via une requête `POST` au format `JSON`.

### Entêtes de la requête

| Header                        | Description                                                                                                                                                                                      |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `X-Captain-Metrics-Signature` | Signature HMAC 256 du `Body` de la requête. Vous pouvez vérifier l'authenticité de la requête en recalculant la signature de votre côté, grâce à la clé secrète de votre projet Captain Metrics. |
| X-Captain-Metrics-Project     | ID du project Captain Metrics à l'origine du webhook.                                                                                                                                            |

### Contenu JSON de la requête

| Key             | Type   | Description                                                      |
| --------------- | ------ | ---------------------------------------------------------------- |
| `projectId`     | string | ID du project Captain Metrics à l'origine de la requête.         |
| `integrationId` | string | ID de l'intégration de type "webhook" configurée dans le projet. |
| `endpoint`      | string | URL de destination du webhook.                                   |
| `createdAt`     | date   | Date de création du webhook.                                     |
| `events`        | array  | Liste d'événements avec leur données respectives.                |
| `events.kind`   | string | Type d'événement. (i.e: `automation`...)                         |
| `events.data`   | object | Données spécifiques à l'événement.                               |

#### Exemple d'un webhook "automation"

Un webhook déclenché via un scénario d'automatisation, peut contenir autant d'`events` qu'il y a de `users` impliqués, par lot de 50 :

```javascript
{
    "projectId": "demo_demo",
    "integrationId": "webhook",
    "endpoint": "https://webhook-endpoint.your-server.com",
    "createdAt": "2021-02-19T14:06:08.066Z",
    "events": [
        {
            "kind": "automation",
            "data": {
                // user object concerned by the automation
                "user": {
                    "id": "xxx",
                    "externalId": "your-user-id",
                    "isAuthenticated": true,
                    "...": "..."
                },
                // eventual event which triggered the automation scenario
                "triggerEvent": {
                    "id": "xxxx",
                    "kind": "abandonedCart",
                    "createdAt": "2021-02-19T14:06:08.066Z",
                    "...": "..."
                },
                // metadata about the automation scenario execution
                "timelineAutomation": {
                    "automationId": "xxx",
                    "nodeId": "xxx",
                    "executionAt": "2021-02-19T14:06:08.066Z",
                    "triggerEventId": "xxx",
                    "experimentIds": ["a", "b"]
                }
            }
        },
        ...
    ]
}
```

### Réponse attendue

Le webhook s'attend à recevoir une réponse `code 200`.&#x20;

En cas d'erreur (code différent de 200) le webhook retournera dans la file d'attente pour un nouvel essai futur.

Le délais entre chaque tentative sera doublé en cas d'erreur. Il commence à 1sec pour finir à 1h.&#x20;

{% hint style="warning" %}
Au bout de 100 tentatives manquées, le webhook sera jeté. Cela correspond à environ 3,5 jours d'essais.
{% endhint %}
