Author : Vikas Kumar
Director - Customer Experience, Espire | Sitecore MVP 2021
03/Feb/2019

Vikas is a Sitecore MVP who heads the Digital Experience Platform (DXP) initiatives at Espire. A skilled craftsman in competency building, Vikas is a go-to-CMS expert, known for designing & developing best practices, that consistently transforms digital journey for clients.


Driving personalization with xConnect APIs and custom facet data | Part 2

Introduction

This blog post is in continuation to the post 'Driving Personalization with xConnect APIs and Custom Facet Data | Part 1'.

The previous post described how to create a custom facet in Sitecore xConnect, utilizing xConnect API to create a custom console application to create contacts in XDB and saving data in custom facets for those contacts.

This post will focus on the steps required to use the custom data captured to identify the contact visiting the website and rendering personalized content with the help of custom personalization rules.

Follow our session on YouTube

Deploy Model to Sitecore

This step is for enabling Sitecore to account for the new collection model and facets to be loaded when contact data is fetched from XDB for tracking.

  • Add reference to the library containing the model details to your website application
  • Create the following patch file and publish to your Sitecore instance

Sitecore Blog

Identifying the contact

While creating the contact, we added a unique ID as the identifier instead of the email. In our demo scenario we want the visitor to be identified using this unique ID which is available I the query string of the URL that was provided to the student to access the website.

1. We now add a processor the ‘mvc.requestBegin’ pipeline, which would identify the used based on the query string value as soon as the page loads.


 public class IdentifyContactOnLoad : RequestBeginProcessor 
    { 
        readonly string source = Sitecore.Configuration.Settings.GetSetting("UIDSource"); 
        readonly string uidQueryString = Sitecore.Configuration.Settings.GetSetting("QueryString"); 
        public override void Process(RequestBeginArgs args) 

        { 
            if (HttpContext.Current.Request.QueryString.HasKeys()) 
            { 

                var uid = HttpContext.Current.Request.QueryString[uidQueryString]; 
                if (!string.IsNullOrEmpty(uid)) 
                { 
                    XConnectHelper.IdentifyUser(uid, source); 
                } 
            } 
        } 
    } 

    public class XConnectHelper 
    { 
        public static string facetName = Sitecore.Configuration.Settings.GetSetting("FacetName"); 
        public static string redirectUrl = Sitecore.Configuration.Settings.GetSetting("RedirectUrl"); 
        readonly static string uidQueryString = Sitecore.Configuration.Settings.GetSetting("QueryString"); 
        public static void IdentifyUser(string uid, string source) 
        { 
            try 
            { 
                HttpContext.Current.Session.Abandon(); 

                if (Tracker.Current != null) 
                { 
                    Tracker.Current.EndVisit(true); 
                    Tracker.Current.EndTracking(); 
                } 

                if (Tracker.Current == null && Tracker.Enabled) 
                { 
                    Tracker.StartTracking(); 
                } 

                if (Tracker.Current != null && Tracker.Current.IsActive && Tracker.Current.Session != null) 
                { 
                    Tracker.Current.Session.IdentifyAs(source, uid); 
                } 
            } 

            catch (Exception ex) 
            { 
                HttpContext.Current.Response.Redirect(redirectUrl); 
            } 
        } 
} 


2. Add the following patch in a config file to patch the processor created to the pipeline:

Sitecore Blog 2-2

Creating custom personalization rule

We now want to create a custom personalization rule that would work on the custom facet value to deliver personalized content to the students.

Application changes

1. Extended helper method to retrieve custom facet data from Tracker
Add the following method to the XConnectHelper class to retrieve custom facet data from the tracker.


 public static string GetCourseName() 
        {         
            return string.IsNullOrEmpty(HttpContext.Current.Request.QueryString[uidQueryString]) ? "" : StudentInfoFacets().Courses; 
        } 

        public static string GetCountry() 
        { 
            return string.IsNullOrEmpty(HttpContext.Current.Request.QueryString[uidQueryString]) ? "" : StudentInfoFacets().Country; 
        } 

        private static StudentInfo StudentInfoFacets() 
        { 
            var xConnectFacets = Tracker.Current.Contact.GetFacet("XConnectFacets"); 
            return xConnectFacets.Facets[StudentInfo.DefaultFacetKey] as StudentInfo; 
        } 


2. Create custom condition class for the rule

Create a custom rule which would enable rendering different content based on the Course that the student has registered for.

public class DegreeRule : StringOperatorCondition where T : RuleContext 
    { 
        public string DegreeValue { get; set; } 
        protected override bool Execute(T ruleContext) 
        { 
            string studyArea = XConnectHelper.GetCourseName(); 
            if (!string.IsNullOrEmpty(XConnectHelper.GetCourseName())) 
            { 
                if (DegreeValue.ToString().ToLower() == studyArea.ToLower()) 
                { 
                    return true; 
                } 
            } 
            return false; 
        } 
     } 

3. Publish the changes to the Sitecore instance

Sitecore Changes

  • Create a custom condition in Sitecore at ‘/sitecore/system/Settings/Rules/Definitions/Elements'
  • In the text field mention the rule text, which would show up in the Personalization Editor
  • In the type field enter the custom condition class created and the library name
  • Save the item


Sitecore blog1



  • Use the rule set editor to setup personalized variants for content based on the Course selected by the student


Sitecore blog2



That's it, create more rules to utilize the custom data captured and deliver a highly personalized experience for your visitors.

MORE FROM OUR BLOGS

Designed a Centralized Content Management System for a Leading UK-based Staffing Business

A leading Global Talent Acquisition and Managed Workforce Solutions provider in the UK, needed support to centralize its content management for the 22+ acquired brands and required a simplified process for posting job openings & deploying regular enhancements for content management. Espire considering the challenges, reimplemented the front-end design framework for better performance, security and SEO optimization. We also redesigned the cloud architecture on Microsoft Azure to support constant enhancements required to centralize & manage enterprise & localized content. 

Design & Development of a Responsive SharePoint Website For the holding company of Singapore’s public healthcare providers

The client manages the public healthcare system to ensure that good and affordable basic medical services are available to all Singaporeans.

Enhanced digital customer experiences for a leading Singapore headquartered transshipment hub

The customer's existing website was deployed on-premises and leveraged a WCM platform, Joomla they required a strategic technology partner to revamp the website, improve content delivery and website navigation with needed to map customer journey and access visitor analytics efficiently

Accelerating digital experiences with powerful ui ux for leading industries

UI & UX has emerged as a mainstay when it comes to offering an engaging and easy-to-navigate website/user interface to users. A careful UI/UX design strategy can help in transforming the way organizations interact with their customers as well as their employees by making the platform more streamlined, agile, proactive, easy-to-use and intuitive. Moreover, it can help in increasing user retention, engagement, conversion rates and eventually better ROI.

Espire infolabs enhances search experience for acu wins searchstax partner excellence award 2021

The global leader in search experience management, SearchStax has recognized Espire Infolabs in the Partner Excellence Award 2021 (APAC) for assisting Australian Catholic University (ACU), transform its site search with SearchStudio and driving greater engagement and conversions.

Sitecore composable dxp multiexperience solutions for driving greater business outcomes

Espire is helping leading brands deploy Sitecore Composable DXP to deliver multiexperience and total experience solutions at scale. Sitecore is constantly adding cutting-edge tools and technologies to give marketers and developers the flexibility to compose their DXP platform to deliver total experience solutions at scale. Enterprises are prioritizing their move towards delivering multiexperience solutions to drive impeccable staff and customer experience.

Sitecore ordercloud top features and benefits for driving exceptional digital experiences

Sitecore’s OrderCloud is an API-first headless cloud platform which empowers brands to streamline key business operations like efficient order management, marketplace application integration and driving eCommerce experiences for customers. It seamlessly integrates with your brand’s existing technology stack to drive targeted customer communications and digital experiences across multiple touchpoints

Subscribe To Our Blog

By clicking on "SUBSCRIBE NOW" you acknowledge having read our Privacy Notice.