Добавление up-sell предложения для продукта с динамическими характеристиками

Up-sell предложение – это всплывающее предложение заменить один из продуктов в корзине, на другой. Оно открывается в модальном окне поверх страницы корзины и может содержать сразу несколько продуктов. Если покупатель выбирает один из них, то первоначальный продукт удаляется из корзины, а продукт из предложения добавляется в нее.

Предложение может быть показано покупателю в следующих ситуациях:

  • При входе в корзину - в тот момент, когда покупатель переходит по ссылке на покупку и добавляет продукт в корзину
  • При выходе из корзины - в тот момент, когда курсор мыши покупателя выходит за пределы активной области окна браузера с открытой корзиной
  • В обоих случаях, при этом:
    • Содержание каждого предложения управляется отдельно
    • Предложение при выходе из корзины не будет показано, если перед этим покупатель уже заменил один из продуктов в корзине

Все продукты в up-sell предложении имеют динамические характеристиками, то есть их свойства вы передаете в запросе.

Используйте up-sell предложения, чтобы, например, предложить покупателю такой же продукт, как тот, который он выбрал сам, но с расширенными характеристиками (например, поддержка большего количества устройств), дополнительными опциями (техподдержка), изменением условий подписки (например, подписка с автоматическим продлением или подписка на другой срок).

  1. Покупатель выбирает один или несколько продуктов на вашей стороне
  2. Вы присылаете запрос на генерацию ссылки на покупку и передаете в нем:
    • Данные продуктов (products), выбранных покупателем, которые нужно добавить в корзину
    • Данные дополнительных продуктов (upsell), которые нужно предложить в up-sell на замену для одного из продуктов в корзине
  1. В ответ на запрос вы получаете ссылку на покупку и перенаправляете покупателя по ней в корзину на нашей стороне
    По этой ссылке можно совершить только одну покупку (аналогично, как и для всех продуктов с динамическими характеристиками)
  2. Покупатель переходит по ссылке на покупку в корзину
  3. Страница корзины открывается с up-sell предложением в модальном окне 
    Up-sell предложение содержит данные продуктов из объекта upsell. В том числе для продуктов используются специальные названия (upsell.products.name_for_upsell), которые будут видны только в окне предложения.
Пример работы (пожалуйста, не покупайте продукт из примера)
Us-sell предложение
  1. Если покупатель выбирает продукт из предложения, то: 
    • Из корзины удаляется продукт, для которого было показано up-sell предложение
    • Вместо него в корзину добавляется продукт, выбранный покупателем в up-sell предложении. Обратите внимание, продукт добавляется с названием, переданным в параметре upsell.products.name
    • Модальное окно закрывается
Продукт из up-sell предложения, добавленный в корзину вместо первоначального продукта

В случае, если бы покупатель закрыл up-sell предложение (без выбора одного из продуктов в нем), то в корзине бы остался первоначальный продукт, данные которого были переданы в параметре products. Покупатель не может повторно открыть up-sell предложение после того, как он было закрыто.

Обратите внимание, в примере в параметре products не был передан параметр с данными подписки (products.subscription), поэтому у первоначального продукта в корзине нет подписки с автопродлением. Но у продуктов в up-sell предложении переданы данные подписки (upsell.products.subscription). Поэтому при замене первоначального продукта на продукт из up-sell предложения в корзине появляется блок подписки с автопродлением.

Первоначальный продукт в корзине (без замены на продукт из up-sell предложения)
  1. Покупатель выбирает один или несколько продуктов на вашей стороне
  2. Вы присылаете запрос на генерацию ссылки на покупку и передаете в нем:
    • Данные продуктов (products), выбранных покупателем, которые нужно добавить в корзину
    • Данные дополнительных продуктов (upsell_exit), которые нужно предложить в up-sell на замену для одного из продуктов в корзине
  3. В ответ на запрос вы получаете ссылку на покупку и перенаправляете покупателя по ней в корзину на нашей стороне
    По этой ссылке можно совершить только одну покупку (аналогично, как и для всех продуктов с динамическими характеристиками)
  4. Покупатель переходит по ссылке на покупку в корзину и видит в ней продукты, данные которых были преданы в параметре products
  5. Если покупатель пытается покинуть страницу корзины и выводит курсор за пределы активной области окна браузера, то ему открывается с up-sell предложение в модальном окне. Оно содержит данные продуктов из объекта upsell_exit. В том числе для продуктов используются специальные названия (upsell.products.name_for_upsell), которые будут видны только в окне предложения
Пример работы (пожалуйста, не покупайте продукт из примера)
  1. Покупатель выбирает один или несколько продуктов на вашей стороне
  2. Вы присылаете запрос на генерацию ссылки на покупку и передаете в нем:
    • Данные продуктов (products), выбранных покупателем, которые нужно добавить в корзину
    • Данные дополнительных продуктов (upsell), которые нужно предложить в up-sell на замену для одного из продуктов в корзине
    • Данные дополнительных продуктов (upsell_exit), которые нужно предложить в up-sell на замену для одного из продуктов в корзине
  3. В ответ на запрос вы получаете ссылку на покупку и перенаправляете покупателя по ней в корзину на нашей стороне
    По этой ссылке можно совершить только одну покупку (аналогично, как и для всех продуктов с динамическими характеристиками)
  4. Покупатель переходит по ссылке на покупку в корзину
  5. Страница корзины открывается с up-sell предложением в модальном окне 
    Up-sell предложение содержит данные продуктов из объекта upsell. В том числе для продуктов используются специальные названия (upsell.products.name_for_upsell), которые будут видны только в окне предложения.
  6. Покупатель закрывает предложение, не выбирая ни один из продуктов из него (это условие должно быть выполнено, чтобы при выходе из корзины отобразилось второе up-sell предложение)
  7. Если покупатель пытается покинуть страницу корзины и выводит курсор за пределы активной области окна браузера, то ему открывается с up-sell предложение в модальном окне. Оно содержит данные продуктов из объекта upsell_exit. В том числе для продуктов используются специальные названия (upsell.products.name_for_upsell), которые будут видны только в окне предложения
Пример работы (пожалуйста, не покупайте продукт из примера)

Описание дано на примере предложения, которое открывается при входе в корзину. Если вы хотите настроить предложение, которое открывается при выходе из корзины, то используйте такие же параметры, но внутри объекта upsell_exit.

Up-sell предложение открывается в модальном окне, которое содержит следующие элементы:

  • Название окна с предложением – является частью шаблона и не управляется через API
  • Заголовок предложения – передается вами в запросе (upsell.name)
    Например, это может быть название продукта, для которого вы предлагаете замену, или любой другой текст на ваше усмотрение
  • Описание предложения – передается вами в запросе (upsell.description)
    Необязательный текст, который будет показан под заголовком
  • Продукты на замену – передаются вами в запросе (upsell.products). Вы можете передать от 1 до 3 продуктов.
    Каждый продукт содержит элементы:
    • Название продукта на замену – передается вами в запросе (upsell.products.name_for_upsell)
      Может отличаться от того названия, которое покупатель увидит в корзине, после того как согласится на предложение. Используйте эту возможность, например, чтобы показать краткие названия для продуктов в предложении
    • Итоговая цена – рассчитывается на основании данных, которые вы передаете в запросе: цена за единицу (upsell.products.price), количество продукта (upsell.products.quantity). На цену также влияет начисление VAT, которое производится согласно вашему договору и с учетом параметра upsell.products.vat_included, переданного вами в запросе
    • Сумма выгоды от покупки – передается вами в запросе (upsell.products.benefit)
      Это необязательное информационное значение, которое никак не влияет на расчет конечной цены и используется только для отображения в предложении. Рядом с суммой будет отображен дополнительный текст («Выгода» или «Экономия»), который является частью шаблона и не управляется через API
  • Кнопка подтверждения замены - является частью шаблона и не управляется через API. Если покупатель нажимает на кнопку, то тот продукт, который выбран в окне предложения с помощью радиокнопки, добавляется в корзину. Продукт, для которого был предложен up-sell, удаляется из корзины
  • Иконка для отказа от предложения – является частью шаблона и не управляется через API. Если покупатель нажимает на нее, то модальное окно закрывается и замены продукта в корзине не происходит. В корзине остаются продукты, которые выбрал покупатель
  • Изображение – передается вам в запросе (upsell.picture_url)
    Это необязательный элемент, который доступен только при использовании индивидуального шаблона дизайна. Если вы хотите использовать индивидуальный шаблон предложения, отправьте запрос на email request@softline.com с описанием изменений шаблона по умолчанию. 
    В качестве изображения вы можете использовать, например, изображение заменяемого продукта, баннер рекламной акции или любое другое изображение на ваше усмотрение.  Если изображение не передано или было не доступно по URL, то оно не будет показано в окне предложения. Шаблон предложения работает таким образом, что покупатель не увидит сообщения об ошибке / пустого места под изображение или замещающее изображение. Изображение будет отмасштабировано, если его размер отличается от места, предусмотренного шаблоном
Схема шаблона up-sell предложения (на примере предложения при входе в корзину)
Пример вида с 3 продуктами
Пример вида, если продуктов менее 3

Базовый продукт – это продукт на нашей стороне, из которого будут взяты значения свойств по умолчанию, для тех характеристик продукта, которые не передаются вами в запросе.

Для добавления в корзину нескольких продуктов, должны использоваться разные базовые продукты. Для продуктов на замену, которые предлагаются в up-sell, можно использовать один и тот же базовый продукт (или разные, если нужно чтобы из свойства по умолчанию отличались).

В запросе используются следующие параметры для передачи идентификаторов базовых продуктов:

В параметре products передается список продуктов, которые нужно добавить в корзину. Это те продукты, которые выбрал покупатель.

  • Для каждого продукта в массиве должен быть передан идентификатор базового продукта в параметре products.id. Из этого базового продукта будут взяты значения  свойств по умолчанию
  • Если в корзину нужно добавить несколько продуктов, то для них нужно использовать разные базовые продукты (стандартная логика)

...
"products": [
  {
    "id": "11111",
    ...
  },
  {
    "id": "22222",
    ...
  }
...

В параметрах upsell.product_idupsell_exit.product_id передается идентификатор продукта в корзине, для которого нужно показать up-sell предложение. Если покупатель выберет один из продуктов в up-sell предложении, то первоначальный продукт будет удален из корзины, и вместо него в корзину добавится выбранный продукт.

...
"upsell": {
  "product_id": 11111,
  ...
  },
"upsell_exit": {
  "product_id": 11111,
  ...
  }
 ...

В параметре upsell.products / upsell_exit.products передается список продуктов, которые нужно показать в up-sell предложении. Если покупатель выберет один из них, то он будет добавлен в корзину. Динамические данные для добавления этих продуктов в корзину также передаются внутри массива upsell.products / upsell_exit.products.

  • Для каждого продукта в массиве  должен быть передан идентификатор базового продукта в параметре upsell.products.id / upsell_exit.products.id. Из этого базового продукта будут взяты значения  свойств по умолчанию
  • Идентификатор upsell.products.id / upsell_exit.products.id должен отвечать условиям:
    • Может совпадать с идентификатором продукта в корзине (products.id), для которого отображается up-sell предложение (upsell.product_id / upsell_exit.product_id), но не должен совпадать с любым другим идентификатором продукта в корзине
  • Идентификаторы upsell.products.id и upsell_exit.products.id могут отличаться между собой

...
"upsell": {
  ...
  "products": [
    {
      "id": 111111,
      ...
      },
    {
      "id": 111111,
      ...
      }
    ]
  },
"upsell_exit": {
  ...
  "products": [
    {
      "id": 111111,
      ...
      },
    {
      "id": 111111,
      ...
      }
    ]
  }
...

Описание дано на примере предложения, которое открывается при входе в корзину. Если вы хотите настроить предложение, которое открывается при выходе из корзины, то используйте такие же параметры, но внутри объекта upsell_exit.

Параметры в запросе

Результат

products.id = 11111

upsell.product_id = 11111

upsell.products.id = 11111,11111

Допустимо

Во всех случаях используется один базовый продукт, для которого могут быть переданы разные названия и цены в динамических характеристиках. Или, например, разные условия продления.

products.id = 11111

upsell.product_id = 22222

upsell.products.id = 11111,11111

Ошибка

В качестве продукта, для которого нужно показать up-sell предложение (upsell.product_id), передан продукт 22222, но его нет среди продуктов, которые нужно добавить в корзину  (products.id)

products.id = 11111

upsell.product_id = 11111

upsell.products.id = 22222,11111

Допустимо

products.id = 11111

upsell.product_id = 11111

upsell.products.id = 22222,33333

Допустимо

Параметры в запросе

Результат

products.id = 11111, 22222

upsell.product_id = 11111

upsell.products.id = 11111,11111

Допустимо

products.id = 11111, 11111

upsell.product_id = 11111

upsell.products.id = 11111,11111

Ошибка

В списке продуктов корзины (products.id) передано два одинаковых базовых продукта (нарушена стандартная логика добавления нескольких продуктов в корзину, не связанная с up-sell предложениями)

products.id = 11111, 22222

upsell.product_id = 33333

upsell.products.id = 11111,11111

Ошибка

В качестве продукта, для которого нужно показать up-sell предложение (upsell.product_id), передан продукт 22222, но его нет среди продуктов, которые нужно добавить в корзину  (products.id)

products.id = 11111, 22222

upsell.product_id = 11111

upsell.products.id = 33333,44444

Допустимо

products.id = 11111, 22222

upsell.product_id = 11111

upsell.products.id = 22222,44444

Ошибка

В списке продуктов на замену (upsell.products.id) передан продукт 22222, который одновременно:

  • находится среди продуктов корзины (products.id)
  • не является продуктом, для которого нужно показать up-sell предложение (upsell.product_id)

 

Дополнительные параметры - это служебные информационные данные, которые не отображаются покупателю и не влияют на оформление заказа. Вы можете передать их в запросе, в этом случае они будут сохранены в заказ и использованы в дальнейшем.

Обратите внимание, дополнительные параметры сохраняются в заказ в целом, без привязки к какому-либо продукту.

Вы можете сочетать использование дополнительных параметров и up-sell предложения. Это позволит вам обновлять или добавлять дополнительные параметры к заказу в случае, если покупатель выберет продукт в up-sell предложении (то есть продукт в заказе будет заменен).

Правила применения:
Описание дано на примере предложения, которое открывается при входе в корзину. Если вы хотите настроить предложение, которое открывается при выходе из корзины, то используйте такие же параметры, но внутри объекта upsell_exit.

  • Дополнительные параметры для заказа по умолчанию вы передаете в параметре additional_data
  • Дополнительные параметры, которые нужно использовать при замене продукта в корзине на продукт из up-sell предложения, вы передаете в параметрах upsell.products.additional_data. Обратите внимание, внутри up-sell предложения дополнительные параметры есть у каждого продукта на замену. При замене будут использоваться только те, которые относятся к продукту, выбранному покупателем
  • Если покупатель не соглашается на up-sell предложение, то в заказ сохраняются дополнительные параметры по умолчанию (из additional_data)
  • Если покупатель соглашается на up-sell предложение, то дополнительные параметры по умолчанию могут быть заменены или дополнены дополнительными параметрами из upsell.products.additional_data выбранного покупателем продукта. Замена происходит, если название параметра в upsell.products.additional_data совпадает с названием параметра в additional_data. Дополнение происходит, если названия параметров отличаются
{
  "currency": "RUB",
  "products": [
    {
      "id": 111111,
      "sku": "001",
      "name": "Демо продукт",
      "price": "300.00",
      "quantity": 1
    }
  ],
  "additional_data": {
    "referer7": "001",
    "referer8": "Демо продукт",
    "referer9": "Базовая версия"
  },
  "upsell": {
    "product_id": 111111,
    "name": "Специальное предложение",
    "products": [
      {
        "id": 111111,
        "sku": "002",
        "name": "Демо продукт с расширенной технической поддержкой",
        "name_for_upsell": "Демо продукт с расширенной технической поддержкой",
        "price": "350.00",
        "benefit": "50.00",
        "quantity": 1,
        "additional_data": {
          "referer7": "002",
          "referer9": "Версия с техподдержкой",
          "referer10": "продукт заменен"
        }
      }
    ]
  }
}

В этом запросе передаются данные, чтобы:

  • Добавить в корзину Демо продукт
  • Показать покупателю up-sell предложение с одним продуктом на замену:
    • Демо продукт с расширенной технической поддержкой

В качестве дополнительных параметров переданы:

  • Значения по умолчанию (в additional_data):
    • referer7 = 001
    • referer8 = Демо продукт
    • referer9 = Базовая версия
  • Значения для продукта Демо продукт с расширенной технической поддержкой (в upsell.products.additional_data):
    • referer7 = 002
    • referer9 = Версия с техподдержкой
    • referer10 = продукт заменен

Если покупатель не согласится на замену продукта в корзине и оформит заказ, то в заказ будут сохранены дополнительные параметры из additional_data:

  • referer7 = 001
  • referer8 = Демо продукт
  • referer9 = Базовая версия

Если покупатель соглашается на замену и выбирает продукт Демо продукт с расширенной технической поддержкой, то в заказ будут сохранены параметры:

  • referer7 = 001 
    Значение referer7 из additional_data было заменено на значение referer7 из upsell.products.additional_data, так как названия параметров (referer7) совпали
  • referer8 = Демо продукт
    Значение referer8 из additional_data осталось без изменений, так как в upsell.products.additional_data нет параметра с названием "referer8"
  • referer9 = Версия с техподдержкой
    Значение referer9 было заменено аналогично referer7
  • referer10 = продукт заменен
    Значение referer10 было добавлено из параметра в upsell.products.additional_data, так как в additional_data не было параметра с названием "referer10"