> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kameleoon.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Crear una prueba multivariante

> Cree una prueba multivariante (MVT) y defina una asignación de tráfico personalizada mediante la Automation API.

## Objetivo

Cree una prueba multivariante (MVT) con varias secciones y variaciones y, después, defina una asignación de tráfico personalizada (no equitativa) entre esas variaciones.

<Warning>
  Cuando crea una prueba multivariante con `POST /experiments`, Kameleoon siempre aplica una asignación de tráfico equitativa a cada variación y restablece a `false` cualquier valor `locked` enviado, con independencia de los valores que envíe en `mvtAllocationSettings`. Para definir una asignación de tráfico personalizada, siga el proceso de tres pasos de este tutorial: cree el experimento, recupere los Id generados y actualice la asignación con una solicitud `PATCH`.
</Warning>

Para una descripción general de los conceptos de MVT (secciones, variaciones y combinaciones) y cómo configurar la asignación de tráfico en la aplicación Kameleoon, consulte [Configurar pruebas multivariante](/es/user-manual/experimentation/web-experimentation/advanced-experiment-types/setting-up-multivariate-tests).

## Requisitos

* `access token`

La Automation API requiere un access token.
Recupere el token de forma programática siguiendo las instrucciones de la sección [obtención de un access token](/es/developer-docs/apis/automation-api-rest/get-started/get-started#1-obtain-an-access-token).

* `siteId`

Recupere el `siteId` directamente en su código a partir del `siteCode` llamando a [el endpoint para obtener un sitio por código](/api-reference/site/get-a-site-by-code), o búsquelo en la aplicación siguiendo los pasos de [Crear un nuevo experimento](/es/developer-docs/apis/automation-api-rest/tutorials/experiments/create-a-new-experiment#requirements).

## Conceptos clave

### La variación de referencia

Kameleoon añade automáticamente una variación de referencia a cada sección que envía. Esta referencia aparece en la respuesta como `variationId: "0"` dentro de las entradas de asignación de esa sección.

Si envía su propia variación llamada `Original`, Kameleoon la crea como una variación adicional independiente. No identifica ni sustituye la referencia generada. Envíe una variación `Original` explícita solo si desea probar dos variaciones de referencia distintas en la misma sección.

### Los Id enviados por el cliente son temporales

Los valores `sectionId` e `id` de variación que envía en `mvtVariations` solo vinculan entradas dentro de esa misma solicitud: conectan cada entrada de asignación de `mvtAllocationSettings` con la sección y variación correctas antes de que Kameleoon genere Id permanentes. Use los números enteros que le resulten cómodos.

Kameleoon descarta los valores enviados y los sustituye por sus propios valores generados de `sectionId` y `variationId`. Use los valores generados (devueltos en la respuesta y por una solicitud `GET` posterior) en todas las solicitudes siguientes. La respuesta no incluye los nombres de variación que envió, solo los Id generados. Si necesita confirmar qué Id generado corresponde a qué nombre enviado, compruebe el experimento en la aplicación Kameleoon.

### Id de sección frente a Id de combinación

Kameleoon genera dos conjuntos distintos de Id para una prueba multivariante:

* Los **Id de sección y variación** identifican una variación dentro de una sección. Úselos en `mvtAllocationSettings.sectionsAllocations`.
* Los **Id de combinación** identifican una combinación completa de variaciones, una por sección, que se muestra a los visitantes expuestos. Kameleoon genera todas las combinaciones posibles mediante el producto cartesiano de las variaciones de todas las secciones (incluida la referencia de cada sección) y devuelve los Id de combinación en el array `variations` de nivel superior, así como en las claves del mapa `deviations`. Úselos en `mvtAllocationSettings.combinationsAllocations`.

Tanto `sectionsAllocations` como `combinationsAllocations` usan la misma estructura de entrada de asignación (`allocationPart`, `checked`, `locked`, `sectionId`, `variationId`), así que elija solo un método:

* Complete `sectionsAllocations` para asignar el tráfico por variación dentro de cada sección. Kameleoon deriva la parte de cada combinación a partir de los valores a nivel de sección.
* Complete `combinationsAllocations` para asignar el tráfico directamente a combinaciones específicas.

Como los Id de combinación no existen hasta que Kameleoon los genera, no puede completar `combinationsAllocations` en la solicitud de creación. Recupere los Id de combinación generados con una solicitud `GET` y, a continuación, defina `combinationsAllocations` en una solicitud `PATCH` posterior, siguiendo el mismo patrón usado para `sectionsAllocations` en este tutorial.

## Pasos

### 1. Crear el experimento

**Endpoint:**

```
POST https://api.kameleoon.com/experiments
```

| Nombre                    | Tipo   | Descripción                                                                                                                                                              |
| ------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `baseURL`                 | Cadena | URL de la página que se cargará en el editor gráfico.                                                                                                                    |
| `name`                    | Cadena | Nombre del experimento.                                                                                                                                                  |
| `siteId`                  | Entero | El `siteId` del proyecto.                                                                                                                                                |
| `type`                    | Cadena | Defina `MVT` para una prueba multivariante.                                                                                                                              |
| `mvtVariations`           | Array  | Las secciones y variaciones que se van a crear. Cada entrada necesita un `sectionId` temporal, un `sectionName` y un array `variations` de objetos `{id, name}`.         |
| `mvtAllocationSettings`   | Objeto | Ajustes de asignación de tráfico. Kameleoon acepta este objeto en la creación, pero siempre aplica una asignación equitativa, con independencia de los valores enviados. |
| `trafficAllocationMethod` | Cadena | Defina `MANUAL` para controlar usted mismo la asignación de tráfico en lugar de usar un método automatizado.                                                             |

**Ejemplo:**

```bash theme={null}
curl -L -X POST 'https://api.kameleoon.com/experiments' \
-H 'Content-Type: application/json' \
-H 'Accept: */*' \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
--data-raw '{
  "baseURL": "https://test-site.fr/",
  "name": "MVT_1",
  "siteId": 29353,
  "type": "MVT",
  "trafficAllocationMethod": "MANUAL",
  "mvtVariations": [
    {
      "sectionId": 1,
      "sectionName": "Button color",
      "variations": [
        {"id": 1, "name": "Red"},
        {"id": 2, "name": "Blue"}
      ]
    },
    {
      "sectionId": 2,
      "sectionName": "Button wording",
      "variations": [
        {"id": 1, "name": "Buy now"},
        {"id": 2, "name": "Shop now"}
      ]
    }
  ],
  "mvtAllocationSettings": {
    "exposedPart": 0.8,
    "sectionsAllocations": [
      {"allocationPart": 0.6, "checked": true, "locked": true, "sectionId": 1, "variationId": "0"},
      {"allocationPart": 0.25, "checked": true, "locked": true, "sectionId": 1, "variationId": "1"},
      {"allocationPart": 0.15, "checked": true, "locked": true, "sectionId": 1, "variationId": "2"},
      {"allocationPart": 0.5, "checked": true, "locked": true, "sectionId": 2, "variationId": "0"},
      {"allocationPart": 0.3, "checked": true, "locked": true, "sectionId": 2, "variationId": "1"},
      {"allocationPart": 0.2, "checked": true, "locked": true, "sectionId": 2, "variationId": "2"}
    ],
    "combinationsAllocations": []
  }
}'
```

**Respuesta (resumida):**

```json theme={null}
{
  "id": 404811,
  "siteId": 29353,
  "name": "MVT_1",
  "type": "MVT",
  "status": "draft",
  "trafficAllocationMethod": "MANUAL",
  "variations": [1351297, 1351298, 1351299, 1351300, 1351301, 1351302, 1351303, 1351304, 1351305],
  "mvtAllocationSettings": {
    "exposedPart": 0.8,
    "sectionsAllocations": [
      {"variationId": "1351294", "sectionId": 4451, "allocationPart": 0.33333334, "locked": false, "checked": true},
      {"variationId": "1351293", "sectionId": 4451, "allocationPart": 0.33333334, "locked": false, "checked": true},
      {"variationId": "0", "sectionId": 4451, "allocationPart": 0.33333334, "locked": false, "checked": true},
      {"variationId": "1351296", "sectionId": 4452, "allocationPart": 0.33333334, "locked": false, "checked": true},
      {"variationId": "1351295", "sectionId": 4452, "allocationPart": 0.33333334, "locked": false, "checked": true},
      {"variationId": "0", "sectionId": 4452, "allocationPart": 0.33333334, "locked": false, "checked": true}
    ],
    "combinationsAllocations": []
  }
}
```

Observe que Kameleoon generó nuevos valores de `sectionId` y `variationId` (`4451`, `4452`, `1351293`-`1351296`), añadió una variación de referencia (`variationId: "0"`) a cada sección y sustituyó la asignación enviada por una parte equitativa de `0.33333334`, restableciendo `locked` a `false`. `exposedPart` se mantiene tal como se envió. Continúe con el siguiente paso para definir la asignación que desea.

### 2. Recuperar los Id generados

Si no capturó los Id generados en la respuesta de creación, recupérelos con una solicitud `GET`.

**Endpoint:**

```
GET https://api.kameleoon.com/experiments/{experimentId}
```

**Ejemplo:**

```bash theme={null}
curl -L -X GET 'https://api.kameleoon.com/experiments/404811' \
-H 'Authorization: Bearer <ACCESS_TOKEN>'
```

La respuesta contiene el mismo array `mvtAllocationSettings.sectionsAllocations` mostrado en el paso 1, con los valores generados de `sectionId` y `variationId` que necesita para el siguiente paso.

### 3. Definir la asignación de tráfico personalizada

**Endpoint:**

```
PATCH https://api.kameleoon.com/experiments/{experimentId}
```

Envíe `mvtAllocationSettings` de nuevo, esta vez usando los valores generados de `sectionId` y `variationId` del paso 2.

**Ejemplo:**

```bash theme={null}
curl -L -X PATCH 'https://api.kameleoon.com/experiments/404811' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
--data-raw '{
  "trafficAllocationMethod": "MANUAL",
  "mvtAllocationSettings": {
    "exposedPart": 0.8,
    "sectionsAllocations": [
      {"allocationPart": 0.6, "checked": true, "locked": true, "sectionId": 4451, "variationId": "1351294"},
      {"allocationPart": 0.25, "checked": true, "locked": true, "sectionId": 4451, "variationId": "1351293"},
      {"allocationPart": 0.15, "checked": true, "locked": true, "sectionId": 4451, "variationId": "0"},
      {"allocationPart": 0.5, "checked": true, "locked": true, "sectionId": 4452, "variationId": "1351296"},
      {"allocationPart": 0.3, "checked": true, "locked": true, "sectionId": 4452, "variationId": "1351295"},
      {"allocationPart": 0.2, "checked": true, "locked": true, "sectionId": 4452, "variationId": "0"}
    ],
    "combinationsAllocations": []
  }
}'
```

**Respuesta (resumida):**

```json theme={null}
{
  "id": 404811,
  "mvtAllocationSettings": {
    "exposedPart": 0.8,
    "sectionsAllocations": [
      {"variationId": "1351294", "sectionId": 4451, "allocationPart": 0.6, "locked": true, "checked": true},
      {"variationId": "1351293", "sectionId": 4451, "allocationPart": 0.25, "locked": true, "checked": true},
      {"variationId": "0", "sectionId": 4451, "allocationPart": 0.15, "locked": true, "checked": true},
      {"variationId": "1351296", "sectionId": 4452, "allocationPart": 0.5, "locked": true, "checked": true},
      {"variationId": "1351295", "sectionId": 4452, "allocationPart": 0.3, "locked": true, "checked": true},
      {"variationId": "0", "sectionId": 4452, "allocationPart": 0.2, "locked": true, "checked": true}
    ],
    "combinationsAllocations": []
  }
}
```

La asignación ahora coincide con los valores enviados, y `locked` permanece en `true`. Una solicitud `GET` posterior confirma el mismo resultado.

### 4. Verificar el experimento

Vaya al **Experiments Dashboard** de la aplicación Kameleoon y abra el experimento para confirmar que las secciones, variaciones y la asignación de tráfico coinciden con su configuración.

## Limitaciones conocidas

* **La eliminación de pruebas multivariante grandes puede superar el tiempo de espera.** `DELETE /experiments/{experimentId}` puede devolver un error `504 Gateway Timeout` cuando el experimento tiene muchas combinaciones. Un tiempo de espera agotado no significa necesariamente que la eliminación haya fallado: envíe una solicitud `GET` para el mismo Id de experimento y confirme si todavía existe antes de reintentar la eliminación.
