ByeBot

Ein Script-Tag, ein Div im Formular.

ByeBot einbinden.

Die Einbindung hat zwei Teile: das Widget im Browser, die Prüfung auf Ihrem Server. Dazwischen liegt ein Formularfeld namens byebot-token.

Einbinden

Wie binde ich ByeBot in ein Formular ein?

Zwei Zeilen HTML.

Ein Script-Tag und ein Div an der Stelle, an der die Prüfung erscheinen soll. Den Sitekey finden Sie im Dashboard. Für die Web-Einbindung gibt es keine Bibliothek, die Sie installieren müssten.

HTML
<script src="https://challenge.byebot.de/ray/widget.js" defer></script>

<form method="post" action="/anmeldung">
  <div class="captcha-widget" data-sitekey="IHR_SITEKEY"></div>
  <button type="submit">Absenden</button>
</form>
Die Einbau-Anleitung im Dashboard, dort ohne das Präfix data-
Die Einbau-Anleitung im Dashboard: der Seitenschlüssel zum Kopieren, darunter zwei Codeblöcke für die Skriptzeile und das Widget-Element, dann dreizehn Plattformlogos und ein Verweis auf die Anleitungen.

Echte Aufnahme des laufenden Dashboards. Der Schlüssel im Bild gehört zu einem Testkonto mit Demo-Daten. Das Widget nimmt ihn unter sitekey wie unter data-sitekey an.

Der Weg einer Formulareingabe
  • Besucher
  • Ihr Formular
  • widget.js im Browser

ByeBot

Deutschland

Prüfung bestanden

  • Token im Feld byebot-token
  • Ihr Server ruft validate_token auf
  • Antwort 200, Formular annehmen

Prüfung nicht bestanden

  • Kein gültiger Token im Formular
  • Antwort 400, Formular ablehnen

Geprüft wird in Deutschland, in jedem Tarif.

Das Widget läuft in einem eigenen Rahmen. Ihr Formular merkt davon nur eines: Nach bestandener Prüfung steht darin ein verstecktes Feld mit dem Namen byebot-token. Dieses Feld schickt der Browser beim Absenden mit, wie jedes andere auch.

Server

Wie prüfe ich das Ergebnis auf dem Server?

Ein POST an validate_token.

Ihr Backend schickt den Feldwert zusammen mit Ihrem API-Key. Erst wenn die Antwort 200 lautet, nehmen Sie das Formular an.

HTTP
POST https://challenge.byebot.de/validate_token
Content-Type: application/json

{
  "api_key": "IHR_API_KEY",
  "token":   "Wert des Feldes byebot-token"
}
  • 200Prüfung gültig. Formular annehmen.
  • 400Prüfung ungültig. Formular ablehnen.
Warum die Entscheidung auf Ihrem Server fällt

Im Browser

Nicht belastbar

  • Der Token liegt im Formular des Besuchers
  • Ein Skript kann jedes Feld selbst setzen
  • Der Browser gehört nicht Ihnen

Auf Ihrem Server

Belastbar

  • Der API-Key verlässt Ihren Server nie
  • ByeBot antwortet mit 200 oder 400
  • Erst danach nehmen Sie das Formular an
Anfrage
POST an validate_token, JSON mit api_key und token. Der Token ist der Wert des Formularfeldes byebot-token.
200
Bestanden. Die Antwort enthält zusätzlich sitekey, challenged_at, solve_time_ms und interactive_solved, falls Sie mitschreiben wollen.
400
Nicht bestanden. Die Antwort hat keinen Inhalt. Für die Entscheidung genügt der Status.
API-Key
Steht im Dashboard und gehört auf den Server. In die Seite gehört nur der Sitekey.
Geheime Schlüssel, in der Liste verdeckt
Die Liste der geheimen Schlüssel: je Zeile ein bis auf Anfang und Ende verdeckter Schlüssel, ein selbst vergebener Name, das Erstelldatum und ein Knopf zum Widerrufen.

Echte Aufnahme des laufenden Dashboards. Die Werte stammen aus einem Testkonto mit Demo-Daten.

Attribute

Welche Attribute kennt das Widget?

Zwei Pflichtangaben, vier optionale.

Alles steht am Div. Es gibt keine Konfigurationsdatei und keinen Initialisierungsaufruf, den Sie schreiben müssten.

Attribute am Widget-Div
  • Pflichtclass="captcha-widget" markiert das Div, in dem die Prüfung erscheint.
  • Pflichtdata-sitekey trägt den öffentlichen Schlüssel Ihrer Seite aus dem Dashboard.
  • Optionaldata-token-callback ruft Ihre Funktion auf, sobald ein Token vorliegt.
  • Optionaldata-expired-callback ruft Ihre Funktion auf, wenn ein Token abgelaufen ist.
  • Optionaldata-domain überschreibt die Domain, gegen die geprüft wird. Für WebViews.
  • Optionaldata-width setzt die Breite in Pixeln, 280 bis 2000.

Aussehen, Modus und Schwierigkeit stellen Sie nicht im HTML ein, sondern pro Seite im Dashboard.

HTML mit allen optionalen Attributen
<div class="captcha-widget"
     data-sitekey="IHR_SITEKEY"
     data-token-callback="tokenErhalten"
     data-expired-callback="tokenAbgelaufen"
     data-width="360"></div>

Ohne data-width richtet sich die Breite nach dem breitesten Eingabefeld im selben Formular. Steht das Widget außerhalb eines Formulars, gilt eine Standardbreite. Angegebene Werte werden auf 280 bis 2000 Pixel begrenzt.

Frameworks und Apps

Wie binde ich das Widget in React, Vue oder eine App ein?

Über window.Byebot.render.

Hängt ein Framework das Formular erst nachträglich in die Seite, ist das Script längst durchgelaufen. Dann rendern Sie selbst, sobald das Div steht.

JavaScript
// aufrufen, sobald das Div im DOM steht
window.Byebot.render(element);

// oder jedes Widget auf der Seite
window.Byebot.renderAll();
Ablauf in einer Single-Page-Anwendung
  • Schritt 1Ihre Komponente hängt das Div mit der Klasse captcha-widget ins DOM.
  • Schritt 2Ihr Code ruft window.Byebot.render(element) mit genau diesem Div auf.
  • Schritt 3data-token-callback bekommt den Token, sobald die Prüfung bestanden ist.
  • Schritt 4Läuft der Token ab, meldet sich data-expired-callback und die Prüfung startet neu.
  • Schritt 5Für ein zurückgesetztes Formular rufen Sie render() erneut auf.

Für Angular, Next.js, Svelte und Vue liegt dieser Ablauf als fertige Komponente bereit.

render(element)
Rendert ein einzelnes Widget in dem übergebenen Div.
renderAll()
Rendert jedes Div mit der Klasse captcha-widget, das gerade auf der Seite steht.
Ohne Aufruf
Beim Laden der Seite rendert das Script von selbst alle Widgets, die schon im DOM stehen. Für klassisches serverseitiges HTML brauchen Sie keine Zeile JavaScript.
Mobile Apps
Die SDKs für Android, iOS und React Native betten dasselbe Widget in einen WebView ein. data-domain setzt dabei die Domain, gegen die geprüft wird.
Sprache
Zwölf Sprachen, automatisch aus der Browsersprache des Besuchers. Es gibt kein Sprachattribut.
Häufige Fragen

Fragen zur Einbindung.

Kurze Antworten zu Feldnamen, Statuscodes und dem, was ins HTML gehört und was nicht.

Wie heißt das Formularfeld mit dem Token?

Es heißt byebot-token. Nach bestandener Prüfung steht in Ihrem Formular ein verstecktes Feld mit diesem Namen, und der Browser schickt es beim Absenden mit, wie jedes andere Feld auch. Dessen Wert reichen Sie an validate_token weiter. Das Widget selbst läuft in einem eigenen Rahmen, mehr als dieses Feld bekommt Ihr Formular davon nicht mit.

Was bedeutet die Antwort 400 bei validate_token?

400 heißt nicht bestanden, Formular ablehnen. Die Antwort hat keinen Inhalt, für die Entscheidung genügt der Status. Bei 200 ist die Prüfung gültig, und die Antwort enthält zusätzlich sitekey, challenged_at, solve_time_ms und interactive_solved, falls Sie mitschreiben wollen. Erst bei 200 nehmen Sie das Formular an.

Gehört der API-Key in die Website?

Nein, der API-Key gehört auf den Server, in die Seite gehört nur der Sitekey. Ihr Backend schickt ihn zusammen mit dem Feldwert an validate_token. In die Seite gehört er nie. Eine Entscheidung im Browser wäre nicht belastbar: Dort liegt der Token im Formular des Besuchers, und ein Skript kann jedes Feld selbst setzen.

Brauche ich JavaScript für ein einfaches HTML-Formular?

Nein. Beim Laden der Seite rendert das Script von selbst alle Widgets, die schon im DOM stehen. Für klassisches serverseitiges HTML brauchen Sie keine Zeile JavaScript. Nötig wird window.Byebot.render erst, wenn ein Framework das Formular nachträglich in die Seite hängt, denn dann ist das Script längst durchgelaufen.

Wie breit wird das Widget im Formular?

Ohne data-width richtet sich die Breite nach dem breitesten Eingabefeld im selben Formular. Steht das Widget außerhalb eines Formulars, gilt eine Standardbreite. Mit data-width setzen Sie die Breite in Pixeln selbst, angegebene Werte werden dabei auf 280 bis 2000 Pixel begrenzt.

Wo stelle ich Aussehen und Modus des Widgets ein?

Im Dashboard, pro Seite. Aussehen, Modus und Schwierigkeit stellen Sie nicht im HTML ein. Am Div stehen nur zwei Pflichtangaben und vier optionale Attribute, eine Konfigurationsdatei oder einen Initialisierungsaufruf schreiben Sie dafür nicht. Auch den Sitekey, den data-sitekey trägt, finden Sie im Dashboard.

In welcher Sprache erscheint das Widget?

In zwölf Sprachen, automatisch aus der Browsersprache des Besuchers. Ein Sprachattribut gibt es nicht, Sie stellen dafür also nichts ein. Dasselbe Widget steckt in den SDKs für Android, iOS und React Native, die es in einen WebView einbetten. data-domain setzt dort die Domain, gegen die geprüft wird.

Testphase

Sieben Tage testen, dann entscheiden.

Ein Zahlungsmittel wird zu Beginn hinterlegt. In der Testphase liegt die Grenze bei 10.000 Prüfungen. Danach ab 19 € im Monat.