Skip to main content

Ziel

Dieses Tutorial beschreibt Schritt für Schritt, wie das Skript kameleoon_to_airtable.py funktioniert. Anhand einer Kameleoon-Experiment-ID, einer Airtable-Base-ID und einer Airtable-Table-ID ruft das Skript die Experimentmetadaten und die statistischen Ergebnisse ab, ermittelt die leistungsstärkste Variation, bildet die Daten auf das Airtable-Schema Experiments ab und schreibt den Datensatz zurück nach Airtable. Ein erneuter Lauf des Skripts für dasselbe Experiment aktualisiert die bestehende Zeile, statt ein Duplikat zu erstellen. Das Tutorial baut auf dem vorherigen Tutorial zum Abrufen von Experimentergebnissen mit der Automation API auf und verwendet denselben Ablauf für Anfrage und Abfrage.

Voraussetzungen

  • Kameleoon-API-Anmeldedaten. Die Automation API erfordert ein Access Token. Das Skript ruft dieses programmgesteuert anhand einer client_id und eines client_secret über den client_credentials-Grant ab. Siehe Access Token abrufen.
  • Ein persönliches Airtable-Zugriffstoken mit dem Scope data.records:write für die Ziel-Base.
  • Die Airtable-Base-ID und Table-ID. Beide finden Sie in der URL der Tabelle oder in der API-Dokumentation der Base. Die Base-ID beginnt mit app, die Table-ID mit tbl.
  • Eine Airtable-Tabelle mit bereits erstelltem Schema Experiments. Das Skript schreibt in diese Felder: Experiment Name, Status, Start date, End date, Notes, Actual, Probability und Result. Zusätzlich erwartet es, dass die manuell zu befüllenden Felder Assignee, Category, Prediction, Mkt Est, Eng Est und Attachments existieren, auch wenn es sie nie setzt. Airtable lehnt das Schreiben in einen Feldnamen ab, der in der Tabelle noch nicht existiert, und typecast wandelt Werttypen nur für bereits vorhandene Felder um (es erstellt keine fehlenden Felder oder Auswahloptionen). Legen Sie die Tabelle mit diesen Feldern und den passenden Status-Auswahloptionen an, bevor Sie das Skript ausführen. Den Wert, den jedes Feld erhält, finden Sie in Schritt 6.
  • Python 3.9+ mit der Bibliothek requests (pip install requests).
Speichern Sie alle Anmeldedaten in Umgebungsvariablen. Codieren Sie Geheimnisse niemals fest im Skript.
Das Tutorial verwendet das Beispielexperiment Product Page Redesign (ID 188308) mit zwei Variationen zusätzlich zur Originalversion: Redesign 1 (ID 828220) und Redesign 2 (ID 828221).

1. Bei der Automation API authentifizieren

Endpoint: Rufen Sie ein Access Token ab, indem Sie eine POST-Anfrage an den Token-Endpoint senden.
Beispiel:
Antwort:
Senden Sie den zurückgegebenen access_token als Bearer-Token bei jeder weiteren Anfrage an die Automation API. Access Tokens sind standardmäßig 2 Stunden lang gültig.

2. Das Experiment abrufen

Endpoint: Rufen Sie die Experimentmetadaten ab, indem Sie eine GET-Anfrage an den Endpoint Get an experiment senden.
Beispiel:
Antwort (gekürzt):
Das Skript liest name, status, dateStarted, dateEnded und description für den Airtable-Datensatz sowie mainGoalId, um die Ergebnisanfrage im nächsten Schritt einzugrenzen.
Die API gibt mainGoalId standardmäßig zurück, sodass Sie keinen optionalFields-Parameter benötigen, um sie zu lesen. Die Automation API veröffentlicht kein festes Enum für das Feld status, aber andere statusartige Felder in der gesamten API verwenden durchgängig Token in Großbuchstaben (zum Beispiel STOPPED, ACTIVE, DRAFT). Schritt 6 bildet das Feld status unter dieser Annahme ab. Bestätigen Sie die genauen Token, die Ihr Konto zurückgibt, mit einer Live-Anfrage, bevor Sie sich auf dieses Mapping verlassen.

3. Die Ergebnisse des Experiments anfordern

Endpoint: Lösen Sie die Erstellung des Ergebnisberichts aus, indem Sie eine POST-Anfrage an den Endpoint Request experiment’s results senden.
Beispiel:
Antwort:
Kameleoon erstellt den Bericht asynchron. Der Endpoint gibt einen dataCode zurück, den Schritt 4 verwendet, um das Ergebnis abzufragen.
Dieses Skript erfordert bayesian: true. Bei aktiviertem Bayesian-Modus trägt der Wert reliability des Berichts die Bayesianische Erfolgswahrscheinlichkeit (die Wahrscheinlichkeit, dass eine Variation die Referenz übertrifft), die das Skript auf das Feld Probability abbildet. Gleichen Sie den Wert mit demselben Bericht in der Kameleoon-App ab, wenn Ihr Konto eine andere Standardstatistikmethode verwendet. Die Spezifikation der Automation API kennzeichnet dateIntervals als erforderlich, aber das Beispiel oben lässt es aus und liefert dennoch einen gültigen Bericht. Die Spezifikation dokumentiert nicht, worauf ein ausgelassenes dateIntervals standardmäßig zurückgreift. Dieses Tutorial geht davon aus, dass es den gesamten Laufzeitraum des Experiments abdeckt. Bestätigen Sie dieses Verhalten anhand Ihres eigenen Kontos, bevor Sie sich darauf verlassen. Übergeben Sie stattdessen ein dateIntervals-Array, um den Bericht auf einen bestimmten Zeitraum einzugrenzen.

4. Die Ergebnisse abfragen

Endpoint: Rufen Sie den Bericht ab, indem Sie GET-Anfragen an den Endpoint Poll results senden, bis er bereit ist.
Der status der Antwort lautet WAITING, solange Kameleoon den Bericht berechnet, READY, sobald die Daten verfügbar sind, oder ERROR beziehungsweise TIMEOUT bei einem Fehler. Wenn der Status ERROR oder TIMEOUT lautet, enthält die Antwort ein errorDescription-Feld auf oberster Ebene. Das Skript fragt in einem festen Intervall ab, bis der Status READY lautet. Beispiel:
Antwort (gekürzt):

5. Die leistungsstärkste Variation auswählen

Die Ergebnisse enthalten unter variationData einen Eintrag pro Variation sowie die Zeile _reference für die Originalseite. Für jede Variation liegen die Metriken für das angeforderte Ziel unter breakdownData._reference.generalData.goalsData[goalId]. Das Skript überspringt den Eintrag _reference, liest für jede Variation improvementRate und reliability (die Bayesianische Erfolgswahrscheinlichkeit) und wählt die Variation mit der höchsten Verbesserungsrate als leistungsstärkste aus. Das im nächsten Schritt abgebildete Feld Result erfasst, ob diese Variation tatsächlich gewonnen hat: ob sie eine ausreichend hohe Erfolgswahrscheinlichkeit bei einer positiven Verbesserung erreicht hat. Beispiel:
Im Beispiel erreichen beide Variationen eine Bayesianische Erfolgswahrscheinlichkeit von 100 %, aber Redesign 1 (828220) zeigt eine Verbesserung von +211,48 % gegenüber -43,33 % bei Redesign 2. Redesign 1 ist daher die leistungsstärkste Variation und, mit einer Wahrscheinlichkeit über 95 % und einer positiven Verbesserung, ein echter Gewinner.

6. Die Daten auf Airtable-Felder abbilden

Das Skript wandelt die Experimentmetadaten und die Metriken der leistungsstärksten Variation in das Airtable-Schema Experiments um. Das Skript setzt keine Felder ohne Kameleoon-Quelle: Assignee, Category, Prediction, Mkt Est, Eng Est und Attachments. Diese Felder bleiben für die manuelle Eingabe in Airtable verfügbar. Das Skript lässt außerdem leere Werte aus, sodass es niemals eine bestehende Zelle mit einem leeren Wert überschreibt. Beispiel:
Die Automation API veröffentlicht kein festes Enum für das Feld status des Experiments, und die Token können sich weiterentwickeln. map_status vergleicht ohne Berücksichtigung der Groß-/Kleinschreibung und gibt für einen nicht erkannten Status None zurück, wodurch die Zelle Status verworfen wird, statt einen falschen Wert zu schreiben. Bestätigen Sie die Token, die Ihr Konto zurückgibt, mit einer einzelnen GET /experiments/{experimentId}-Anfrage, und erweitern Sie STATUS_MAP bei Bedarf.

7. Den Datensatz per Upsert in Airtable schreiben

Der Airtable-Endpoint Update table (PATCH /v0/meta/bases/{baseId}/tables/{tableId}) ändert nur den Namen und die Beschreibung einer Tabelle; er kann keine Daten in Zeilen schreiben. Verwenden Sie zum Befüllen eines Datensatzes den records-Endpoint mit der Option performUpsert.
Endpoint: Erstellen oder aktualisieren Sie den Datensatz, indem Sie eine PATCH-Anfrage an den Records-Endpoint senden.
Beispiel:
Antwort (gekürzt):
Die Antwort meldet das Ergebnis pro Datensatz: Eine zurückgegebene ID unter createdRecords bedeutet, dass Airtable eine neue Zeile erstellt hat, während eine ID unter updatedRecords bedeutet, dass Airtable eine bestehende Zeile aktualisiert hat.

8. Das Skript ausführen

Übergeben Sie die Experiment-ID sowie die Airtable-Base- und -Table-ID als Argumente:
Das Skript gibt jeden Schritt aus: die Authentifizierung, das abgerufene Experiment, die leistungsstärkste Variation, die zugeordneten Felder sowie, ob es den Airtable-Datensatz erstellt oder aktualisiert hat.

Vollständiges Skript

Das vollständige Skript unten entspricht Funktion für Funktion kameleoon_to_airtable.py. Kopieren Sie es direkt, oder laden Sie die Datei über diesen Link herunter.

Anpassungshinweise

  • Status-Mapping befindet sich in der Konstante STATUS_MAP, die anhand der von der API zurückgegebenen Status-Token in Großbuchstaben indiziert ist. Passen Sie die Zielwerte an, wenn Ihre Status-Optionen von Running / Implementing / Completed / Defunct abweichen, und bestätigen Sie die Token, die Ihr Konto zurückgibt, mit einer Live-Anfrage GET /experiments/{experimentId}, bevor Sie sich auf das Mapping verlassen.
  • Probability stammt aus der gemessenen Bayesianischen Erfolgswahrscheinlichkeit, wofür bayesian: true in der Ergebnisanfrage erforderlich ist. Wenn Ihr Feld Probability stattdessen eine manuell eingetragene Schätzung vor dem Experiment ist, entfernen Sie die Zeile Probability aus build_airtable_fields.
  • Zielauswahl verwendet die mainGoalId des Experiments. Um über ein anderes Ziel zu berichten, übergeben Sie dessen ID an request_results und pick_best_variation.
  • Upsert-Schlüssel. Airtable gleicht das Merge-Feld exakt ab, sodass Unterschiede bei Groß-/Kleinschreibung oder Leerzeichen in Experiment Name eine neue Zeile erstellen, statt die bestehende zu aktualisieren. Halten Sie Experimentnamen stabil, oder gleichen Sie anhand eines dedizierten, stabilen Kennungsfelds ab.
  • Format des Felds Actual. Das Skript schreibt den rohen Wert improvementRate (zum Beispiel 211.48) in Actual. Wenn Actual ein Airtable-Percent-Feld ist, stellen Sie es so ein, dass es eine reine Zahl statt eines Bruchwerts erwartet, oder teilen Sie den Wert in build_airtable_fields durch 100, um ihn an ein bruchbasiertes Percent-Feld anzupassen.
  • Rate Limits. Die Automation API erlaubt bis zu 50 Anfragen pro 10 Sekunden und 1.000 pro Stunde, aber Kameleoon empfiehlt, pro Konto unter 12 Aufrufen pro Minute zu bleiben, und rät von der Verwendung der Automation API für hochfrequentes Tracking ab. Wenn Sie viele Experimente in Batches verarbeiten, cachen Sie Tokens, drosseln Sie Anfragen, und ziehen Sie für Anwendungsfälle mit hohem Volumen die Data API in Betracht.