Графік роботи call-центру:

Пн-Пт:8:00–20:00

Сб-Нд:10:00–18:00

Додайте товари для порівняння
Додайте товари до списку бажань
0
Додайте товари до кошика

Чашки Бренд: Luminarc, Колір: Синій

Фільтр
Сортування:
Відображення:
/* ========================================================================= Подія "Покинутий кошик" -> SendPulse (версія під реальну структуру Horoshop) URL події (POST raw, без авторизації): https://events.sendpulse.com/events/id/e0e7b3abd8984aaddd8105f3bb5de4e6/7543999 ========================================================================= ЯК ПРАЦЮЄ: - Підписуємось на вбудовані події Horoshop (GLOBAL.marketingEvents): cart_product_add / cart_product_update / cart_product_remove дають живий знімок кошика (model.Cart.products) при кожній зміні; registration_success / authorization_success дають email/телефон/ім'я людини одразу після входу чи реєстрації. - На сторінці чекауту додатково слухаємо поля email/телефон (blur), бо саме там гість вперше лишає контакт. - Коли є І контакт (email/phone), І непорожній кошик - шлемо подію. САМЕ "покинутий" статус вирішує затримка в автоматизації SendPulse (тригер по цій події -> Затримка 1-2 год -> перевірка, чи не було Покупки -> лист). ВСТАНОВЛЕННЯ: Налаштування -> Загальні налаштування -> Скрипти -> поле "перед закриваючим тегом ", обгорнути в . Цей скрипт варто вставляти сайтово (на всіх сторінках), а не тільки на чекауті, бо cart_product_add спрацьовує будь-де на сайті. ========================================================================= */ (function () { "use strict"; var CART_EVENT_URL = "https://events.sendpulse.com/events/id/e0e7b3abd8984aaddd8105f3bb5de4e6/7543999"; var THANK_YOU_MARKERS = [".order-success", ".thank-you", "[data-order-success]"]; // Кеш останнього відомого контакту та кошика в межах сесії сторінки var knownContact = { email: "", phone: "", first_name: "", last_name: "", sity: "" }; var lastCartItems = []; var lastCartTotal = 0; // ---- допоміжні ------------------------------------------------------- function isThankYouPage() { return THANK_YOU_MARKERS.some(function (sel) { return document.querySelector(sel); }); } function splitName(fullName) { fullName = (fullName || "").trim(); if (!fullName) return { first_name: "", last_name: "" }; var parts = fullName.split(/\s+/); return { first_name: parts[0] || "", last_name: parts.slice(1).join(" ") || "" }; } function fieldValue(selector) { var el = document.querySelector(selector); return el && el.value ? el.value.trim() : ""; } // Мапимо товар Horoshop (cartProductsData / model.Cart.products) у формат події function mapProduct(p) { return { product_name: p.title || "", product_id: p.id || 0, product_price: p.price || 0, article: p.article || "", quantity: p.quantity || 1, discount_persent: (p.cprice && p.cprice.discount_percent) || 0, discount_sum: (p.cprice && p.cprice.discount_value) || 0, category: "", brand: "" }; } function updateCartFromModel(model) { try { var products = (model && model.Cart && model.Cart.products) || []; lastCartItems = products.map(mapProduct); lastCartTotal = (model && model.Cart && model.Cart.total && model.Cart.total.sum) || 0; } catch (e) {} } // На сторінці чекауту є готовий масив cartProductsData - беремо, якщо є function syncCartFromPageData() { try { if (window.cartProductsData && window.cartProductsData.length) { lastCartItems = window.cartProductsData.map(mapProduct); } } catch (e) {} } function updateContactFromCheckoutForm() { var email = fieldValue("#checkout-email"); var phone = fieldValue("#checkout-phone"); var city = fieldValue("#checkout-city"); var nameParts = splitName(fieldValue("#checkout-name")); if (email) knownContact.email = email; if (phone) knownContact.phone = phone; if (city) knownContact.sity = city; if (nameParts.first_name) { knownContact.first_name = nameParts.first_name; knownContact.last_name = nameParts.last_name; } } function sendCartEvent() { if (!knownContact.email && !knownContact.phone) return; if (!lastCartItems.length) return; if (isThankYouPage()) return; var payload = { email: knownContact.email, phone: knownContact.phone, order_date: new Date().toISOString().slice(0, 10), items: lastCartItems, order_id: 0, user: (window.GLOBAL && GLOBAL.USER_ID) || 0, total_sum: lastCartTotal, discount_persent_of_total_sum: 0, discount_value_of_total_sum: 0, coupone_code: "", first_name: knownContact.first_name, last_name: knownContact.last_name, sity: knownContact.sity }; if (navigator.sendBeacon) { var blob = new Blob([JSON.stringify(payload)], { type: "application/json" }); navigator.sendBeacon(CART_EVENT_URL, blob); } else { fetch(CART_EVENT_URL, { method: "POST", headers: { "Content-Type": "application/json" }, keepalive: true, body: JSON.stringify(payload) }).catch(function () {}); } } // ---- підписка на вбудовані події Horoshop ----------------------------- function hookMarketingEvent(eventName, handler) { try { if (window.GLOBAL && GLOBAL.marketingEvents && GLOBAL.marketingEvents[eventName]) { GLOBAL.marketingEvents[eventName].push(handler); } } catch (e) {} } // Кошик змінився - оновлюємо знімок і намагаємось відправити ["cart_product_add", "cart_product_update", "cart_product_remove", "cart_creation"].forEach( function (eventName) { hookMarketingEvent(eventName, function (model) { updateCartFromModel(model); sendCartEvent(); }); } ); // Людина залогінилась / зареєструвалась - тепер точно відомий контакт ["registration_success", "authorization_success"].forEach(function (eventName) { hookMarketingEvent(eventName, function (model) { try { if (model.email) knownContact.email = model.email; if (model.phone) knownContact.phone = String(model.phone); if (model.name) { var parts = splitName(model.name); knownContact.first_name = parts.first_name; knownContact.last_name = parts.last_name; } sendCartEvent(); } catch (e) {} }); }); // Замовлення успішно оформлене - більше не шлемо подію кошика для цієї сесії hookMarketingEvent("checkout_success", function () { lastCartItems = []; }); // ---- сторінка чекауту: контакт з полів форми -------------------------- document.addEventListener("DOMContentLoaded", function () { syncCartFromPageData(); document.addEventListener( "blur", function (e) { if ( e.target.id === "checkout-email" || e.target.id === "checkout-phone" || e.target.id === "checkout-name" || e.target.id === "checkout-city" ) { updateContactFromCheckoutForm(); sendCartEvent(); } }, true ); }); // ---- фолбек: людина йде зі сторінки з непорожнім кошиком і відомим контактом -- document.addEventListener("visibilitychange", function () { if (document.visibilityState === "hidden") sendCartEvent(); }); })();