Guía de migración

Migra de Turnstile a CaptchaLa

Reemplazo directo en menos de 10 minutos. Conserva tus formularios, elimina la dependencia de Cloudflare y gana respaldo de desafío y endpoints en China continental.

TTurnstileCurrent setup~10 minCaptchaLaDrop-in target

Cómo es el cambio de código

Before — Turnstile
<div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
After — CaptchaLa
<button id="login-btn">Sign in</button>
<script src="https://cdn.captcha-cdn.net/captchala-loader.js"></script>
<script>
  loadCaptchala(() => Captchala.init({ appKey: 'YOUR_APP_KEY', action: 'login' })
    .onSuccess(res => onToken(res.token))
    .bindTo('#login-btn'));
</script>
Before — Turnstile server verify (Node)
const res = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', {
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body: new URLSearchParams({
    secret: process.env.TURNSTILE_SECRET,
    response: req.body['cf-turnstile-response'],
  }),
})
const data = await res.json()
if (!data.success) return res.status(400).json({ error: 'bot' })
After — CaptchaLa server verify (Node)
const res = await fetch('https://apiv1.captcha.la/v1/validate', {
  method: 'POST',
  headers: {
    'X-App-Key': process.env.CAPTCHALA_APP_KEY,
    'X-App-Secret': process.env.CAPTCHALA_APP_SECRET,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ pass_token: req.body['captchala-token'] }),
})
const { data } = await res.json()
if (!data || !data.valid) return res.status(400).json({ error: 'bot' })

Pasos de migración

  1. 1

    Regístrate y obtén tu App Key + Secret

    Crea una cuenta gratuita en CaptchaLa, añade un sitio y copia la App Key (pública) y el App Secret (lado servidor). Sin cuenta de Cloudflare requerida.

  2. 2

    Cambia la etiqueta del widget

    Reemplaza cf-turnstile por captchala y data-sitekey por data-app-key. Cambia el script src por el de nuestro CDN. La forma del widget (un div marcador + una etiqueta script) es la misma.

  3. 3

    Actualiza el nombre del campo oculto

    Turnstile inyecta cf-turnstile-response; CaptchaLa inyecta captchala-token. La mayoría de los manejadores de formularios no leen el campo por su nombre, pero si el tuyo lo hace, renombra la constante en un solo lugar.

  4. 4

    Actualiza la llamada de verificación del servidor

    Cambia el endpoint a apiv1.captcha.la/v1/validate. Aceptamos JSON (Turnstile usa form-urlencoded), así que actualiza el Content-Type y la forma del cuerpo. La respuesta sigue devolviendo un flag valid (data.valid) para tu lógica de ramificación.

  5. 5

    Despliega de forma gradual

    Mantén Turnstile en la mayoría de los formularios y pon CaptchaLa primero en un formulario de bajo tráfico. Observa la conversión y la tasa de desafíos durante un día. Expande cuando estés satisfecho — no hay mínimo ni contrato.

Preguntas frecuentes

¿Puedo conservar mi CDN de Cloudflare y aun así usar CaptchaLa?

Sí. CaptchaLa es independiente de cualquier CDN — la mayoría de nuestros clientes mantienen Cloudflare como CDN y usan CaptchaLa para la verificación. Las dos capas no entran en conflicto.

¿Seguirán aplicándose mis reglas de detección de bots de Cloudflare?

Sí — esas son funciones de Cloudflare WAF / Bot Management, independientes de Turnstile. Eliminar el widget de Turnstile no afecta a la configuración de tu zona de Cloudflare.

¿Y si estoy usando Turnstile a través de Cloudflare Workers?

La migración es la misma en el lado del Worker. Reemplaza el fetch de Turnstile por el fetch de CaptchaLa. Tenemos un fragmento en la documentación compatible con el runtime de Workers.