# Как настроить кампанию по брошенным корзинам

Покупатели, которые добавляют товары в корзину и уходят, не совершив покупку, — это одни из самых легких конверсий для возврата. Они уже проявили намерение.

В этом руководстве показано, как отправить им email-сообщение о брошенной корзине в Pushwoosh: вызовите событие `PW_AbandonedCart` из вашего магазина, покажите оставленные товары в email-сообщении с помощью блока [Продукты](/ru/product/content/email-content/drag-and-drop-email-editor/blocks/#products) и запустите отправку из Customer Journey.

## Что такое PW_AbandonedCart

`PW_AbandonedCart` отмечает, что пользователь оставил товары в своей корзине, не совершив покупку. Это не встроенное [событие по умолчанию](/ru/product/audience-data-and-segmentation/events/default-events/). Это общее имя события, используемое во всех интеграциях Pushwoosh для e-commerce, чтобы Journeys, блок Products и сегменты работали одинаково.

*   **[Интеграция с Magento](/ru/product/integrations/magento-integration/):** автоматически отправляет `PW_AbandonedCart` и `PW_OrderCreated` за вас.
*   **[Интеграция с Shopify](/ru/product/integrations/shopify-integration/):** автоматически отправляет `PW_AbandonedCart`, `PW_OrderCreated` и `PW_AbandonedCartUpdate` (срабатывает снова, когда покупатель продолжает редактировать ту же корзину) за вас, с товарами из корзины, обогащенными из вашего каталога продуктов.
*   **Любой другой магазин или кастомный бэкенд:** ваша команда отправляет оба события через [postEvent](/ru/developer/api-reference/user-centric-api/#postevent) с именами и атрибутами, указанными в разделе [Как отправлять напоминания о брошенной корзине](#how-to-send-abandoned-cart-reminders).

### Что происходит при отправке PW_AbandonedCart

Отправка `PW_AbandonedCart` выполняет две вещи на стороне Pushwoosh:

1.  Оно записывается как любое другое кастомное событие, поэтому вы можете видеть его в [статистике событий](/ru/product/audience-data-and-segmentation/events/) и использовать в [сегментах](/ru/product/audience-data-and-segmentation/segmentation/create-segments/by-events/).
2.  Pushwoosh сохраняет содержимое корзины и помечает пользователя тегами:
    *   **PW_AbandonedCartID:** идентификатор текущей корзины, используемый для получения ее содержимого во время отправки.
    *   **PW_AbandonedCartDate:** значение `abandonedDate` из полезной нагрузки события.

### Что происходит при отправке PW_OrderCreated

Когда покупатель размещает заказ, отправьте `PW_OrderCreated` (или `PW_OrderUpdated`). Pushwoosh немедленно очищает `PW_AbandonedCartID` и `PW_AbandonedCartDate` для этого пользователя. Он не сопоставляет значения `orderId`: любой заказ от пользователя удаляет оба тега, даже если покупка была для другой корзины.

**Пример:** Покупатель бросает корзину `ORDER-100`, затем покупает `ORDER-200` до того, как будет отправлено напоминание. Pushwoosh очищает теги, поэтому он не получит напоминание о `ORDER-100`.

<Aside type="note" title="Что отображается в email-сообщении с напоминанием">
Блок Products считывает корзину, сохраненную в профиле пользователя во время отправки. Он не использует список товаров из события `PW_AbandonedCart`, которое запустило Journey.

*   **Одинаковый `orderId`:** каждый новый `PW_AbandonedCart` перезаписывает сохраненную корзину. В напоминании отображаются последние товары.
*   **Разный `orderId`:** Pushwoosh сохраняет отдельную корзину. Товары не объединяются.
</Aside>

<span id="how-to-send-abandoned-cart-reminders" />

## Как отправлять напоминания о брошенной корзине

Выполните следующие шаги, чтобы создать события, отправить их из вашего магазина, создать email-сообщение и запустить Customer Journey.

### Создайте события в вашей Панели управления

[Pushwoosh автоматически создает](/ru/product/audience-data-and-segmentation/events/#1-create-events-in-pushwoosh-control-panel) событие и его атрибуты из первого вызова `postEvent` под именем, которое он не распознает, определяя тип каждого атрибута по отправленному значению. Это определение ненадежно для полей с денежными значениями в `PW_AbandonedCart`. Объявите оба события явно, чтобы типы были установлены правильно:

1.  Перейдите в **Audience → Events** в вашей Панели управления Pushwoosh и нажмите **Create Event**.
2.  Создайте кастомное событие с именем `PW_AbandonedCart` со следующими атрибутами:

| Атрибут | Тип |
| :--- | :--- |
| `email` | строка |
| `orderId` | строка |
| `customerId` | строка |
| `orderUrl` | строка |
| `abandonedDate` | дата |
| `createdDate` | дата |
| `totalPrice` | десятичное (цена) |
| `shippingAmount` | десятичное (цена) |
| `taxAmount` | десятичное (цена) |
| `discountAmount` | десятичное (цена) |
| `currency` | строка |

3.  Повторите для `PW_OrderCreated` с одним атрибутом `orderId`.

<Aside type="caution" title="Используйте правильные типы атрибутов">
Pushwoosh сохраняет каждое значение атрибута только в установленном для него типе, будь то объявленный здесь или определенный для автоматически созданного атрибута. Значение, не соответствующее типу, молча отбрасывается, а `postEvent` все равно возвращает успешный результат, поэтому вы не увидите в ответе, что данные были потеряны. Вы можете исправить неверный тип позже, отредактировав событие в Панели управления, но любые данные, отправленные до исправления, уже потеряны.

Чтобы брошенная корзина работала, сопоставьте типы в таблице выше:

*   **Денежные поля** (`totalPrice`, `shippingAmount`, `taxAmount`, `discountAmount`): используйте **десятичное (цена)**. Если оставить необъявленным, целочисленное значение, такое как `129`, будет определено как **целое число**. Если объявить как **строка**, корзина не сохранится и теги не будут установлены. Если объявить как **целое число**, `129.90` станет `129`.
*   **Даты** (`abandonedDate`, `createdDate`): используйте **дата**.
*   **`items`:** не добавляйте его в определение события. Отправляйте его в полезной нагрузке JSON как массив объектов. Используйте настоящие числа JSON для `price` и `quantity`, а не строки в кавычках.
</Aside>

[Узнайте больше о создании кастомных событий](/ru/product/audience-data-and-segmentation/events/custom-events/#creating-custom-events).

### Отправляйте события с вашего бэкенда

<Aside type="caution" icon="setting" title="Требуется помощь разработчика">
Вам понадобится помощь вашей команды разработчиков для отправки событий из вашего магазина или бэкенда. Пожалуйста, поделитесь с ними этим руководством.
</Aside>

Попросите вашу команду разработчиков вызывать [postEvent](/ru/developer/api-reference/user-centric-api/#postevent) всякий раз, когда корзина брошена, используя эту схему атрибутов:

```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"
  }
}
```

Когда корзина превращается в заказ, отправьте `PW_OrderCreated` только с `orderId`, чтобы очистить теги корзины:

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

<Aside type="tip">
Если вы используете [интеграцию с Magento](/ru/product/integrations/magento-integration/#abandoned-cart-sync-configuration) или [интеграцию с Shopify](/ru/product/integrations/shopify-integration/#part-5-track-orders-carts-and-checkout-steps), вам не нужно отправлять эти события с вашего бэкенда. Magento отправляет `PW_AbandonedCart` и `PW_OrderCreated` за вас по расписанию; Shopify отправляет их (плюс `PW_AbandonedCartUpdate` для редактирования корзины в процессе) из вебхуков в реальном времени.
</Aside>

<span id="add-a-products-block-to-your-email" />

### Добавьте блок Products в свое email-сообщение

1.  Откройте [редактор контента email-сообщений](/ru/product/content/email-content/drag-and-drop-email-editor/) и добавьте блок [Products](/ru/product/content/email-content/drag-and-drop-email-editor/blocks/#products) на холст.
2.  В панели настроек установите **Source** на [Cart](/ru/product/content/email-content/drag-and-drop-email-editor/blocks/#show-items-from-the-cart).

<Aside type="note">
Для источника **Cart** в блоке Products требуется наличие **Content Templates** в вашем тарифном плане и [токен доступа к API](/ru/developer/api-reference/api-access-token/). См. [Блок Products](/ru/product/content/email-content/drag-and-drop-email-editor/blocks/#products).
</Aside>

3.  Установите **Max products shown**, чтобы ограничить количество товаров из корзины, отображаемых в email-сообщении.

<img src="/lifecycle-marketing-campaigns-how-to-set-up-an-abandoned-cart-campaign-1.webp" alt="Настройки блока Products с источником (Source), установленным на Корзину (Cart), и максимальным количеством отображаемых продуктов (Max products shown)"/>

4.  При необходимости настройте стиль сетки и шаблона карточки. См. [Настройка стиля сетки](/ru/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="Блок Products на холсте email-сообщения с настройками шаблона карточки и стиля сетки" width="580"/>

Когда email-сообщение отправляется, блок Products ищет сохраненную корзину каждого получателя, используя их тег `PW_AbandonedCartID`. Затем он заполняет блок текущими товарами из корзины: изображением, названием, ценой и ссылкой обратно в корзину. Макет берется из шаблона карточки, который вы установили в редакторе. Получатели без этого тега (ничего не брошено или уже заказано) пропускают блок, а не показывают пустой контент, поэтому его безопасно использовать и в более широкой кампании.

<Aside type="tip">
Источник Cart доступен в редакторе контента email-сообщений. Чтобы напомнить покупателям с помощью пуш-уведомления, используйте шаг [Push](/ru/product/customer-journey/journey-elements/channels/push/) с [персонализацией](/ru/product/personalization/dynamic-content/), которая ссылается на детали корзины из события.
</Aside>

### Создайте Customer Journey

1.  Добавьте [Trigger-based Entry](/ru/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/), используя событие `PW_AbandonedCart`.
2.  Добавьте шаг [Wait for Trigger](/ru/product/customer-journey/journey-elements/flow-controls/wait-for-trigger/). Установите период ожидания на час или два. Назовите ветку **Order placed** и добавьте в нее событие `PW_OrderCreated`.

<Aside type="caution">
Установите период ожидания на самом **Wait for Trigger**. Не добавляйте отдельный шаг **Time Delay** перед ним.

**Wait for Trigger** начинает слушать `PW_OrderCreated` только после того, как покупатель достигнет этого шага. Если **Time Delay** идет первым, и покупатель размещает заказ во время этой задержки, событие заказа не будет обнаружено. Покупатель переходит в ветку **Not triggered**, но `PW_OrderCreated` уже очистил `PW_AbandonedCartID`. Блок Products не находит корзину и пропускает ее. Покупатель все равно получает email-сообщение о брошенной корзине без товаров, хотя он уже завершил покупку.
</Aside>

3.  Направьте ветку **Order placed** в [Exit](/ru/product/customer-journey/journey-elements/flow-controls/exit/). Пользователь уже совершил покупку, поэтому не напоминайте ему.
4.  Направьте ветку **Not triggered** в шаг [Email](/ru/product/customer-journey/journey-elements/channels/email/). Сохраните email-сообщение, которое вы создали в разделе [Добавьте блок Products в свое email-сообщение](#add-a-products-block-to-your-email), как [контент email-сообщения](/ru/product/content/email-content/), а затем выберите его в качестве контента для этого шага.

<img src="/lifecycle-marketing-campaigns-how-to-set-up-an-abandoned-cart-campaign-3.webp" alt="Холст Customer Journey с элементами Trigger-based Entry, Wait for Trigger с ветками Order placed и Not triggered, шагами Email и Exit, и без Time Delay"/>

### Протестируйте перед запуском

1.  Отправьте тестовое событие `PW_AbandonedCart` для тестового устройства. Не устанавливайте тег `PW_AbandonedCartID` вручную: блок Products загружает содержимое корзины из сохраненной корзины, которую создает событие, а не из значения тега. Без реального события блок будет отображаться пустым.
2.  Просмотрите email-сообщение и убедитесь в правильности макета и содержимого продуктов перед отправкой реальным покупателям.