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 */ }); }); })();

91ÊÓÆµ

See where your logistics stands on automation Start assessment

Home > Blog >

Parth: Our AI That’s Making Missed Deliveries a Thing of the Past

Parth: Our AI That’s Making Missed Deliveries a Thing of the Past

Tarunya Shankar
By Tarunya Shankar

Ready to ship smarter? Talk to our logistics experts.

Trusted by 600+ brands

In this blog

    A New Era in Logistics

    ClickPost was founded with the vision of transforming logistics for e-commerce enterprises. In our journey to offer seamless shipping, we've resolved countless bottlenecks and created numerous possibilities for brands. 

    Our team is aggressively adopting AI to solve for the most pressing challenges in the fulfillment journey. The more recent efforts include tackling one of the biggest challenges - non-delivery reports (NDR) management. The results of these efforts have been christened Parth, our milestone step to manage delivery exceptions effortlessly. By addressing this critical issue, we’ve developed a solution that not only streamlines NDR management but also enhances overall delivery efficiency. 

     

     

     

    This breakthrough can help merchants reverse RTO (Return-to-origin) rates, intelligently reschedule deliveries, and save operational costs. It can offer a greater understanding of failed deliveries and turn counterproductive approaches into growth opportunities. 

    Before diving into the solution, let's understand how ClickPost has evolved in its logistics management journey and come this far.

    ClickPost's Journey: From Tracking to Transforming Logistics

    Innovation is in our DNA. Our technology teams deeply understand the challenges associated with eCommerce logistics. Together, we are changing how logistics works and how eCommerce businesses are supported to grow and through constant innovation at the fore.

    Over the years, we saw that manual handling of NDRs not only consumed time but also hurt customer trust and brand efficiency. Long calls and delays were common, making the process inefficient.

    To solve this, ClickPost introduced AI-powered NDR management with advanced APIs, streamlining the entire process. We eliminated bottlenecks, replaced human intervention, and cracked the conversion code that prevents RTO.

    But we didn’t stop there. Recognizing the need for even greater accuracy, we introduced Parth, our AI NDR resolution agent, taking automation to the next level and driving optimal outcomes for brands.

    Introducing Parth: the AI NDR Agent

    We’re thrilled to present our AI delivery exceptions manager, Parth. It can help you maximize conversions and recover failed orders instantly with its human-like conversations. 

    After filling in the order details (personal information and phone number), selecting the NDR reason, you can expect Parth to take care of the rest. Users can access the call logs for detailed call information and recordings.

    With just a few clicks, Parth quickly resolves the failed delivery issue, allowing the brand to take immediate action and delivery rescheduling at a more convenient time.

     

    Inside Parth’s Playbook

    ClickPost’s Parth offers instant NDR resolutions. It handles failed deliveries faster and prevents major business losses. You can keep costs low and automate up to 90% of your NDR resolutions while keeping the human touch intact, and here’s how!

    ClickPost’s Parth offers:

    • AI-driven Customer Calls

    • Actionable Insights

    • Real-time Updates

    • Adaptive AI Learning

    • AI-first Conversion Optimization

    1. AI-driven Customer Calls:

    Parth automatically addresses NDR calls using natural language processing (NLP), offering human-like interactions to make customers feel confident and valued. 

    It’s easy to get started with Parth. Fill in the order info (Brand name, order ID, Shipping Partner and customer address) and call details (NDR reason, language, name, and phone number). These data-supported calls offer resolutions in 2 quick minutes. 

    After the call has ended, brands can access the call log and check the summary for a detailed description of the conversation as well. This saves time and leads to faster resolutions for multiple failed deliveries and order-related issues.

    2. Actionable Insights:

    Parth automatically collects data on reasons for delivery failure such as timing issues, incorrect addresses, and allows brands to make informed decisions. 

    The agent also collects feedback from various other channels including IVRS, email, SMS and WhatsApp. Post conversation, automated surveys can be sent to request feedback. These insights can immensely slash RTO rates and increase customer satisfaction.

    3. Real-time Updates:

    You can receive fully automated delivery updates on readjusted time slots and reattempt ETA from Parth. The collated data can be sent to stakeholders and customer support. 

    The updates are powered by smart analytics that can be displayed on dashboards to track performance. Brands can keep customers in the loop until the issue is resolved.

    4. Adaptive AI Learning:

    Parth is a voracious learner, as it picks up from every interaction with the customer. For example, if a certain line satisfies customers, the agent can use it more frequently. 

    It improves delivery resolutions based on past experiences. Another example of this type of learning is, if a courier is causing consistent delays, Parth adjusts future actions to avoid similar issues and helps you save at least 30% of your costs spent on manual resolution.  

    5. AI-first Conversion Optimization

    We know that delivery success is the foundation for enduring loyalty and returning customers. Frequent delivery glitches can plummet customer retention ratios when they are not immediately resolved. This has been our lone motivation to develop Parth, our NDR AI agent.

    It uses an LLM model for insights into best and worst performance metrics and comes with pre-built workflows that provide businesses with confidence to handle timing, message rhythm, and reminders. It boosts conversions through individual call resolution, multi-language responses, and prudence. 

    Its multi-language support serves diverse customer populations and enhances customer communication. Plus, its instant feedback can help you make timely adjustments and solve anticipatory issues.

    Leading NDR Into the AI Era

    Parth will transform the way brands do their delivery, by learning from every customer interaction. Its AI-driven solution not only resolves failed deliveries in real-time but also shares actionable insights that help brands save cost on RTO and optimize their delivery processes.

    With its real-time notifications, adaptive learning, and human-like interactions, we are setting the stage for brands to make intelligent decisions and facilitate sustainable growth.

    The Logistics Automation Platform for E-commerce

    Momentum Leader - G2 Users Most Likely To Recommend - G2 Best Results Mid-Market - G2
    . window.disableHubSpotCookieBanner = true; function killNative() { var n = document.getElementById("hs-eu-cookie-confirmation"); if (n && n.parentNode) { n.parentNode.removeChild(n); return true; } return false; } killNative(); if (window.MutationObserver) { var mo = new MutationObserver(function () { killNative(); }); mo.observe(document.documentElement, { childList: true, subtree: true }); setTimeout(function () { mo.disconnect(); }, 15000); } var COOKIE = "cp_cookie_consent"; var EU = ["at","be","bg","hr","cy","cz","dk","ee","fi","fr","de","gr","hu","ie","it","lv","lt","lu","mt","nl","pl","pt","ro","sk","si","es","se","gb","uk","is","li","no","ch"]; function readCookie(nm) { var m = document.cookie.match(new RegExp("(?:^|; )" + nm + "=([^;]*)")); return m ? decodeURIComponent(m[1]) : null; } function writeCookie(nm, val, days) { var d = new Date(); d.setTime(d.getTime() + (days * 864e5)); document.cookie = nm + "=" + encodeURIComponent(val) + ";expires=" + d.toUTCString() + ";path=/;SameSite=Lax" + (location.protocol === "https:" ? ";Secure" : ""); } function stored() { var raw = readCookie(COOKIE); if (!raw) return null; try { var o = JSON.parse(raw); if (typeof o.analytics === "boolean") return o; } catch (e) {} return null; } function apply(state, revoke) { window._hsp = window._hsp || []; window._hsp.push(["setHubSpotConsent", { analytics: !!state.analytics, advertisement: !!state.advertisement, functionality: !!state.functionality }]); if (revoke && !state.analytics && !state.advertisement && !state.functionality) { window._hsp.push(["revokeCookieConsent"]); } window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: "cp_cookie_consent", cp_consent_analytics: !!state.analytics, cp_consent_advertisement: !!state.advertisement, cp_consent_functionality: !!state.functionality }); document.documentElement.setAttribute("data-cp-consent", "set"); } function inScope(banner) { if (banner.getAttribute("data-scope") !== "eu_only") return true; var geo = (document.body.getAttribute("data-geo_location") || "").toLowerCase(); if (!geo) return true; return EU.indexOf(geo) !== -1; } function init(banner) { var days = parseInt(banner.getAttribute("data-days"), 10) || 180; var prefs = banner.querySelector("[data-cpcb-prefs]"); var compact = banner.querySelector('[data-cpcb-actions="compact"]'); var expanded = banner.querySelector('[data-cpcb-actions="expanded"]'); var toggles = banner.querySelectorAll("[data-cpcb-toggle]"); function show() { banner.hidden = false; requestAnimationFrame(function () { banner.classList.add("is-visible"); }); } function hide() { banner.classList.remove("is-visible"); setTimeout(function () { banner.hidden = true; }, 300); } function collapse() { if (!prefs) return; prefs.hidden = true; if (expanded) expanded.hidden = true; if (compact) compact.hidden = false; } function expand() { if (!prefs) return; prefs.hidden = false; if (compact) compact.hidden = true; if (expanded) expanded.hidden = false; } function paint(state) { Array.prototype.forEach.call(toggles, function (t) { var key = t.getAttribute("data-cpcb-toggle"); if (key === "necessary") { t.setAttribute("aria-checked", "true"); return; } t.setAttribute("aria-checked", state[key] ? "true" : "false"); }); } function fromToggles() { var state = { analytics: false, advertisement: false, functionality: false }; Array.prototype.forEach.call(toggles, function (t) { var key = t.getAttribute("data-cpcb-toggle"); if (key in state) state[key] = t.getAttribute("aria-checked") === "true"; }); return state; } function commit(state, revoke) { writeCookie(COOKIE, JSON.stringify({ analytics: !!state.analytics, advertisement: !!state.advertisement, functionality: !!state.functionality, v: 1, ts: Date.now() }), days); apply(state, revoke); hide(); } Array.prototype.forEach.call(toggles, function (t) { if (t.disabled) return; t.addEventListener("click", function () { t.setAttribute("aria-checked", t.getAttribute("aria-checked") === "true" ? "false" : "true"); }); }); banner.addEventListener("click", function (e) { if (!e.target || !e.target.closest) return; var btn = e.target.closest("[data-cpcb-action]"); if (!btn) return; var action = btn.getAttribute("data-cpcb-action"); if (action === "customise") { expand(); return; } if (action === "accept") { commit({ analytics: true, advertisement: true, functionality: true }, false); return; } if (action === "reject") { commit({ analytics: false, advertisement: false, functionality: false }, true); return; } if (action === "save") { commit(fromToggles(), true); return; } }); var existing = stored(); if (existing) { apply(existing, false); paint(existing); collapse(); } else if (!inScope(banner)) { // Out of the consent-required region: implied consent, banner never shown. commitSilently(); } else { collapse(); show(); } function commitSilently() { var all = { analytics: true, advertisement: true, functionality: true }; writeCookie(COOKIE, JSON.stringify({ analytics: true, advertisement: true, functionality: true, v: 1, ts: Date.now(), implied: true }), days); apply(all, false); } // Public re-open hook for a footer "Cookie settings" link. window.cpCookieBanner = window.cpCookieBanner || {}; window.cpCookieBanner.open = function () { var s = stored() || { analytics: false, advertisement: false, functionality: false }; paint(s); expand(); show(); }; } function boot() { var banners = document.querySelectorAll("[data-cpcb]"); if (!banners.length) return; init(banners[0]); document.addEventListener("click", function (e) { if (!e.target || !e.target.closest) return; var trigger = e.target.closest("[data-cp-cookie-settings]"); if (!trigger) return; e.preventDefault(); if (window.cpCookieBanner && window.cpCookieBanner.open) window.cpCookieBanner.open(); }); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", boot); } else { boot(); } })();