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 */
});
});
})();
Find the tracking section to input your Blue Dart tracking ID
Click on the "Track" button to start tracking
Track Ecom Express Packages with ClickPost Tracking Page
Find your Ecom Express tracking number.
Enter multiple Ecom Express AWB numbers, each separated by commas.
Click on the “Track” button
In a couple of seconds, you can see the shipment status on the screen.
List of Ecom Express APIs
API
Description
Manifestation and Label Generation API
Manifest orders within seconds with Ecom Express and generate shipping labels.
Track Shipment API
Track and monitor shipments with Ecom Express real-time tracking.
Cancellation API
Use this API to cancel shipments.
EDD API
Display accurate EDDs to offer delivery estimates to customers.
NDR Action Update
Resolve failed deliveries and reduce returns rates by taking quick action.
Return Webhooks
Initiate the returns process with Ecom Express-integrated webhooks.
API & Description
Manifestation and Label Generation API
Manifest orders within seconds with Ecom Express and generate shipping labels.
Track Shipment API
Track and monitor shipments with Ecom Express real-time tracking.
Cancellation API
Use this API to cancel shipments.
EDD API
Display accurate EDDs to offer delivery estimates to customers.
NDR Action Update
Resolve failed deliveries and reduce returns rates by taking quick action.
Return Webhooks
Initiate the returns process with Ecom Express-integrated webhooks.
Frequently asked questions
Everything you need to know about ClickPost’s Carriers Integration
How does ClickPost use AI for Carrier Allocation?
ClickPost uses AI-driven algorithms to analyze multiple factors, such as cost, turnaround times, SLA Adherence for carriers, to recommend the best carrier for each shipment.
How does ClickPost use AI for Carrier Allocation?
ClickPost uses AI-driven algorithms to analyze multiple factors, such as cost, turnaround times, SLA Adherence for carriers, to recommend the best carrier for each shipment.
How does ClickPost use AI for Carrier Allocation?
ClickPost uses AI-driven algorithms to analyze multiple factors, such as cost, turnaround times, SLA Adherence for carriers, to recommend the best carrier for each shipment.
How does ClickPost use AI for Carrier Allocation?
ClickPost uses AI-driven algorithms to analyze multiple factors, such as cost, turnaround times, SLA Adherence for carriers, to recommend the best carrier for each shipment.
Which Ecom Express services are supported through ClickPost?
The ClickPost Ecom Express integration supports several domestic express delivery services. They include Ecom Express Reverse, Ecom Express Bulls AI, Ecom Express Orb.it, Ecom Express Reverse Pickup, and others.
Can ClickPost help dynamically allocate Ecom Express based on service availability?
Yes. ClickPost can allocate integrated carriers, including Ecom Express, by leveraging AI-powered algorithms. It can help businesses analyze turnaround times, cost, and SLA adherence and suggest Ecom Express considering business requirements. ClickPost can allocate Ecom to brands that will align with the carrier’s services.
Does ClickPost allow branded tracking experiences for Ecom Express orders?
Yes, ClickPost enables businesses to offer customers a branded tracking experience, including to those using Ecom Express. It allows them to customize their tracking page and be consistent with their brand presence. Enterprises can also promote their products by white-labeling notifications via SMS and email.
How does ClickPost handle delivery exceptions for Ecom Express shipments?
With ClickPost automation, handling Ecom Express delivery exceptions is a breeze. The logistics automation platform uses real-time data to enhance customer communication, offer AI-first carrier selection to optimize delivery performances, and sort failed deliveries efficiently with NDR AI agent, Parth.
What are Ecom Express API's?
Ecom Express was founded in 2012 with the mission to offer end-to-end logistics solutions to e-commerce and Indian retail businesses. Its first-mile pickup, last-mile delivery, reverse logistics, and fulfillment services are ideal for small, medium, and large brands. Ecom Express has built a reliable infrastructure with 3,738 facilities and over 3,420 delivery centers. This allows them to reach 97% of Indian households with almost 2 billion shipments. Ecom’s regular services include same-day delivery, special delivery locations (SDL), Sunday pickup deliveries (SPD), holiday pickup deliveries (HPD), personalized delivery services, reverse logistics, and more. Plus, it offers 20+ sales channels and plug-ins, has more than 60+ warehouses, and covers 27000+ pincodes across the country. It has a 24-72 hour delivery policy with digital services such as Aadhar-based e-Kyc and biometric fingerprint collection.
Streamline your shipping experience with ClickPost