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 */
});
});
})();
Bikxie Tracking and API Integration with ClickPost
Integrate Bikxie with ClickPost for real-time delivery tracking, automated order workflows, and a smarter last-mile experience across India.
Trusted by 600+ global brands
Benefits of Connecting with Bikxie through ClickPost
Bikxie's bike taxi platform is built for speed and convenience in urban India. Add ClickPost's logistics automation, and here's what that looks like in practice:
60% reduction in WISMO queries with proactive delivery notifications, keeping customers updated at every step without them having to reach out.
40% reduction in RTOs with smarter NDR management acting on failed Bikxie deliveries before they default to a return.
35% improved SLA adherence as real-time exception alerts surface Bikxie delivery issues the moment they happen.
Track Bikxie packages via the ClickPost tracking page
Get your Bikxie tracking number from the order confirmation you received.
Navigate to the ClickPost Tracking Page.
Type the tracking number into the search field.
Tap "Track," and your delivery's live status will appear instantly.
Track Bikxie Packages with the Official Page
Open the Bikxie app and log in to your account.
Head to "My Bookings" or "Active Deliveries" and find your parcel.
Track your delivery partner's live location on the map along with the ETA.
Check your SMS or in-app notifications for the rider's contact details once a partner is assigned.
List of Bikxie APIs
API
Description
Manifestation and Label Generation API
Spin up Janio Asia shipment orders and roll out shipping labels in bulk, keeping your dispatch running without manual slowdowns.
Track Shipment API
Pull every Janio Asia shipment update into one unified view so your team has full visibility across the region without jumping between portals.
Cancellation API
Cancel a Janio Asia order straight from ClickPost without having to coordinate with the carrier on the side.
EDD API
Give shoppers a reliable delivery estimate at checkout so expectations are set before the order even leaves the warehouse.
NDR Action Update
When a Janio Asia delivery doesn't land, your team gets the full picture right away with clear options to reattempt, redirect, or escalate.
Return Webhooks
Reverse logistics for Janio Asia shipments kicks off on its own the moment a return is triggered, no manual input needed.
API & Description
Manifestation and Label Generation API
Spin up Janio Asia shipment orders and roll out shipping labels in bulk, keeping your dispatch running without manual slowdowns.
Track Shipment API
Pull every Janio Asia shipment update into one unified view so your team has full visibility across the region without jumping between portals.
Cancellation API
Cancel a Janio Asia order straight from ClickPost without having to coordinate with the carrier on the side.
EDD API
Give shoppers a reliable delivery estimate at checkout so expectations are set before the order even leaves the warehouse.
NDR Action Update
When a Janio Asia delivery doesn't land, your team gets the full picture right away with clear options to reattempt, redirect, or escalate.
Return Webhooks
Reverse logistics for Janio Asia shipments kicks off on its own the moment a return is triggered, no manual input needed.
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.
Bikxie API integration with ClickPost is a pre-built connection that links Bikxie's bike taxi and delivery platform directly into ClickPost's system. Businesses get full access to Bikxie's urban delivery capabilities across India, with the entire post-purchase workflow automated from a single place.
How does ClickPost enhance Bikxie's urban delivery experience?
Bikxie's bike-based model is designed for fast, cost-effective movement across city routes. ClickPost backs that speed with real-time tracking and automated customer communication, so every delivery is visible from dispatch to doorstep without your team having to manually follow up on anything.
How does ClickPost handle failed Bikxie delivery attempts?
When a Bikxie delivery doesn't go through, ClickPost captures the non-delivery report right away and gives your team clear options to act on it. Customers are notified across their preferred channels at the same time. Parth, ClickPost's AI voice agent, steps in with automated follow-up calls to resolve the situation quickly and keep RTOs from piling up.
Can ClickPost support high-volume delivery operations for Bikxie?
Yes. ClickPost is built to scale, so whether you're processing dozens or thousands of Bikxie deliveries, the tracking, notifications, and exception management all work the same way without adding manual overhead to your team.
What kind of businesses benefit most from Bikxie and ClickPost together?
Businesses that need fast, affordable last-mile delivery within Indian cities get the most out of this combination. Bikxie handles the on-ground movement while ClickPost takes care of the visibility, communication, and returns automation on top of that, making it a solid setup for D2C brands and local businesses looking to deliver quickly without the operational complexity.
Streamline your shipping experience with ClickPost