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

# Contenido dinámico con CSV

> Personaliza mensajes push, de correo electrónico y SMS a escala usando Contenido dinámico con cargas CSV y sintaxis Liquid en OneSignal.

OneSignal proporciona varias formas de [personalizar el contenido de mensajes](./message-personalization) a escala. Esta guía se centra en usar la función de Contenido dinámico con carga CSV que se encuentra en el panel de OneSignal para push, correo electrónico y SMS.

**Beneficios clave:**

* **Use un CSV para personalizar a escala** – Un mensaje, experiencias personalizadas para todos
* **Soporte multiidioma** – Cambio automático de idioma por usuario
* **Personalización dinámica** – El contenido se adapta a las propiedades del usuario (idioma, región, ID de campaña)
* **Colaboración en equipo** – Los usuarios no técnicos editan contenido en archivos CSV
* **Inyección HTML (correo electrónico)** – Incluya marcado HTML en celdas CSV para construir dinámicamente contenido de correo electrónico enriquecido
* **Compatibilidad entre canales** – Reutilice la lógica CSV entre canales

**Casos de uso comunes:**

* Incorporación o marketing multiidioma
* Promociones específicas por región
* Anuncios de eventos por ubicación
* Personalización basada en campañas

***

## Pasos de configuración del Contenido dinámico con CSV

**Referencia rápida:**

1. Cree un archivo CSV con sus variaciones de contenido.
2. Mapee los datos CSV al mensaje usando la propiedad `dynamic_content` en sintaxis Liquid.
3. Cree un nuevo mensaje o [plantilla](./templates) desde el panel de OneSignal.
4. Seleccione el botón **Contenido dinámico** o **Personalización**.
5. Cargue el archivo CSV y envíe el mensaje.

### Requisitos y configuración de CSV

* **Tamaño de archivo:** Menos de 200 KB
* **Encabezados de columna:**
  * Reserve el primer encabezado de columna para la clave de etiqueta o déjelo en blanco para hacer referencia a secciones
  * Solo caracteres alfanuméricos y guiones bajos
  * Use guiones bajos (`_`) en lugar de espacios
* **Codificación:** UTF-8

Comience con un CSV en blanco o use una plantilla proporcionada. Las plantillas se proporcionan al seleccionar el botón **Contenido dinámico** o **Personalización** en los editores de mensajes y plantillas.

<Frame caption="Botón de Contenido dinámico que se encuentra en el editor de mensajes.">
  <img src="https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/772f91e24ebca83a05d4e96819a41ec58d5ca0acd3a715e971c4a43ba7654494-Screenshot_2025-02-10_at_5.23.32_PM.png?fit=max&auto=format&n=jBdBk5XvQR5eKOks&q=85&s=c51a6fcb07f7aab797cbfe74423530cb" alt="Botón de Contenido dinámico en el editor de mensajes de OneSignal" width="1960" height="380" data-path="images/docs/772f91e24ebca83a05d4e96819a41ec58d5ca0acd3a715e971c4a43ba7654494-Screenshot_2025-02-10_at_5.23.32_PM.png" />
</Frame>

Plantillas disponibles:

* **Multiidioma** – Localice el contenido por idioma
* **Personalización de contenido** – Personalice el contenido por etiquetas de datos

<Frame caption="Opciones de plantilla CSV en el panel de OneSignal.">
  <img src="https://mintcdn.com/onesignal/YOTSrtBSoqdrJ37A/images/docs/47f48b79aa100bd5d2c59a418216bafba75daaa92d0bf939dcd3ccceca39cd7c-Screenshot_2025-02-10_at_5.26.15_PM.png?fit=max&auto=format&n=YOTSrtBSoqdrJ37A&q=85&s=87947eb40093580c8589cf7eb4183564" alt="Opciones de plantilla CSV que muestran plantillas multiidioma y de personalización de contenido" width="1986" height="870" data-path="images/docs/47f48b79aa100bd5d2c59a418216bafba75daaa92d0bf939dcd3ccceca39cd7c-Screenshot_2025-02-10_at_5.26.15_PM.png" />
</Frame>

#### Ejemplos de CSV

Esta guía utilizará los siguientes datos CSV de ejemplo.

<Tabs>
  <Tab title="Ejemplo de plantilla multiidioma">
    * Mapee los encabezados de columna a sus [códigos de idioma admitidos](./multi-language-messaging#supported-languages).
    * Agregue sus traducciones a cada fila para cada código de idioma.
    * Si tiene varias secciones (como en un correo electrónico), designe la primera columna como el nombre de la sección.

    Este ejemplo incluye:

    * 3 idiomas: inglés, español y francés.
    * 2 secciones: "section\_1" y "section\_2".

    <Frame caption="CSV multiidioma que coincide el atributo de idioma del usuario con el contenido (similar a BUSCARV).">
      <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/8716e43deead16759c2500d85900d2d1be8b6a9c51e0477160569b05534a58fb-Screenshot_2025-02-10_at_8.37.25_PM.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=4a20651cf2949bad117b8a9fda432536" alt="CSV multiidioma con códigos de idioma como encabezados de columna y contenido traducido en filas" width="1438" height="220" data-path="images/docs/8716e43deead16759c2500d85900d2d1be8b6a9c51e0477160569b05534a58fb-Screenshot_2025-02-10_at_8.37.25_PM.png" />
    </Frame>
  </Tab>

  <Tab title="Ejemplo de plantilla de personalización de contenido">
    * Mapee el primer encabezado de columna a la clave de etiqueta y las filas subyacentes a los valores que desea referenciar. Consulte [Etiquetas](./add-user-data-tags) para obtener más información sobre cómo agregar etiquetas a los usuarios.
    * Mapee los encabezados de columna restantes a las secciones o componentes que desea personalizar.

    En este ejemplo:

    * La clave de etiqueta es `campaign_id` con valores posibles de `A` y `B`.
    * Hay 3 componentes: "title", "message" y "url".

    <Frame caption="CSV de personalización usando la etiqueta de datos campaign_id.">
      <img src="https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/2d49628c7c891801e50b7f397442f5887e7b776897d24788be16887ed191f631-Screenshot_2025-04-10_at_9.47.35_AM.png?fit=max&auto=format&n=3zq1PvSaqvUE2bIx&q=85&s=23ec0fe2224cc3103e7a7c62168dd050" alt="CSV de personalización de contenido usando la etiqueta campaign_id con columnas title, message y url" width="1406" height="160" data-path="images/docs/2d49628c7c891801e50b7f397442f5887e7b776897d24788be16887ed191f631-Screenshot_2025-04-10_at_9.47.35_AM.png" />
    </Frame>

    <Warning>
      **Importante:** Elimine espacios y caracteres no alfanuméricos de los encabezados CSV
      o use notación hash en Liquid.
    </Warning>

    <Frame caption="Ejemplo de CSV detallado usando sintaxis Liquid para hacer referencia a etiquetas.">
      <img src="https://mintcdn.com/onesignal/tc0EvmtSSX56SX0c/images/docs/9352ff1-event_translation.csv.png?fit=max&auto=format&n=tc0EvmtSSX56SX0c&q=85&s=e71b92286f500fc201b95bafa2b38a85" alt="Ejemplo de CSV detallado que muestra referencias de sintaxis Liquid para personalización basada en etiquetas" width="3189" height="2646" data-path="images/docs/9352ff1-event_translation.csv.png" />
    </Frame>
  </Tab>
</Tabs>

### Mapear datos CSV al contenido del mensaje

Usando [sintaxis Liquid](./using-liquid-syntax), haga referencia a los datos CSV en su mensaje usando la propiedad `dynamic_content`:

```liquid theme={null}
<!-- Opción 1: acceder por componente primero -->
{{dynamic_content.file_name.message_component[user_property]}}

<!-- Opción 2: acceder por propiedad de usuario primero -->
{{dynamic_content.file_name[user_property].message_component}}
```

**Parámetros:**

* `dynamic_content` – El nombre de la propiedad utilizada para hacer referencia a los datos CSV
* `file_name` – Nombre del archivo CSV (sin extensión `.csv`)
* `message_component` – El componente de mensaje específico que desea personalizar. Este es el texto estático en el encabezado de columna CSV o la primera fila.
* `user_property` – La [propiedad de usuario](./message-personalization#properties) que desea referenciar.

**Contenido de respaldo:**

Siempre use respaldos de cadena `default` codificados para garantizar que los mensajes se rendericen si falla la búsqueda CSV o el Contenido dinámico.

```liquid Sintaxis Liquid para el respaldo theme={null}
{{ dynamic_content.my_template.header[user.language] | default: "Bienvenido a nuestra última actualización" }}
```

Esto significa que si falla la búsqueda CSV o el Contenido dinámico, el mensaje renderizará el texto de respaldo `"Bienvenido a nuestra última actualización"`.

Esto asegura:

* Se usa Contenido dinámico cuando está disponible
* Aparece un mensaje codificado si falla el Contenido dinámico
* Los usuarios nunca reciben contenido en blanco

<Tabs>
  <Tab title="Ejemplo de mensaje multiidioma">
    ```csv translations.csv theme={null}
    ,en,es,fr
    section_1,Hello,Hola,Bonjour
    section_2,Thanks for shopping with us...,Gracias por comprar con nosotros...,Merci pour votre achat avec nous...
    ```

    * El `file_name` es `translations.csv`.
    * El `message_component` está en las filas de la primera columna `section_1` y `section_2`.
    * El `user_property` es el encabezado de columna que coincide con el código de idioma. Podemos hacer referencia a esto en el usuario con la [propiedad](./message-personalization#properties) `user.language`.

    ```liquid Sintaxis Liquid básica para el mensaje multiidioma theme={null}
    {{dynamic_content.translations.section_1[user.language]}}
    {{dynamic_content.translations.section_2[user.language]}}
    ```

    ```liquid (Recomendado) Sintaxis Liquid con respaldo predeterminado para el mensaje multiidioma theme={null}
    {% assign supported_langs = "en,es,fr,de" | split: "," %}
    {% assign lang = user.language | default: "en" %}

    {% unless supported_langs contains lang %}
      {% assign lang = "en" %}
    {% endunless %}

    {{ dynamic_content.translations.section_1[lang] | default: "Hello" }}
    {{ dynamic_content.translations.section_2[lang] | default: "Thanks for shopping with us..." }}
    ```

    <Frame caption="Agregando sintaxis Liquid para contenido de correo electrónico multiidioma.">
      <img src="https://mintcdn.com/onesignal/4HyuQPBpu-4xjmQC/images/docs/d0df135475c202308b5b5e40f3893f1beff6d7d387a99e9264c5c5936283d699-Screenshot_2025-02-10_at_10.08.20_PM.png?fit=max&auto=format&n=4HyuQPBpu-4xjmQC&q=85&s=bb3aaec56a1bcca6e1400b096a5550b7" alt="Editor de correo electrónico de OneSignal con sintaxis Liquid para Contenido dinámico multiidioma" width="1062" height="446" data-path="images/docs/d0df135475c202308b5b5e40f3893f1beff6d7d387a99e9264c5c5936283d699-Screenshot_2025-02-10_at_10.08.20_PM.png" />
    </Frame>
  </Tab>

  <Tab title="Ejemplo de mensaje de personalización de contenido">
    ```csv content_personalization_template.csv theme={null}
    campaign_id,title,message,url
    campaign_123,Flash deal for you,Tap to claim,https://example.com/flash
    campaign_456,Weekend picks are here,See what's trending,https://example.com/weekend
    default,Our latest offers,See what's new,https://example.com
    ```

    * El `file_name` es `content_personalization_template.csv`.
    * El `user_property` se mapea a la clave de etiqueta: `campaign_id`.
    * El `message_component` es el encabezado de columna mapeado a la sección del mensaje que desea personalizar (title, message o url).

    ```liquid Sintaxis Liquid para el mensaje de personalización de contenido theme={null}
    {{ dynamic_content.content_personalization_template[campaign_id].title }}
    {{ dynamic_content.content_personalization_template[campaign_id].message }}
    {{ dynamic_content.content_personalization_template[campaign_id].url }}
    ```

    ```liquid (Recomendado) Sintaxis Liquid con respaldo predeterminado para el mensaje de personalización de contenido theme={null}
    {% assign cid = campaign_id | default: "default" %}

    {% unless dynamic_content.content_personalization_template[cid] %}
      {% assign cid = "default" %}
    {% endunless %}

    {{ dynamic_content.content_personalization_template[cid].title | default: "Nuestras últimas ofertas" }}
    {{ dynamic_content.content_personalization_template[cid].message | default: "Ver novedades" }}
    {{ dynamic_content.content_personalization_template[cid].url | default: "https://example.com" }}
    ```

    <Frame caption="Agregando sintaxis Liquid para personalización push basada en campañas.">
      <img src="https://mintcdn.com/onesignal/tNi1OgLc_p9hiq7_/images/docs/1c80cff787617df73a16bd4858446a07db6af84f4d79404c4a2ad34e3e509876-Screenshot_2025-02-10_at_9.53.13_PM.png?fit=max&auto=format&n=tNi1OgLc_p9hiq7_&q=85&s=37a96d318756adc6b0f2a35aecc20c92" alt="Ejemplo de Liquid de personalización de Contenido dinámico" width="1774" height="1018" data-path="images/docs/1c80cff787617df73a16bd4858446a07db6af84f4d79404c4a2ad34e3e509876-Screenshot_2025-02-10_at_9.53.13_PM.png" />
    </Frame>
  </Tab>
</Tabs>

<Check>
  Use Liquid con respaldo `default` para actualizar líneas de asunto, preencabezados, etiquetas de botones
  y URLs.
</Check>

### Usar HTML en celdas CSV (solo correo electrónico)

Puede incluir marcado HTML directamente en celdas CSV para inyectar contenido enriquecido en correos electrónicos. Esto es útil para intercambiar secciones enteras de un correo electrónico — como banners, CTAs o bloques con estilo — según las propiedades del usuario.

```csv promo_banners.csv theme={null}
campaign_id,banner_html
spring_sale,<div style="background:#4CAF50;padding:16px;text-align:center;"><a href="https://example.com/spring" style="color:#fff;font-size:18px;">Shop the Spring Sale</a></div>
default,<div style="background:#333;padding:16px;text-align:center;"><a href="https://example.com" style="color:#fff;font-size:18px;">See What's New</a></div>
```

Haga referencia a la celda HTML en su plantilla de correo electrónico:

```liquid theme={null}
{{ dynamic_content.promo_banners[campaign_id].banner_html | default: "<p>Check out our latest offers</p>" }}
```

El HTML se renderiza directamente en el cuerpo del correo electrónico, por lo que puede usar cualquier estilo en línea y marcado que los clientes de correo electrónico admitan.

<Warning>
  El HTML de las celdas CSV solo es compatible con el correo electrónico. Los canales de push y SMS renderizan el contenido como texto sin formato y no interpretan el marcado HTML.
</Warning>

***

## Referencia

### Actualizar plantillas

Vuelva a cargar CSVs a través del panel o use la propiedad `dynamic_content` de la [API de actualización de plantilla](/reference/update-template).

### Caracteres especiales en claves

**Notación hash** (para claves no alfanuméricas):

```liquid theme={null}
{{ dynamic_content.file_name["!the_row!"]["&the_column&"] }}
```

**Notación de puntos** (para claves estándar):

```liquid theme={null}
{{ dynamic_content.file_name.the_row.the_column }}
```

***

## Preguntas frecuentes

### ¿Cómo puedo probar el Contenido dinámico con CSV?

Use correo electrónico para probar múltiples variaciones del mensaje.

* Use el direccionamiento `+` en correos electrónicos para probar múltiples variaciones: `username+test@example.com`.
* Configure etiquetas siguiendo los ejemplos multiidioma y de personalización de contenido anteriores.
* Consulte [Importar](./import) para obtener más información sobre la carga de múltiples usuarios y etiquetas de datos.

### ¿Cuándo usar Contenido dinámico con CSV vs. otras opciones de personalización?

Use **Contenido dinámico con CSV** cuando envíe mensajes desde el panel y tenga datos de usuario en un archivo CSV. Para otras formas de agregar contenido dinámico a los mensajes, consulte [Personalización de mensajes](./message-personalization) o [Mensajería multiidioma](./multi-language-messaging).

***

## Páginas relacionadas

<Columns cols={2}>
  <Card title="Personalización de mensajes" icon="wand-magic-sparkles" href="./message-personalization">
    Descripción general de todas las opciones de personalización disponibles en OneSignal.
  </Card>

  <Card title="Uso de sintaxis Liquid" icon="code" href="./using-liquid-syntax">
    Referencia completa de sintaxis Liquid para mensajes de OneSignal.
  </Card>

  <Card title="Importar" icon="file-import" href="./import">
    Cargar datos de usuario y segmentos a OneSignal.
  </Card>

  <Card title="Plantillas" icon="clone" href="./templates">
    Crear plantillas de mensajes reutilizables.
  </Card>
</Columns>
