Objetivo
Este tutorial describe cómo funciona el script kameleoon_to_airtable.py, paso a paso. Dado un ID de experimento de Kameleoon, un ID de base de Airtable y un ID de tabla de Airtable, el script recupera los metadatos y los resultados estadísticos del experimento, determina la variación con mejor rendimiento, asigna los datos al esquema Experiments de Airtable y escribe el registro en Airtable. Volver a ejecutar el script para el mismo experimento actualiza la fila existente en lugar de crear un duplicado. Este tutorial continúa el tutorial anterior sobre cómo recuperar los resultados de experimentos usando la Automation API y reutiliza el mismo flujo de solicitud y consulta.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_idy unclient_secretmediante el grantclient_credentials. Consulte Obtener un token de acceso. -
Un token de acceso personal de Airtable con el alcance
data.records:writeen la base de destino. -
El ID de base y el ID de tabla de Airtable. Ambos aparecen en la URL de la tabla o en la documentación de la API de la base. El ID de base comienza con
app, y el ID de tabla, contbl. -
Una tabla de Airtable con el esquema Experiments ya creado. El script escribe en los siguientes campos:
Experiment Name,Status,Start date,End date,Notes,Actual,ProbabilityyResult. También espera que existan los campos de entrada manualAssignee,Category,Prediction,Mkt Est,Eng EstyAttachments, aunque nunca los establece. Airtable rechaza la escritura en un nombre de campo que no exista ya en la tabla, ytypecastsolo convierte los tipos de valor de los campos existentes (no crea campos ni opciones de selección faltantes). Cree la tabla con estos campos, y con las opciones de selección deStatuscorrespondientes, antes de ejecutar el script. Consulte el paso 6 para conocer el valor que recibe cada campo. -
Python 3.9 o superior con la biblioteca
requests(pip install requests).
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:
access_token devuelto 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:
name, status, dateStarted, dateEnded y description para el registro de Airtable, y mainGoalId para acotar la solicitud de resultados en el siguiente paso.
La API devuelve
mainGoalId de forma predeterminada, por lo que no necesita un parámetro optionalFields para leerlo. La Automation API no publica una enumeración fija para el campo status, pero otros campos de tipo estado en toda la API usan sistemáticamente tokens en mayúsculas (por ejemplo, STOPPED, ACTIVE, DRAFT). El paso 6 asigna el campo status partiendo de ese supuesto. Confirme los tokens exactos que devuelve su cuenta con una solicitud real antes de confiar en 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:
dataCode, que el paso 4 utiliza para consultar el resultado.
Este script requiere
bayesian: true. 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 al campo Probability. Confirme el valor con el mismo informe en la aplicación Kameleoon si su cuenta utiliza un método estadístico predeterminado diferente. La especificación de la Automation API marca dateIntervals como obligatorio, pero el ejemplo anterior lo omite y aun así devuelve un informe válido. La especificación no documenta qué valor predeterminado toma un dateIntervals omitido; este tutorial asume que cubre la ejecución completa del experimento, así que confirme ese comportamiento con su propia cuenta antes de confiar en él. Pase un array dateIntervals para acotar el informe a un período específico.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 Kameleoon 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:
5. Seleccionar la variación con mejor rendimiento
Los resultados contienen una entrada por variación bajovariationData, 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. El campo Result, asignado en el siguiente paso, registra si esa variación realmente ganó: si alcanzó una probabilidad de éxito suficientemente alta con una mejora positiva.
Ejemplo:
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. Asignar los datos a los campos de Airtable
El script transforma los metadatos del experimento y las métricas de la variación con mejor rendimiento en el esquema Experiments de Airtable.
El script no establece los campos que no tienen origen en Kameleoon: Assignee, Category, Prediction, Mkt Est, Eng Est y Attachments. Estos campos permanecen disponibles para introducirlos manualmente en Airtable. El script también omite los valores vacíos, por lo que nunca sobrescribe una celda existente con un valor en blanco.
Ejemplo:
La Automation API no publica una enumeración fija para el campo
status del experimento, y los tokens pueden evolucionar. map_status compara sin distinguir mayúsculas y minúsculas, y devuelve None para un estado no reconocido, lo que omite la celda Status en lugar de escribir un valor incorrecto. Confirme los tokens que devuelve su cuenta con una única solicitud GET /experiments/{experimentId} y amplíe STATUS_MAP si es necesario.7. Insertar o actualizar el registro en Airtable
El endpoint Update table de Airtable (
PATCH /v0/meta/bases/{baseId}/tables/{tableId}) solo cambia el nombre y la descripción de una tabla; no puede escribir datos en las filas. Para completar un registro, use el endpoint records con la opción performUpsert.
Ejemplo:
createdRecords significa que Airtable creó una fila nueva, mientras que un ID bajo updatedRecords significa que Airtable actualizó una fila existente.
8. Ejecutar el script
Pase el ID del experimento y los ID de base y tabla de Airtable como argumentos:Script completo
El script completo a continuación coincide función por función con kameleoon_to_airtable.py. Cópielo directamente o descargue el archivo desde ese enlace.Notas de personalización
- La asignación de estado vive en la constante
STATUS_MAP, indexada por los tokens de estado en mayúsculas que devuelve la API. Ajuste los valores de destino si sus opciones de Status difieren deRunning/Implementing/Completed/Defunct, y confirme los tokens que devuelve su cuenta con una solicitud realGET /experiments/{experimentId}antes de confiar en la asignación. - Probability procede de la probabilidad de éxito bayesiana medida, que requiere
bayesian: trueen la solicitud de resultados. Si su campo Probability es en cambio una estimación previa al experimento que introduce manualmente, elimine la líneaProbabilitydebuild_airtable_fields. - La selección de objetivo usa el
mainGoalIddel experimento. Para generar el informe sobre un objetivo diferente, pase su ID arequest_resultsypick_best_variation. - Clave de upsert. Airtable hace coincidir el campo de combinación de forma exacta, por lo que las diferencias de mayúsculas/minúsculas o de espacios en
Experiment Namecrean una fila nueva en lugar de actualizar la existente. Mantenga estables los nombres de los experimentos, o combine por un campo identificador estable dedicado. - Formato del campo Actual. El script escribe el valor bruto de
improvementRate(por ejemplo,211.48) en Actual. Si Actual es un campo Percent de Airtable, configúrelo para que espere un número simple en lugar de una fracción, o divida el valor entre 100 enbuild_airtable_fieldspara que coincida con un campo Percent basado en fracciones. - Límites de frecuencia. La Automation API permite hasta 50 solicitudes cada 10 segundos y 1000 por hora, pero Kameleoon recomienda mantenerse por debajo de 12 llamadas por minuto y cuenta, y desaconseja usar la Automation API para el seguimiento de alta frecuencia. Si procesa muchos experimentos por lotes, almacene en caché los tokens, limite la frecuencia de las solicitudes y considere la Data API para necesidades de gran volumen.