Datastrukturer och uppdelning av arrayer
Workflow Webhooks-funktionen analyserar JSON-, formulärkodade, multipart- och XML-innehåll och kan utlösa en Shopify Flow-körning för varje post i en array.
Det är inte alla system som skickar JSON, och inte alla förfrågningar gäller en enda sak. Två inställningar täcker båda fallen.
Kroppsformat
Formatet hämtas från begärans Content-Type-rubrik. Oavsett format använder din fältmappning samma punktbaserade sökvägar.
| Innehållstyp | Tolkas som | Vanliga avsändare |
|---|---|---|
application/json |
JSON | De flesta API:er, n8n, Make, Zapier |
application/x-www-form-urlencoded |
Formulärfält | Twilio, PayPal IPN, vanliga HTML-formulär |
multipart/form-data |
Formulärfält och fildelar blir filnamn | Formulärskapare, uppladdningsändpunkter |
text/xml, application/xml, *+xml |
XML | Äldre ERP- och transportörsystem |
Två saker som är bra att veta:
- Ett innehåll som är giltig JSON tolkas alltid som JSON, även om avsändaren betecknar det som något annat. Många verktyg skickar JSON med innehållstypen ”form”, och detta gör att de fortsätter att fungera.
- Formulär och XML-innehåll kan innehålla fält som du inte har mappat. Det är inget problem: avsändaren bestämmer själv formatet, så dessa innehåll undgår den strikta kontrollen som gäller för JSON som du själv hanterar.
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: BodyXML-attribut
Ett XML-attribut är tillgängligt under sitt namn med prefixet @_, så <order id="7"> mappas som order.@_id, och <order><name>Bob</name></order> blir order.name. Värdena överförs som text, vilket gör att långa ID:n bevaras exakt.
Att dela upp arrayer i sekvenser
När en förfrågan innehåller en lista - till exempel 20 beställningar från ett ERP-system eller en sats med lageruppdateringar - vill man vanligtvis att arbetsflödet ska köras en gång per post, inte en gång för hela satsen.
Under Avancerade inställningar -> Dela upp matriser i serier anger du sökvägen till matrisen:
| Sökväg | Använd när |
|---|---|
items |
Matrisen är ett fält på högsta nivån: { "items": [ ... ] } |
data.orders |
Den är kapslad: { "data": { "orders": [ ... ] } } |
$ |
Själva kroppen är en array: [ { ... }, { ... } ] |
| (tom) | Av. En körning per begäran, standardinställningen. |
Varje element blir ett eget körningsförlopp med det elementet som nyttolast, så mappningsvägarna är relativa till själva objektet: mappa sku, inte items.0.sku.
{
"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 och begränsningar
- Högst 100 poster per begäran. En större sats avvisas för att förhindra att en oönskad avsändare överbelastar ditt arbetsflöde.
- Om någon post saknar ett mappat fält eller är för stor för Shopify Flow avvisas hela begäran och ingenting skickas, samtidigt som den felaktiga postens position anges i felmeddelandet. På så sätt blir en batch antingen helt godkänd eller helt avvisad, istället för att endast delvis tillämpas.
- Objekt som består av enkla värden istället för objekt skickas i formatet
{ "value": ... }. - Uppdelning kan inte kombineras med ett synkront svar: en anropare kan inte besvaras av flera körningar. Se Synkron respons.
- När man spelar upp ett tidigare körningsresultat från historiken skickas endast det enskilda objektet på nytt, inte hela batchen.
I historia
Varje post är en egen post, så du kan visa, försöka igen och spela upp var och en separat.
