Dataformater og opdeling af matricer

Ikke alle systemer sender JSON, og ikke alle anmodninger vedrører én enkelt ting. To indstillinger dækker begge tilfælde.

Kropsformater

Formatet hentes fra anmodningens »Content-Type«-header. Uanset hvilket format der er tale om, bruger din feltmapping de samme punkt-stier.

Indholdstype Analyseret som Typiske afsendere
application/json JSON De fleste API’er, n8n, Make, Zapier
application/x-www-form-urlencoded Formularfelter Twilio, PayPal IPN, almindelige HTML-formularer
multipart/form-data Formularfelter og fildele bliver til filnavnet Formularværktøjer, upload-endepunkter
text/xml, application/xml, *+xml XML Ældre ERP- og transportørsystemer

To detaljer, der er værd at vide:

  • Et indhold, der er gyldigt JSON, tolkes altid som JSON, selvom afsenderen angiver det som noget andet. Mange værktøjer sender JSON med indholdstypen »form«, og det sikrer, at de fortsat fungerer.
  • Formularer og XML-indhold kan indeholde felter, som du ikke har tilknyttet. Det er ikke noget problem: Afsenderen bestemmer selv formatet, så disse indholdsdele undgår den strenge kontrol, der gælder for JSON, som du har kontrol over.
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

XML-attributter

Et XML-attribut er tilgængeligt under sit navn med præfikset @_, så <order id="7"> kortlægges som order.@_id, og <order><name>Bob</name></order> som order.name. Værdierne leveres som tekst, hvilket sikrer, at lange id’er bevares nøjagtigt.

Opdeling af arrays i sekvenser

Når en forespørgsel indeholder en liste - f.eks. 20 ordrer fra et ERP-system eller et parti lageropdateringer - vil man normalt have, at arbejdsgangen kører én gang pr. post og ikke én gang for hele partiet.

Under Avancerede indstillinger -> Opdel arrays i serier skal du angive stien til arrayet:

Sti Anvendes, når
items Arrayet er et felt på øverste niveau: { "items": [ ... ] }
data.orders Den er indlejret: { "data": { "orders": [ ... ] } }
$ Selve brødteksten udgør arrayet: [ { ... }, { ... } ]
(tom) Fra. Ét kørsel pr. anmodning - standardindstillingen.

Hvert element udgør sin egen kørsel med det pågældende element som payload, så kortlægningsstierne er relative i forhold til det enkelte element: kortlæg sku, ikke 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 }

Regler og begrænsninger

  • Højst 100 poster pr. anmodning. Et større parti afvises, så en ureguleret afsender ikke kan overbelaste din arbejdsgang.
  • Hvis et element mangler et tilknyttet felt eller er for stort for Shopify Flow, afvises hele anmodningen, og der sendes intet, idet det fejlramte elements position angives i fejlmeddelelsen. På den måde sikres det, at en batch behandles som »alt eller intet« i stedet for at blive delvist behandlet.
  • Elementer, der er simple værdier og ikke objekter, vises som »{ "value": ... }«.
  • Opdeling kan ikke kombineres med et synkront svar: én opkaldende kan ikke besvares af flere kørsler. Se Synkron respons.
  • Når man afspiller et tidligere løb fra historikken, sendes kun det enkelte element igen, ikke hele batchen.

I historie

Hvert element udgør en separat post, så du kan se, prøve igen og afspille hvert enkelt af dem hver for sig.