and runs during HTML parse, but hubspotutk is set by
js.hs-analytics.net, measured loading at ~834ms. On a first visit the cookie
does not exist yet, so a single read returns nothing and the visitor gets no
external ID at all — and a first visit is exactly what an ad click is. So
poll briefly until HubSpot sets it. The SDK loads lazily (~4.5s) and replays
a queue, so an init queued a second or two in still lands before any events
are transmitted. */
(function attachExternalId() {
var attempts = 0;
var MAX_ATTEMPTS = 40; /* 40 x 200ms = 8s, then give up quietly */
var timer = null;
function tryAttach() {
var raw = getExternalId();
if (!raw) {
if (++attempts >= MAX_ATTEMPTS && timer) clearInterval(timer);
return;
}
if (timer) clearInterval(timer);
sha256Hex(raw).then(function (hash) {
oaiq("init", { user: { external_id_sha256: hash } });
}).catch(function () {});
}
tryAttach(); /* returning visitor: immediate */
if (!getExternalId()) timer = setInterval(tryAttach, 200);
})();
/* ---------------------------------------------------------------------------
2. Load the SDK off the critical path
Whichever comes first: the main thread going idle after load, or the first
sign of real user intent. No preconnect on purpose — a TLS handshake during
LCP for a script we deliberately deferred is a net loss.
Measured on clickpost.ai: load event 3614ms, SDK fetched 4508ms.
------------------------------------------------------------------------ */
var loaded = false;
var INTENT = ["pointerdown", "keydown", "scroll"];
function loadSdk() {
if (loaded) return;
loaded = true;
INTENT.forEach(function (t) { removeEventListener(t, loadSdk, { passive: true }); });
var s = document.createElement("script");
s.src = SDK;
s.async = true;
s.fetchPriority = "low";
document.head.appendChild(s);
}
INTENT.forEach(function (t) {
addEventListener(t, loadSdk, { passive: true, once: true });
});
addEventListener("load", function () {
window.requestIdleCallback
? requestIdleCallback(loadSdk, { timeout: 2500 })
: setTimeout(loadSdk, 1500);
}, { once: true });
/* ---------------------------------------------------------------------------
3. Conversion id
sha256(lowercase(email) + "|" + formId + "|" + ISO-hour), first 20 hex,
"lead_" prefix.
- email lowercased/trimmed so casing does not fork the id
- formId keeps two different forms in the same hour from colliding
- the hour bucket is only the server's fallback; the id computed here is
sent to the relay verbatim, so the two paths cannot disagree even when
a submit straddles an hour boundary
Ads Manager's own sample omits event_id. We send it so the pixel event and
the relay event collapse into one conversion instead of counting twice.
------------------------------------------------------------------------ */
function buildEventId(email, formId) {
var seed = [
String(email || "").trim().toLowerCase(),
String(formId || ""),
new Date().toISOString().slice(0, 13)
].join("|");
return crypto.subtle.digest("SHA-256", new TextEncoder().encode(seed)).then(function (buf) {
var hex = Array.prototype.map.call(new Uint8Array(buf), function (b) {
return b.toString(16).padStart(2, "0");
}).join("");
return "lead_" + hex.slice(0, 20);
});
}
/* Guards a re-fire from the history.pushState that book-a-demo-core.js runs
after submit, and from back-navigation onto the same state. */
function firedOnce(id) {
try {
if (sessionStorage.getItem("oaiq_" + id)) return true;
sessionStorage.setItem("oaiq_" + id, "1");
return false;
} catch (e) {
return false; /* private mode / blocked storage: fire rather than lose it */
}
}
/* Path 2. keepalive lets the request finish even if the page navigates away.
Failures are swallowed deliberately: a reporting call must never surface an
error to someone who just submitted a form.
The relay hashes the email server-side into user.emails_sha256 and adds the
caller's IP and user agent, so this event carries the same match signals the
pixel gets for free. */
function sendToRelay(email, formId, eventType, eventId) {
try {
var payload = {
token: RELAY_TOKEN,
email: email,
form_id: formId || "",
event_type: eventType,
event_id: eventId, /* verbatim, so both paths always match */
source_url: location.href
};
var oppref = getOppref();
if (oppref) payload.oppref = oppref;
var externalId = getExternalId();
if (externalId) payload.external_id = externalId;
fetch(RELAY_URL, {
method: "POST",
keepalive: true,
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload)
}).catch(function () {});
} catch (e) {}
}
/* Capture the email while the form is still on the page. onFormSubmitted does
not reliably carry submissionValues, and by then the form may be removed. */
var lastEmail = "";
document.addEventListener("submit", function (e) {
var f = e.target;
if (!f || !f.querySelector) return;
var i = f.querySelector('input[name="email"], input[type="email"]');
if (i && i.value) lastEmail = i.value;
}, true);
/* Every HubSpot form on the site reports through this one message event, so no
module or theme JS needs editing to add coverage. */
window.addEventListener("message", function (e) {
var d = e.data;
if (!d || d.type !== "hsFormCallback" || d.eventName !== "onFormSubmitted") return;
var email = (d.data && d.data.submissionValues && d.data.submissionValues.email) || lastEmail;
if (!email) return; /* without an email there is no stable id to dedupe on */
var eventType = EVENT_BY_FORM[d.id] || EVENT_DEFAULT;
buildEventId(email, d.id).then(function (id) {
if (firedOnce(id)) return;
oaiq("measure", eventType, { type: DATA_TYPE }, { event_id: id }); /* path 1 */
sendToRelay(email, d.id, eventType, id); /* path 2 */
});
});
})();
Expected Delivery Date (EDD) is the unsung hero that can make or break a customer's purchase decision. Surprisingly, a staggering 46% of shoppers steer clear of online stores that lack EDD predictions. But here's the catch: predicting EDD isn't as straightforward as it seems. It is influenced by factors like serviceability, carrier SLA, and even carrier performance – a tough nut to crack indeed.
For BeYours, mastering EDD prediction was a journey filled with hurdles. They grappled with configuring backend systems to automate EDD rules, striving for the perfect balance between accuracy and efficiency. The onboarding process with their EDD app was another challenge they faced head-on, knowing that a seamless experience from the get-go was paramount to customer satisfaction.
Visibility was crucial in BeYours' quest for EDD perfection. They understood that customers needed clear expectations, which meant ensuring the Expected Delivery Date was prominently displayed. But navigating pincode and COD serviceability issues added another layer of complexity to their endeavor.
Tossing in shipping rules to the EDD equation was yet another puzzle BeYours had to solve. Too long of an EDD risked abandoned carts, while a too-short estimate could lead to dissatisfaction and a flurry of return requests.
Flexible Rules & Configs
BeYours needed a flexible powerful EDD module for their PDP that could
1) Make accurate predictions
2) Be customised to suit their website
3) Be configured to automate EDD rules
Configurable & Customizable
ClickPost waved their digital wand for BeYours, conjuring up a bespoke EDD box perfectly attuned to the brand's website aesthetics. BeYours was able to place the EDD box anywhere and choose colors according to their brand theme. ClickPost also provided a configurable back-end kit to automate EDD rules and configure standard shipping configurations for Beyours.
Incredible Results…
.. Within a mere 24 hours, ClickPost worked its magic, transforming BeYours' customer experience by showcasing precise Expected Delivery Dates (EDD) right on the product detail page. The result? Not just a boost in customer satisfaction, but a remarkable surge in the add-to-cart rate, proving that when it comes to delighting customers, BeYours doesn't just meet expectations – they exceed them, in record time.
BeYours X ClickPost, accurate prediction for improved profitability & customer experience!
Hi BeYours!
Ashish & Nilesh helm the BeYours brand, united by a singular mission: to empower every man with a refined and sophisticated appearance.
Their collective vision and unwavering commitment to superior craftsmanship propel them to craft apparel that epitomizes confidence and elegance.
They meticulously collaborate, focusing on even the minutest details, to ensure they stay at the forefront of the market, leaving no stone unturned in their pursuit of excellence.
Website
https://www.beyours.in
Industry
Apparel
Channel
eCommerce Store
Solutions Used
Intelligent EDD Optimization Module
Use Case
Accuracy in EDD for Improved Customer Experience & Brand Trust
Other Customer Success Stories
Fashion & Apparel
How DaMENSCH reduced RTO rate by 54% with the help of ClickPost