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 aucune technique d'anti-détection.
Sur un pipeline CAPTCHA interne, seuls trois événements méritent de faire sonner un canal Slack : un taux d'échec qui franchit votre seuil, un temps de résolution qui dérive, une file d'attente qui sature les threads de votre plan. Le reste appartient au tableau de bord, pas au canal d'astreinte. Un webhook entrant et une dizaine de lignes de Python couvrent ces trois cas — à condition de fixer les seuils avant d'écrire le code.
Les trois signaux qui méritent une alerte
| Signal | Point de départ raisonnable | Ce qu'il révèle |
|---|---|---|
| Taux d'échec sur fenêtre glissante | > 30 % sur les 50 dernières tâches | Sitekey périmée, mauvais paramètre, incident réseau |
| Temps de résolution médian | Dérive de plus de 50 % sur votre référence hebdomadaire | File saturée ou charge inhabituelle |
| Threads occupés en continu | Tous les threads du plan pendant 10 minutes | Le plan est sous-dimensionné pour votre volume |
Ces valeurs sont des points de départ : mesurez une semaine de trafic normal, puis calez-les sur votre référence. Un scraping nocturne et une suite de tests de non-régression n'ont pas le même profil.
Étape 1 : créez le webhook Slack entrant
Ouvrez api.slack.com/apps, créez une application, activez Incoming Webhooks, ajoutez un webhook à l'espace de travail, choisissez le canal cible et copiez l'URL.
Créez un canal dédié — #captcha-alertes par exemple — plutôt que d'écrire dans le canal général : une alerte noyée dans une conversation produit est une alerte que personne ne traite.
Étape 2 : envoyez l'événement depuis votre pipeline
Le webhook accepte un simple POST JSON. Stockez son URL dans une variable d'environnement injectée par votre CI ou votre coffre : c'est un secret, elle permet d'écrire dans votre espace de travail.
import os, requests
def notify(text: str) -> None:
requests.post(os.environ['SLACK_WEBHOOK'], json={'text': text}, timeout=10)
Appelez notify() là où vous connaissez déjà l'issue de la tâche, après l'interrogation du résultat — jamais depuis un gestionnaire d'exception générique. Le message porte l'identifiant de tâche, le type de CAPTCHA (reCAPTCHA v2, Cloudflare Turnstile, GeeTest v3…), l'environnement et le code d'erreur — dans cet ordre, pour rester lisible sur mobile.
Étape 3 : imposez un délai de silence
Une alerte par échec est le moyen le plus sûr de faire ignorer votre canal. Trois règles :
- Alerter sur un taux, pas sur un événement. Calculez le taux d'échec sur une fenêtre glissante d'au moins 20 tâches avant de déclencher quoi que ce soit.
- Poser un cooldown de 5 minutes minimum par type d'alerte : la deuxième notification identique dans la fenêtre est comptée, pas envoyée.
- Regrouper le reste dans un digest quotidien : volume traité, taux de réussite, temps médian, incidents notables. Il se lit en dix secondes le matin.
Pour une équipe répartie entre Paris, Bruxelles et Montréal, ancrez l'horodatage du digest sur un fuseau explicite (Europe/Paris) et affichez-le : sans cela, les rapports d'incident divergent.
Corrélez chaque alerte à vos journaux
Instrumentez les appels CAPTCHA : durée totale d'obtention du token, code retour HTTP, identifiant de tâche, taille de la file d'attente interne. Séparez les journaux par environnement et propagez l'identifiant de trace de votre traçage distribué, OpenTelemetry par exemple.
L'alerte ne remplace pas le journal : elle donne l'identifiant qui permet de rejouer le scénario complet. Si vos workers tournent chez OVHcloud, Scaleway ou dans une région européenne d'AWS, exportez ces journaux hors de la machine avant qu'elle ne soit recyclée.
Ce qu'une alerte ne doit jamais transporter
Un message Slack est stocké, indexé et accessible à toute l'équipe :
- Aucun secret. Ni clé API CaptchaAI, ni URL de webhook, ni cookie de session : envoyez l'identifiant de tâche, pas la requête complète.
- Aucune donnée personnelle inutile. Si vos formulaires de test contiennent des adresses e-mail ou des identifiants clients, masquez ces champs avant l'envoi. Le principe de minimisation du RGPD vaut aussi pour un canal interne conservé sans limite de durée.
Dépannage
| Problème | Cause probable | Correctif |
|---|---|---|
| Le webhook renvoie 403 | URL révoquée ou application désinstallée | Régénérez le webhook et remettez l'URL dans le coffre de secrets |
| Le canal ne reçoit rien | Webhook associé à un autre canal | Vérifiez le canal cible dans la configuration de l'application Slack |
| Alertes en rafale | Aucun cooldown, alerte par événement | Passez au seuil sur fenêtre glissante avec silence de 5 minutes |
Liste de contrôle avant la mise en production
- Le périmètre est strictement limité à vos propres applications ou à des sources autorisées.
- La clé CaptchaAI et l'URL du webhook sont stockées dans un secret CI ou un coffre, jamais dans le code source.
- Les durées d'appel et les codes retour sont tracés pour chaque exécution.
- Chaque alerte porte un identifiant de tâche exploitable dans les journaux.
- Un cooldown et un digest quotidien sont en place avant l'activation du canal.
- Un retry idempotent couvre les erreurs transitoires.
FAQ
Quels seuils choisir au démarrage ?
Commencez à 30 % d'échecs sur les 50 dernières tâches et une dérive de 50 % du temps médian. Faites tourner ces valeurs une semaine en mode « observation » : le canal reçoit les alertes, personne n'est réveillé. Vous saurez alors lesquelles sont du bruit avant de brancher l'astreinte.
Comment savoir si mon plan CaptchaAI est sous-dimensionné ?
Surveillez le temps passé avec tous vos threads occupés. La facturation porte sur les threads, avec des résolutions illimitées par thread : si vos tâches attendent en file alors que le taux d'échec reste normal, le problème est la capacité. BASIC ($15/mois, 5 threads) suffit à une suite de tests ; un pipeline continu passe à STANDARD ($30/mois, 15 threads) ou ADVANCE ($90/mois, 50 threads).
Où stocker l'URL du webhook dans une CI ?
Dans le magasin de secrets de votre plateforme (GitHub Actions, GitLab CI, Jenkins Credentials) ou dans un coffre type Vault, injecté en variable d'environnement à l'exécution. Ne la commitez jamais : une URL qui fuit permet d'écrire dans votre espace de travail sans authentification supplémentaire.
Que faire si l'envoi de la notification échoue ?
Traitez-le comme une erreur non bloquante : journalisez-la, ne faites jamais échouer la tâche métier pour un webhook indisponible. Ajoutez un backoff exponentiel borné (3 tentatives, plafond à 30 secondes) et, pour les alertes critiques, un fallback par e-mail ou vers votre système d'astreinte.
Guides connexes
- Démarrage rapide de l'API CaptchaAI
- Tests CAPTCHA en environnements autorisés
- Tester l'endpoint API sur vos propres formulaires
- Intégrer la résolution CAPTCHA à votre chaîne CI
- Résoudre reCAPTCHA v2 via l'API
- Résoudre Cloudflare Turnstile via l'API
Des seuils mesurés, un canal dédié, un identifiant de tâche dans chaque message : vos pipelines CAPTCHA deviennent diagnosticables. – Créez votre compte CaptchaAI.