Recevez des notifications en temps réel sur les événements de votre boutique Chariow
Les Pulses sont des notifications webhook qui vous permettent de recevoir des requêtes HTTP POST en temps réel lorsque des événements spécifiques se produisent dans votre boutique Chariow. Au lieu d’interroger constamment l’API, les Pulses envoient les données d’événements vers votre URL de point de terminaison configurée dès que quelque chose se produit, vous permettant de construire des intégrations et des automatisations réactives.
Entrez l’URL de votre point de terminaison webhook (doit être en HTTPS)
Sélectionnez les événements que vous souhaitez recevoir
Sélectionnez éventuellement des produits spécifiques (laissez vide pour tous les produits)
Enregistrez votre Pulse
Votre point de terminaison Pulse doit être accessible via HTTPS. Les points de terminaison HTTP ne sont pas pris en charge pour des raisons de sécurité.
Les Pulses prennent en charge les événements suivants. Lorsqu’un événement se produit, la charge utile du webhook contient un champ event avec la valeur de l’événement.
Se déclenche lorsqu’un nouvel affilié rejoint votre boutique
Vous pouvez configurer plusieurs événements pour une seule URL de Pulse. Lorsque l’un des événements sélectionnés se produit, Chariow enverra une notification webhook à votre point de terminaison avec la valeur d’événement correspondante.
Lorsqu’un événement configuré se produit, Chariow envoie une requête HTTP POST vers votre URL webhook avec les données de l’événement dans le corps de la requête. La structure exacte de la charge utile dépend du type d’événement.
Les charges utiles Pulse contiennent des données d’événement complètes, y compris des détails sur l’entité (vente, licence, etc.), les informations client, les détails du produit et le contexte de la boutique. La structure de la charge utile varie selon le type d’événement pour fournir des informations pertinentes pour chaque événement.
La structure exacte de la charge utile peut inclure des champs supplémentaires selon le type d’événement et le contexte. Vérifiez toujours la charge utile réelle reçue à votre point de terminaison pour la structure complète des données.
const express = require('express');const app = express();app.post('/webhooks/chariow', express.json(), (req, res) => { const payload = req.body; const event = payload.event; switch (event) { case 'successful.sale': handleSuccessfulSale(payload.sale, payload.store); break; case 'abandoned.sale': handleAbandonedSale(payload.sale, payload.store); break; case 'failed.sale': handleFailedSale(payload.sale, payload.store); break; case 'license.activated': handleLicenseActivated(payload.license, payload.customer); break; case 'license.expired': handleLicenseExpired(payload.license, payload.customer); break; case 'license.issued': handleLicenseIssued(payload.license, payload.customer); break; case 'license.revoked': handleLicenseRevoked(payload.license, payload.customer); break; case 'affiliate.joined': handleAffiliateJoined(payload.affiliate, payload.store); break; default: console.log(`Type d'événement non géré : ${event}`); } // Toujours renvoyer 200 pour confirmer la réception res.status(200).send('OK');});function handleSuccessfulSale(sale, store) { console.log(`Vente finalisée : ${sale.id} dans la boutique ${store.name}`); // Ajouter le client au CRM, envoyer un email de confirmation, accorder l'accès, etc.}function handleLicenseActivated(license, customer) { console.log(`Licence activée : ${license.key} pour ${customer.email}`); // Enregistrer l'activation, mettre à jour les enregistrements internes, notifier le client, etc.}function handleAffiliateJoined(affiliate, store) { console.log(`Nouvel affilié rejoint : ${affiliate.account.code} dans la boutique ${store.name}`); // Envoyer un email de bienvenue, créer l'accès au tableau de bord affilié, notifier l'équipe, etc.}app.listen(3000, () => console.log('Serveur webhook en cours d\'exécution sur le port 3000'));
<?php// Lire les données POST brutes$payload = file_get_contents('php://input');$data = json_decode($payload, true);$event = $data['event'] ?? null;switch ($event) { case 'successful.sale': handleSuccessfulSale($data['sale'], $data['store']); break; case 'abandoned.sale': handleAbandonedSale($data['sale'], $data['store']); break; case 'failed.sale': handleFailedSale($data['sale'], $data['store']); break; case 'license.activated': handleLicenseActivated($data['license'], $data['customer']); break; case 'license.expired': handleLicenseExpired($data['license'], $data['customer']); break; case 'license.issued': handleLicenseIssued($data['license'], $data['customer']); break; case 'license.revoked': handleLicenseRevoked($data['license'], $data['customer']); break; case 'affiliate.joined': handleAffiliateJoined($data['affiliate'], $data['store']); break; default: error_log("Type d'événement non géré : " . $event);}// Toujours renvoyer 200 pour confirmer la réceptionhttp_response_code(200);echo 'OK';function handleSuccessfulSale($sale, $store) { error_log("Vente finalisée : {$sale['id']} dans la boutique {$store['name']}"); // Ajouter le client au CRM, envoyer un email de confirmation, accorder l'accès, etc.}function handleLicenseActivated($license, $customer) { error_log("Licence activée : {$license['key']} pour {$customer['email']}"); // Enregistrer l'activation, mettre à jour les enregistrements internes, notifier le client, etc.}function handleAffiliateJoined($affiliate, $store) { error_log("Nouvel affilié rejoint : {$affiliate['account']['code']} dans la boutique {$store['name']}"); // Envoyer un email de bienvenue, créer l'accès au tableau de bord affilié, notifier l'équipe, etc.}
Si votre point de terminaison ne répond pas avec un code de statut 2xx, Chariow réessaiera le Pulse :
Tentative
Délai
1ère tentative
1 minute
2ème tentative
5 minutes
3ème tentative
30 minutes
4ème tentative
2 heures
5ème tentative
24 heures
Après 5 tentatives échouées, le Pulse est marqué comme échoué.
Assurez-vous que votre point de terminaison Pulse répond rapidement (dans les 30 secondes). Les processus de longue durée doivent être gérés de manière asynchrone.
Renvoyez une réponse 200 immédiatement, puis traitez le Pulse de manière asynchrone pour éviter les délais d’expiration :
Copier
app.post('/webhooks/chariow', (req, res) => { // Confirmer la réception immédiatement res.status(200).send('OK'); // Traiter de manière asynchrone (par exemple, file d'attente de tâches, worker en arrière-plan) queuePulseProcessing(req.body);});
Gérer les doublons
En raison de la logique de réessai, les Pulses peuvent être envoyés plusieurs fois. Implémentez l’idempotence en suivant les événements traités :
Copier
const processedEvents = new Set();async function processPulse(payload) { // Créer un identifiant unique à partir des données du pulse const uniqueId = `${payload.event}_${payload.sale?.id || payload.license?.id || payload.affiliate?.id}`; if (processedEvents.has(uniqueId)) { console.log('Pulse en double, ignoré'); return; } processedEvents.add(uniqueId); // Traiter le pulse...}
Utiliser HTTPS
Utilisez toujours HTTPS pour votre point de terminaison Pulse afin de garantir que les données sont chiffrées en transit. Chariow rejettera les points de terminaison HTTP pour des raisons de sécurité.
Surveiller les échecs
Surveillez votre point de terminaison Pulse pour détecter les échecs et les erreurs. Vérifiez régulièrement votre tableau de bord de boutique pour les échecs de livraison de Pulse et enquêtez sur la cause première.
Filtrer par produits
Pour les boutiques à fort volume, envisagez de créer des Pulses séparés pour différents produits afin de rendre le traitement plus efficace et organisé.