Брошенные корзины - поиск, письмо, чистка старых
Находим корзины, из которых так и не сделали заказ, и превращаем их в одно уместное письмо вместо потока напоминаний.
Решение
Выбираем корзины без заказа:
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()); // отметка отправкиПисьмо отправляют однажды и с уместной задержкой. Отметка об отправке - не формальность: без неё покупатель, зашедший трижды за вечер, получает три одинаковых напоминания и отписывается.
Чистим старые корзины:
- срок хранения корзины задаётся настройкой модуля магазина- корзины гостей без входа хранят днями, а не годами- позиции удалённых товаров чистят вместе с нимиГостевые корзины копятся быстрее всего остального. Через год таблица корзин на посещаемом магазине оказывается самой большой в базе, и выборка по ней замедляет всё, что её касается.
Содержимое письма проверяют на актуальность перед отправкой. Товар, снятый с продажи или подорожавший вдвое, в напоминании выглядит хуже, чем отсутствие напоминания вовсе.
Согласие на письма проверяют до отправки, а не после жалобы. Напоминание о корзине - это тоже рассылка, и правила у неё те же самые.
Пользу от напоминаний измеряют заказами, а не открытиями письма. Если возвраты в корзину не превращаются в заказы, дело обычно в цене или доставке, и письмо тут уже не поможет.
Напоминание работает там, где покупателю действительно что-то помешало оформить заказ. Если корзину бросают на шаге доставки, чинить нужно доставку, а письмо в этом случае лишь подробнее расскажет о том, что не устроило.
Типичные проблемы
Письма уходят в никуда.
Корзины принадлежат гостям, у которых нет ни имени, ни почты. Отправлять напоминание есть смысл только тем покупателям, чьи контакты уже известны магазину.
Покупатель получает по письму в день.
Отметка об уже отправленном напоминании нигде не хранится. Отметку ставят сразу после успешной отправки письма этому самому конкретному покупателю.
В письме товар по старой цене.
Содержимое собрано из позиций корзины без сверки с каталогом. Цены и наличие проверяют в момент отправки.
Таблица корзин выросла до миллионов строк.
Гостевые корзины никто не чистит, и они хранятся в базе магазина годами. Срок хранения корзины задают настройкой модуля магазина, а не своим отдельным кодом.
На напоминания жалуются как на спам.
Согласие на рассылку перед отправкой не проверялось. Напоминание о брошенной корзине подчиняется ровно тем же правилам, что и рассылка.
Частые вопросы
Через сколько отправлять напоминание?
Обычно через несколько часов после последнего изменения корзины. Через день письмо уже воспринимается как случайное.
Как понять, что заказ всё-таки оформлен?
У позиций корзины появляется номер заказа. До этого момента корзина считается брошенной.
Стоит ли писать гостям?
Писать некуда: у гостя нет контактов. Их корзины годятся только для статистики.
Чем считать эффект напоминаний?
Долей заказов среди тех, кому письмо ушло. Открытия письма об этом ничего не говорят.
Смежное
-
Корзина - оглавление подтемы
-
Триггерные письма: событие, цепочка, цель и отписка - тот же сценарий штатной цепочкой
-
Работа с корзиной из кода: добавление, количество, пересчёт - как устроены позиции корзины
-
События корзины: подарки, ограничения, пересчёт - вмешательство в саму корзину
-
Рассылка с нуля: сегмент, письмо, отправка, отписка - механика писем покупателям
-
Каталог и продажи - устройство магазина целиком
-
Уведомления покупателю: письма и SMS по статусам заказа - соседний повод написать покупателю
-
Корзина гостя и вход покупателя: привязка, слияние, чистка - откуда берутся корзины гостей и как их чистят