Périmètre sûr : ce guide s'applique exclusivement à vos propres applications, à vos environnements de QA, de préproduction ou de production, ou à des systèmes pour lesquels vous disposez d'une autorisation écrite. Il ne décrit ni l'automatisation de sites tiers, ni le contournement de protections, ni l'évasion d'anti-bot.
Les import maps de Deno centralisent vos dépendances dans un seul fichier deno.json et les exposent par des alias stables. Associés à l'API CaptchaAI, ils offrent un point d'intégration propre pour résoudre un CAPTCHA sans disperser des URLs de modules. Ce guide montre comment câbler cette intégration pour qu'elle tienne en production, pas seulement en démonstration.
Pourquoi les import maps simplifient l'intégration
Un import map fige l'origine et la version de chaque dépendance : le jour où vous changez de client HTTP, vous modifiez un seul alias. Cet atout se combine bien avec CaptchaAI, qui expose une API unique pour reCAPTCHA v2 et v3, Cloudflare Turnstile, GeeTest v3 et les CAPTCHA image/OCR : le contrat d'appel reste le même quel que soit le type. La facturation reste basée sur les threads (BASIC à $15/mois, 5 threads), sans coût par résolution.
Préparer votre environnement Deno
Déclarez votre dépendance HTTP dans le champ imports de deno.json, puis lancez le script avec --allow-net pour joindre l'API et --allow-env pour lire la clé. Stockez la clé CaptchaAI dans un secret de CI ou un coffre, jamais dans le code source. Vérifiez enfin que votre environnement de QA est isolé de la production.
Écrire l'appel à CaptchaAI
Encapsulez l'appel dans une fonction réutilisable qui prend la sitekey et l'URL de votre page, renvoie un token et trace la durée et le code retour. Deno fournit fetch nativement ; l'import map épingle une implémentation précise au besoin. Le contrat reste identique en Node.js :
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;
}
Vérifier le token côté backend
Le token renvoyé doit être validé par votre backend avant toute opération métier : aucune requête ne doit être acceptée sur la base d'un token périmé ou contrefait. Appliquez la résolution dans la même session que celle qui a déclenché le défi, sinon il risque d'être rejeté.
Observabilité et journalisation
Instrumentez chaque appel CAPTCHA pour obtenir des métriques exploitables : durée d'obtention du token, code retour HTTP, identifiant de tâche et taille de la file d'attente. Corrélez-les à votre traçage distribué (OpenTelemetry) pour rejouer un scénario depuis un seul identifiant.
Séparez les journaux par environnement. Si vous déployez vos workers Deno sur une région européenne (Scaleway, OVHcloud), pensez RGPD : minimisez les données personnelles journalisées et n'y stockez jamais la clé API.
Liste de contrôle avant la mise en production
| Point de contrôle | Exigence |
|---|---|
| Périmètre | Vos propres applications ou des sources autorisées. |
| Clé API | Dans un secret de CI ou un coffre, jamais dans deno.json. |
| Permissions | --allow-net et --allow-env uniquement. |
| Traçabilité | Durées et codes retour tracés. |
| Robustesse | Retry idempotent sur les erreurs transitoires. |
| Rejouabilité | Tests reproductibles en CI. |
Dépannage
| Problème | Cause probable | Correctif |
|---|---|---|
ERROR_ZERO_BALANCE |
Solde insuffisant sur la clé. | Rechargez et ajoutez une alerte de solde. |
| Token rejeté après résolution | Token appliqué dans une autre session. | Gardez résolution et soumission dans la même session. |
ERROR_WRONG_USER_KEY |
Clé mal copiée ou mauvais compte. | Recopiez la clé et stockez-la en secret de CI. |
ERROR_CAPTCHA_UNSOLVABLE |
Défi non résolu de façon fiable. | Réessayez une fois, sinon capturez le HTML et ouvrez un ticket. |
FAQ
Deno peut-il appeler l'API CaptchaAI sans dépendance externe ?
Oui. Deno intègre fetch et la lecture des variables d'environnement, donc deno run --allow-net --allow-env suffit pour joindre l'API. L'import map sert ensuite à épingler une version précise d'un client HTTP.
Comment déclarer CaptchaAI dans un import map ?
Ajoutez l'alias de votre client HTTP au champ imports de deno.json, puis importez-le par son nom court dans le module qui appelle l'API. Vous centralisez ainsi l'origine des dépendances, mise à jour en une seule ligne.
Ce guide couvre-t-il l'automatisation de sites tiers ?
Non. Tous les exemples portent sur vos propres applications ou des environnements de test autorisés par écrit. Aucune technique de contournement n'est décrite. Pour une source externe, validez d'abord les conditions d'utilisation et la base juridique.
Que faire en cas d'erreur transitoire de l'API ?
Appliquez un retry avec backoff exponentiel borné : trois tentatives, doublement du délai, plafond à 30 secondes. Tracez chaque échec avec son identifiant de tâche, puis vérifiez le réseau et le solde si l'erreur persiste.
Guides connexes
- le démarrage rapide CaptchaAI
- la QA CAPTCHA en environnements autorisés
- tester l'endpoint API sur vos formulaires
- l'intégration CAPTCHA en CI
- résoudre reCAPTCHA v2 via l'API
Fiabilisez vos workflows CAPTCHA avec une approche reproductible. – Obtenez votre clé CaptchaAI.