Périmètre sûr : ce guide s'applique uniquement à vos propres applications et à vos environnements de QA, de préproduction ou de production, ou à des systèmes pour lesquels vous disposez d'une autorisation écrite. Il ne porte pas sur l'automatisation de sites tiers ni sur des techniques d'anti-détection.
River est la file d'attente de jobs pour Go, adossée à PostgreSQL, qu'un nombre croissant d'équipes adopte pour leurs traitements en arrière-plan. Dès qu'un job traverse une étape protégée par un CAPTCHA — formulaire, connexion ou flux interne — le worker doit obtenir un token, l'appliquer, puis rendre la main sans bloquer la file. Ce guide montre comment y intégrer la résolution de CAPTCHAs de CaptchaAI de façon stable et reproductible.
Pourquoi la file d'attente change les règles
Un appel à un solveur paraît trivial dans un notebook, mais tout change quand il tourne sans supervision, en concurrence, dans un pool de workers River : il faut une latence prévisible, des modes d'échec propres et du code lisible. CaptchaAI répond à ce besoin avec une seule API couvrant les principales familles — reCAPTCHA v2 et v3, Cloudflare Turnstile et Challenge, GeeTest v3, image/OCR et grilles — facturée au thread simultané et non au solve. Le plan BASIC ($15/mois, 5 threads) suffit à un premier pool, et vous montez en threads quand la file grossit.
Le flux d'intégration en cinq étapes
- Capturez les entrées exactes attendues par la famille de CAPTCHA :
sitekey, URL de la page, action éventuelle, proxy si nécessaire. Rien de plus. - Envoyez la tâche à l'API depuis votre handler River et conservez l'identifiant.
- Interrogez le résultat à intervalle fixe, avec un plafond ferme par tâche.
- Appliquez le token dans la même session que celle qui a déclenché le défi.
- Tracez la latence, les retries et l'acceptation en aval à chaque exécution.
Encapsuler l'appel à CaptchaAI
Isolez l'appel dans une fonction réutilisable : elle prend la sitekey et l'URL de votre page, renvoie un token et trace la durée et le code retour. L'exemple Node.js ci-dessous envoie une tâche Turnstile et renvoie l'identifiant de tâche ; la logique se transpose vers un client HTTP Go :
import fetch from 'node-fetch';
const API_KEY = process.env.CAPTCHAAI_KEY;
export async function createTurnstileTask(siteKey, pageUrl) {
const res = await fetch('https://api.captchaai.com/createTask', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
clientKey: API_KEY,
task: {
type: 'TurnstileTaskProxyless',
websiteURL: pageUrl,
websiteKey: siteKey,
},
}),
});
const data = await res.json();
return data.taskId;
}
N'interrogez ensuite ni trop vite (charge inutile), ni trop lentement (le job ralentit la file), et respectez le contexte d'annulation de River plutôt que de bloquer le worker.
Vérifier le token et observer le flux
Le token doit être vérifié par votre backend avant toute opération métier, dans la même session que le défi : une session dépareillée est la première cause de rejet après résolution. Instrumentez chaque appel — durée, code retour HTTP, identifiant de tâche — et séparez les journaux par environnement, en corrélant les identifiants à votre traçage distribué (par exemple via OpenTelemetry). Surveillez l'écart entre le taux de réussite du solveur et l'acceptation du token en aval : un solve rejeté ensuite trahit un problème de session, pas de solveur.
Erreurs fréquentes
| Symptôme | Cause probable | Correctif |
|---|---|---|
ERROR_WRONG_USER_KEY |
Espaces parasites ou mauvais compte. | Recopiez la clé et stockez-la en secret CI. |
ERROR_ZERO_BALANCE |
Solde sous le minimum par tâche. | Rechargez et ajoutez une alerte de solde. |
| Token refusé après résolution | Token appliqué dans une autre session. | Gardez résolution et soumission dans le même contexte. |
Liste de contrôle avant de fusionner
- Le périmètre est limité à vos propres applications ou à des sources autorisées.
- La clé CaptchaAI est stockée dans un secret CI ou un coffre, jamais dans le code.
- Un retry idempotent avec backoff exponentiel borné couvre les erreurs transitoires.
- Le token est appliqué dans la même session que celle du défi, et tracé à chaque exécution.
FAQ
Faut-il bloquer le worker River pendant l'attente du token ?
Non, évitez de bloquer un worker entier sur un time.Sleep. Découpez l'attente en interrogations courtes et respectez le contexte d'annulation de River, pour que le job soit reprogrammé plutôt que de monopoliser un slot. Le pool reste ainsi réactif sous charge.
Où stocker la clé API CaptchaAI dans un déploiement Go ?
Dans un secret injecté à l'exécution : variable d'environnement chiffrée, secret CI ou coffre type Vault, jamais dans le dépôt. Chargez-la au démarrage et faites échouer le service si elle manque.
Le RGPD s'applique-t-il à la journalisation des appels CAPTCHA ?
Il peut s'appliquer dès que vos logs contiennent des données personnelles. Minimisez ce que vous journalisez : identifiant de tâche, durée et code retour suffisent, pas de données de formulaire. Vérifiez vos obligations RGPD et vos durées de conservation.
Guides connexes
- Le démarrage rapide CaptchaAI
- Faire de la QA CAPTCHA en environnements autorisés
- Tester l'endpoint API sur vos propres formulaires
- Intégrer la résolution CAPTCHA en CI/CD
- Résoudre reCAPTCHA v2 via l'API
Fiabilisez vos workflows CAPTCHA avec une approche méthodique et reproductible. — Obtenez votre clé CaptchaAI.