Cuando la tasa de resolución se desploma, el instinto es abrir un ticket. Pero casi toda caída se explica por una de cuatro capas —tu código, el sitio de destino, el proxy o el servicio de CaptchaAI— y puedes aislar cuál con un árbol de decisión y un script, antes de escalar.
El árbol de decisión en 30 segundos
Solve rate dropped
├── Is the API returning errors? → Check error codes
│ ├── ERROR_WRONG_USER_KEY → API key issue
│ ├── ERROR_ZERO_BALANCE → Balance depleted
│ ├── ERROR_NO_SLOT_AVAILABLE → Rate limiting
│ └── ERROR_CAPTCHA_UNSOLVABLE → CAPTCHA changed
├── Are tokens returned but rejected by the target site?
│ ├── Token expired before submission → Speed up injection
│ ├── Sitekey changed → Re-extract from page
│ └── Domain mismatch → Check pageurl parameter
├── Are proxies failing?
│ ├── Proxy banned by target → Rotate proxies
│ └── Proxy timeout → Check proxy health
└── Did the target site change?
├── New CAPTCHA type → Update method parameter
├── JavaScript changes → Re-analyze page
└── Rate limiting by site → Reduce frequency
Un caso típico: un equipo que monitorea un portal de cita previa —trámite que en España, México o Argentina genera colas— ve caer su tasa del 92 % al 40 % un lunes. El árbol lo aísla en orden.
Capa 1 · Empieza por los datos, no por las hipótesis
Antes de teorizar, mide. Este script revisa tu saldo y lanza resoluciones de prueba para recoger la distribución real de errores:
# diagnose_solve_rate.py
import os
import requests
from collections import Counter
API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")
def check_balance():
"""Verify API key and balance."""
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "getbalance", "json": "1",
})
result = resp.json()
print(f"Balance: {result}")
return result
def test_solve(sitekey, pageurl, runs=5):
"""Run test solves and collect error statistics."""
errors = Counter()
successes = 0
for i in range(runs):
# Submit
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": "1",
})
result = resp.json()
if result.get("status") != 1:
errors[result.get("request", "UNKNOWN")] += 1
print(f" Run {i+1}: Submit error: {result.get('request')}")
continue
task_id = result["request"]
import time
time.sleep(15)
# Poll
for _ in range(25):
poll = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get",
"id": task_id, "json": "1",
})
poll_result = poll.json()
if poll_result.get("status") == 1:
successes += 1
print(f" Run {i+1}: Solved")
break
if poll_result.get("request") != "CAPCHA_NOT_READY":
errors[poll_result.get("request", "UNKNOWN")] += 1
print(f" Run {i+1}: Error: {poll_result.get('request')}")
break
time.sleep(5)
else:
errors["TIMEOUT"] += 1
print(f" Run {i+1}: Timeout")
print(f"\nResults: {successes}/{runs} solved")
if errors:
print(f"Errors: {dict(errors)}")
# Run diagnostics
print("=== Balance Check ===")
check_balance()
print("\n=== Test Solves ===")
test_solve("YOUR_SITEKEY", "https://your-staging.example.com", runs=5)
Lee la distribución de errores
El código que más se repite suele apuntar a la causa raíz; crúzalo con esta tabla:
| Error | Significado | Acción |
|---|---|---|
ERROR_CAPTCHA_UNSOLVABLE |
CAPTCHA demasiado complejo o modificado | Repórtalo a CaptchaAI y confirma que el sitekey es correcto |
ERROR_WRONG_CAPTCHA_ID |
Estás consultando un ID de tarea equivocado | Corrige el seguimiento del ID de tarea en tu código |
ERROR_ZERO_BALANCE |
Sin saldo | Recarga tu saldo |
ERROR_NO_SLOT_AVAILABLE |
Límite de solicitudes alcanzado | Reduce la concurrencia o añade un retraso |
CAPCHA_NOT_READY (tiempo de espera agotado) |
La resolución tarda demasiado | Aumenta el tiempo de espera del sondeo y valida el sitekey |
Si casi todo falla con
ERROR_WRONG_USER_KEY, la clave API ya no es válida: corrígela antes de seguir.
Capa 2 · El sitio de destino cambió sin avisar
La causa número uno de una caída repentina no es tu código, sino el sitio, que se actualiza y deja tus parámetros obsoletos.
¿Cambió el sitekey?
Abre la página, entra en DevTools (F12) y busca:
- reCAPTCHA: el atributo
data-sitekeyo la llamadagrecaptcha.render. - Cloudflare Turnstile: el atributo
data-sitekeydentro del widget de Turnstile. - GeeTest: el parámetro
gten la inicialización de GeeTest.
Si cambió, vuelve a alinearlo:
- Copia el
data-sitekeyactual desde el DOM. - Sustitúyelo en tu configuración.
- Redespliega y lanza una resolución de prueba.
Un solo carácter distinto hace fallar todo; compara la cadena completa.
¿Cambió el tipo de CAPTCHA?
Algunos sitios migran de proveedor y dejan tu parámetro method obsoleto:
- reCAPTCHA v2 → reCAPTCHA v3 (invisible)
- reCAPTCHA → Cloudflare Turnstile
- Image CAPTCHA → reCAPTCHA Enterprise
Si cambió, actualiza el parámetro method para que coincida.
¿Caducó el token antes de llegar al formulario?
Los tokens tienen validez limitada; un pipeline lento los deja caducar antes de inyectarlos:
| Tipo de CAPTCHA | Vida útil del token |
|---|---|
| reCAPTCHA v2 | ~120 segundos |
| reCAPTCHA v3 | ~120 segundos |
| Cloudflare Turnstile | ~300 segundos |
| GeeTest v3 | ~60 segundos |
Mide el tiempo entre
getTaskResulty el envío. Si supera los 60 segundos, el sitio rechazará un token que CaptchaAI ya resolvió bien; la fuga está ahí.
Capa 3 · El proxy y la reputación de la IP de salida
La calidad del proxy afecta directamente a la tasa en los CAPTCHA basados en token, donde CaptchaAI resuelve a través de tu salida de red:
| Problema del proxy | Síntoma | Solución |
|---|---|---|
| Proxy bloqueado por el sitio de destino | El token se resuelve pero el sitio lo rechaza | Rota a nuevas IPs de salida autorizadas |
| El proxy devuelve errores | ERROR_PROXY_NOT_FOUND |
Verifica que el proxy esté activo y accesible |
| Se detecta una salida de centro de datos | Tasa de resolución más baja | Cambia a una salida residencial de confianza |
| El país del proxy no coincide | Resultados inconsistentes | Haz coincidir el país del proxy con el del sitio de destino |
Prueba primero sin proxy (si el tipo lo admite): si la tasa se recupera, ya sabes qué capa falla.
Capa 4 · ¿El fallo está en el servicio?
Solo llegas aquí con las tres capas anteriores limpias. Antes de escalar, contrasta con datos y prepara el informe.
Compara contra tu línea base
Sin línea base previa, "bajó mucho" es una sensación, no un dato:
| Métrica | Línea base | Actual | Delta | ¿Preocupa? |
|---|---|---|---|---|
| Tasa de resolución | 95 % | ? | caída > 5 % = investiga | |
| Tiempo medio de resolución | 15 s | ? | aumento > 50 % = investiga | |
| Tasa de error | 2 % | ? | > 5 % = investiga | |
| Aceptación de tokens | 98 % | ? | caída > 3 % = cambió el sitio |
Cuándo escalar al soporte de CaptchaAI
Contacta con el soporte solo cuando el diagnóstico ya descartó lo evidente:
- Todos los pasos pasan, pero la tasa sigue baja.
- La tasa de
ERROR_CAPTCHA_UNSOLVABLEsupera el 20 % en sitekeys que antes funcionaban. - El saldo aparece correcto, pero las resoluciones siguen fallando.
- El problema persiste durante más de 2 horas.
Adjunta en tu reporte:
- Tipo de CAPTCHA y sitekey.
- URL del sitio de destino.
- Distribución de errores (del script de diagnóstico).
- Cuándo empezó el problema.
- Cambios recientes en tu código.
Tabla de referencia rápida
Si no tienes tiempo para el árbol, arranca por el síntoma:
| Escenario | Causa más probable | Primera acción |
|---|---|---|
Todos los intentos fallan con ERROR_WRONG_USER_KEY |
Clave API no válida | Vuelve a verificar tu clave API |
| Descenso gradual a lo largo de varios días | Degradación del proxy | Rota los proxies |
| Caída repentina al 0 % | Cambió el sitekey o la página | Vuelve a extraer los parámetros del CAPTCHA |
| Se resuelve pero el sitio rechaza los tokens | Caducidad del token o dominio incorrecto | Revisa el tiempo y el parámetro pageurl |
| Funciona en staging pero falla en el objetivo | Restricciones específicas del sitio | Compara los parámetros entre ambos entornos |
Preguntas frecuentes
Las dudas más frecuentes cuando la tasa cae:
¿Cómo sé si la caída es culpa de mi código o del sitio de destino?
Aísla la variable: ejecuta el script contra un staging propio. Si la tasa se mantiene ahí y solo cae contra el objetivo, el cambio está en el sitio; si falla en ambos, es tu código.
¿Subir de plan y sumar más threads mejora mi tasa de resolución?
No. Los planes de CaptchaAI (desde BASIC a $15/mes con 5 threads hasta VIP-3 a $7,500/mes con 5.000 threads) escalan la concurrencia, no la precisión: más threads resuelven más CAPTCHA en paralelo, pero no cambian la tasa de acierto de un sitekey. Si la tasa cayó, es diagnóstico, no capacidad.
¿La calidad del proxy afecta de verdad a la resolución de tokens?
Sí. En los CAPTCHA basados en token, el sitio evalúa la reputación de la IP de salida: un proxy quemado o de centro de datos hace que el token se resuelva pero el sitio lo rechace, lo que se lee como una caída aunque CaptchaAI funcione bien.
¿Cada cuánto debería medir una línea base de referencia?
Mide una línea base una vez al mes y tras cada cambio. Así la próxima caída se compara con un número real, no con tu memoria.
Artículos relacionados
- Monitoreo de SLI y SLO de la tasa de resolución
- Tendencias de rendimiento de resolución en series temporales
- Diagnóstico de caídas en la tasa de éxito al resolver CAPTCHA
Mantén tu pipeline de CAPTCHA saludable: obtén tu API key de CaptchaAI.
Guías relacionadas:
- Referencia de códigos de error de CaptchaAI
- Benchmarks de tiempos de resolución