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 */
});
});
})();
Track Emirates Post Couriers Packages with the ClickPost Tracking Page
Take note of your Emirates Post Couriers tracking number.
Go to the official tracking page of ClickPost.
Enter your tracking number in the box.
Click “Track” to view all your tracking details.
Track Emirates Post Couriers Packages on the Official Page
Click on “Track a Package” on the official page of Emirates Post Couriers.
Type in up to 35 tracking numbers (separated by lines).
Hit the “Track a Shipment” button.
View tracking statuses of domestic and international packages.
List of Emirates Post Couriers APIs
API
Description
Manifestation and Label Generation API
Generate shipping labels and manifest orders for Emirates Post Couriers-based orders automatically.
Track Shipment API
Display real-time tracking details to customers with this API.
Cancellation API
Make order cancellations a breeze for your team and customers.
EDD API
Let customers know when they can expect a delivery to arrive using precise estimations.
NDR Action Update
Instantly take action on any failed delivery using a comprehensive NDR management dashboard.
Return Webhooks
Benefit from Emirates Post Couriers-integrated webhooks to quickly begin the returns process.
API & Description
Manifestation and Label Generation API
Generate shipping labels and manifest orders for Emirates Post Couriers-based orders automatically.
Track Shipment API
Display real-time tracking details to customers with this API.
Cancellation API
Make order cancellations a breeze for your team and customers.
EDD API
Let customers know when they can expect a delivery to arrive using precise estimations.
NDR Action Update
Instantly take action on any failed delivery using a comprehensive NDR management dashboard.
Return Webhooks
Benefit from Emirates Post Couriers-integrated webhooks to quickly begin the returns process.
Frequently asked questions
Everything you need to know about ClickPost’s Carriers Integration
What are the steps to integrate Emirates Post API into ClickPost’s tracking platform?
Integrating with Emirates Post Couriers using ClickPost is fairly simple once you have the carrier’s credentials. Visit ClickPost’s list of integrated carriers, select Emirates Post Couriers, and enter the respective API key. You can always contact our support team to gain more assistance with integrations.
How does ClickPost handle exceptions like missed or delayed deliveries for Emirates Post?
For exceptions like missed/failed deliveries, ClickPost uses a dedicated NDR management module that lets online store owners keep tabs of all such orders. You can also set up workflows to automatically alert customers when a delivery fails and keep them in the loop when your carrier will reattempt.
Can ClickPost automate delivery notifications and status updates for Emirates Post shipments?
Yes. ClickPost automates delivery notifications for your business and sends customers tracking updates via multiple communication channels, such as WhatsApp, email, SMS, etc. The same is also true for returns and failed deliveries, we always keep your customers informed for all order statuses.
Does ClickPost provide real-time visibility for Emirates Post shipments across multiple regions?
Absolutely. Using a branded tracking page, you can easily show customers real-time tracking details of their parcel. This applies to domestic and international orders, enabling you to reduce WISMO queries and improve the average consumer experience.
What is Emirates Post Couriers?
As the name suggests, Emirates Post Couriers is a UAE-based postal company. Formed in the early 20th century in 1904, the company was the pioneer of postal service in the Emirate of Dubai and was originally under the Indian Postal Services. During the years 1963/64, the company spread to other Emirates, such as Sharjah, Abu Dhabi, Ras Al Khaimah, Fujairah, Ajman, and Umm Al Quwain. By 1973, it revealed a new postal stamp under the name of the UAE. With a rich history, Emirates Post Couriers is also the first postal agency in the world to get the The International Standard for Service Excellence recognition. Today, the firm offers various shipping, postal, and value-added services to both individual consumers and businesses. If needed, you can even visit any one of its 68 branches to leverage FedEx shipping services and deliver items to 220+ countries. The company also uses AI to generate modern-day inspired postal stamps and hosts other designs on its official stamp store.