CODFamilia
Fonctionnalités Comment ça marche Tarifs Blog FAQ Academy S'inscrire Se connecter

Webhooks : envoyer ses commandes et recevoir les statuts

Un webhook prévient un système dès qu'un événement se produit : envoyer ses commandes à une plateforme COD, recevoir les statuts, vérifier une signature.

L'essentiel

Qu'est-ce que c'est ?
Un webhook est une notification automatique entre deux systèmes. Sur CODFamilia, il fonctionne dans les deux sens : un webhook entrant permet à votre boutique ou à votre outil de nous annoncer une commande, un webhook sortant nous permet de vous annoncer qu'un lead a été confirmé ou qu'un colis a été livré.
Pour qui ?
Pour l'entrant : tout vendeur dont l'outil sait appeler une adresse à chaque commande, même sans intégration prête à l'emploi. Pour le sortant : tout vendeur qui tient son propre tableau de bord, sa propre comptabilité, ou qui veut déclencher un message au client à la livraison.
Comment ça marche ?
On enregistre une adresse d'un côté, et l'autre côté l'appelle à chaque événement, en lui transmettant les informations au format JSON. Chaque appel est signé pour que le destinataire puisse vérifier qu'il vient bien de l'expéditeur annoncé, et réessayé plus tard s'il n'aboutit pas.
À quoi ça sert ?
Pour supprimer l'attente et la charge inutile. Sans webhook, la seule façon de savoir ce qui se passe est d'interroger l'autre système en boucle : c'est lent pour celui qui attend l'information et coûteux pour celui qui répond des milliers de fois « rien de nouveau ».
Comment s'en servir ?
Côté entrant, on crée une connexion, on copie son adresse dans l'outil d'origine, et on y colle le même secret des deux côtés. Côté sortant, on enregistre une adresse HTTPS publique et on choisit les événements à recevoir. Le reste est de la vérification de signature.

Un webhook est une adresse à laquelle un système en appelle un autre dès qu'un événement se produit, pour l'en informer immédiatement au lieu d'attendre qu'il vienne demander.

Un webhook, expliqué sans vocabulaire technique

Imaginez que vous attendiez de savoir si un colis est arrivé. Première méthode : vous appelez l'entrepôt toutes les dix minutes pour demander. Vous obtenez l'information, mais vous passez votre journée au téléphone et l'entrepôt passe la sienne à répondre « pas encore ». Deuxième méthode : vous laissez votre numéro, et l'entrepôt vous appelle quand le colis arrive. C'est exactement ce qu'est un webhook : vous laissez une adresse, l'autre système vous appelle quand il a quelque chose à dire.

Techniquement, l'« adresse » est une URL de votre site, et l'« appel » est une requête web contenant les informations de l'événement. C'est tout. Il n'y a aucune autre magie, et c'est pour cela qu'un webhook fonctionne avec n'importe quel langage et n'importe quel hébergement : si votre site sait recevoir un formulaire, il sait recevoir un webhook.

Deux conséquences découlent de cette simplicité, et elles expliquent le reste de cette page. La première : comme n'importe qui peut appeler une adresse, il faut un moyen de prouver que l'appel vient bien de qui il prétend — c'est la signature. La seconde : comme un appel peut échouer, il faut un moyen de le rejouer — ce sont les réessais.

Sens entrant : vos commandes arrivent chez nous

C'est la voie d'entrée des outils qui ne figurent dans aucune liste d'intégrations. Vous créez une connexion, la plateforme vous donne une adresse unique, et votre outil l'appelle à chaque commande. Le format attendu est le même que celui de l'API : nom du client, téléphone, ville, adresse, total à encaisser, articles avec leur SKU et leur quantité, et votre référence de commande.

Si votre outil envoie un format différent — et c'est fréquent avec un site maison ou un outil d'automatisation — la plateforme ne devine rien. Le premier envoi est conservé comme échantillon, elle vous propose de relier chacun de vos champs au champ correspondant, et les commandes reçues entre-temps sont rejouées dans l'ordre d'arrivée une fois la correspondance enregistrée. C'est le même mécanisme que pour une boutique connectée.

Une fois la commande lue, elle traverse les mêmes contrôles que tout le reste : téléphone normalisé, ville rapprochée, SKU vérifié, total comparé à la somme des prix. Une commande incomplète devient un lead endommagé plutôt que d'être refusée. Et une commande déjà reçue, parce que votre outil a réessayé, ne crée pas de second lead : son identifiant est mémorisé par connexion.

Sens sortant : les étapes de la commande arrivent chez vous

Dans l'autre direction, vous enregistrez l'adresse de votre système et vous choisissez ce que vous voulez apprendre. À chaque fois qu'une de vos commandes franchit une étape, votre adresse est appelée avec le détail de la commande : sa référence, la vôtre, le client, le total, le profit vendeur, les statuts et le numéro de suivi quand il existe.

Événement Ce qui vient de se passer
lead.created Un lead est entré, quelle que soit sa source
lead.confirmed Un agent a confirmé la commande avec le client au téléphone
lead.canceled Le lead est perdu : annulé, faux numéro, doublon, fantaisiste
order.shipped Le colis est parti chez le livreur
order.delivered Le colis est livré et l'argent encaissé côté livreur
order.returned Le colis revient : refus ou client injoignable
order.paid La commande est payée au vendeur

La signature, et pourquoi une adresse secrète ne suffit pas

Le raisonnement naturel est de se dire qu'une adresse que personne ne connaît fait office de mot de passe. C'est faux, pour une raison simple : une adresse circule. Elle apparaît dans un journal de serveur, dans une capture d'écran, dans un message à un prestataire, dans l'historique d'un outil d'automatisation. Quiconque l'a vue peut envoyer un faux « colis livré » à votre système, et votre comptabilité le croira.

La signature règle cela. À chaque envoi, l'expéditeur calcule une empreinte du contenu avec un secret connu des deux seuls côtés, et la place dans un en-tête. Le destinataire recalcule la même empreinte de son côté et compare. Comme le secret ne circule jamais, personne ne peut fabriquer une empreinte valable — même en connaissant l'adresse, même en connaissant le contenu exact à imiter.

Les envois sortants de la plateforme sont signés sur l'horodatage et le corps brut réunis, et l'horodatage est transmis dans son propre en-tête. Cette double information vous permet de refuser deux choses différentes : un contenu modifié, parce que l'empreinte ne correspondra plus, et un contenu authentique mais rejoué des heures plus tard, parce que l'horodatage sera trop ancien. Le secret ne s'affiche qu'une seule fois, au moment où l'adresse est créée.

Dans le sens entrant, le même principe s'applique en miroir : vous choisissez un secret, vous le mettez des deux côtés, et vous signez le corps de vos envois. Si vous ne mettez pas de secret, l'adresse secrète reste votre seule protection — ce qui est acceptable pour un début, et insuffisant dès que l'adresse a été partagée une fois.

Échecs, réessais et désactivation

Les envois sortants ne partent pas pendant la requête qui produit l'événement. C'est un choix important : votre serveur peut être lent, éteint ou derrière un pare-feu, et la confirmation d'une commande par un agent ne doit ni attendre ni échouer à cause de cela. Les événements sont donc mis en file, puis envoyés séparément.

Un envoi est réussi quand votre serveur répond un code de succès. Sinon, il est réessayé plus tard, avec des intervalles de plus en plus espacés, pendant quelques heures. Un serveur éteint une nuit retrouve donc ses événements au matin, sans avoir été appelé mille fois entre-temps. Passé un certain nombre de tentatives, l'envoi est abandonné et consigné comme échec.

Si votre adresse échoue de façon répétée sur une longue série d'envois, elle est désactivée automatiquement : un serveur définitivement disparu ne doit pas être appelé indéfiniment. Elle se réactive d'un clic une fois votre serveur réparé. Entre-temps, la liste des derniers envois montre ce qui est parti, ce qui a échoué, et avec quel code de réponse — c'est elle qui répond à la question « pourquoi mon système n'a rien reçu ».

  • Répondre vite — Enregistrez l'événement, répondez un succès, traitez ensuite. Traiter avant de répondre finit par dépasser le délai d'attente.
  • Accepter les répétitions — Un même événement peut arriver deux fois si votre réponse s'est perdue en route. Votre code doit pouvoir le recevoir deux fois sans conséquence.
  • Refuser le reste — Signature invalide, horodatage ancien, événement inconnu : répondez une erreur et ne traitez rien.
  • Une adresse publique en HTTPS — Une adresse locale ou privée est refusée à l'enregistrement : elle ferait appeler une machine qui n'est pas la vôtre.

Quand préférer un webhook à une boutique connectée

Si une intégration officielle existe pour votre boutique, utilisez-la : elle s'abonne seule, gère le renouvellement des accès et dispose d'une relecture de secours en cas de notification perdue. Un webhook que vous construisez vous-même n'a pas ce filet, sauf si vous l'écrivez.

  • Votre outil n'a pas d'intégration — C'est le cas typique : un site maison, un tunnel de vente, un outil de gestion interne. Le webhook est la voie la plus directe.
  • Vous passez par un outil d'automatisation — Un connecteur intermédiaire sait déclencher sur « nouvelle commande » et envoyer une requête : vous n'écrivez pas une ligne de code.
  • Vous voulez être prévenu des statuts — C'est le seul moyen d'apprendre une livraison sans interroger l'API en boucle, et il n'a pas d'équivalent du côté des boutiques connectées.
  • Vous avez besoin de lire autre chose — Un webhook annonce un événement ; il ne permet pas d'interroger le catalogue, les villes ou l'historique. Pour cela, c'est l'API qu'il faut.

Brancher un webhook, dans un sens puis dans l'autre

  1. Créer la connexion entrante

    Dans Applications, créez une connexion de type webhook. La plateforme produit une adresse propre à cette connexion, impossible à devenir, et vous propose de générer un secret partagé.

  2. Coller l'adresse dans l'outil d'origine

    Dans votre boutique, votre outil d'automatisation ou votre site, déclarez un abonnement « nouvelle commande » qui envoie une requête POST vers cette adresse, et collez-y le même secret.

  3. Envoyer le bon contenu

    Le corps attendu est le même que celui de l'API : le nom du client, son téléphone, sa ville, son adresse, le total à encaisser, la liste des articles avec leur SKU et leur quantité, et votre propre référence de commande.

  4. Relier les champs si votre format diffère

    Si votre outil envoie un format qui lui est propre, rien n'est perdu : le premier envoi reçu sert d'échantillon, la plateforme vous propose la correspondance des champs, et les commandes mises en attente sont rejouées dès qu'elle est enregistrée.

  5. Enregistrer l'adresse sortante

    Dans Applications → API, ajoutez l'adresse HTTPS de votre système et cochez les événements qui vous intéressent, ou prenez-les tous. Le secret de signature s'affiche une seule fois, à la création : copiez-le immédiatement.

  6. Vérifier la signature chez vous

    Sur chaque envoi reçu, recalculez l'empreinte à partir de l'horodatage et du corps brut, avec votre secret, et comparez-la à celle de l'en-tête. Si elle ne correspond pas, refusez l'appel. Si l'horodatage est ancien, refusez-le aussi.

  7. Répondre vite, puis traiter

    Répondez par un code de succès dès que vous avez stocké l'événement, et faites le travail ensuite. Un serveur qui traite avant de répondre finit par dépasser le délai d'attente et provoque des réessais inutiles.

Questions fréquentes sur les webhooks

Faut-il un développeur pour utiliser un webhook ?
Pour le sens entrant, pas nécessairement : beaucoup de boutiques et d'outils d'automatisation permettent de déclarer une adresse et un secret dans une interface, sans écrire de code. Pour le sens sortant, il faut un système capable de recevoir un appel et de vérifier une signature, donc quelqu'un qui programme.
Que se passe-t-il si mon serveur est en panne ?
L'envoi est réessayé plus tard, à intervalles de plus en plus espacés, pendant quelques heures. Une panne de quelques minutes est invisible ; une panne longue finit par faire abandonner les envois concernés, et une série d'échecs désactive l'adresse jusqu'à sa réactivation.
Puis-je recevoir seulement certains événements ?
Oui. À l'enregistrement de l'adresse, vous choisissez la liste des événements qui vous intéressent, ou vous prenez tout. Beaucoup de vendeurs ne retiennent que la confirmation, la livraison et le retour.
Pourquoi vérifier la signature si l'adresse est secrète ?
Parce qu'une adresse finit toujours par circuler : journaux de serveur, captures d'écran, historique d'un outil tiers. Quiconque la connaît peut envoyer un faux événement. La signature, elle, exige un secret qui ne circule jamais.
Le même événement peut-il arriver deux fois ?
C'est possible, notamment si votre réponse s'est perdue alors que vous aviez déjà traité l'appel. Les répétitions proches sont écartées à l'émission, mais votre code doit malgré tout pouvoir recevoir deux fois le même événement sans compter la commande deux fois.
Un webhook remplace-t-il l'API ?
Non, ils sont complémentaires. Le webhook vous prévient qu'il s'est passé quelque chose ; l'API vous permet de demander quelque chose — le catalogue, les villes livrées, l'état d'un lead. La plupart des intégrations sérieuses utilisent les deux.
Mes données partent-elles vers d'autres destinataires ?
Non. Les envois vont uniquement aux adresses que vous avez enregistrées, et ne portent que les informations de vos propres commandes — celles que vous voyez déjà dans votre espace.
Puis-je enregistrer plusieurs adresses ?
Oui, et c'est utile : une adresse pour votre application, une autre pour un outil d'automatisation, chacune abonnée aux seuls événements qui la concernent. Chaque adresse a son propre secret et son propre historique d'envois.
Un webhook fonctionne-t-il sur un hébergement mutualisé ?
Oui, dès lors que l'adresse est publique et en HTTPS. Une adresse locale ou une adresse privée est refusée à l'enregistrement : rien ne pourrait l'atteindre depuis Internet.

À lire aussi

Brancher ses propres systèmes aux deux bouts

Commandes poussées vers la plateforme, événements de livraison poussés vers vous : envois signés, réessayés et consignés, pour un suivi à jour dans 65 villes.

S'inscrire