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_idund einesclient_secretüber denclient_credentials-Grant ab. Siehe Access Token abrufen. -
Ein persönliches Airtable-Zugriffstoken mit dem Scope
data.records:writefü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 mittbl. -
Eine Airtable-Tabelle mit bereits erstelltem Schema Experiments. Das Skript schreibt in diese Felder:
Experiment Name,Status,Start date,End date,Notes,Actual,ProbabilityundResult. Zusätzlich erwartet es, dass die manuell zu befüllenden FelderAssignee,Category,Prediction,Mkt Est,Eng EstundAttachmentsexistieren, auch wenn es sie nie setzt. Airtable lehnt das Schreiben in einen Feldnamen ab, der in der Tabelle noch nicht existiert, undtypecastwandelt Werttypen nur für bereits vorhandene Felder um (es erstellt keine fehlenden Felder oder Auswahloptionen). Legen Sie die Tabelle mit diesen Feldern und den passendenStatus-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).
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:
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:
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:
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:
5. Die leistungsstärkste Variation auswählen
Die Ergebnisse enthalten untervariationData 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:
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.
Beispiel:
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: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 vonRunning/Implementing/Completed/Defunctabweichen, und bestätigen Sie die Token, die Ihr Konto zurückgibt, mit einer Live-AnfrageGET /experiments/{experimentId}, bevor Sie sich auf das Mapping verlassen. - Probability stammt aus der gemessenen Bayesianischen Erfolgswahrscheinlichkeit, wofür
bayesian: truein der Ergebnisanfrage erforderlich ist. Wenn Ihr Feld Probability stattdessen eine manuell eingetragene Schätzung vor dem Experiment ist, entfernen Sie die ZeileProbabilityausbuild_airtable_fields. - Zielauswahl verwendet die
mainGoalIddes Experiments. Um über ein anderes Ziel zu berichten, übergeben Sie dessen ID anrequest_resultsundpick_best_variation. - Upsert-Schlüssel. Airtable gleicht das Merge-Feld exakt ab, sodass Unterschiede bei Groß-/Kleinschreibung oder Leerzeichen in
Experiment Nameeine 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 Beispiel211.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 inbuild_airtable_fieldsdurch 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.