Guide d’intégration
Configuration du widget, vérification côté serveur et notes de migration pour des flux CAPTCHA familiers.
Démarrage rapide
BotFlush s’intègre en trois étapes : charger le widget, l’afficher puis vérifier les tokens côté serveur.
1. Charger le widget
Ajoutez le script du widget à votre page. Il se charge de façon asynchrone sans bloquer le rendu.
<script src="https://challenge.botflush.com/widget.js" async defer></script>2. Ajouter le conteneur
Placez un élément conteneur à l’emplacement du CAPTCHA.
<div id="bf-captcha" data-sitekey="YOUR_SITE_KEY"></div>3. Vérifier côté serveur
Quand l’utilisateur termine le défi, un token est généré. Envoyez-le à votre serveur puis vérifiez-le par API.
POST https://challenge.botflush.com/api/siteverify
Content-Type: application/json
{
"secret": "YOUR_SECRET_KEY",
"token": "TOKEN_FROM_CLIENT"
}API JavaScript
BotFlush.render()
BotFlush.render('bf-captcha', {
siteKey: 'YOUR_SITE_KEY',
callback: function(token) {
console.log('Verified:', token);
}
});BotFlush.reset()
BotFlush.reset();BotFlush.getResponse()
var token = BotFlush.getResponse();Notes de migration
BotFlush prend en charge les modèles widget et siteverify familiers. Commencez par l’URL du script, les clés et l’endpoint; testez callbacks et erreurs avant déploiement.
<!-- Before -->
<script src="https://legacy-captcha.example/api.js"></script>
<div class="captcha-widget" data-sitekey="LEGACY_SITE_KEY"></div>
<!-- After -->
<script src="https://challenge.botflush.com/widget.js"></script>
<div class="captcha-widget" data-sitekey="BOTFLUSH_KEY"></div>Contrôles de confidentialité
BotFlush est conçu pour limiter l’utilisation des données, fournir des contrôles au niveau du compte et prendre en charge les processus de revue d’entreprise. La console reste la source fiable pour connaître les contrôles de confidentialité et de données actuellement disponibles.
Modes de vérification
BotFlush propose plusieurs moteurs de défi. Configurez les moteurs autorisés par site dans la console.
| Moteur | Type | Description |
|---|---|---|
| Invisible Free | Arrière-plan | Preuve de travail sans interaction utilisateur |
| Visual Match | Interactif | Correspondance de motifs visuels |
| Emoji Click | Interactif | Sélection de l’emoji correspondant dans une grille visuelle |
| Invisible Max | Arrière-plan | Preuve de travail accélérée par GPU |
Vérification serveur
Le point de terminaison de vérification accepte une requête POST standard. Sélectionnez un environnement serveur pour afficher l’exemple correspondant.
const response = await fetch('https://challenge.botflush.com/api/siteverify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
secret: process.env.BOTFLUSH_SECRET,
token: req.body['bf-token']
})
});
const result = await response.json();
if (!result.success) {
return res.status(403).send('Verification failed');
}
import requests
response = requests.post('https://challenge.botflush.com/api/siteverify', json={
'secret': BOTFLUSH_SECRET,
'token': request.form['bf-token'],
})
if not response.json().get('success'):
abort(403)
$payload = json_encode([
'secret' => getenv('BOTFLUSH_SECRET'),
'token' => $_POST['bf-token'] ?? ''
]);
$context = stream_context_create(['http' => [
'method' => 'POST',
'header' => 'Content-Type: application/json',
'content' => $payload,
]]);
$response = file_get_contents('https://challenge.botflush.com/api/siteverify', false, $context);
$result = json_decode($response, true);
if (empty($result['success'])) { http_response_code(403); exit; }
payload, _ := json.Marshal(map[string]string{
"secret": os.Getenv("BOTFLUSH_SECRET"),
"token": r.FormValue("bf-token"),
})
resp, err := http.Post("https://challenge.botflush.com/api/siteverify",
"application/json", bytes.NewBuffer(payload))
if err != nil { http.Error(w, "verify failed", 502); return }
defer resp.Body.Close()
var result struct{ Success bool }
json.NewDecoder(resp.Body).Decode(&result)
if !result.Success { w.WriteHeader(http.StatusForbidden); return }
HttpClient client = HttpClient.newHttpClient();
String body = """
{
"secret": "%s",
"token": "%s"
}
""".formatted(System.getenv("BOTFLUSH_SECRET"), token);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://challenge.botflush.com/api/siteverify"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
Map<String, Object> result = new ObjectMapper().readValue(response.body(), Map.class);
if (!Boolean.TRUE.equals(result.get("success"))) {
throw new SecurityException("Verification failed");
}
using var client = new HttpClient();
var payload = new {
secret = Environment.GetEnvironmentVariable("BOTFLUSH_SECRET"),
token = Request.Form["bf-token"].ToString()
};
var response = await client.PostAsJsonAsync(
"https://challenge.botflush.com/api/siteverify",
payload);
var result = await response.Content.ReadFromJsonAsync<VerifyResult>();
if (result?.Success != true) {
return Forbid();
}
Téléchargements
Node Inspector — extension Chrome
Installation: Téléchargez puis décompressez, ouvrez les extensions Chrome, activez le mode développeur et chargez le dossier décompressé.
Télécharger Node Inspector (.zip)