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

# Objetivo de ingresos

> Configure un seguimiento preciso del objetivo de ingresos en Kameleoon utilizando gestores de etiquetas, scripts globales o SDK, con orientación sobre la moneda, el formato y la deduplicación.

Configurar un objetivo de ingresos en Kameleoon es sencillo, pero requiere pasos cuidadosos para garantizar que todo funcione correctamente. Cada sitio web tiene su propia estructura, flujo de compra, configuración de seguimiento y casos especiales, lo que significa que no existe una solución única para todos. Sin una configuración adecuada, corre el riesgo de perder datos clave, contar transacciones por duplicado o malinterpretar el rendimiento.

Para ayudarle a evitar estos problemas y garantizar que el seguimiento de los ingresos sea preciso y significativo, este artículo reúne un conjunto de directrices prácticas. Las recomendaciones están diseñadas para cubrir los desafíos más comunes a los que se enfrentan los usuarios de Kameleoon, al tiempo que ofrecen soluciones flexibles que puede adaptar a su configuración.

## Método de implementación

Kameleoon admite múltiples métodos de integración para realizar un seguimiento eficaz de los objetivos de ingresos, según su tipo de experimentación y configuración técnica. A continuación se presentan los enfoques recomendados tanto para Web Experimentation (WE) como para Feature Experimentation (FE), incluida la compatibilidad con conversiones sin conexión a través de la API de Datos de Kameleoon.

### Web Experimentation

* **Uso de un gestor de etiquetas:** Debe implementar la [`kameleoonQueue`](../../../developer-docs/apis/activation-api-js/api-reference/command-queue#syntax), que garantiza que los eventos de conversión se activen en sincronía con su plataforma de analítica, manteniendo la coherencia de los datos entre las herramientas y mejorando el rendimiento de su sitio. Para una guía de implementación detallada en Google Tag Manager, consulte [esta guía completa](../../integrations/as-a-destination/analytics/google-analytics-4/google-tag-manager) y los pasos de configuración a continuación para configurar el objetivo de ingresos.
* **[Uso del script personalizado global:](../../project-management/manage-your-projects#global-script)** Si `kameleoonQueue` no es compatible con su configuración, puede implementar manualmente el objetivo de ingresos utilizando la API de Activación dentro del script personalizado global en la aplicación Kameleoon.

### Feature Experimentation

Si utiliza uno de los [SDK de Kameleoon](../../../developer-docs/feature-experimentation/get-started/overview), puede realizar el seguimiento de los objetivos de ingresos utilizando el método [`trackConversion()`](../../../developer-docs/sdks/web-sdks/nodejs-sdk#trackconversion). Consulte los pasos a continuación para configurar correctamente el objetivo de ingresos según su entorno de SDK.

### API de Datos

*(Aplicable tanto para WE como para FE)*

Para las conversiones sin conexión, como las compras realizadas por teléfono o en tienda, puede utilizar la [API de Datos de Kameleoon](../../../developer-docs/apis/data-api-rest/tutorials/processing-offline-goal-conversions-in-experiments#sending-offline-goal-conversion) para procesar las conversiones de objetivos sin conexión. Este método es el más adecuado cuando el evento de conversión se produce fuera del recorrido en línea del usuario, pero aún debe ser objeto de seguimiento y atribución dentro de sus experimentos de Kameleoon.

## Configuración

### Alcance

Antes de configurar su objetivo de ingresos, compruebe si la confirmación de la transacción se produce siempre en una única página coherente. En algunas configuraciones, especialmente las que implican aplicaciones móviles, pagos integrados o proveedores de pago externos, la confirmación puede aparecer en una web-view o en un dominio independiente. Asegúrese de que Kameleoon esté correctamente instalado en **todas** las páginas o vistas relevantes en las que pueda aparecer la confirmación. Esta configuración garantiza que las conversiones se realicen de forma fiable y que no se pierda ningún dato de ingresos. Si un usuario puede completar una transacción a través de varias URL (por ejemplo, debido a variaciones en los parámetros de la cadena de consulta o a diferentes flujos de pago), añada **todas las URL relevantes** en la configuración de Kameleoon para que se realice el seguimiento. De esta manera, no se perderá ninguna conversión.

### Objetivo de transacción (acceso a la página de confirmación)

Es una buena práctica establecer un objetivo para acceder a la página de confirmación, sin la cantidad de ingresos. Este objetivo podría ayudar a realizar un seguimiento de las conversiones que faltan en el objetivo de ingresos. Las conversiones perdidas suelen deberse a retrasos en la carga del importe de los ingresos en la página (ya sea en el DOM, el `dataLayer` u otro objeto similar). Para configurar un objetivo de transacción en WE, puede elegir entre dos tipos de objetivos:

* **Acceso a una página:** Debe establecer la URL en la configuración del objetivo. Según la estructura de la URL, puede utilizar **La URL contiene** o **Coincide con la expresión regular** para tener en cuenta las variaciones en la URL (diferentes rutas o parámetros de consulta, por ejemplo). Evite utilizar **Corresponde exactamente a**, ya que la URL probablemente incluirá parámetros que pueden variar.

<Note>
  Cuando se utiliza el tipo de objetivo **Acceso a una página**, si los visitantes pueden recargar la confirmación sin ser redirigidos (a la página de inicio, por ejemplo), el objetivo puede activarse de nuevo. Si esta es su configuración, lo mejor es basarse en las métricas de **visitas convertidas** en lugar de **todas las conversiones** en la página de Resultados para evitar el sobreconteo.
</Note>

* **Objetivo personalizado:** Este tipo de objetivo es útil para garantizar que el objetivo no se vuelva a convertir si se recarga la página de confirmación. Puede implementar un objetivo personalizado en el script personalizado global y utilizar una comprobación de `sessionStorage` para evitar conversiones duplicadas (consulte el ejemplo de código a continuación). Se recomienda este enfoque porque puede utilizar el mismo código para activar el objetivo de ingresos, mejorando el rendimiento al eliminar la necesidad de un objetivo nativo **Acceso a una página**.

```javascript theme={null}
if (
   document.location.href.includes("/confirmation/") &&
   !window.sessionStorage.getItem("kameleoonGoalConverted")
 ) {
   // Set an item in sessionStorage to prevent a second conversion if the page is reloaded
   window.sessionStorage.setItem("kameleoonGoalConverted", "true");
   // Convert the transaction goal, replace the ID below
   Kameleoon.API.Goals.processConversion(355733);
 } else if (!document.location.href.includes("confirmation")) {
   // Remove the item from sessionStorage to allow conversion for a new transaction
   window.sessionStorage.removeItem("kameleoonGoalConverted");
 }
```

### Formato de los ingresos

Asegúrese de que el importe de los ingresos tenga el formato adecuado y se valide antes de procesarlo, incluyendo:

* Sustituir las comas (`,`) por puntos (`.`) para mantener la coherencia decimal.
* Eliminar los espacios (pueden estar presentes en importes superiores a 1000).
* Eliminar los símbolos de moneda (como `$`).
* Convertir la cadena limpia en un tipo de dato numérico para realizar cálculos precisos.

Por ejemplo:

```javascript theme={null}
let revenue = parseFloat(revenue.replace(",", ".").replace(/[^0-9.]/g, "").replace(/\s+/g, ""));
```

### Monedas

Un sitio web puede admitir varias monedas. Asegúrese de comparar valores de conversión expresados en la misma moneda para evitar resultados engañosos o análisis incorrectos. Verifique que la moneda utilizada en su seguimiento e informes sea coherente en todas las conversiones.

Puede activar un objetivo para cada moneda y/o utilizar el servicio web de conversión de Kameleoon. El punto final se proporciona a continuación: asegúrese de que todos los argumentos pasados sean válidos.

```
<https://customers.kameleoon.com/kameleoon/currencies/convert?inputCurr=${inputCurr}&outputCurr=${outputCurr}&amount=${revenue}>;
```

<Warning>
  Nunca convierta el mismo objetivo utilizando importes en monedas diferentes. Debe crear un objetivo separado para cada moneda o unificarlas configurando un objetivo global utilizando el punto final del servicio web anterior. Este servicio convertirá todos los importes en una sola moneda de su elección.
</Warning>

Consulte el ejemplo de código completo al final de este artículo para ver una implementación detallada del servicio web de conversión de moneda.

### ID de pedido

Debe añadir un [dato personalizado](../custom-data/create-custom-data) para almacenar el ID de pedido (número de pedido) y utilizarlo como [metadatos](./create-a-goal#metadatos) para el objetivo de ingresos. Este dato personalizado vinculará cada conversión al ID de pedido y le ayudará a relacionar con precisión las transacciones con su herramienta de analítica e investigar cualquier posible discrepancia de datos.

Para configurar el dato personalizado, consulte la captura de pantalla a continuación. Ajuste el formato según si el ID de pedido en su sitio es un número o una cadena.

<Frame style={{width: '60%', margin: '0 auto'}}>
  <img src="https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/assets/goals/revenue-goal/new-custom-data.png" alt="New custom data configuration for Order ID" style={{width: "100%"}} />
</Frame>

Para asociar el dato personalizado **OrderID** a su objetivo de ingresos:

1. En el flujo de creación del objetivo, introduzca la información de su objetivo y seleccione **Objetivo personalizado** como tipo de objetivo.
2. Haga clic en **Siguiente** > **Configuración avanzada**.
3. Active **Recopilar metadatos, asociar objetivos a datos personalizados**.
4. Seleccione **OrderID** en el menú desplegable.

<Frame style={{width: '60%', margin: '0 auto'}}>
  <img src="https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/assets/goals/revenue-goal/associate-custom-data.png" alt="Associating OrderID custom data with the revenue goal" style={{width: "100%"}} />
</Frame>

Consulte el ejemplo de código completo a continuación, que establece el valor del dato personalizado.

## Ejemplo completo

*Este ejemplo es para WE y puede utilizarse como referencia para la implementación en FE.*

Ahora que ha revisado cada elemento clave —alcance, lógica de transacción, formato de ingresos, gestión de moneda y seguimiento del ID de pedido— está listo para unirlo todo.

A continuación se muestra un ejemplo completo de cómo implementar el objetivo de ingresos utilizando el script personalizado global en Kameleoon.

```javascript theme={null}
 // Amount conversion using Kameleoon's currency conversion web service
 const convertCurrency = async (revenue, inputCurr, outputCurr) => {
     if (revenue == 0) return 0;
     const response = await fetch(
         `https://customers.kameleoon.com/kameleoon/currencies/convert?inputCurr=${inputCurr}&outputCurr=${outputCurr}&amount=${revenue}`,
         {
             method: 'GET',
             headers: {
                 'Content-Type': 'text/plain',
             },
         }
     );
     return response.json();
 };
 

 // Logic to:
 // - Convert the transaction goal 
 // - Convert a goal for each currency
 // - Convert the global revenue goal
 // - Set the orderID custom data
 // repalce all goal IDs in the code
 if (document.location.href.includes("/confirmation/") && !window.sessionStorage.getItem("kameleoonGoalConverted")) {
     Kameleoon.API.Goals.processConversion(355733); // Transaction goal
     sessionStorage.setItem("kameleoonGoalConverted", "true");
 

     let revenueLayer;
     Kameleoon.API.Core.runWhenConditionTrue(() => {
         revenueLayer = window.dataLayer?.find(layer => layer.ecommerce?.purchase?.actionField?.revenue);
         return revenueLayer;
     }, () => {
         let revenue = parseFloat(revenueLayer.ecommerce.purchase.actionField.revenue);
         const inputCurr = revenueLayer.ecommerce.purchase.actionField.inputCurrency;
         const orderID = revenueLayer.ecommerce.purchase.actionField.orderID;
 

         if (!isNaN(revenue)) {
             revenue = revenue.toString().replace(",", ".").replace(/[^0-9.]/g, "").replace(/\s+/g, "");
             // Currency-specific revenue goals
             switch (inputCurr) {
                 case 'GBP':
                     Kameleoon.API.Goals.processConversion(355641, revenue);
                     break;
                 case 'USD':
                     Kameleoon.API.Goals.processConversion(355643, revenue);
                     break;
                 case 'EUR':
                     Kameleoon.API.Goals.processConversion(355642, revenue);
                     break;
                 default:
                     Kameleoon.API.Goals.processConversion(355649); // Other currencies (no revenue passed)
             }
             // Global revenue goal in output currency (you can use ISO 4217 codes for each country)
             const outputCurr = "USD";
             convertCurrency(revenue, inputCurr, outputCurr).then((convertedRevenue) => {
                 // The custom data must be set before the goal is converted
                 Kameleoon.API.Data.setCustomData("orderID", orderID);
                 Kameleoon.API.Goals.processConversion(353518, convertedRevenue);
             }).catch((error) => {
// Create a Custom Data to store potential errors for debugging
                 Kameleoon.API.Data.setCustomData("[KAM] - currency webservice error", `error: ${error.toString()}; revenue: ${revenue}; inputCurr ${inputCurr}; outputCurr ${outputCurr}`);
                 console.error("Error in currency conversion:", error);
             });
         }
     });
 } else if (!document.location.href.includes("/confirmation/")) {
     sessionStorage.removeItem("kameleoonGoalConverted");
 } 
```

A continuación se muestra una captura de pantalla de la estructura del `dataLayer` en la página de confirmación como referencia.

<Frame>
  ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/assets/goals/revenue-goal/image-43-1-1536x631.png)
</Frame>

Configurar un objetivo de ingresos fiable en Kameleoon requiere una alineación cuidadosa con la estructura de su sitio, la configuración del `dataLayer` y los formatos de moneda. Siguiendo las directrices anteriores, ya sea a través de un gestor de etiquetas o de un script personalizado global, puede garantizar un seguimiento preciso, reducir las discrepancias con sus herramientas de analítica y obtener información más significativa de sus experimentos. No olvide realizar pruebas exhaustivas y validar su implementación para mantener la integridad de los datos.
