Перейти к содержимому

Брошенные корзины - поиск, письмо, чистка старых

Находим корзины, из которых так и не сделали заказ, и превращаем их в одно уместное письмо вместо потока напоминаний.

Решение

Выбираем корзины без заказа:

use Bitrix\Sale\Internals\BasketTable;
$rows = BasketTable::getList([
'select' => ['ID', 'FUSER_ID', 'PRODUCT_ID', 'NAME', 'QUANTITY', 'DATE_UPDATE'],
'filter' => ['=ORDER_ID' => null, '=LID' => SITE_ID, '<DATE_UPDATE' => $threeHoursAgo],
])->fetchAll();
// дата правки строки показывает, когда покупатель трогал корзину в последний раз
// пустой номер заказа и есть признак того, что корзину бросили

Брошенная корзина - это позиции без привязки к заказу. Как только заказ оформлен, позиции получают его номер, и та же выборка перестаёт их показывать.

Связываем корзину с покупателем:

$fuser = \Bitrix\Sale\Internals\FuserTable::getById($row['FUSER_ID'])->fetch();
if (!$fuser['USER_ID']) {
continue; // корзина гостя: писать некому и не о чем
}
$user = \Bitrix\Main\UserTable::getById($fuser['USER_ID'])->fetch();

Корзина хранит номер посетителя, а не номер пользователя. Гость получает такой номер при первом заходе, и его корзина остаётся безымянной до момента входа или оформления.

Отправляем одно письмо:

\Bitrix\Main\Mail\Event::send([
'EVENT_NAME' => 'ABANDONED_CART',
'LID' => SITE_ID,
'C_FIELDS' => ['EMAIL' => $user['EMAIL'], 'ITEMS' => $itemsHtml],
]);
Option::set('vendor.shop', 'cart_mail_' . $fuser['USER_ID'], time()); // отметка отправки

Письмо отправляют однажды и с уместной задержкой. Отметка об отправке - не формальность: без неё покупатель, зашедший трижды за вечер, получает три одинаковых напоминания и отписывается.

Чистим старые корзины:

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

Гостевые корзины копятся быстрее всего остального. Через год таблица корзин на посещаемом магазине оказывается самой большой в базе, и выборка по ней замедляет всё, что её касается.

Содержимое письма проверяют на актуальность перед отправкой. Товар, снятый с продажи или подорожавший вдвое, в напоминании выглядит хуже, чем отсутствие напоминания вовсе.

Согласие на письма проверяют до отправки, а не после жалобы. Напоминание о корзине - это тоже рассылка, и правила у неё те же самые.

Пользу от напоминаний измеряют заказами, а не открытиями письма. Если возвраты в корзину не превращаются в заказы, дело обычно в цене или доставке, и письмо тут уже не поможет.

Напоминание работает там, где покупателю действительно что-то помешало оформить заказ. Если корзину бросают на шаге доставки, чинить нужно доставку, а письмо в этом случае лишь подробнее расскажет о том, что не устроило.

Типичные проблемы

Письма уходят в никуда.

Корзины принадлежат гостям, у которых нет ни имени, ни почты. Отправлять напоминание есть смысл только тем покупателям, чьи контакты уже известны магазину.

Покупатель получает по письму в день.

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

В письме товар по старой цене.

Содержимое собрано из позиций корзины без сверки с каталогом. Цены и наличие проверяют в момент отправки.

Таблица корзин выросла до миллионов строк.

Гостевые корзины никто не чистит, и они хранятся в базе магазина годами. Срок хранения корзины задают настройкой модуля магазина, а не своим отдельным кодом.

На напоминания жалуются как на спам.

Согласие на рассылку перед отправкой не проверялось. Напоминание о брошенной корзине подчиняется ровно тем же правилам, что и рассылка.

Частые вопросы

Через сколько отправлять напоминание?

Обычно через несколько часов после последнего изменения корзины. Через день письмо уже воспринимается как случайное.

Как понять, что заказ всё-таки оформлен?

У позиций корзины появляется номер заказа. До этого момента корзина считается брошенной.

Стоит ли писать гостям?

Писать некуда: у гостя нет контактов. Их корзины годятся только для статистики.

Чем считать эффект напоминаний?

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

Смежное

Первоисточник