> ## 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.

# Kameleoon.API.Goals

> Referencia de los métodos Kameleoon.API.Goals que activan objetivos, procesan conversiones y cancelan conversiones.

Este módulo gestiona el disparo de objetivos y los datos de conversión, incluidas las confirmaciones de compra y el registro de ingresos.

## cancelConversion

El método `cancelConversion()` cancela una conversión que activó durante la visita actual. Este método no puede cancelar conversiones de visitas anteriores.

```javascript theme={null}
var buttons = Kameleoon.API.Utils.querySelectorAll(".btnRemoveFromCart");

buttons.forEach(function (button) {
  Kameleoon.API.Utils.addEventListener(button, "mousedown", function (event) {
    Kameleoon.API.Goals.cancelConversion(event.target.id);
  });
});
```

**Argumentos**

| Nombre | Tipo | Descripción |
| - | - | - |
| goalNameOrID | String o Number | Nombre o ID del objetivo tal como está definido en la app de Kameleoon. Este campo es obligatorio. |

## processConversion

> [!WARNING]
>
> Antes de implementar processConversion, revise la funcionalidad de [Custom Code for Custom Goal](#triggergoal-custom-code-for-custom-goal), que simplifica la personalización al eliminar la necesidad de un ID de objetivo.

El método `processConversion()` dispara una conversión. Los metadatos deben estar [configurados en la app de Kameleoon](https://docs.kameleoon.com/es/user-manual/assets/goals/create-a-goal.md#metadatos) antes de establecerlos con `processConversion()`.

```javascript theme={null}
//Conversión para el objetivo "Add to cart" (goal id 123456)
Kameleoon.API.Core.runWhenElementPresent("#buyButton", ([buyButton]) => {
  Kameleoon.API.Utils.addEventListener(buyButton, "click", () => {
    Kameleoon.API.Goals.processConversion(123456); //Add to cart
  });
});

//Conversión para el objetivo "Add to cart" (goal id 123456) con argumento opcional de ingreso
Kameleoon.API.Core.runWhenElementPresent("#buyButton", ([buyButton]) => {
  Kameleoon.API.Utils.addEventListener(buyButton, "click", () => {
    Kameleoon.API.Goals.processConversion(123456, 19.99); //Add to cart
  });
});
```

> [!NOTE]
>
> Si inicia conversiones desde un sistema de gestión de etiquetas, como Google Tag Manager, use la [Command Queue](https://docs.kameleoon.com/es/developer-docs/apis/activation-api-js/api-reference/command-queue.md) para retrasar la ejecución hasta que se cargue el motor. El motor procesa los comandos en cola en orden tras la inicialización. Ejemplo:
>
> ```javascript theme={null}
> window.kameleoonQueue = window.kameleoonQueue || [];
> kameleoonQueue.push(['Kameleoon.API.Goals.processConversion', 'GOAL_ID']);
> ```

**Argumentos**

| Nombre | Tipo | Descripción |
| - | - | - |
| goalNameOrID | String o Number | Nombre o ID del objetivo tal como está definido en la app de Kameleoon. Los nombres de objetivo deben ser únicos. Este campo es obligatorio. |
| revenue | Number | Importe de la transacción. Proporcionar este valor permite a Kameleoon hacer seguimiento de métricas de compra, como ingresos e importe medio del carrito. Este campo es opcional. |
| metadata | Object | Establece valores específicos para los datos personalizados definidos como metadatos de objetivo en la aplicación Kameleoon. [Defina los metadatos previamente en la aplicación Kameleoon](https://docs.kameleoon.com/es/user-manual/assets/goals/create-a-goal.md#metadatos). Las claves del objeto son los **índices de los datos personalizados** (valores numéricos que aparecen en la columna `INDEX` del [panel de datos personalizados](https://docs.kameleoon.com/es/user-manual/assets/custom-data/manage-custom-data.md#encontrar-el-índice-de-un-dato-personalizado)). Este campo es opcional. |

> [!NOTE]
>
> Los valores de metadatos son accesibles mediante [exportaciones de datos en bruto](https://docs.kameleoon.com/es/user-manual/experiment-analytics/analyze-results/results-page/results-page-actions.md) y [la página de resultados](https://docs.kameleoon.com/es/user-manual/experiment-analytics/analyze-results/data-and-metrics/goal-metadata.md).
>
> Si proporciona el parámetro `metadata`, Kameleoon usa esos valores para la conversión actual en lugar de los valores que hubiera recopilado previamente mediante `setCustomData()`. Si omite el parámetro, Kameleoon usa los últimos valores de `customData` registrados antes de la conversión en la misma visita.
>
> Kameleoon solo tiene en cuenta los valores de metadatos que se pasan directamente al método `processConversion()`; ignora los datos personalizados previamente establecidos. En el siguiente ejemplo, la conversión se asocia únicamente con los metadatos proporcionados (por ejemplo, índice 5 con 'Amex Credit Card').
>
> ```javascript theme={null}
> Kameleoon.API.Data.setCustomData(5, 'Credit Card');
> Kameleoon.API.Data.setCustomData(9, 'Express Delivery');
>
> Kameleoon.API.Goals.processConversion("GoalIDorName", revenue, {
>     5: ["Amex Credit Card", "PayPal"], // PaymentMode Custom Data
>     4: 1234567, // OrderID CustomData
>     3: "1q2w3e4r" // PayPalID CustomData 
> })
> ```

## triggerGoal (Custom Code for Custom Goal)

Para disparar **custom goals**, inyecte código personalizado creando un nuevo objetivo y añadiendo el código al panel `Trigger my goal`.

![Adición de código personalizado en el panel Trigger my goal de un objetivo personalizado](https://storage.googleapis.com/kameleoon-storage-documentation/developers/images/api-tutorial/custom-code-for-custom-goals.gif)

La función `triggerGoal()` dispara el objetivo desde el panel de código sin necesidad de un ID de objetivo.

```javascript theme={null}
//Sin parámetros
triggerGoal();
//Con revenue
triggerGoal(49.99);
//Con revenue y metadata
triggerGoal(49.99, {5: "Gold"});
```

**Argumentos**

| Nombre | Tipo | Descripción |
| - | - | - |
| revenue | Number | Importe de la transacción. Proporcionar este valor permite a Kameleoon hacer seguimiento de métricas de compra, como ingresos e importe medio del carrito. Este campo es opcional. |
| metadata | Object | Establece valores específicos para los datos personalizados definidos como metadatos del objetivo en la app de Kameleoon. Las claves del objeto son los **índices de los datos personalizados** (valores numéricos que se encuentran en la columna `INDEX` del [panel de Datos personalizados](https://docs.kameleoon.com/es/user-manual/assets/custom-data/manage-custom-data.md)). Este campo es opcional. |

> [!NOTE]
>
> Los valores de metadatos son accesibles mediante [exportaciones de datos en bruto](https://docs.kameleoon.com/es/user-manual/experiment-analytics/analyze-results/results-page/results-page-actions.md) y [la página de resultados](https://docs.kameleoon.com/es/user-manual/experiment-analytics/analyze-results/data-and-metrics/goal-metadata.md).
>
> Si proporciona el parámetro `metadata`, Kameleoon usa esos valores para la conversión actual en lugar de los valores que hubiera recopilado previamente mediante `setCustomData()`. Si omite el parámetro, Kameleoon usa los últimos valores de `customData` registrados antes de la conversión en la misma visita.
>
> Kameleoon solo tiene en cuenta los valores de metadatos que se pasan directamente al método `triggerGoal()`; ignora los datos personalizados previamente establecidos. En el siguiente ejemplo, la conversión se asocia únicamente con los metadatos proporcionados (por ejemplo, índice 5 con 'Amex Credit Card').
>
> ```javascript theme={null}
> Kameleoon.API.Data.setCustomData(5, 'Credit Card');
> Kameleoon.API.Data.setCustomData(9, 'Express Delivery');
>
> triggerGoal( revenue, {
>     5: ["Amex Credit Card", "PayPal"], // PaymentMode Custom Data
>     4: 1234567, // OrderID CustomData
>     3: "1q2w3e4r" // PayPalID CustomData 
> })
>
> ```
