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

> Referencia de los métodos Kameleoon.API.Data que definen datos personalizados y leen o escriben datos en el LocalStorage de Kameleoon.

Este módulo proporciona métodos para establecer **datos personalizados** que permiten hacer seguimiento de las características del cliente o de la visita. También incluye métodos de gestión de datos para recuperar y escribir datos en el LocalStorage unificado de Kameleoon.

## readLocalData

El método `readLocalData()` lee los datos locales que haya almacenado previamente mediante `writeLocalData()`. El motor recupera estos datos del Local Storage unificado, evitando las limitaciones estándar de almacenamiento.

```javascript theme={null}
var userId = Kameleoon.API.Data.readLocalData("myUserId");

if (userId) {
  Kameleoon.API.Data.retrieveDataFromRemoteSource(userId, function (data) {
    console.log(data.returningVisitor);
  });
}
```

**Argumentos**

| Nombre | Tipo | Descripción |
| - | - | - |
| key | String | Clave de los datos que se quieren recuperar. Este campo es obligatorio. |

**Valor de retorno**

| Nombre | Tipo | Descripción |
| - | - | - |
| value | String | Valor del dato. |

## performRemoteSynchronization

El método `performRemoteSynchronization()` activa una llamada de sincronización del servidor (SSC) a la API de Data. Esta llamada recupera el historial de visitas almacenado en los servidores backend de Kameleoon para el visitante actual y lo escribe en LocalStorage. Así, los datos son accesibles a través de la Activation API y están disponibles para la segmentación. Este método suele ejecutarse automáticamente para la reconciliación entre dispositivos o para Safari ITP; no requiere invocación manual.

```javascript theme={null}
Kameleoon.API.Data.performRemoteSynchronization("customDataName", "customDataValue", false);
```

**Argumentos**

| Nombre | Tipo | Descripción |
| - | - | - |
| key | String | Clave del dato personalizado que sirve como identificador de mapeo (por ejemplo, ID de cuenta o correo electrónico). Si se omite, el método usa el identificador predeterminado configurado para la reconciliación entre dispositivos en la app de Kameleoon. |
| value | String | Valor del identificador del visitante actual utilizado para la llamada a la Data API. Si se omite, el método usa el valor actual del dato personalizado proporcionado en el primer argumento. |
| currentVisitOnly | Boolean | Cuando está activo, la SSC solicita datos únicamente para la visita actual. Use esta optimización para refrescar valores de datos personalizados adquiridos mediante la Data API o una integración Server-to-Server. Si se omite, el método utiliza **false** por defecto. |

## resetCustomData

El método `resetCustomData()` restablece el valor de un dato personalizado.

```javascript theme={null}
Kameleoon.API.Data.resetCustomData("MyCustomDataName");
```

**Argumentos**

| Nombre | Tipo | Descripción |
| - | - | - |
| name | String | Nombre del dato personalizado tal como está definido en la app de Kameleoon. Este campo es obligatorio. |

## retrieveDataFromRemoteSource

El método `retrieveDataFromRemoteSource()` recupera datos almacenados en un servidor remoto de Kameleoon con la **key** especificada. Este método permite recuperar datos almacenados previamente mediante la Data API. Úselo para almacenar y recuperar rápidamente grandes volúmenes de datos de visitantes.

Este mecanismo asincrónico requiere una función **callback** cuando se complete la llamada al servidor.

```javascript theme={null}
if (location.href.indexOf("loginPage") != -1) {
  Kameleoon.API.Core.runWhenConditionTrue(function () {
    return typeof dataLayer != null;
  }, function () {
    dataLayer.forEach(function (map) {
      if (map.userId) {
        Kameleoon.API.Data.retrieveDataFromRemoteSource(userId, function (data) {
          Kameleoon.API.Data.setCustomData("known_user", data.knownUser);
        });
      }
    });
  }, 200);
}
```

**Argumentos**

| Nombre | Tipo | Descripción |
| - | - | - |
| key | String | La clave de búsqueda. Este campo es obligatorio. |
| callback | Function | Función que se ejecuta después de que el método recupere los datos. Recibe un argumento **data**, que es un objeto JS. Este campo es obligatorio. |

## setCustomData

El método `setCustomData()` establece el valor de un dato personalizado.

```javascript theme={null}

// Custom Data de tipo Single
Kameleoon.API.Data.setCustomData("mySingleCustomDataName", "myNewValue"); // --> "myNewValue"

// Custom Data de tipo List
Kameleoon.API.Data.setCustomData("myListCustomDataName", "myFirstValue"); // --> ["myFirstValue"]
Kameleoon.API.Data.setCustomData("myListCustomDataName", "mySecondValue"); // --> ["myFirstValue", "mySecondValue"]
Kameleoon.API.Data.setCustomData("myListCustomDataName", ["myThirdValue", "myFourthValue"]); // --> ["myFirstValue", "mySecondValue", "myThirdValue", "myFourthValue"]
Kameleoon.API.Data.setCustomData("myListCustomDataName", ["myThirdValue", "myFourthValue"], true); // --> ["myThirdValue", "myFourthValue"]

// Custom Data de tipo Count List
Kameleoon.API.Data.setCustomData("myCountListCustomDataName", "myFirstValue"); // --> {value: 'myFirstValue', count: 1}
Kameleoon.API.Data.setCustomData("myCountListCustomDataName", "myFirstValue"); // --> {value: 'myFirstValue', count: 2}
Kameleoon.API.Data.setCustomData("myCountListCustomDataName", "mySecondValue"); // --> {value: 'myFirstValue', count: 2}, {value: 'mySecondValue', count: 1}
```

**Argumentos**

| Nombre | Tipo | Descripción |
| - | - | - |
| CustomDataNameOrIndex | String o Number | Nombre o Índice del dato personalizado tal como está definido en la app de Kameleoon (el índice aparece en la columna 'INDEX' del dashboard de Custom Data). Este campo es obligatorio. |
| value | String, Number, Boolean, Array | Valor de los datos personalizados. El argumento proporcionado debe coincidir con el tipo declarado para estos datos personalizados en la aplicación Kameleoon. Este campo es obligatorio. **Tenga en cuenta que `setCustomData()` acepta String, Number y Boolean cuando el `Type` es `Single`. Si el `Type` es `List` o `Count List`, acepta un array de String o Number.** |
| overwrite | Boolean | **Booleano opcional**. Cuando es `true`, el nuevo valor sobrescribe los datos personalizados existentes. Cuando es `false` o se omite: **Lists/Count Lists** añaden valores (todos los valores aparecen en los informes); los **tipos Single** sobrescriben (solo aparece el último valor); los **Custom Data con ámbito de página** (todos los tipos) añaden valores. |

## writeLocalData

El método `writeLocalData()` registra datos locales en el navegador del visitante para su posterior recuperación mediante `readLocalData()`. El motor los almacena como datos de sesión unificados en Local Storage, evitando las limitaciones estándar de almacenamiento. Los datos quedan disponibles inmediatamente para su recuperación en la misma pestaña a través de caché en RAM, mientras que la escritura física se realiza de forma asincrónica.

```javascript theme={null}
Kameleoon.API.Data.writeLocalData("myData", "myDataValue", true);
```

**Argumentos**

| Nombre | Tipo | Descripción |
| - | - | - |
| key | String | Clave (nombre) del dato que se va a escribir. Este campo es obligatorio. |
| value | String | Valor del dato que se va a escribir. Este campo es obligatorio. |
| persistent | Boolean | Activa/desactiva la persistencia del dato. Los datos no persistentes expiran tras 1 hora, mientras que los persistentes permanecen durante 30 días. Si se omite, el método utiliza **false** por defecto. |
