Constaia
Guías por framework

n8n

Valida documentos con Constaia desde n8n usando el nodo HTTP Request con multipart y la cabecera Authorization, y enruta el flujo según el veredicto.

n8n se ejecuta en tu servidor (o en n8n Cloud), así que la clave queda guardada como credencial y nunca llega a quien sube el documento. Esta guía usa el nodo genérico HTTP Request.

Nodos nativos

El nodo nativo de Constaia para n8n llegará próximamente, igual que las integraciones con Make y Zapier. Hasta entonces, el nodo HTTP Request cubre toda la API.

Requisitos

  • n8n 1.x (self-hosted o Cloud).
  • Una clave de test ck_test_… del panel.
  • Un nodo anterior que aporte el documento como dato binario: Form Trigger con un campo de fichero, un adjunto de Gmail u Outlook, Read/Write Files from Disk, Google Drive…

1. Credencial

En Credentials → New → Header Auth:

CampoValor
NameAuthorization
ValueBearer ck_test_…

Llámala, por ejemplo, Constaia (test). Cuando pases a producción, crea otra con la clave ck_live_….

2. Nodo HTTP Request

ParámetroValor
MethodPOST
URLhttps://api.constaia.com/v1/analyze
AuthenticationGeneric Credential Type → Header Auth → Constaia (test)
Send Bodyactivado
Body Content TypeForm-Data
Options → Timeout60000

Parámetros del cuerpo:

Parameter TypeNameValor
n8n Binary FilefileInput Data Field Name: el nombre del binario de entrada (a menudo data)
Form Dataoptionsel JSON de abajo
options
{
  "expect": "es_dni",
  "checks": { "not_expired": true, "holder": { "full_name": "{{ $json.full_name }}" } },
  "storage": "none",
  "language": "es"
}

Las opciones van en snake_case, como en la API. Si el nombre del titular viene de un paso anterior, usa una expresión como la de arriba; si no, quita holder.

Si el documento está en una URL en lugar de en un binario, cambia Body Content Type a JSON y envía:

{ "file_url": "https://…/dni.jpg", "expect": "es_dni", "checks": { "not_expired": true }, "storage": "none" }

3. Enrutar según el veredicto

Añade un nodo Switch con la regla {{ $json.verdict.status }} y tres salidas:

SalidaCondiciónEjemplo de acción
Válidois equal to validMarcar la inscripción como completa en tu hoja o CRM.
No válidois equal to invalidEnviar un email con {{ $json.verdict.reasons.map(r => r.message).join(" ") }} pidiendo otro documento.
Revisiónis equal to reviewCrear una tarea o un mensaje en el canal del equipo con el {{ $json.id }}.

Para errores de la API (clave incorrecta, formato no admitido, créditos agotados), activa Settings → On Error → Continue (using error output) en el nodo HTTP Request y trata esa salida aparte.

4. Recibir webhooks (opcional)

Para análisis con "async": true, crea un flujo con un nodo Webhook (método POST, opción Raw Body activada) y registra su URL de producción en el panel de Constaia. Verifica la firma en un nodo Code antes de seguir:

Code (Run Once for All Items)
const crypto = require("crypto"); // requiere NODE_FUNCTION_ALLOW_BUILTIN=crypto
const { headers } = $input.first().json;
const body = (await this.helpers.getBinaryDataBuffer(0, "data")).toString("utf8");
const secret = Buffer.from($env.CONSTAIA_WEBHOOK_SECRET.replace(/^whsec_/, ""), "base64");

const signed = `${headers["webhook-id"]}.${headers["webhook-timestamp"]}.${body}`;
const expected = crypto.createHmac("sha256", secret).update(signed).digest("base64");
const fresh = Math.abs(Date.now() / 1000 - Number(headers["webhook-timestamp"])) <= 300;
const valid = headers["webhook-signature"].split(" ").some((s) => s === `v1,${expected}`);
if (!fresh || !valid) throw new Error("Firma de Constaia no válida");

return [{ json: JSON.parse(body) }];

Según tu instalación, puede que tengas que permitir el acceso a variables de entorno desde los nodos (N8N_BLOCK_ENV_ACCESS_IN_NODE=false). Detalles de la firma en Webhooks.

Probar en modo test

Con la credencial ck_test_…, pasa al nodo HTTP Request un binario llamado dni_valid.jpg (valid), dni_expired.jpg (invalid, motivo expired) o blurry.jpg (review). El nombre del fichero binario es lo que decide el resultado, así que comprueba que el nodo anterior lo conserva.

Siguiente paso

  • Webhooks para flujos asíncronos y lotes.
  • Tipos de documento para cambiar expect por certificados médicos, justificantes de pago y más.

En esta página