Formats de corps et tableaux de fractionnement

Tous les systèmes n'envoient pas de données au format JSON, et toutes les requêtes ne portent pas nécessairement sur un seul élément. Deux paramètres permettent de couvrir ces deux cas.

Formats de corps

Le format est extrait de l'en-tête Content-Type de la requête. Quel que soit le format, votre mappage de champs utilise les mêmes chemins de points.

Type de contenu Analysé comme suit : Expéditeurs types
application/json JSON La plupart des API, n8n, Make, Zapier
application/x-www-form-urlencoded Champs de formulaire Twilio, PayPal IPN, formulaires HTML simples
multipart/form-data Les champs de formulaire et les parties de fichier constituent le nom du fichier Générateurs de formulaires, points de terminaison de téléchargement
text/xml, application/xml, *+xml XML Anciens systèmes ERP et systèmes des transporteurs

Deux détails qu'il est bon de connaître :

  • Un corps de message au format JSON valide est toujours interprété comme du JSON, même lorsque l'expéditeur lui attribue une autre étiquette. De nombreux outils envoient du JSON avec un type de contenu « formulaire », ce qui leur permet de continuer à fonctionner.
  • Les corps de formulaires et XML peuvent contenir des champs que vous n'avez pas mappés. Ce n'est pas grave : l'expéditeur définit lui-même la structure de ses données ; ces corps ne sont donc pas soumis à la validation stricte qui s'applique au JSON que vous contrôlez.
A form-encoded webhook (for example Twilio)bash
curl -X POST https://your-app-url/webhook/ab12cd34 \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "X-Api-Key: your-token" \
  --data-urlencode "From=+15551234567" \
  --data-urlencode "Body=Where is my order?"

# Map fieldOne to: From
# Map fieldTwo to: Body

Attributs XML

Un attribut XML est accessible sous un nom préfixé par @_ ; ainsi, <order id="7"> est mappé en order.@_id, et <order><name>Bob</name></order> en order.name. Les valeurs sont transmises sous forme de texte, ce qui permet de conserver l'exactitude des identifiants longs.

Décomposition des tableaux en séries

Lorsqu'une requête contient une liste (par exemple, 20 commandes provenant d'un ERP ou un lot de mises à jour de stock), vous souhaitez généralement que votre workflow s'exécute une fois par élément, et non une seule fois pour l'ensemble du lot.

Dans « Paramètres avancés » -> « Diviser les tableaux en séries », indiquez le chemin d'accès au tableau :

Chemin d'accès À utiliser lorsque
items Le tableau est un champ de niveau supérieur : { "items": [ ... ] }
data.orders Il s'agit d'un lien imbriqué : { "data": { "orders": [ ... ] } }
$ Le corps lui-même constitue le tableau : [ { ... }, { ... } ]
(vide) Désactivé. Une exécution par requête, par défaut.

Chaque élément devient une exécution distincte dont il constitue la payload ; les chemins de mappage sont donc relatifs à cet élément : mappez sku, et non items.0.sku.

One request, three Flow runsjson
{
  "items": [
    { "sku": "ABC-1", "qty": 2 },
    { "sku": "ABC-2", "qty": 1 },
    { "sku": "ABC-3", "qty": 7 }
  ]
}

// Split path: items
// Map fieldOne to: sku
// Map fieldTwo to: qty
// Response: { "runs": 3, "blocked": 0 }

Règles et limites

  • 100 éléments au maximum par requête. Tout lot plus important est rejeté afin d'empêcher un expéditeur incontrôlable de saturer votre workflow.
  • Si un élément ne comporte pas de champ mappé ou si sa taille est trop importante pour Shopify Flow, la requête est rejetée dans son intégralité et rien n'est envoyé ; la position de l'élément à l'origine de l'erreur est alors indiquée dans le message d'erreur. Cela garantit qu'un lot est traité dans son intégralité ou pas du tout, plutôt que d'être partiellement traité.
  • Les éléments qui sont des valeurs simples plutôt que des objets sont transmis sous la forme { "value": ... }.
  • Le fractionnement ne peut pas être combiné avec une réponse synchrone : un appelant ne peut pas recevoir de réponse de la part de plusieurs exécutions. Voir Réponse synchrone.
  • La relecture d'une exécution antérieure à partir de l'historique renvoie uniquement cet élément, et non l'ensemble du lot.

En histoire

Chaque élément constitue une entrée distincte ; vous pouvez ainsi les consulter, les réessayer et les rejouer séparément.