Tutoriales

n8n + CaptchaAI: flujo de trabajo de resolución de CAPTCHA sin código

Sí: puedes montar un flujo de resolución de CAPTCHA totalmente automático en n8n sin escribir backend. Con nodos HTTP Request y el soporte nativo de bucles de n8n construyes el ciclo enviar → sondear → reutilizar el token, y el propio flujo reintenta hasta que la resolución termina. Para las agencias y freelancers que ya orquestan sus flujos en n8n y facturan en USD, esto evita levantar un microservicio aparte solo para hablar con la API de CaptchaAI.


¿n8n o Zapier para resolver CAPTCHA?

Resolver un CAPTCHA no es una llamada única: envías la tarea y consultas el resultado varias veces hasta que está listo. Ese sondeo con reintentos es justo lo que los bucles nativos de n8n resuelven con soltura y en Zapier tendrías que forzar:

Característica n8n Zapier
Bucles y reintentos Nativos (bucle IF, nodo Loop) Limitados (solo Paths)
Autohospedaje Sí (gratis) No (solo nube)
Nodos de código JavaScript completo Limitado
Coste Gratis (autohospedado) o nube de pago De pago (por tarea)
Facilidad de configuración Media Alta

El flujo de un vistazo: enviar, sondear, reutilizar

Manual Trigger / Cron
    ↓
HTTP Request: Submit CAPTCHA
    ↓
Wait: 10 seconds
    ↓
Loop: Poll until solved
    ├── HTTP Request: Get result
    ├── IF: status == 1? → Exit loop
    └── Wait: 5 seconds → Loop again
    ↓
HTTP Request: Use token

Nodo 1: enviar el CAPTCHA

Añade un nodo HTTP Request con esta configuración:

  • Método: POST
  • URL: https://ocr.captchaai.com/in.php
  • Tipo de contenido del cuerpo: Form URL Encoded

Parámetros del cuerpo:

Nombre Valor
key {{ $credentials.captchaaiApiKey }} o codifica tu clave
method userrecaptcha
googlekey 6Le-SITEKEY
pageurl https://example.com
json 1

Respuesta:

{
  "status": 1,
  "request": "71823456"
}

El campo request es el identificador de la tarea que usarás para sondear.


Nodo 2: esperar antes del primer sondeo

Añade un nodo Wait con un Wait Time de 10 y la unidad en Seconds. Esta pausa le da tiempo al servicio de resolución a empezar a procesar la tarea antes de que lances la primera consulta, y así evitas una ráfaga de CAPCHA_NOT_READY innecesarios.


Nodo 3: sondear el resultado con un bucle

n8n admite bucles con el nodo Loop Over Items o conectando la salida falsa (false output) de un nodo IF de vuelta a un nodo anterior. Tienes dos caminos.

Opción A: bucle con un nodo IF

Añade un nodo HTTP Request de consulta:

  • Método: GET
  • URL: https://ocr.captchaai.com/res.php
  • Parámetros de consulta: key, action=get, id={{ $json.request }}, json=1

Conéctalo a un nodo IF con la condición {{ $json.status }} Equal a 1. Según el resultado:

  • Salida verdadera → continúa con la siguiente acción (usar el token).
  • Salida falsa → nodo Wait (5 segundos) → vuelve al nodo de consulta.

Opción B: nodo de código

Para tener más control, usa un nodo Code:

const apiKey = 'YOUR_API_KEY';
const taskId = $input.first().json.request;

for (let i = 0; i < 24; i++) {
  await new Promise(r => setTimeout(r, 5000));

  const resp = await fetch(
    `https://ocr.captchaai.com/res.php?key=${apiKey}&action=get&id=${taskId}&json=1`
  );
  const data = await resp.json();

  if (data.status === 1) {
    return [{ json: { token: data.request, taskId } }];
  }
  if (data.request !== 'CAPCHA_NOT_READY') {
    throw new Error(`CaptchaAI error: ${data.request}`);
  }
}

throw new Error(`Task ${taskId} timed out`);

El tope de 24 vueltas del for es tu límite de seguridad: si algo falla, corta con un error en lugar de sondear sin fin.


Nodo 4: usar el token resuelto

Añade otro nodo HTTP Request para enviar el formulario con el token ya resuelto:

Configuración Valor
Método POST
URL https://staging.example.com/submit
Tipo de contenido del cuerpo Form URL Encoded

En los parámetros del cuerpo incluye los datos de tu formulario y añade el token resuelto en el campo g-recaptcha-response con el valor {{ $json.token }}.


Guarda la clave API de forma segura

Para no exponer la clave en cada nodo, usa el sistema de Credentials de n8n:

  1. Ve a Credentials → Add Credential → Header Auth.
  2. Nombre: CaptchaAI API Key.
  3. Guarda la clave de forma segura.

O bien recurre a variables de entorno:

# In your n8n environment
export CAPTCHAAI_API_KEY="your_key_here"

Y la referencias en los nodos con {{ $env.CAPTCHAAI_API_KEY }}.


Variante para CAPTCHA de imagen

Para los CAPTCHA de imagen (Image/OCR), ajusta el nodo de envío:

Nombre Valor
method base64
body Imagen codificada en Base64 (de un nodo o URL anterior)

Para convertir la URL de una imagen a base64 dentro de n8n, añade un nodo Code antes del envío:

const imageUrl = $input.first().json.imageUrl;
const resp = await fetch(imageUrl);
const buffer = Buffer.from(await resp.arrayBuffer());
const base64 = buffer.toString('base64');

return [{ json: { imageBase64: base64 } }];

Flujo automático de control de saldo

Crea un flujo independiente, programado con Cron, que vigile tu saldo y te avise antes de quedarte sin crédito:

Cron (daily at 9 AM)
    ↓
HTTP Request: GET res.php?action=getbalance
    ↓
IF: balance < 5
    ↓
Slack / Email: "CaptchaAI balance low: $X.XX"

Un aviso a tiempo evita que un pipeline de QA se detenga a mitad de una ejecución nocturna por saldo agotado.


Preguntas frecuentes

¿Conviene usar n8n Cloud o la versión autohospedada para resolver CAPTCHA?

Depende de tu volumen. El autohospedaje es gratuito y no cobra por ejecución, ideal si procesas muchos CAPTCHA; n8n Cloud te ahorra el mantenimiento del servidor pero factura por ejecución. Para un pipeline de QA con picos, autohospedar suele salir más económico.

¿Cómo evito que el bucle de sondeo se ejecute de forma indefinida?

Pon siempre un tope de iteraciones. En el nodo Code, el for corta a las 24 vueltas; con el bucle IF, añade un contador y una rama que lance un error al superarlo.

¿n8n funciona con Cloudflare Turnstile y no solo con reCAPTCHA v2?

Sí. Cambia el parámetro method a turnstile y envía sitekey en lugar de googlekey; el resto del flujo no cambia. CaptchaAI también resuelve reCAPTCHA v3 y GeeTest v3 con el mismo patrón.

¿Cuánto cuesta resolver CAPTCHA con CaptchaAI desde n8n?

CaptchaAI cobra por threads concurrentes, no por resolución, y cada plan incluye resoluciones ilimitadas dentro del mes. Los precios arrancan en el plan BASIC ($15/mes, 5 threads) y escalan hasta VIP-3 ($7,500/mes, 5.000 threads). En n8n solo consumes un thread mientras una tarea está en curso.


Solución de problemas frecuentes

Cuando el flujo no se comporta, casi siempre es uno de estos cuatro puntos:

  • El bucle de sondeo no termina nunca — falta un límite de iteraciones; añade un contador y corta tras 24 vueltas.
  • CAPCHA_NOT_READY sin parar — la espera inicial es demasiado corta; súbela a 15–20 segundos.
  • El token no llega al siguiente nodo — ruta de expresión incorrecta; verifica que {{ $json.token }} coincida con la salida.
  • Credenciales no encontradas — la variable de entorno no está definida; reinicia n8n tras configurarla.

Empieza a resolver CAPTCHA desde n8n

Crea tu cuenta en captchaai.com, copia tu API key y colócala en el nodo HTTP Request para resolver tu primer reCAPTCHA v2 desde n8n en minutos.


Guías relacionadas

Cómo encaja CaptchaAI en tu propio pipeline

El patrón de integración con CaptchaAI es siempre el mismo, sea cual sea el lenguaje o framework que uses:

  1. Tu test detecta el widget de CAPTCHA en la página de tu propia aplicación (formulario de QA, landing de staging, endpoint de preproducción).
  2. Tu test envía a CaptchaAI los datos públicos del widget (sitekey, URL de la página, tipo de CAPTCHA).
  3. CaptchaAI devuelve un token válido para esa página.
  4. Tu test inyecta ese token en el campo correspondiente y envía el formulario.
  5. Tu backend verifica el token con el proveedor de CAPTCHA, exactamente igual que con un usuario real.

Este flujo se aplica únicamente a integraciones que tú controlas. No se utiliza para sortear protecciones de sitios de terceros.

Buenas prácticas en tu entorno de QA

  • Prueba siempre sobre tu propia aplicación o entornos explícitamente autorizados.
  • Mantén una API key de CaptchaAI separada para QA, distinta de la de producción, para no mezclar métricas.
  • Define timeouts y reintentos razonables (backoff exponencial) para no acumular trabajos pendientes durante caídas.
  • Versiona tus snapshots de configuración (sitekey, action, umbrales) junto al código de los tests.
  • Revisa el changelog de tu proveedor de CAPTCHA para anticipar cambios que te afecten.

Configuración recomendada para tu pipeline

Usa la misma configuración de navegador en QA, staging y CI para que un test no funcione en local y luego falle en CI sin razón aparente.

from selenium import webdriver

def make_driver(headless: bool = True) -> webdriver.Chrome:
    options = webdriver.ChromeOptions()
    if headless:
        options.add_argument('--headless=new')
    options.add_argument('--window-size=1280,800')
    options.add_argument('--lang=es-ES')
    return webdriver.Chrome(options=options)

Mantener el viewport, el idioma y el user-agent idénticos en todos los runners reduce la varianza y facilita comparar resultados entre ejecuciones de tu QA.

Métricas y observabilidad

Incluye métricas para los pasos de CAPTCHA en tus pipelines de QA. Así detectas regresiones en tu integración antes de que lleguen a producción:

  • Tiempo de resolución por intento — desde la solicitud a CaptchaAI hasta la entrega del token.
  • Tasa de éxito por endpoint propio — cuántas verificaciones backend pasan respecto al total de intentos.
  • Distribución de errores — agrupados por código (ERROR_*, timeouts internos, fallos de red).
  • Latencia extremo a extremo — render de la página, resolución de CAPTCHA y respuesta de tu backend.

Conserva las trazas (logs, capturas, HAR) para reproducir incidentes cuando un test falle de forma intermitente.

Valida tus integraciones de CAPTCHA en entornos propios con CaptchaAI.

Los comentarios están deshabilitados para este artículo.