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

Creating an automated online voting platform for seamless onboarding and improved Voter Experience

One of the major challenges faced by the customer was - conducting the cooperative elections amidst the nationwide lockdowns in the US as casting votes on a piece of paper was neither safe nor feasible. Espire built an online voting application to integrate all the three existing ways of voting in one place including: Online voting (through a website), SmartHub voting (through single sign-on), Paper ballot voting (which includes data entry and verification)

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

Digital Communications and CCM Solutions 4 key initiatives to Improve Customer Experience

Digital communications help in stitching your prospect to customer journeys together by keeping them actively engaged and allowing them to re-initiate conversation from where they left off. Delivering contextual and interactive communications can help the customers take the next step and reach out to you through the channel convenient for them.

Total experience digital transformation strategy for global businesses

The Total Experience strategy has emerged as a key trend for businesses to drive better digital experiences for users, customers and employees while improving business growth

Digital experience management 5 best practices to improve customer experience on b2b websites

Customer Experience is at the heart of customer service and building long-lasting customer relationships. Customer experience will emerge as the key determinant of business success, surpassing the quality and price of products. While B2C brands have prioritized customer experience as a strategic business goal, B2B companies are yet to navigate their technology investments towards digital experience management.

Sitecore cdp optimization 5 steps for deploying customer data platform

The Customer Data Platform (CDP) has become a critical part of the modern technology stack, as a one-stop solution for data orchestration and management. Sitecore CDP comprises of all the core data management capabilities along with intelligent decisioning, predictive analytics, experimentation, and orchestration for driving positive brand experiences

Subscribe To Our Blog

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