Qu'est-ce qu'un webhook ?
Un webhook permet de remonter des informations dans votre propre CRM de façon automatique.
Un webhook est une URL appelée automatiquement par SPREAD lors de certaines actions : acceptation et refus de consentements, distribution d’un code remis ou mise à jour de la cagnotte d'un profil.
Au déclenchement d'un événement webhook, cette URL est contactée par SPREAD et un payload JSON est attaché à la requête avec des informations utiles pour votre traitement.
Configurer un webhook
Configuration de l'URL de callback
L'URL de callback de votre webhook est l'URL cible que SPREAD va appeler et à laquelle il enverra les données liées au webhook déclenché (en fonction des événements configurés).
Configuration des événements déclencheurs
Vous avez la possibilité de vous abonner à un ou plusieurs événements pour l'URL passée en paramètre à l'étape précédente.
Pour cela, il suffit de cocher les événements qui vous intéressent. Cette configuration est flexible : vous pouvez avoir une seule URL qui gère tous les événements chez vous, ou une URL par événement.
Voici la liste des événements auxquels vous pouvez vous abonner :
- Mise à jour de cagnotte
ajout ou retrait de points
- Envoi d'un coupon
est déclenché lorsqu'un coupon est donné à un participant
- Consentement accepté
est déclenché quand un profil accepte un consentement.
- Consentement refusé
est déclenché quand un profil refuse un consentement.
- Consentement à confirmer
est déclenché quand un profil accepte un consentement, mais que ce consentement doit être validé via la mécanique de double opt-in.
- Mise à jour de consentement
est déclenché quand un profil met à jour un consentement (le statut du consentement ne change pas, mais les canaux ont été modifiés)
- Participation complète
est déclenché quand un profil est allé au bout d'un module
Gestion des données sur l'URL de callback
Lorsqu'un événement de webhook est déclenché, SPREAD contacte l'URL configurée pour un événement donné et va envoyer les données correspondantes dans un payload JSON.
Exemple de code PHP pour un événement d'acceptation de consentement
$requestBody = file_get_contents('php://input');
$data = json_decode($requestBody);
var_dump($data);
Ce code afficherait les données suivantes (Cliquez sur la flèche de gauche pour voir)
object(stdClass)#6 (2) {
["datas"]=>
object(stdClass)#1 (7) {
["customer_id"]=>
string(8) "1234"
["track_id"]=>
int(5418385783927790223)
["gdpr_consent_tech_name"]=>
string(10) "consentsup"
["customer_email"]=>
string(34) "test@example.com"
["customer_firstname"]=>
string(0) "Prénom"
["customer_name"]=>
string(0) "Nom"
["channels"]=>
array(4) {
[0]=>
object(stdClass)#2 (4) {
["status"]=>
string(1) "1"
["name"]=>
string(11) "Canal email"
["type"]=>
string(5) "email"
["tech_name"]=>
string(0) "gdpr_email"
}
[1]=>
object(stdClass)#3 (4) {
["status"]=>
string(1) "1"
["name"]=>
string(9) "Canal SMS"
["type"]=>
string(3) "sms"
["tech_name"]=>
string(0) "gdpr_sms"
}
[2]=>
object(stdClass)#5 (4) {
["status"]=>
string(1) "1"
["name"]=>
string(7) "Email 2"
["type"]=>
string(5) "other"
["tech_name"]=>
string(0) "gdpr_email_2"
}
}
}
["name"]=>
string(23) "spread.consent.accepted"
}
Données reçues par type de webhook
Mise à jour de cagnotte
Nom technique de l'événement : spread.reward.updated
Exemple de données reçues (Cliquez sur la flèche de gauche pour voir)
object(stdClass)#4 (2) {
["datas"]=>
object(stdClass)#2 (2) {
["customer"]=>
object(stdClass)#1 (4) {
["customer_id"]=>
string(8) "1234" // Identifiant du profil
["customer_email"]=>
string(10) "test@example.com" // Email du profil
["customer_firstname"]=>
string(4) "Prénom" // Prénom du profil
["customer_name"]=>
string(4) "Nom" // Nom du profil
}
["reward"]=>
object(stdClass)#3 (4) {
["reward_line_id"]=>
string(6) "1234" // ID de la ligne de cagnotte
["reward_date_validation"]=>
string(19) "2018-06-29 12:54:26" // Date de validation de la modification
["reward_amount"]=>
string(2) "15" // Montant de la modification
["reward_source"]=>
string(2) "13" // Source de la mise à jour
}
}
["name"]=>
string(21) "spread.reward.updated" // Nom technique de l'événement
}
Valeurs des données spécifiques
Les valeurs du paramètre reward_source
peuvent être les suivantes :
-1
: Récupération d'un code dans la cagnotte
-2
: (Parrainage) Retrait de points au parrain en cas d'annulation d'une commande qui récompense un parrainage
-3
: (Parrainage) Retrait de points au filleul en cas d'annulation d'une commande qui récompense un parrainage
1
: (Parrainage) Ajout de points au parrain en cas d'inscription d'un filleul sur le site
2
: (Parrainage) Ajout de points au parrain en cas de passage de commande d'un filleul sur le site
3
: (Parrainage) Ajout de points au filleul s'il passe commande sur le site
4
: (Parrainage) Ajout de points au filleul s'il passe commande sur le site (validation manuelle de la cagnotte)
5
: (Parrainage) Ajout de points au parrain en cas d'inscription d'un filleul sur le site (validation manuelle de la cagnotte)
6
: (Parrainage) Ajout de points au parrain en cas de passage de commande d'un filleul sur le site (validation manuelle de la cagnotte)
7
: Ajouté via la participation à une opération (historique, ne peut plus être ajouté)
8
: (Parrainage) Ajout de points au filleul s'il s'inscrit sur le site
9
: (Parrainage) Ajout au parrain en cas de récupération d'un code promo si le parrainage est lié à une opération de distributionde code promo
10
: (Parrainage) Ajout au filleul en cas de récupération d'un code promo si le parrainage est lié à une opération de distributionde code promo
11
: (Parrainage) Ajout de points au filleul s'il s'inscrit sur le site (validation manuelle de la cagnotte)
12
: Ajout de points via un appel API
13
: Ajout manuel de points via le BO SPREAD
14
: Retrait manuel de points via le BO SPREAD
15
: (Parrainage) Récompense d'objectif de parrainage en cas de participation à une opération
16
: Ajout de crédit dans la cagnotte via une commande
17
: Retrait de crédit dans la cagnotte via une commande
18
: Mise à jour du crédit de la cagnotte via une commande
Envoi d'un code remise
Nom technique de l'événement : spread.incentive.giftcodesent
Exemple de données reçues (Cliquez sur la flèche de gauche pour voir)
object(stdClass)#4 (2) {
["datas"]=>
object(stdClass)#2 (2) {
["customer"]=>
object(stdClass)#1 (4) {
["customer_id"]=>
string(4) "1234" // Identifiant du profil
["customer_email"]=>
string(16) "test@example.com" // Email du profil
["customer_firstname"]=>
string(7) "Prénom" // Prénom du profil
["customer_name"]=>
string(3) "Nom" // Nom du profil
}
["gift_code"]=>
object(stdClass)#3 (3) {
["code"]=>
string(19) "TEST-TO-SPREAD-1234" // Code du coupon
["value"]=>
string(2) "15" // Valeur du coupon
["unit"]=>
string(3) "€" // Unité de la valeur du coupon
}
}
["name"]=>
string(29) "spread.incentive.giftcodesent"
}
Valeur des données spécifiques
La valeur du champ unit
du paramètre gift_code
sera l'une des valeurs suivantes. Cette valeur est par exemple définie lorsque vous configurez la récompense à un instant gagnant.
€
£
%
CHF
¥
HKD
points
Consentement accepté
Nom technique de l'événement : spread.consent.accepted
Exemple de données reçues (Cliquez sur la flèche de gauche pour voir)
object(stdClass)#2 (2) {
["datas"]=>
object(stdClass)#1 (6) {
["customer_id"]=>
string(4) "1234"
["track_id"]=>
string(9) "999999999"
["gdpr_consent_tech_name"]=>
string(9) "NewsEmail"
["customer_email"]=>
string(16) "test@example.com"
["customer_firstname"]=>
string(7) "Prénom"
["customer_name"]=>
string(3) "Nom"
["channels"]=> // Tous les canaux du consentement et leur état
array(3) {
[0]=>
object(stdClass)#2 (4) {
["status"]=>
string(1) "1"
["name"]=>
string(11) "Canal email"
["type"]=>
string(5) "email"
["tech_name"]=>
string(11) "EmailChannel"
}
[1]=>
object(stdClass)#3 (4) {
["status"]=>
string(1) "1"
["name"]=>
string(9) "Canal SMS"
["type"]=>
string(3) "sms"
["tech_name"]=>
string(10) "SMSChannel"
}
[2]=>
object(stdClass)#4 (4) {
["status"]=>
string(1) "1"
["name"]=>
string(5) "Canal Téléphone"
["type"]=>
string(3) "tel"
["tech_name"]=>
string(10) "TelChannel"
}
}
}
["name"]=>
string(23) "spread.consent.accepted"
}
Valeur des données spécifiques
En même temps que le consentement, l'identifiant de la trace et les informations du profil, nous vous envoyons également la liste des canaux du consentement et leur état.
Un état de canal peut avoir 2 valeurs :
1
: Canal accepté
-1
: Canal refusé
Consentement refusé
Nom technique de l'événement : spread.consent.refused
Exemple de données reçues (Cliquez sur la flèche de gauche pour voir)
object(stdClass)#2 (2) {
["datas"]=>
object(stdClass)#1 (6) {
["customer_id"]=>
string(4) "1234"
["track_id"]=>
string(9) "999999999"
["gdpr_consent_tech_name"]=>
string(9) "NewsEmail"
["customer_email"]=>
string(16) "test@example.com"
["customer_firstname"]=>
string(7) "Prénom"
["customer_name"]=>
string(3) "Nom"
["channels"]=> // Tous les canaux du consentement et leur état
array(3) {
[0]=>
object(stdClass)#2 (4) {
["status"]=>
string(1) "1"
["name"]=>
string(11) "Canal email"
["type"]=>
string(5) "email"
["tech_name"]=>
string(11) "EmailChannel"
}
[1]=>
object(stdClass)#3 (4) {
["status"]=>
string(1) "-1"
["name"]=>
string(9) "Canal SMS"
["type"]=>
string(3) "sms"
["tech_name"]=>
string(10) "SMSChannel"
}
[2]=>
object(stdClass)#4 (4) {
["status"]=>
string(1) "1"
["name"]=>
string(5) "Canal Téléphone"
["type"]=>
string(3) "tel"
["tech_name"]=>
string(10) "TelChannel"
}
}
}
["name"]=>
string(22) "spread.consent.refused"
}
Valeur des données spécifiques
En même temps que le consentement, l'identifiant de la trace et les informations du profil, nous vous envoyons également la liste des canaux du consentement et leur état.
Un état de canal peut avoir 2 valeurs :
1
: Canal accepté
-1
: Canal refusé
Consentement à confirmer
Nom technique de l'événement : spread.consent.tobeconfirmed
Exemple de données reçues (Cliquez sur la flèche de gauche pour voir)
object(stdClass)#2 (2) {
["datas"]=>
object(stdClass)#1 (6) {
["customer_id"]=>
string(4) "1234"
["track_id"]=>
string(9) "999999999"
["gdpr_consent_tech_name"]=>
string(9) "NewsEmail"
["customer_email"]=>
string(16) "test@example.com"
["customer_firstname"]=>
string(7) "Prénom"
["customer_name"]=>
string(3) "Nom"
["channels"]=> // Tous les canaux du consentement et leur état
array(3) {
[0]=>
object(stdClass)#2 (4) {
["status"]=>
string(1) "1"
["name"]=>
string(11) "Canal email"
["type"]=>
string(5) "email"
["tech_name"]=>
string(11) "EmailChannel"
}
[1]=>
object(stdClass)#3 (4) {
["status"]=>
string(1) "1"
["name"]=>
string(9) "Canal SMS"
["type"]=>
string(3) "sms"
["tech_name"]=>
string(10) "SMSChannel"
}
[2]=>
object(stdClass)#4 (4) {
["status"]=>
string(1) "1"
["name"]=>
string(5) "Canal Téléphone"
["type"]=>
string(3) "tel"
["tech_name"]=>
string(10) "TelChannel"
}
}
}
["name"]=>
string(28) "spread.consent.tobeconfirmed"
}
Valeur des données spécifiques
En même temps que le consentement, l'identifiant de la trace et les informations du profil, nous vous envoyons également la liste des canaux du consentement et leur état.
Un état de canal peut avoir 2 valeurs :
1
: Canal accepté
-1
: Canal refusé
Mise à jour de consentement
Nom technique de l'événement : spread.consent.updated
Exemple de données reçues (Cliquez sur la flèche de gauche pour voir)
object(stdClass)#2 (2) {
["datas"]=>
object(stdClass)#1 (6) {
["customer_id"]=>
string(4) "1234"
["track_id"]=>
string(9) "999999999"
["gdpr_consent_tech_name"]=>
string(9) "NewsEmail"
["customer_email"]=>
string(16) "test@example.com"
["customer_firstname"]=>
string(7) "Prénom"
["customer_name"]=>
string(3) "Nom"
["channels"]=> // Tous les canaux du consentement et leur état
array(3) {
[0]=>
object(stdClass)#2 (4) {
["status"]=>
string(1) "1"
["name"]=>
string(11) "Canal email"
["type"]=>
string(5) "email"
["tech_name"]=>
string(11) "EmailChannel"
}
[1]=>
object(stdClass)#3 (4) {
["status"]=>
string(1) "1"
["name"]=>
string(9) "Canal SMS"
["type"]=>
string(3) "sms"
["tech_name"]=>
string(10) "SMSChannel"
}
[2]=>
object(stdClass)#4 (4) {
["status"]=>
string(1) "1"
["name"]=>
string(5) "Canal Téléphone"
["type"]=>
string(3) "tel"
["tech_name"]=>
string(10) "TelChannel"
}
}
}
["name"]=>
string(22) "spread.consent.updated"
}
Valeur des données spécifiques
En même temps que le consentement, l'identifiant de la trace et les informations du profil, nous vous envoyons également la liste des canaux du consentement et leur état.
Un état de canal peut avoir 2 valeurs :
1
: Canal accepté
-1
: Canal refusé
Participation complète
Nom technique de l'événement : spread.participation.completed
Exemple de données reçues (Cliquez sur la flèche de gauche pour voir)
object(stdClass)#4 (2) {
["datas"]=>
object(stdClass)#2 (2) {
["customer"]=>
object(stdClass)#1 (1) {
["customer_id"]=>
string(4) "1234" // Identifiant du profil
}
["participation"]=>
object(stdClass)#3 (1) {
["action_id"]=>
string(4) "1234" // ID de la participation au module
}
}
["name"]=>
string(29) "spread.participation.completed" // Nom technique de l'événement
}