Skip to main content
Recupere un experimento y sus resultados con la Automation API, transfórmelos en propiedades de página de Notion e inserte o actualice el registro en una base de datos de Notion usando un único script de Python.

Objetivo

Este tutorial describe cómo funciona el script kameleoon_to_notion.py, paso a paso. Dado un ID de experimento de Kameleoon y un ID de base de datos de Notion, el script recupera los metadatos y los resultados estadísticos del experimento, determina la variación con mejor rendimiento, asigna los datos a una base de datos Experiments de Notion y escribe el registro en Notion. Volver a ejecutar el script para el mismo experimento actualiza la página existente en lugar de crear un duplicado. Los pasos 1 a 5 reutilizan el mismo flujo de solicitud y consulta que el tutorial de exportación a Airtable; solo cambia el destino.
La API de Notion no tiene una función de upsert nativa. El script emula una: consulta la fuente de datos de la base de datos en busca de una página cuyo título coincida con el nombre del experimento, y luego actualiza esa página si la encuentra o crea una nueva en caso contrario. Este tutorial utiliza la versión 2025-09-03 de la API de Notion, que organiza cada base de datos alrededor de una o varias fuentes de datos.

Requisitos

  • Credenciales de la API de Kameleoon. La Automation API requiere un token de acceso. El script obtiene uno de forma programática a partir de un client_id y un client_secret mediante el grant client_credentials. Consulte Obtener un token de acceso.
  • Un token de integración interna de Notion. Cree una integración en notion.so/my-integrations y copie su token.
  • Una base de datos de Notion con un esquema Experiments y las siguientes propiedades: Experiment Name (title), Status (select), Start date (date), End date (date), Notes (rich text), Actual (number), Probability (select) y Result (select).
  • El ID de la base de datos de Notion. Abra la base de datos como página completa (el ID es la cadena de 32 caracteres en su URL, antes del parámetro de vista ?v=).
  • Python 3.9 o superior con la biblioteca requests (pip install requests).
Comparta la base de datos con su integración, o todas las solicitudes devuelven object_not_found. Abra la base de datos, vaya a ••• → Connections → Add connections y seleccione su integración.
Almacene todas las credenciales en variables de entorno. Nunca codifique secretos directamente en el script.
El tutorial utiliza el experimento de ejemplo Product Page Redesign (ID 188308), con dos variaciones además de la original: Redesign 1 (ID 828220) y Redesign 2 (ID 828221).

1. Autenticarse con la Automation API

Endpoint: Obtenga un token de acceso enviando una solicitud POST al endpoint de token.
Ejemplo:
Respuesta:
El access_token devuelto se envía como token Bearer en cada solicitud posterior a la Automation API. Los tokens de acceso son válidos durante 2 horas de forma predeterminada.

2. Recuperar el experimento

Endpoint: Obtenga los metadatos del experimento enviando una solicitud GET al endpoint Get an experiment.
Ejemplo:
Respuesta (truncada):
El script lee name, status, dateStarted, dateEnded y description para la página de Notion, y mainGoalId para acotar la solicitud de resultados en el siguiente paso.
La API devuelve mainGoalId de forma predeterminada, por lo que el script no necesita un parámetro optionalFields para leerlo. La Automation API no publica una enumeración fija para el campo status, y los tokens pueden evolucionar. El paso 7 compara status sin distinguir mayúsculas y minúsculas, de modo que las diferencias de mayúsculas y minúsculas entre cuentas no rompen la asignación.

3. Solicitar los resultados del experimento

Endpoint: Active la generación del informe de resultados enviando una solicitud POST al endpoint Request experiment’s results.
Ejemplo:
Respuesta:
Kameleoon genera el informe de forma asíncrona. El endpoint devuelve un dataCode que se utiliza para consultar el resultado en el siguiente paso.
Este script requiere bayesian: true y establece sequentialTesting: false. bayesian y sequentialTesting son métodos alternativos para calcular la significancia, y este tutorial reporta la probabilidad de éxito bayesiana. Con Bayesian habilitado, el valor reliability del informe representa la probabilidad de éxito bayesiana (la probabilidad de que una variación supere a la referencia), que el script asigna a la propiedad Probability. Confirme el valor con el mismo informe en la aplicación Kameleoon si su cuenta utiliza un método estadístico predeterminado diferente.

4. Consultar los resultados

Endpoint: Recupere el informe enviando solicitudes GET al endpoint Poll results hasta que esté listo.
El status de la respuesta es WAITING mientras se calcula el informe, READY cuando los datos están disponibles, o ERROR / TIMEOUT en caso de fallo. Cuando el estado es ERROR o TIMEOUT, la respuesta incluye un errorDescription de nivel superior. El script consulta a intervalos fijos hasta que el estado es READY. Ejemplo:
Respuesta (truncada):

5. Seleccionar la variación con mejor rendimiento

Los resultados contienen una entrada por variación bajo variationData, además de la línea _reference para la página original. Para cada variación, las métricas del objetivo solicitado se encuentran bajo breakdownData._reference.generalData.goalsData[goalId]. El script omite la entrada _reference, lee el improvementRate y el reliability (la probabilidad de éxito bayesiana) de cada variación, y selecciona como mejor variación la que tiene la tasa de mejora más alta. Si el goalsData de una variación no contiene el ID de objetivo solicitado, el script recurre al objetivo que esté presente, sea cual sea; como el paso 3 ya limita la solicitud a un único objetivo mediante goalsIds, normalmente este recurso no tiene ningún otro objetivo entre el que elegir. La propiedad Result, asignada más adelante, registra si esa variación alcanzó una probabilidad de éxito suficientemente alta con una mejora positiva como para contar como una victoria genuina. Ejemplo:
En el ejemplo, ambas variaciones alcanzan una probabilidad de éxito bayesiana del 100%, pero Redesign 1 (828220) muestra una mejora del +211,48% frente al -43,33% de Redesign 2. Por lo tanto, Redesign 1 es la variación con mejor rendimiento y, con una probabilidad superior al 95% y una mejora positiva, una ganadora genuina.

6. Resolver la fuente de datos de Notion

Desde la versión 2025-09-03, una base de datos de Notion es un contenedor para una o varias fuentes de datos, y las escrituras y consultas de páginas se dirigen a un ID de fuente de datos en lugar del ID de la base de datos. Los dos ID no son intercambiables. Endpoint: Recupere la base de datos para descubrir sus fuentes de datos enviando una solicitud GET al endpoint Retrieve a database.
Cada solicitud a Notion envía el token de integración como token Bearer y el encabezado Notion-Version. Ejemplo:
Respuesta (truncada):
El script utiliza la primera fuente de datos. Si su base de datos expone varias, elija la que tenga el esquema que coincide con las propiedades de Experiments.

7. Asignar los datos a las propiedades de Notion

El script transforma los metadatos del experimento y las métricas de la variación con mejor rendimiento en valores de propiedad de Notion. Cada tipo de propiedad tiene su propia estructura JSON. El script omite los valores vacíos, de modo que los valores de propiedad existentes nunca se sobrescriben con valores en blanco al actualizar. Notion crea automáticamente las opciones de select que falten, pero las propiedades en sí deben existir ya en el esquema de la fuente de datos con los tipos correctos. Ejemplo:
Notion permite solo una propiedad de título por fuente de datos. El script basa el upsert en la propiedad llamada Experiment Name; si su propiedad de título tiene un nombre diferente, cámbielo aquí y en el filtro de consulta del paso 8.

8. Insertar o actualizar la página en Notion

Notion no tiene un endpoint de upsert, por lo que el script consulta la fuente de datos en busca de una página cuyo Experiment Name coincida, y luego la actualiza o crea una nueva. Buscar: Consulte la fuente de datos con un filtro de título usando el endpoint Query a data source.
Crear: Añada una página cuyo elemento superior sea la fuente de datos usando el endpoint Create a page.
Actualizar: Sobrescriba las propiedades de la página encontrada usando el endpoint Update page properties.
Ejemplo:
Respuesta (truncada):

9. Ejecutar el script

Pase el ID del experimento y el ID de la base de datos de Notion como argumentos:
El script imprime cada paso: la autenticación, el experimento obtenido, la variación con mejor rendimiento, la fuente de datos resuelta, las propiedades asignadas y si la página de Notion se creó o se actualizó.

Notas de personalización

  • La asignación de estado vive en la constante STATUS_MAP, indexada por los tokens de estado que devuelve la API y comparada sin distinguir mayúsculas y minúsculas. Ajuste los valores de destino si sus opciones de Status difieren de Running / Implementing / Completed / Defunct, y confirme los tokens que devuelve su cuenta con una única solicitud GET /experiments/{experimentId}.
  • Probability se asigna a partir de la probabilidad de éxito bayesiana medida, que requiere bayesian: true en la solicitud de resultados. Si su propiedad Probability es en cambio una estimación previa al experimento que introduce manualmente, elimine el bloque Probability de build_notion_properties.
  • La selección de objetivo usa el mainGoalId del experimento. Para generar el informe sobre un objetivo diferente, pase su ID a request_results y pick_best_variation.
  • Clave de upsert. La coincidencia de título es exacta, por lo que las diferencias de mayúsculas/minúsculas o de espacios en Experiment Name crean una página nueva en lugar de actualizar la existente. Como el flujo de buscar y luego escribir no es atómico, evite ejecutar dos exportaciones para el mismo experimento de forma simultánea.
  • Versión de la API. El script fija Notion-Version: 2025-09-03. Si más adelante añade una segunda fuente de datos a la base de datos, actualice get_data_source_id para seleccionar la correcta por nombre.
  • Límites de frecuencia. La Automation API permite hasta 50 solicitudes cada 10 segundos y 1000 por hora; la API de Notion promedia unas 3 solicitudes por segundo. Si procesa muchos experimentos por lotes, almacene en caché los tokens y añada limitación de frecuencia.