Formatos de cuerpo y matrices de división

No todos los sistemas envían JSON, y no todas las solicitudes se refieren a un único elemento. Dos ajustes cubren ambos casos.

Formatos de cuerpo

El formato se obtiene del encabezado Content-Type de la solicitud. Sea cual sea el formato, su asignación de campos utiliza las mismas rutas con puntos.

Tipo de contenido Se ha analizado como Remitentes habituales
application/json JSON La mayoría de las API, n8n, Make, Zapier
application/x-www-form-urlencoded Campos del formulario Twilio, PayPal IPN, formularios HTML sin formato
multipart/form-data Los campos del formulario y las partes del archivo pasan a formar parte del nombre del archivo Generadores de formularios, puntos de conexión para la carga de archivos
text/xml, application/xml, *+xml XML Sistemas ERP y de transportistas más antiguos

Dos detalles que conviene conocer:

  • Un cuerpo que sea JSON válido siempre se lee como JSON, incluso cuando el remitente lo etiqueta como otra cosa. Muchas herramientas envían JSON con un tipo de contenido de formulario, y esto hace que sigan funcionando.
  • Los cuerpos de los formularios y los archivos XML pueden contener campos que usted no haya asignado. No supone ningún problema: el remitente decide su propia estructura, por lo que dichos cuerpos se saltan la comprobación estricta que se aplica al JSON que usted controla.
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

Atributos XML

Un atributo XML está disponible con su nombre precedido por el prefijo @_, de modo que <order id="7"> se asigna como order.@_id, y <order><name>Bob</name></order> como order.name. Los valores se transmiten como texto, lo que permite mantener la exactitud de los identificadores largos.

División de matrices en secuencias

Cuando una solicitud incluye una lista - por ejemplo, 20 pedidos procedentes de un ERP o un lote de actualizaciones de stock - , lo habitual es que desee que su flujo de trabajo se ejecute una vez por cada elemento, y no una sola vez para todo el lote.

En «Configuración avanzada» -> «Dividir matrices en series», indique la ruta de acceso a la matriz:

Ruta Utilícelo cuando
items La matriz es un campo de nivel superior: { "items": [ ... ] }
data.orders Está anidado: { "data": { "orders": [ ... ] } }
$ El propio cuerpo del mensaje es la matriz: [ { ... }, { ... } ]
(vacío) Desactivado. Una ejecución por solicitud; es el valor predeterminado.

Cada elemento se convierte en su propia ejecución, con ese elemento como payload, por lo que las rutas de asignación son relativas al elemento: asigne sku, y no 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 }

Normas y límites

  • Un máximo de 100 elementos por solicitud. Se rechazan los lotes más grandes para evitar que un remitente descontrolado sature su flujo de trabajo.
  • Si a algún elemento le falta un campo asignado o es demasiado grande para Shopify Flow, se rechaza toda la solicitud y no se envía nada, indicando en el mensaje de error la posición del elemento que ha dado lugar al error. De este modo, el lote se procesa en su totalidad o no se procesa en absoluto, en lugar de aplicarse parcialmente.
  • Los elementos que son valores simples, en lugar de objetos, se reciben como { "value": ... }.
  • La división no se puede combinar con una respuesta sincrónica: una llamada no puede ser atendida por varias ejecuciones. Consulte Respuesta síncrona.
  • Al volver a ejecutar una ejecución anterior desde el historial, se vuelve a enviar solo ese elemento concreto, no todo el lote.

En Historia

Cada elemento constituye una entrada independiente, por lo que podrá ver, volver a intentar y reproducir cada uno de ellos por separado.