Passer au contenu

Webhook

Les webhooks vous permettent d’envoyer des données de parcours à des services externes tels que des outils d’analyse, des systèmes CRM et des outils marketing. Vous pouvez :

  • Notifier les systèmes externes lorsqu’un client effectue une action dans le parcours
  • Envoyer des données client à des outils d’analyse
  • Déclencher des e-mails, SMS ou WhatsApp tiers lors d’événements spécifiques du parcours

Comment configurer l’élément Webhook

Anchor link to

Ajouter l’élément Webhook

Anchor link to

Faites glisser et déposez l’élément Webhook sur le canevas. Placez le Webhook où vous le souhaitez, en gardant à l’esprit les informations de parcours que vous allez envoyer à un service tiers.

Canevas de Customer Journey avec une étape de webhook Amplitude sélectionnée après les éléments d'entrée et d'attente

Nommer l’étape Webhook et spécifier l’URL et le type de la requête

Anchor link to

Dans le champ NOM DE L’ÉTAPE, saisissez un nom pour le webhook. Il peut être pratique de nommer les webhooks en fonction des services auxquels ils envoient des données ou du cas d’utilisation.

Ensuite, dans le champ URL, spécifiez l’URL de la requête à laquelle les données doivent être envoyées. À côté du champ URL, sélectionnez le type de requête dans le menu déroulant TYPE DE REQUÊTE : GET ou POST.

Interface de configuration de Webhook montrant le champ URL et le menu déroulant TYPE DE REQUÊTE pour sélectionner la méthode GET ou POST

Configurer les en-têtes

Anchor link to

Dans la section EN-TÊTES, définissez le type de contenu.

Par défaut, le type de contenu est application/json. Si le service auquel vous envoyez le webhook nécessite un autre type de contenu, saisissez celui qui convient dans la valeur de l’en-tête Content-Type.

Exemples de types de contenu :

  • x-www-form-urlencoded
  • text/plain
  • text/xml

Ajoutez des en-têtes supplémentaires si nécessaire en cliquant sur + AJOUTER UN EN-TÊTE. Vous pouvez supprimer n’importe quel en-tête en cliquant sur l’icône « x » à côté.

Ajoutez l’en-tête d’authentification requis par votre point de terminaison, par exemple :

  • Authorization: Bearer <token>
  • X-Api-Key: <key>
  • Authorization: Basic <base64(user:pass)>

Seul un secret statique dans un en-tête est pris en charge. Les flux d’échange de jetons OAuth2, mTLS et la signature de requêtes côté Pushwoosh ne sont pas pris en charge. Vous pouvez également restreindre le point de terminaison aux adresses IP de Pushwoosh au lieu de, ou en plus de, un secret d’en-tête. Voir Adresses IP de Pushwoosh.

Pour l’authentification HTTP Basic spécifiquement, procédez comme suit :

  1. Ouvrez un éditeur de texte brut et tapez votre nom d’utilisateur et votre mot de passe sans espaces, séparés par deux-points. Par exemple : <username>:<password>
  2. Encodez cette chaîne en Base64.
  3. Copiez la chaîne Base64 résultante (par exemple, <base64-encoded-string>).
  4. Dans les paramètres du webhook, ajoutez un en-tête Authorization avec la valeur : Basic <base64-encoded-string>. Assurez-vous qu’il y a un espace après le mot « Basic ».
Exemple d'en-tête d'autorisation pour l'authentification Basic dans les paramètres de webhook, montrant les en-têtes Content-Type et Authorization

Marquer une valeur d’en-tête comme secrète

Anchor link to

Cliquez sur l’icône en forme d’œil à côté de la valeur d’un en-tête pour la masquer. Pushwoosh cache cette valeur partout où elle quitterait autrement le service : dans l’interface utilisateur, dans les réponses de l’API et dans l’historique des versions du parcours.

Liste des en-têtes de webhook avec une valeur d'autorisation masquée et une icône en forme d'œil désactivée à côté d'une valeur Content-Type non masquée avec une icône en forme d'œil active
  • Masquage automatique. Les en-têtes dont les noms ressemblent à des informations d’identification sont masqués automatiquement, même si vous ne cliquez jamais sur l’icône en forme d’œil. Cela inclut Authorization, Proxy-Authorization, Cookie, Set-Cookie, et tout nom contenant token, secret, password, credential, auth, ou api-key/api_key/apikey (avec un trait d’union, un underscore, ou sans séparateur).
  • Modifier une valeur masquée. Cliquez dans le champ affichant •••••••• et tapez la nouvelle valeur. Il n’y a pas de bouton pour révéler la valeur stockée. L’icône en forme d’œil reste verrouillée tant que le masque est affiché. Pour supprimer l’indicateur de secret d’un en-tête, tapez d’abord une nouvelle valeur, puis cliquez sur l’icône.
  • Renommer un en-tête masqué. Renommer un en-tête dont la valeur est actuellement affichée comme le masque efface cette valeur. Saisissez-la à nouveau sous le nouveau nom. Renommer un en-tête qui contient actuellement une valeur que vous venez de taper conserve cette valeur.

Ajouter le corps de la requête JSON

Anchor link to

Dans la section DONNÉES, saisissez le corps de votre requête JSON. Assurez-vous que le corps de la requête est au format JSON correct.

Exemple :

{
"hwid": "{{device:hwid}}"
}

Utiliser les données dynamiques et les macros

Anchor link to

Le panneau CONSTRUCTEUR DE DONNÉES vous permet d’insérer des informations dynamiques (telles que des données d’utilisateur, d’appareil, de Tag ou d’événement) directement dans le corps de votre requête JSON. Avec les Données dynamiques, vous pouvez inclure des valeurs spécifiques à l’utilisateur individuel progressant dans le parcours.

Pour cela :

  1. Sélectionnez une catégorie. Vous pouvez extraire des données de trois catégories :

    • Appareil : Utilisez les données de l’appareil lorsque vous avez besoin d’informations techniques liées à l’appareil de l’utilisateur.

    • Tag : Utilisez les données de Tag lorsque vous souhaitez envoyer des informations stockées dans le profil utilisateur.

    • Événement : Utilisez les données d’événement lorsque le webhook doit envoyer des valeurs de l’événement déclencheur du parcours.

  1. Sélectionnez un paramètre (par exemple, HWID, catégorie préférée, etc.).
  2. Pushwoosh génère une macro qui ressemble à ceci :
{{tag:Language}}
  1. Copiez la macro et collez-la dans votre corps JSON dans la section DONNÉES.

Lorsque le webhook s’exécute dans un parcours en direct, Pushwoosh remplace automatiquement la macro par la valeur réelle pour cet utilisateur.

Insérer des placeholders de données dynamiques dans le corps de la requête webhook

Saisir manuellement des placeholders supplémentaires

Anchor link to

Un placeholder est une macro que vous tapez à la main au lieu de la générer à partir d’une catégorie du CONSTRUCTEUR DE DONNÉES. Le panneau CONSTRUCTEUR DE DONNÉES ne couvre que les données d’Appareil, de Tag et d’Événement. Tapez ces placeholders directement dans les sections URL, EN-TÊTES ou DONNÉES. Ils n’apparaissent pas dans le panneau :

PlaceholderValeur
{{application_code}}Le code d’application de l’application à laquelle appartient le voyageur.
{{traveler:id}}L’ID que Pushwoosh assigne à ce voyageur pour cette exécution de parcours.
{{journey:uuid}}L’UUID de ce parcours.
{{journey:name}}Le nom de ce parcours.
{{point:uuid}}L’UUID de cette étape Webhook.
{{point:name}}Le NOM DE L’ÉTAPE de cette étape Webhook.
{{event:name}}Le nom de l’événement qui a déclenché l’entrée de ce voyageur dans le parcours.
{{device:platform}}La plateforme de l’appareil, par exemple Android ou iOS.
{{device:push_subscribed}}Si le voyageur est abonné aux notifications push — true ou false.
{{now}}La date et l’heure actuelles, ISO 8601, UTC.
{{now:unix_ms}}L’heure actuelle en millisecondes Unix.
{{tags:all}}Chaque valeur de Tag pour l’appareil du voyageur, sous forme d’un seul objet JSON. Utilisez-le sans guillemets, par exemple "user_properties": {{tags:all}}. Le mettre entre guillemets transforme l’objet en une chaîne de caractères échappée.

Conserver le type d’un placeholder dans le corps JSON

Anchor link to

Un placeholder entre guillemets devient toujours une chaîne JSON, quel que soit le type réel de la valeur. Le même placeholder seul, sans guillemets autour, conserve le type propre de la valeur : un nombre reste un nombre, true/false reste un booléen, et une liste devient un tableau JSON. Un placeholder sans guillemets doit être la valeur entière du champ — "age": {{tag:Age}} fonctionne, mais "note": prefix{{tag:Age}}suffix ne fonctionne pas, car tout ce qui est en dehors des guillemets est écrit exactement tel que tapé et les caractères supplémentaires cassent le JSON.

{
"age": {{tag:Age}},
"age_as_text": "{{tag:Age}}"
}

Ici, age envoie la valeur numérique du Tag (34), tandis que age_as_text envoie la chaîne "34". Utilisez celui que le champ du côté récepteur attend. Si le Tag n’a pas de valeur, un placeholder sans guillemets se résout toujours en une chaîne vide, pas en un nombre ou false. Voir la note sous Ajouter le corps de la requête JSON.

Mapper les données de réponse du webhook à des variables

Anchor link to

En plus d’envoyer des données, l’étape Webhook peut conserver les valeurs de la réponse que votre service renvoie. Vous donnez un nom à chaque valeur (Attribut). Les étapes ultérieures peuvent utiliser ce nom de la même manière qu’elles utilisent d’autres valeurs de réponse de webhook. Par exemple, définissez un Tag avec Mettre à jour le profil utilisateur, ou programmez un Délai à partir d’une date renvoyée par le service. Pour un exemple de parcours complet, voir Utilisation des données de réponse de webhook dans votre parcours.

Exemple : le CRM renvoie un ID utilisateur. Vous le stockez comme Attribut crm_user_id. Ensuite, Mettre à jour le profil utilisateur l’écrit dans un Tag.

Avant de mapper quoi que ce soit, obtenez un exemple de réponse du service. Demandez à votre développeur, ou ouvrez un appel réussi dans le Journal des appels après un test et regardez le corps de la réponse. Vous avez besoin des noms de champs de cette réponse pour construire le Chemin.

Dans la section MAPPAGE DE LA RÉPONSE, cliquez sur + AJOUTER UN MAPPAGE et remplissez deux champs pour chaque valeur que vous souhaitez capturer :

  • Chemin : l’emplacement de la valeur à l’intérieur du corps JSON de la réponse, avec des points entre les niveaux
  • Attribut : le nom que vous utiliserez plus tard dans le parcours
Section de mappage de réponse avec les champs Chemin et Attribut et le bouton Ajouter un mappage dans les paramètres de webhook

Par exemple, si votre CRM répond avec :

{
"data": {
"user": {
"id": "789xyz"
}
}
}
  1. Définissez le Chemin sur data.user.id.
  2. Définissez l’Attribut sur crm_user_id.

Après qu’un utilisateur a passé cette étape, les éléments ultérieurs peuvent choisir l’Attribut crm_user_id de la même manière qu’ils choisissent d’autres valeurs de réponse de webhook.

Division par condition ne peut pas les utiliser directement. Les valeurs de webhook mappées n’ont pas de type. Enregistrez d’abord la valeur en tant que Tag, puis branchez sur ce Tag. Voir Comparer une valeur de webhook dans la Division par condition.

Pour un seul champ, le Chemin et les valeurs fonctionnent comme ceci :

Mapper chaque élément d’un tableau

Anchor link to

Parfois, une réponse de webhook n’a pas qu’une seule valeur. Elle a une liste, comme chaque produit d’une commande, chaque article d’un panier, ou chaque résultat d’une recherche. Le mappage de réponse capture normalement une valeur par champ, donc sans cela, vous n’obtiendriez qu’une seule valeur mappée de cette liste, et le reste serait perdu.

Mettez * dans le champ Chemin où se trouve la liste. Pushwoosh récupère alors une valeur de chaque élément de la liste, pas seulement d’une position. Par exemple, si la liste s’appelle items et que chaque élément a un item_name, définissez le Chemin sur items.*.item_name.

Dans MAPPAGE DE LA RÉPONSE, cliquez sur + AJOUTER UN MAPPAGE et remplissez les deux champs comme d’habitude, avec * marquant la liste :

  • Chemin : l’emplacement de la valeur à l’intérieur de la réponse, avec * là où se trouve la liste. Exemple : items.*.item_name.
  • Attribut : le nom que vous utiliserez plus tard. Ce que vous écrivez ici décide de la manière dont vous récupérez les résultats :
    • Incluez {n} dans le nom, par exemple item_{n}, pour obtenir chaque élément comme sa propre valeur, numérotée à partir de 1 : item_1, item_2, item_3, et ainsi de suite. {n} peut se trouver n’importe où dans le nom, par exemple item_{n}_sku.
    • Laissez {n} de côté, par exemple item_names, pour joindre chaque élément en une seule valeur, séparée par des virgules : Sofa, Lamp, Rug.
Ligne de mappage de réponse avec le Chemin défini sur items.*.item_name et l'Attribut défini sur item_{n}

Les positions de la liste dans le chemin commencent à 0 (items.0.item_name est le premier élément). Les noms d’attributs construits avec {n} commencent à 1 (item_1 est ce premier élément). Ce sont deux numérotations différentes.

Si vous n’avez besoin que d’un seul élément de la liste, utilisez un nombre dans le Chemin au lieu de *, par exemple items.0.item_name.

Si votre CRM répond avec :

{
"items": [
{ "item_name": "Sofa" },
{ "item_name": "Lamp" },
{ "item_name": "Rug" }
]
}
  • Définissez le Chemin sur items.*.item_name et l’Attribut sur item_{n} pour obtenir trois valeurs distinctes : item_1 est Sofa, item_2 est Lamp, item_3 est Rug.
  • Définissez l’Attribut sur item_names à la place pour obtenir une seule valeur : item_names est Sofa, Lamp, Rug.

Vous pouvez utiliser les valeurs mappées plus tard dans le parcours comme n’importe quel autre attribut de réponse de webhook :

Division par condition ne peut pas les utiliser directement. Les valeurs de webhook mappées n’ont pas de type. Enregistrez d’abord la valeur en tant que Tag, puis branchez sur ce Tag. Voir Comparer une valeur de webhook dans la Division par condition.

Délai d’attente, nouvelles tentatives et requêtes échouées

Anchor link to

Pushwoosh attend jusqu’à 10 secondes pour une réponse. L’ensemble de l’étape Webhook, y compris l’envoi de la requête et le traitement de la réponse, est plafonné à 30 secondes.

Nouvelles tentatives

Anchor link to

En cas de réponse 500, 502, 503 ou 504, ou d’une erreur réseau telle qu’un échec de connexion, Pushwoosh réessaie la requête une fois avant d’abandonner. Une requête qui expire n’est pas réessayée — voir Que se passe-t-il lorsqu’une requête échoue ci-dessous. Toute autre réponse non-2xx n’est pas non plus réessayée.

Limites de débit

Anchor link to

Pushwoosh limite le nombre de requêtes webhook qu’un compte peut envoyer par seconde. La limite est dimensionnée bien au-dessus des pics de trafic réels, de sorte que les parcours normaux ne sont pas affectés. Une rafale qui la dépasse attend brièvement de la place avant d’échouer.

Période de refroidissement du point de terminaison

Anchor link to

Si un point de terminaison échoue plusieurs fois de suite, Pushwoosh cesse de lui envoyer des requêtes pendant un certain temps au lieu de réessayer un point de terminaison défectueux sur chaque voyageur, en commençant par 30 secondes et en doublant lors d’échecs ultérieurs jusqu’à 5 minutes. Une seule requête réussie efface cela et reprend la livraison normale.

Que se passe-t-il lorsqu’une requête échoue

Anchor link to

L’élément Webhook n’a pas de branche distincte pour les requêtes échouées. L’un des événements suivants fait sortir le voyageur du parcours à cette étape :

CauseCe qui le déclenche
Adresse de point de terminaison bloquéeL’URL est privée, interne, de bouclage ou locale de lien, y compris les points de terminaison de métadonnées cloud
Limite de débitLa limite de requêtes webhook par seconde du compte est dépassée et aucune place ne se libère pendant la brève attente
Période de refroidissement du point de terminaisonLe point de terminaison a échoué plusieurs fois de suite et Pushwoosh le saute temporairement
Délai d’attenteAucune réponse dans les 10 secondes, ou l’étape dépasse son plafond de 30 secondes
Erreur réseauLa requête n’a pas pu atteindre le point de terminaison du tout
Réponse non-2xxLe point de terminaison a renvoyé un statut d’erreur qui n’est pas réessayé, ou a été réessayé une fois et a de nouveau échoué

Voir Erreur de requête.

Si vous ne pouvez pas vous permettre de perdre des voyageurs ici, faites en sorte que votre point de terminaison renvoie toujours une réponse 2xx et mettez tout état d’échec dans le corps de la réponse à la place, par exemple comme une valeur que votre Mappage de réponse peut récupérer.

Cela s’applique à chaque étape Webhook, y compris celles créées précédemment. Une adresse de point de terminaison qui correspond maintenant à la règle d’adresse bloquée ci-dessus commencera à échouer de la même manière.

Contrairement à une requête échouée, une réponse qui arrive mais ne se mappe pas correctement, comme un JSON invalide, un Chemin non résolu, ou un corps de plus de 64 Ko, ne fait pas sortir le voyageur. Voir la note sous Mappage de réponse ci-dessus.

Tester le Webhook

Anchor link to

Cliquez sur Tester le webhook pour vérifier que votre configuration de webhook est correcte et que la requête est envoyée avec succès.

Si un en-tête affiche toujours le masque stocké, Pushwoosh remplit la valeur réelle enregistrée pour la requête de test. La valeur n’apparaît jamais dans votre navigateur.

Cette substitution ne fonctionne que pour un en-tête déjà enregistré sur cette étape exacte. Une étape que vous n’avez pas encore enregistrée, ou une que vous venez de copier, n’a pas de valeur enregistrée derrière le masque, donc Pushwoosh envoie la requête de test sans cet en-tête.

Après un test réussi (ou un appel en direct), ouvrez le Journal des appels, développez la ligne et comparez le corps de la réponse avec chaque Chemin. Le champ doit exister exactement comme dans le Chemin. Si la requête réussit mais qu’une étape ultérieure n’a pas de valeur, le Chemin ne correspond généralement pas à la réponse. L’étape Webhook n’affichera pas d’erreur pour cela.

Enregistrer votre configuration

Anchor link to

Cliquez sur Enregistrer pour sauvegarder votre configuration de webhook.

Journal des appels

Anchor link to

Ouvrez l’onglet Journal des appels dans le tiroir du point pour voir ce que Pushwoosh a réellement envoyé pour cette étape : heure, utilisateur, résultat et durée, remontant à 30 jours.

Filtrez par résultat (Succès, Erreur HTTP, Pas de réponse) ou recherchez par l’ID utilisateur ou le HWID exact. Cliquez sur une ligne pour la développer et voir la requête (méthode, URL et corps) et, selon le résultat, soit la réponse (statut et corps), soit le texte de l’erreur. La Durée couvre l’ensemble de l’étape, y compris le temps passé sur une nouvelle tentative automatique.