Historique et dépannage

Chaque requête qui parvient à un webhook est enregistrée, qu'elle soit acceptée ou rejetée. L'historique est le premier endroit où il faut chercher lorsque quelque chose ne s'est pas produit.

Lecture d'une invocation

Ouvrez l'historique et cliquez sur une entrée. Vous obtiendrez l'horodatage, le statut, l'expéditeur, la durée, le payload, les en-têtes de requête (masqués), la chaîne de requête et, en cas d'échec, l'erreur ainsi que chaque tentative de réessai.

Statut Signification
En attente Accepté et mis en file d'attente, pas encore transmis à Shopify Flow
Succès Shopify Flow a accepté le déclencheur
Échec Échec définitif de la livraison : la page de détails en explique la raison

La colonne « Invoked by » vous indique d'où provient un appel : User (un système externe), Flow (une action Shopify Flow appelant le webhook), Test (le bouton « Test ») ou CURL.

Historique des webhooks filtré sur un seul webhook, répertoriant les invocations dont le statut est « Success » et dont la source est « Système externe »
Historique des webhooks, filtré pour n'afficher qu'un seul webhook. Chaque requête est répertoriée avec son statut et sa provenance.
Une requête a été enregistrée dans l'historique avec ses en-têtes, son payload, son statut, sa durée et ses identifiants
Une invocation, affichée : les en-têtes de la requête (le jeton est masqué), la payload, la durée d'exécution et le webhook « Replay » en haut à droite.

Les refus et ce que chacun d'entre eux signifie

Une requête rejetée n'est jamais transmise à Shopify Flow. Le corps de la réponse contient une code lisible par machine :

Code HTTP Qu'est-ce qui a mal tourné ? Corriger
webhook_not_found 404 Code court inconnu Vérifiez l'URL ; il se peut que le webhook ait été supprimé
webhook_disabled 400 Le webhook est désactivé Activez-le sur la page des webhooks
unauthorized 401 Jeton manquant ou incorrect Vérifiez le jeton et le nom de l'en-tête
missing_signature 401 Mode HMAC, sans en-tête de signature Envoyez l'en-tête de signature attendu par votre préréglage
invalid_signature 401 La signature ne correspondait pas Vérifiez que le secret de signature est correct et que le corps du message n'a pas été modifié pendant la transmission
auth_not_configured 401 Le mode d'authentification est activé, mais aucun jeton n'a été enregistré Enregistrez un jeton sur le webhook
invalid_json 400 Le corps du message n'est pas au format JSON valide Envoyez un JSON valide, ou définissez le type de contenu (Content-Type) correspondant réellement au contenu de votre corps de message (les données de formulaire et le XML sont également pris en charge)
invalid_body 400 Il n'a pas été possible de lire un formulaire ou le corps XML, ou bien le corps correspond à la chaîne littérale null. Envoyez un objet JSON ou un corps de message dont le type de contenu correspond à celui-ci
mapping_field_missing 400 Un champ mappé est absent de la payload Envoyez le champ ou désactivez son mappage
unexpected_fields 400 Le corps comporte des champs qui ne sont pas mappés Mettez-les en correspondance, supprimez-les ou activez l'option « Autoriser le corps de requête personnalisé »
ip_not_allowed 403 L'adresse de l'appelant ne figure pas sur la liste blanche d'adresses IP du webhook Voir Listes d'adresses IP autorisées
invalid_proxy_signature 401 L'adresse proxy de l'application a été appelée directement, et non via le domaine de votre boutique Utilisez l'URL du webhook exactement telle qu'elle s'affiche dans l'application - voir CORS, l'URL du proxy de l'application et les requêtes du navigateur
payload_too_large 413 Payload de flux supérieure à 50 Ko Envoyez moins de données ou désactivez les boutons de commande relatifs aux données de requête
quota_exceeded 400 Limite du forfait atteinte Voir Forfaits et utilisation

Inspecteur des demandes en temps réel

Lorsque vous avez un webhook ouvert dans l'éditeur, l'inspecteur affiche les requêtes qui arrivent en temps réel, y compris celles qui ont été rejetées, avec la raison correspondante. C'est de loin le moyen le plus rapide de déboguer un expéditeur : lancez une requête et observez-la aboutir.

Les doublons supprimés apparaissent également ici, accompagnés d'une mention indiquant qu'il s'agit de doublons - voir Protection contre les livraisons en double.

Rediffusion

Toute invocation antérieure peut être relancée à partir de sa page de détails. La relance consiste à renvoyer la même payload via le même webhook.

Il est particulièrement efficace dans deux domaines :

  • Créer un workflow Flow. Enregistrez les événements sur le déclencheur Webhook, puis reproduisez un véritable Appelez cette fonction afin que Shopify Flow mémorise les noms réels de vos champs.
  • Récupération après une interruption du workflow. Corrigez le workflow, puis relancez les événements qui se sont exécutés. même si c'était une erreur.

Les rediffusions sont signalées comme telles dans l'historique et ne sont pas prises en compte dans votre forfait.

Situations courantes

Des appels sont reçus, mais le workflow ne s'exécute pas. Cela est presque toujours dû à la condition relative à l'identifiant du webhook. Un workflow déclenché par un webhook reçoit des événements provenant de tous les webhooks dont vous disposez ; il nécessite donc une condition correspondant à l'identifiant spécifique du webhook concerné - voir Créez votre premier webhook.

Le workflow s'exécute deux fois. Soit deux workflows utilisent le déclencheur « Webhook » sans conditions distinctes, soit votre expéditeur effectue une nouvelle tentative. L'historique vous indique de quel cas il s'agit : deux entrées signifient que deux requêtes ont été reçues. Activez l'option Protection contre les livraisons en double.

Il n'y a absolument rien dans l'historique. La requête ne nous est jamais parvenue. Vérifiez l'URL et le code court, et assurez-vous que l'expéditeur ne rencontre pas de problème de TLS ou de DNS de son côté.

Le statut reste bloqué sur « En attente ». La livraison est réessayée avec un délai d'attente ; en cas d'échec définitif, le statut passe à « Échec » avec indication du motif. Si le statut reste « En attente » pendant une durée inhabituellement longue, veuillez vérifier status.codecreationlabs.cloud.