SDK integration for a new Discovery setup
Data hub rollout
Data hub provides new unified API integration methods for sending data to multiple Bloomreach products. Access is being rolled out in phases. For new implementations, we recommend using Data hub where available. Existing product-specific integrations remain fully supported for Engagement, Discovery, and Clarity.
Integrating new Discovery
- Prerequisite (provisioning and grant access)
- Data hub and workspace
- Discovery account project
- Add DNS records for Custom tracking domain
- Add the tracking snippet to your website
- The snippet builder can be used in the app to customize for your individual business needs
- The default tracking snippet is also provided below, however you will find increased functionality from customizing it
- Add tracking events according to the tracking specifications here: SDK tracking required events details
- For any questions about which tracking events are relevant to your business objectives, refer to the Tracking document and data requirements tailored for you by Bloomreach or your implementation partner
Tracking snippet
Your basic tracking snippet for all pages that you place in HTML before </HEAD> or you can add it to your Google Tag Manager.
<style>.xnpe_async_hide{opacity:0 !important}</style>
<script>
!function(e,t,n,i,o,r){const s=4e3,c="xnpe_async_hide";function a(e){if("number"!=typeof e)return e;const t=new Date;return new Date(t.getTime()+1e3*e)}function p(e){return e.reduce((function(e,t){return e[t]=function(){e._.push([t.toString(),arguments])},e}),{_:[]})}function m(e,t,n){const i=n.createElement(t);i.src=e;const o=n.getElementsByTagName(t)[0];return o.parentNode.insertBefore(i,o),i}function l(e){return"[object Date]"===Object.prototype.toString.call(e)}r.target=r.target||"//api.exponea.com",r.file_path=r.file_path||r.target+"/js/brweb.min.js",o[t]=p(["anonymize","initialize","identify","getSegments","update","track","trackLink","trackEnhancedEcommerce","getHtml","showHtml","showBanner","showWebLayer","ping","getAbTest","loadDependency","getRecommendation","reloadWebLayers","_preInitialize","_initializeConfig","metadata"]),o[t].notifications=p(["isAvailable","isSubscribed","subscribe","unsubscribe"]),o[t].segments=p(["subscribe"]),o[t]["snippetVersion"]="v3.1.1",function(e,t,n,i){e[i]={sdk:e[n],sdkObjectName:n,skipExperiments:!!t.new_experiments,path:t.target,streamId:t.stream_id}}(o,r,t,i),function(e,t,n){m(e.file_path,t,n)}(r,n,e),function(e,t,n,i,o,r,p,u){if(!e.new_experiments)return;!0===e.new_experiments&&(e.new_experiments={});const _=e.new_experiments.hide_class||c,f=e.new_experiments.timeout||s,d=encodeURIComponent(r.location.href);let g;e.cookies&&e.cookies.expires&&("number"==typeof e.cookies.expires||l(e.cookies.expires)?g=a(e.cookies.expires):e.cookies.expires.tracking&&("number"==typeof e.cookies.expires.tracking||l(e.cookies.expires.tracking))&&(g=a(e.cookies.expires.tracking))),g&&g<new Date&&(g=void 0);const b=e.target+"/webxp/streams/"+e.stream_id+"/"+t+"/"+(u.exec(p.cookie)||[0,"new"])[1]+"/modifications.min.js?http-referer="+d+"&timeout="+f+"ms"+(g?"&cookie-expires="+Math.floor(g.getTime()/1e3):"");"sync"===e.new_experiments.mode&&r.localStorage.getItem("__exponea__sync_modifications__")?function(e,t,n,i,o){n[o][t]="<"+t+' src="'+e+'"></'+t+">",i.writeln(n[o][t]),i.writeln("<"+t+">!"+o+".init && document.writeln("+o+"."+t+'.replace("/'+t+'/", "/'+t+'-async/").replace("><", " async><"))</'+t+">")}(b,t,r,p,n):function(e,t,n,i,o,r,s,c){r.documentElement.classList.add(e);const a=m(n,i,r);function p(){o[c].init||m(n.replace("/"+i+"/","/"+i+"-async/"),i,r)}function l(){r.documentElement.classList.remove(e)}a.onload=p,a.onerror=p,o.setTimeout(l,t),o[s]._revealPage=l}(_,f,b,t,r,p,o,n)}(r,n,i,0,t,o,e,RegExp("__exponea_etc__"+"=([\\w-]+)")),function(e,t,n){var i;e[t]._initializeConfig(n),(null===(i=n.experimental)||void 0===i?void 0:i.non_personalized_weblayers)&&e[t]._preInitialize(n),e[t].start=function(i){i&&Object.keys(i).forEach((e=>n[e]=i[e])),e[t].initialize(n)}}(o,t,r)}(document,"brweb","script","webxpClient",window,{
target: "https://api.XXXXXXX.dev", // your Bloomreach API base endpoint
stream_id: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", // your Bloomreach Event stream ID
experimental: {
non_personalized_weblayers: true
},
new_experiments: { mode: "sync" },
customer: {
email_id: "[email protected]" // identified visitor identity for Engagement
},
track: {
default_properties: { // custom properties to be added to all events
customer_tier: "gold-member" // your additional custom segments (primarily for Discovery)
},
metadata: { // optional metadata properties which control specific functionality
domain_key: "Pacific", // Bloomreach provided key for Discovery
view_id: "en_US", // Bloomreach provided key for Discovery
test_data: true, // enables Discovery ignore on production
debug: true // enables Discovery real-time Integration mode and ignore on production
}
},
});
brweb.start(); // some regulations may require you to start() only after visitor has granted cookie consent
</script>
Tracking required events
-
Track your basic web user interactions.
-
The full list of events names and properties depend on selected use cases.
-
Refer to the Automatic tracking document and data requirements provided to you by Bloomreach consultant or an integration partner.
-
Page view pixels (Track these events when a page loads or when content changes/refreshes)
- view_homepage
- view_item (PDP)
- view_category (PLP)
- view_search_results (search results)
- purchase (conversions)
- view_content
- view_thematic
- view_other
-
Event pixels (Track these events on user interactions)
- cart_update (ATC)
- search_submit
- suggest_click
- view_quickview
- widgets
- view
- click
- ATC
Updated 6 months ago
