# Cómo configurar una campaña de carritos abandonados

Los compradores que añaden artículos a un carrito y se van sin comprar son algunas de las conversiones más fáciles de recuperar. Ya han mostrado intención.

Esta guía muestra cómo enviarles un correo electrónico de carrito abandonado en Pushwoosh: dispara el evento `PW_AbandonedCart` desde tu tienda, muestra los artículos olvidados en el correo electrónico con el bloque [Productos](/es/product/content/email-content/drag-and-drop-email-editor/blocks/#products) y activa el envío desde un Customer Journey.

## ¿Qué es PW_AbandonedCart?

`PW_AbandonedCart` marca que un usuario ha dejado artículos en su carrito sin comprar. No es un [evento predeterminado](/es/product/audience-data-and-segmentation/events/default-events/) integrado. Es un nombre de evento compartido que se utiliza en todas las integraciones de comercio electrónico de Pushwoosh para que los journeys, el bloque de Productos y los segmentos funcionen de la misma manera.

*   **[Integración de Magento](/es/product/integrations/magento-integration/):** envía `PW_AbandonedCart` y `PW_OrderCreated` por ti automáticamente.
*   **[Integración de Shopify](/es/product/integrations/shopify-integration/):** envía `PW_AbandonedCart`, `PW_OrderCreated` y `PW_AbandonedCartUpdate` (se dispara de nuevo mientras el comprador sigue editando el mismo proceso de pago) por ti automáticamente, con los artículos del carrito enriquecidos desde tu Catálogo de Productos.
*   **Cualquier otra tienda o backend personalizado:** tu equipo envía ambos eventos a través de [postEvent](/es/developer/api-reference/user-centric-api/#postevent) con los nombres y atributos en [Cómo enviar recordatorios de carritos abandonados](#how-to-send-abandoned-cart-reminders).

### ¿Qué sucede cuando envías PW_AbandonedCart?

Enviar `PW_AbandonedCart` hace dos cosas en el lado de Pushwoosh:

1.  Se registra como cualquier otro evento personalizado, por lo que puedes verlo en las [estadísticas de Eventos](/es/product/audience-data-and-segmentation/events/) y usarlo en [segmentos](/es/product/audience-data-and-segmentation/segmentation/create-segments/by-events/).
2.  Pushwoosh almacena el contenido del carrito y etiqueta al usuario con:
    *   **PW_AbandonedCartID:** un identificador para el carrito actual, utilizado para obtener su contenido en el momento del envío.
    *   **PW_AbandonedCartDate:** el valor `abandonedDate` de la carga útil del evento.

### ¿Qué sucede cuando envías PW_OrderCreated?

Cuando el comprador realiza un pedido, envía `PW_OrderCreated` (o `PW_OrderUpdated`). Pushwoosh borra `PW_AbandonedCartID` y `PW_AbandonedCartDate` para ese usuario de inmediato. No coincide con los valores de `orderId`: cualquier pedido del usuario elimina ambas etiquetas, incluso si la compra fue para un carrito diferente.

**Ejemplo:** Un comprador abandona el carrito `ORDER-100`, y luego compra `ORDER-200` antes de que se envíe el recordatorio. Pushwoosh borra las etiquetas, por lo que no recibirá un recordatorio sobre `ORDER-100`.

<Aside type="note" title="Qué aparece en el correo electrónico de recordatorio">
El bloque de Productos lee el carrito almacenado en el perfil del usuario en el momento del envío. No utiliza la lista de artículos del evento `PW_AbandonedCart` que inició el journey.

*   **Mismo `orderId`:** cada nuevo `PW_AbandonedCart` sobrescribe el carrito almacenado. El recordatorio muestra los artículos más recientes.
*   **Diferente `orderId`:** Pushwoosh almacena un carrito por separado. Los artículos no se fusionan.
</Aside>

## Cómo enviar recordatorios de carritos abandonados

Sigue estos pasos para crear los eventos, enviarlos desde tu tienda, construir el correo electrónico y lanzar el Customer Journey.

### Crea los eventos en tu Panel de Control

[Pushwoosh crea automáticamente](/es/product/audience-data-and-segmentation/events/#1-create-events-in-pushwoosh-control-panel) un evento y sus atributos a partir de la primera llamada `postEvent` con un nombre que no reconoce, infiriendo el tipo de cada atributo a partir del valor enviado. Esa inferencia no es fiable para los campos de dinero en `PW_AbandonedCart`. Declara ambos eventos explícitamente para que los tipos se establezcan correctamente:

1.  Ve a **Audience → Events** en tu Panel de Control de Pushwoosh y haz clic en **Create Event**.
2.  Crea un evento personalizado llamado `PW_AbandonedCart` con estos atributos:

| Atributo | Tipo |
| :--- | :--- |
| `email` | string |
| `orderId` | string |
| `customerId` | string |
| `orderUrl` | string |
| `abandonedDate` | date |
| `createdDate` | date |
| `totalPrice` | decimal (price) |
| `shippingAmount` | decimal (price) |
| `taxAmount` | decimal (price) |
| `discountAmount` | decimal (price) |
| `currency` | string |

3.  Repite para `PW_OrderCreated` con un único atributo `orderId`.

<Aside type="caution" title="Utiliza los tipos de atributo correctos">
Pushwoosh almacena cada valor de atributo solo en el tipo establecido para él, ya sea declarado aquí o inferido para un atributo creado automáticamente. Un valor que no coincide con el tipo se descarta silenciosamente, y `postEvent` sigue devolviendo éxito, por lo que no verás en la respuesta que se perdieron datos. Puedes corregir un tipo incorrecto más tarde editando el evento en el Panel de Control, pero cualquier dato enviado antes de la corrección ya se ha perdido.

Para que el carrito abandonado funcione, haz coincidir los tipos de la tabla anterior:

*   **Campos de dinero** (`totalPrice`, `shippingAmount`, `taxAmount`, `discountAmount`): utiliza **decimal (price)**. Si no se declara, un valor de número entero como `129` se infiere como **integer**. Declarado como **string**, el carrito no se almacena y no se establecen etiquetas. Declarado como **integer**, `129.90` se convierte en `129`.
*   **Fechas** (`abandonedDate`, `createdDate`): utiliza **date**.
*   **`items`:** no lo añadas a la definición del evento. Envíalo en la carga útil JSON como un array de objetos. Utiliza números JSON reales para `price` y `quantity`, no cadenas entrecomilladas.
</Aside>

[Aprende más sobre la creación de eventos personalizados](/es/product/audience-data-and-segmentation/events/custom-events/#creating-custom-events).

### Envía los eventos desde tu backend

<Aside type="caution" icon="setting" title="Se necesita ayuda de un desarrollador">
Necesitarás la ayuda de tu equipo de desarrollo para enviar eventos desde tu tienda o backend. Por favor, comparte esta guía con ellos.
</Aside>

Pide a tu equipo de desarrollo que llame a [postEvent](/es/developer/api-reference/user-centric-api/#postevent) cada vez que se abandone un carrito, utilizando este esquema de atributos:

```json
{
  "request": {
    "hwid": "8f65b16df378e7a6bece9614e1530fb2",
    "application": "XXXXX-XXXXX",
    "event": "PW_AbandonedCart",
    "attributes": {
      "email": "shopper@example.com",
      "orderId": "ORDER-10293",
      "customerId": "CUST-4471",
      "orderUrl": "https://yourstore.com/cart/restore/ORDER-10293",
      "abandonedDate": "2026-07-28T10:15:00Z",
      "createdDate": "2026-07-28T09:40:00Z",
      "totalPrice": 129.90,
      "shippingAmount": 9.90,
      "taxAmount": 0,
      "discountAmount": 0,
      "currency": "USD",
      "items": [
        {
          "productId": "SKU-4821",
          "name": "Wireless headphones",
          "quantity": 1,
          "price": 119.90,
          "sku": "SKU-4821",
          "description": "Over-ear, noise-cancelling",
          "imageUrl": "https://yourstore.com/media/sku-4821.jpg",
          "productUrl": "https://yourstore.com/products/sku-4821",
          "category": "Audio"
        }
      ]
    },
    "userId": "shopper@example.com"
  }
}
```

Cuando el carrito se convierta en un pedido, envía `PW_OrderCreated` solo con el `orderId` para borrar las etiquetas del carrito:

```json
{
  "request": {
    "hwid": "8f65b16df378e7a6bece9614e1530fb2",
    "application": "XXXXX-XXXXX",
    "event": "PW_OrderCreated",
    "attributes": {
      "orderId": "ORDER-10293"
    },
    "userId": "shopper@example.com"
  }
}
```

<Aside type="tip">
Si utilizas la [integración de Magento](/es/product/integrations/magento-integration/#abandoned-cart-sync-configuration) o la [integración de Shopify](/es/product/integrations/shopify-integration/#part-5-track-orders-carts-and-checkout-steps), no necesitas enviar estos eventos desde tu backend. Magento envía `PW_AbandonedCart` y `PW_OrderCreated` por ti de forma programada; Shopify los envía (además de `PW_AbandonedCartUpdate` para las ediciones del proceso de pago en curso) desde webhooks en tiempo real.
</Aside>

### Añade un bloque de Productos a tu correo electrónico

1.  Abre el [editor de contenido de correo electrónico](/es/product/content/email-content/drag-and-drop-email-editor/) y añade un bloque de [Productos](/es/product/content/email-content/drag-and-drop-email-editor/blocks/#products) al lienzo.
2.  En el panel de configuración, establece **Source** en [Cart](/es/product/content/email-content/drag-and-drop-email-editor/blocks/#show-items-from-the-cart).

<Aside type="note">
El origen **Cart** del bloque de Productos necesita **Content Templates** en tu plan y un [token de acceso a la API](/es/developer/api-reference/api-access-token/). Consulta [Bloque de Productos](/es/product/content/email-content/drag-and-drop-email-editor/blocks/#products).
</Aside>

3.  Establece **Max products shown** para limitar cuántos artículos del carrito aparecen en el correo electrónico.

<img src="/lifecycle-marketing-campaigns-how-to-set-up-an-abandoned-cart-campaign-1.webp" alt="Configuración del bloque de Productos con Origen establecido en Carrito y Máximo de productos mostrados"/>

4.  Da estilo a la cuadrícula y a la plantilla de la tarjeta según sea necesario. Consulta [Dar estilo a la cuadrícula](/es/product/content/email-content/drag-and-drop-email-editor/blocks/#style-the-grid).

<img src="/lifecycle-marketing-campaigns-how-to-set-up-an-abandoned-cart-campaign-2.webp" alt="Bloque de Productos en el lienzo del correo electrónico con la plantilla de la tarjeta y la configuración de estilo de la cuadrícula" width="580"/>

Cuando se envía el correo electrónico, el bloque de Productos busca el carrito almacenado de cada destinatario utilizando su etiqueta `PW_AbandonedCartID`. A continuación, rellena el bloque con los artículos actuales del carrito: imagen, título, precio y un enlace de vuelta al carrito. El diseño proviene de la plantilla de tarjeta que estableciste en el editor. Los destinatarios sin esa etiqueta (nada abandonado, o ya pedido) se saltan el bloque en lugar de mostrar contenido vacío, por lo que también es seguro utilizarlo en una campaña más amplia.

<Aside type="tip">
El origen Carrito está disponible en el editor de contenido de correo electrónico. Para recordar a los compradores con una notificación push en su lugar, utiliza un paso de [Push](/es/product/customer-journey/journey-elements/channels/push/) con [personalización](/es/product/personalization/dynamic-content/) que haga referencia a los detalles del carrito del evento.
</Aside>

### Construye el Customer Journey

1.  Añade una [Entrada basada en disparador](/es/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/) utilizando el evento `PW_AbandonedCart`.
2.  Añade un paso de [Esperar por disparador](/es/product/customer-journey/journey-elements/flow-controls/wait-for-trigger/). Establece su período de espera en una o dos horas. Nombra la rama **Order placed** y añádele el evento `PW_OrderCreated`.

<Aside type="caution">
Establece el período de espera en el propio **Esperar por disparador**. No añadas un paso de **Retraso de tiempo** por separado antes de él.

**Esperar por disparador** solo empieza a escuchar `PW_OrderCreated` una vez que el comprador llega a ese paso. Si **Retraso de tiempo** va primero y el comprador realiza un pedido durante ese retraso, el evento del pedido no se detecta. El comprador pasa a la rama **Not triggered**, pero `PW_OrderCreated` ya ha borrado `PW_AbandonedCartID`. El bloque de Productos no encuentra ningún carrito y lo omite. El comprador sigue recibiendo el correo electrónico de carrito abandonado sin productos, a pesar de que ya ha completado su compra.
</Aside>

3.  Dirige la rama **Order placed** a [Salida](/es/product/customer-journey/journey-elements/flow-controls/exit/). El usuario ya ha comprado, así que no se lo recuerdes.
4.  Dirige la rama **Not triggered** al paso de [Correo electrónico](/es/product/customer-journey/journey-elements/channels/email/). Guarda el correo electrónico que creaste en [Añade un bloque de Productos a tu correo electrónico](#add-a-products-block-to-your-email) como [contenido de correo electrónico](/es/product/content/email-content/), y luego selecciónalo como el contenido de este paso.

<img src="/lifecycle-marketing-campaigns-how-to-set-up-an-abandoned-cart-campaign-3.webp" alt="Lienzo de Customer Journey con Entrada basada en disparador, Esperar por disparador con ramas de Pedido realizado y No disparado, pasos de Correo electrónico y Salida, y sin Retraso de tiempo"/>

### Prueba antes de lanzar

1.  Envía un evento `PW_AbandonedCart` de prueba para un dispositivo de prueba. No establezcas la etiqueta `PW_AbandonedCartID` manualmente: el bloque de Productos carga el contenido del carrito desde el carrito almacenado que crea el evento, no desde el valor de la etiqueta. Sin un evento real, el bloque se renderiza vacío.
2.  Previsualiza el correo electrónico y confirma el diseño y el contenido del producto antes de enviarlo a los compradores reales.