Périmètre sûr : Ce guide vise vos propres applications et vos environnements de QA, préproduction ou production, ou des systèmes pour lesquels vous détenez une autorisation écrite. Il ne décrit ni l'automatisation de sites tiers, ni le contournement de protections, ni l'évasion d'anti-bot.
Sidekiq traite vos jobs Ruby en arrière-plan, et c'est là que la résolution de CAPTCHA doit vivre : dans le worker, jamais dans le thread web qui répond à l'utilisateur. Placez l'appel à CaptchaAI dans un job Sidekiq, mesurez sa durée, et laissez la file absorber les pics. Ce guide le structure pour qu'il tienne en production, pas seulement au premier essai.
Pourquoi confier la résolution à un worker Sidekiq
Un appel de résolution prend plusieurs secondes : le laisser dans une requête HTTP synchrone bloque un thread web et alourdit vos temps de réponse. Un worker Sidekiq isole cette latence, offre des retries natifs et rend chaque solve observable — sur reCAPTCHA v2 et v3, Cloudflare Turnstile ou GeeTest v3, via une seule API facturée au thread.
Préparer l'environnement et la clé API
Avant d'écrire le worker, vérifiez trois points : l'environnement de QA est isolé de la production, la clé CaptchaAI vit dans un secret CI ou un coffre (Rails credentials, Vault) plutôt qu'en dur dans le dépôt, et Redis — le backend de Sidekiq — est joignable depuis le worker.
Encapsuler l'appel dans un job réutilisable
Isolez l'appel à CaptchaAI dans une fonction unique qui prend la sitekey et l'URL de votre propre page et renvoie un token. Le worker n'a plus qu'à l'invoquer. L'exemple ci-dessous, en Node.js, illustre le contrat createTask ; la même logique se transpose dans un worker Ruby.
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;
}
Dans la méthode perform, appelez cette abstraction, attendez le token, puis poursuivez le flux métier. Gardez le job idempotent : rejoué par Sidekiq, il ne doit ni double-facturer ni corrompre l'état.
Vérifier le token côté backend
Le token renvoyé doit être validé par votre backend avant toute opération métier. Appliquez-le dans la session qui a déclenché le défi — mêmes cookies : une session dépareillée est la première cause de rejet après résolution.
Aligner la concurrence Sidekiq sur vos threads CaptchaAI
CaptchaAI facture au thread concurrent, pas au solve : BASIC ($15/mois, 5 threads) autorise cinq résolutions simultanées, STANDARD ($30/mois, 15 threads) en autorise quinze. Réglez la concurrence de votre file de solve sur ce plafond ; au-delà, les jobs excédentaires attendent sans gain de débit. Hébergés chez OVHcloud ou Scaleway (eu-west-3, Paris), vos workers dédient une file Sidekiq à la résolution, plafonnée au forfait.
Signaux à instrumenter
Instrumentez chaque appel et corrélez les journaux à votre traçage distribué (OpenTelemetry). Côté RGPD, un identifiant de tâche et un horodatage suffisent au diagnostic, sans consigner le contenu des formulaires.
| Signal | Ce qu'il révèle |
|---|---|
| Durée d'obtention du token | La latence réelle du solve, hors retries |
| Code retour HTTP | Les erreurs API à corréler à vos alertes |
| Taux d'acceptation en aval | Le token est validé dans la bonne session |
| Taille de la file Sidekiq | La saturation face à votre allocation de threads |
Dépannage des incidents fréquents
| Symptôme | Cause probable | Correctif |
|---|---|---|
ERROR_ZERO_BALANCE |
Solde sous le minimum par tâche | Rechargez et ajoutez une alerte de solde |
| Token refusé après le solve | Session dépareillée | Rejouez le solve dans la session d'origine |
| Jobs qui s'empilent | Concurrence supérieure au nombre de threads | Alignez la file sur le plafond du forfait |
FAQ
Comment appeler CaptchaAI depuis un worker Sidekiq ?
Placez l'abstraction dans la méthode perform : le job soumet la tâche, attend le token, puis le transmet à l'étape suivante. Gardez la méthode courte et idempotente pour qu'un rejeu ne relance aucun effet de bord.
Faut-il aligner la concurrence Sidekiq sur le nombre de threads ?
Oui, pour la file dédiée à la résolution. Régler la concurrence au-dessus de votre allocation de threads ne fait qu'empiler les jobs en attente. Dimensionnez-la sur le plafond du forfait et isolez-la des autres files.
Comment gérer les retries automatiques de Sidekiq ?
Sidekiq réessaie les jobs échoués par défaut ; bornez ce comportement pour les erreurs transitoires : trois tentatives, backoff exponentiel plafonné à 30 secondes. Pour une erreur définitive (clé invalide, solde nul), échouez vite.
Comment rester conforme au RGPD dans les journaux ?
Minimisez les données personnelles collectées : journalisez l'identifiant de tâche, la durée et le code retour, pas le contenu des champs. Fixez une durée de rétention et vérifiez vos obligations RGPD.
Guides connexes
- Démarrage rapide CaptchaAI
- QA CAPTCHA en environnements autorisés
- Tester l'endpoint API sur vos formulaires
- Intégration CAPTCHA en CI
- Résoudre reCAPTCHA v2 via API
Structurez vos workers CAPTCHA de façon méthodique et reproductible. – Obtenez votre clé CaptchaAI.