nxar.Aprender
Integraciones: recibí datos de otros sistemas0 de 6 capítulos
  1. 1Qué puerta usar
  2. 2Tu primer endpoint
  3. 3Probalo y mirá qué llegó
  4. 4Qué recibe y qué contesta
  5. 5La API pública
  6. 6Formularios públicos

Casos de uso

  1. ·Una venta de la tienda crea una oportunidad
  2. ·Un sistema externo actualiza el estado de un caso
  3. ·Un formulario de reclamos que no duplica contactos
  4. ·Probar un webhook sin escribir código

← Volver al recorrido

Capítulo 4 de 6 · 12 min

Qué recibe y qué contesta

Cómo se validan los inputs, por qué un campo que no declaraste no llega al flujo, qué devuelve el endpoint y cuándo conviene contestar sólo el acuse.

Los Inputs y Outputs de una automation de tipo Endpoint de API son el contrato con quien llama: qué tiene que mandar, qué se valida antes de correr y qué recibe de vuelta.

Lo que entra

Para editarlos después de crear la automation: en el builder, el botón Configuración (el ícono de ajustes, arriba a la derecha) abre un diálogo con los mismos editores de Inputs y Outputs. Cerralo con Done y hacé clic en Guardar.

Diálogo de configuración de la automation con el aviso de endpoint HTTP y los editores de Inputs y Outputs
Inputs y Outputs se editan desde Configuración, en el builder. El aviso recuerda que el trigger queda fijo en http.request.

Antes de correr el primer nodo, Nxar recorre los inputs declarados y, para cada uno, mira el campo del mismo nombre en el cuerpo:

TipoQué aceptaQué recibe el flujo
textCualquier valorEl valor convertido a texto: 10045 llega como "10045"
numberUn número o un texto que sea número ("12.5")Un número. Otra cosa da error must_be_number
booleanCualquier valorfalse si llega false, "false" o "0"; true para el resto
jsonUn objeto, una lista o un texto con JSON adentroEl objeto tal cual, para leer {{inputs.cliente.email}}

Si un input está marcado req y no vino, vino vacío ("") o vino null, el endpoint contesta 422 con Input validation failed y el nombre del campo, y el flujo no corre.

Lo que no declaraste no llega al flujo. Si la tienda manda phone pero en Inputs no hay un campo phone, {{inputs.phone}} queda vacío aunque el dato haya viajado. En Audit Logs lo vas a ver en el Request, pero la automation no. Cuando un valor “desaparece”, lo primero es revisar que esté declarado con el mismo nombre, respetando mayúsculas.

Si lo que llega es una estructura (un cliente con sus datos, una lista de productos), declarala como json. Declarada como text, el flujo recibe el objeto convertido a texto y no vas a poder leer sus partes.

Un endpoint con Token secreto acepta además el cuerpo como formulario (application/x-www-form-urlencoded), que es lo que mandan algunas herramientas no-code; cada campo del formulario llega como un input. Un cuerpo vacío es válido: el flujo corre con todos los inputs sin valor.

Lo que sale

Los Outputs son los nombres que el endpoint promete devolver. El flujo los llena escribiendo en outputs, como hicimos con Asignar valor y outputs.case_id. Al terminar, Nxar arma la respuesta con cada output declarado; el que el flujo no llenó vuelve como null, así quien llama ve qué faltó en vez de un campo que no existe.

{"data":{"case_id":"6f1c2e9a-…"},"meta":{"nodesExecuted":2,"durationMs":84}}

Qué contesta: el resultado o el acuse

En el endpoint, ¿Qué contesta? tiene dos opciones, y se cambia en la vista del endpoint, en Configuración:

OpciónStatusCuerpoPara qué
El resultado de lo que corre200{"data":{…outputs},"meta":{…}}Quien llama necesita un dato de vuelta, como el case_id
Sólo el acuse de recibo202{"data":{"received":true,"event_id":"…"}}Avisos de sistemas que reintentan: confirma que llegó, sin datos
Bloque Configuración del endpoint con el selector Qué contesta abierto
Se puede cambiar sin tocar la URL ni el token. Si alguien ya lee el case_id de la respuesta, no lo pases a acuse.

En los dos casos, si el flujo falla, el endpoint devuelve el error (por ejemplo 422) y no un 200: así quien llama sabe que tiene que reintentar.

Reintentos sin duplicados

Muchos sistemas reenvían un aviso si no reciben respuesta a tiempo. Si la tienda manda el header Idempotency-Key con un identificador propio de la entrega (el número de pedido, por ejemplo), Nxar recuerda esa clave para ese endpoint: el segundo envío con la misma clave contesta 200 con "duplicate": true y no vuelve a correr el flujo. Sin el header, cada request es un evento nuevo, aunque el cuerpo sea idéntico.

curl -X POST "https://tu-workspace.nx-ar.com/public/v1/custom/tienda-reclamos" \
  -H "Content-Type: application/json" \
  -H "X-Webhook-Token: nxar_whk_REEMPLAZAR_POR_TU_TOKEN" \
  -H "Idempotency-Key: reclamo-10047" \
  -d '{"subject":"Falta el plato de la maceta","email":"cliente@ejemplo.com","order_id":"10047"}'

La respuesta de un duplicado no trae el resultado original (no se guarda). Si quien llama necesita el case_id cada vez, que no mande Idempotency-Key, o que lo guarde de la primera respuesta.

Cómo saber que te salió

  • Mandá el curl de arriba dos veces: la primera crea un Case y devuelve su case_id; la segunda contesta "duplicate": true y en Cases hay uno solo con ese asunto.
  • Mandá un curl sin subject: recibís 422 con {"subject":"required"} y no se crea nada.
  • Sabés dónde se editan los Inputs y Outputs (Configuración, en el builder) y dónde se elige qué contesta (Configuración, en la vista del endpoint).

¿Llegaste al resultado de arriba?