Ziel
Dieses Tutorial beschreibt Schritt für Schritt, wie das Skript kameleoon_to_notion.py funktioniert. Anhand einer Kameleoon-Experiment-ID und einer Notion-Datenbank-ID ruft das Skript die Experimentmetadaten und die statistischen Ergebnisse ab, ermittelt die leistungsstärkste Variation, bildet die Daten auf eine Notion-Datenbank Experiments ab und schreibt den Datensatz zurück nach Notion. Ein erneuter Lauf des Skripts für dasselbe Experiment aktualisiert die bestehende Seite, statt ein Duplikat zu erstellen. Die Schritte 1–5 verwenden denselben Ablauf für Anfrage und Abfrage wie das Airtable-Export-Tutorial; nur das Ziel ändert sich.Die API von Notion verfügt über keinen nativen Upsert. Das Skript emuliert einen: Es fragt die Data Source der Datenbank nach einer Seite ab, deren Titel dem Namen des Experiments entspricht, aktualisiert diese Seite bei einem Treffer oder erstellt andernfalls eine neue. Dieses Tutorial richtet sich an die Notion-API-Version
2025-09-03, die jede Datenbank um eine oder mehrere Data Sources organisiert.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 internes Notion-Integrationstoken. Erstellen Sie eine Integration unter notion.so/my-integrations und kopieren Sie deren Token.
-
Eine Notion-Datenbank mit dem Schema Experiments und den folgenden Eigenschaften:
Experiment Name(title),Status(select),Start date(date),End date(date),Notes(rich text),Actual(number),Probability(select) undResult(select). -
Die Notion-Datenbank-ID. Öffnen Sie die Datenbank als vollständige Seite (die ID ist die 32-stellige Zeichenkette in der URL, vor dem View-Parameter
?v=). -
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 wird als Bearer-Token bei jeder weiteren Anfrage an die Automation API gesendet. 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 die Notion-Seite sowie mainGoalId, um die Ergebnisanfrage im nächsten Schritt einzugrenzen.
Die API gibt
mainGoalId standardmäßig zurück, sodass das Skript keinen optionalFields-Parameter benötigt, um sie zu lesen. Die Automation API veröffentlicht kein festes Enum für das Feld status, und die Token können sich weiterentwickeln. Schritt 7 vergleicht status ohne Berücksichtigung der Groß-/Kleinschreibung, sodass Unterschiede in der Schreibweise zwischen Konten das Mapping nicht beeinträchtigen.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, der im nächsten Schritt zum Abfragen des Ergebnisses verwendet wird.
Dieses Skript erfordert
bayesian: true und setzt sequentialTesting: false. bayesian und sequentialTesting sind alternative Methoden zur Berechnung der Signifikanz, und dieses Tutorial gibt die Bayesianische Erfolgswahrscheinlichkeit aus. 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 die Eigenschaft Probability abbildet. Gleichen Sie den Wert mit demselben Bericht in der Kameleoon-App ab, wenn Ihr Konto eine andere Standardstatistikmethode verwendet.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 der Bericht berechnet wird, 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. Enthält das goalsData einer Variation die angeforderte Goal-ID nicht, greift das Skript auf das vorhandene Goal zurück, welches auch immer das ist; da Schritt 3 die Anfrage bereits auf ein einzelnes Goal über goalsIds beschränkt, gibt es bei diesem Fallback normalerweise nichts anderes zur Auswahl. Die später abgebildete Eigenschaft Result erfasst, ob diese Variation eine ausreichend hohe Erfolgswahrscheinlichkeit bei einer positiven Verbesserung erreicht hat, um als echter Gewinner zu zählen.
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 Notion-Data-Source auflösen
Seit Version2025-09-03 ist eine Notion-Datenbank ein Container für eine oder mehrere Data Sources, und Seiten-Schreibvorgänge sowie Abfragen zielen auf eine Data-Source-ID statt auf die Datenbank-ID. Die beiden IDs sind nicht austauschbar.
Endpoint: Rufen Sie die Datenbank ab, um ihre Data Sources zu ermitteln, indem Sie eine GET-Anfrage an den Endpoint Retrieve a database senden.
Bearer-Token sowie den Header Notion-Version.
Beispiel:
7. Die Daten auf Notion-Eigenschaften abbilden
Das Skript wandelt die Experimentmetadaten und die Metriken der leistungsstärksten Variation in Notion-Eigenschaftswerte um. Jeder Eigenschaftstyp hat seine eigene JSON-Struktur.
Das Skript lässt leere Werte aus, sodass bestehende Eigenschaftswerte bei einer Aktualisierung niemals mit leeren Werten überschrieben werden. Notion erstellt fehlende Select-Optionen automatisch, aber die Eigenschaften selbst müssen bereits mit den korrekten Typen im Schema der Data Source vorhanden sein.
Beispiel:
Notion erlaubt nur eine Title-Eigenschaft pro Data Source. Das Skript verwendet die Eigenschaft mit dem Namen
Experiment Name als Upsert-Schlüssel; wenn Ihre Title-Eigenschaft einen anderen Namen hat, benennen Sie sie hier und im Abfragefilter in Schritt 8 entsprechend um.8. Die Seite per Upsert in Notion schreiben
Notion verfügt über keinen Upsert-Endpoint, daher fragt das Skript die Data Source nach einer Seite ab, derenExperiment Name übereinstimmt, und aktualisiert diese Seite oder erstellt eine neue.
Suchen: Fragen Sie die Data Source mit einem Title-Filter über den Endpoint Query a data source ab.
9. Das Skript ausführen
Übergeben Sie die Experiment-ID und die Notion-Datenbank-ID als Argumente:Anpassungshinweise
- Status-Mapping befindet sich in der Konstante
STATUS_MAP, die anhand der von der API zurückgegebenen Status-Token indiziert ist und ohne Berücksichtigung der Groß-/Kleinschreibung abgeglichen wird. 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 einzelnenGET /experiments/{experimentId}-Anfrage. - Probability wird aus der gemessenen Bayesianischen Erfolgswahrscheinlichkeit abgebildet, wofür
bayesian: truein der Ergebnisanfrage erforderlich ist. Wenn Ihre Eigenschaft Probability stattdessen eine manuell eingetragene Schätzung vor dem Experiment ist, entfernen Sie denProbability-Block ausbuild_notion_properties. - Zielauswahl verwendet die
mainGoalIddes Experiments. Um über ein anderes Ziel zu berichten, übergeben Sie dessen ID anrequest_resultsundpick_best_variation. - Upsert-Schlüssel. Der Titelabgleich erfolgt exakt, sodass Unterschiede bei Groß-/Kleinschreibung oder Leerzeichen in
Experiment Nameeine neue Seite erstellen, statt die bestehende zu aktualisieren. Da der Ablauf aus Suchen und anschließendem Schreiben nicht atomar ist, vermeiden Sie es, zwei Exporte für dasselbe Experiment gleichzeitig auszuführen. - API-Version. Das Skript legt
Notion-Version: 2025-09-03fest. Wenn Sie der Datenbank später eine zweite Data Source hinzufügen, aktualisieren Sieget_data_source_id, damit die richtige anhand ihres Namens ausgewählt wird. - Rate Limits. Die Automation API erlaubt bis zu 50 Anfragen pro 10 Sekunden und 1.000 pro Stunde; die Notion API erlaubt im Durchschnitt etwa 3 Anfragen pro Sekunde. Wenn Sie viele Experimente in Batches verarbeiten, cachen Sie Tokens und fügen Sie eine Drosselung hinzu.