Kitewheel ID Manager

Kitewheel ID Manager now simplifies the existing workflow by automatically storing the values associated with a customer into the database and serves as the main source of building the customer profile. This means that that the synchronization and resolution of identities from diverse systems will be seamlessly processed and managed via the Kitewheel ID Manager. This eliminates past manual consolidation of customer profiles and enabling granular visibility into a customer's journey performance.

Kitewheel ID Manager consists of 4 categories inside the Data Schema:

  • Identifiers
  • Attributes
  • Journey Steps 
  • Interactions 

A simple Update Profile Node can be used inside graphs to execute the consolidation of customer profile and interactions based on the current set of Profile Identifiers and the Profile Attributes. 

Identifiers

Each Identifier Type represents one way of identifying a customer. For example, you can create an Identifier Type called "email" and this could contain one or more email addresses [ "myworkemail@domain1.com", "mypersonalemail@domain2.com" ]. You can create multiple Identifier Types via the Project Settings → Profile Metadata tab. Each type of identifier can have zero or more identifier value, e.g., when your Identifier Type is "email" then the value of "email" can be multiple email addresses registered to that individual. Retrieving this value will return a list as applicable or it could also return null if that Identifier Type has never been set. 

Once an Identifier Type has been created, it cannot be modified under the "Identifiers" part of the Profile schema. You can only manage (add or delete) Identifier Types via the Profile Metadata page.

Attributes

Attributes are schema values such as firstName, lastName. This is treated like any other normal schema elements and therefore, can have any level of complexity. The normal schema rules are applied in the same way as for the regular Kitewheel schema. 

Through Kitewheel ID Manager, a profile’s attributes are captured and collected but can be also removed per GDPR/CCPA compliance or other privacy policy requirements. It is important to note that a Profile’s Identifier cannot be deleted once captured as this ensures the right-to-be-forgotten requirements of this legislation can be delivered.

An example of how attributes can be deleted can be seen as below:


Journey Steps

  • The Journey Steps part of the Profile schema is a read-only list of the journey steps that have been completed by this profile and saved by the Record Journey Step Node
  • All Journey Steps are available that match any of the identifiers  
  • The list will be ordered in time with the oldest journey step first in the list 
  • Each journey step is represented as an object 
  • Each object has the following keys: 
    • Journey Step Name
    • Timestamp (UTC to microsecond granularity) 
  • Context: this should be stored as an object

Interaction Types 

  • The Interactions part of the Profile schema is a read-only list of the interactions that have been completed by this profile and saved by the Record Interaction Node
  • All Interactions are shown that match any of the identifiers 
  • Each object has the following keys: 
    • Interaction Type Name
    • Timestamp (UTC to microsecond granularity) 
  • Context: this should be stored as an object

How Profiles are Managed, Merged and Retrieved

A customer’s Profile metadata is captured via any of the three nodes: Update Profile node, Save Interaction node or Journey Steps. Once the data is captured, the Kitewheel ID Manager will then find identifiers with the same value and will merge any of the “overlapping” profiles and attributes into a single profile.

If no profile exists then a new profile will be created from the Identifiers and Attributes in the schema at the point in the graph when the node was executed.

Once a profile is created and merged, you will just need to use any one of the three nodes to grab the latest and return a decision inside a graph. The rules that define how attributes are merged are described in the Update Profile node.


What a Merged Profile Look Like

Profile A
{
	"attributes": {
		"firstName": "Cindy",
		"lastName": "Liang",
		"destination": "Asia Tours",
		"favoriteColor": [
			"white"
		],
		"visits": 7,
		"travelers": "3",
		"duration": "1-7 days"
	},
	"identifiers": [
		{
			"idType": "kwCookie",
			"identifier": "e746d330-0645-11ea-9837-a5a3f29e14e2"
		},
		{
			"idType": "KWID",
			"identifier": "5dcc4fb56295004e450c7865"
		},
		{
			"idType": "kwCookie",
			"identifier": "7fed4e30-0645-11ea-ac77-3fa1b1cce38f"
		},
		{
			"idType": "KWID",
			"identifier": "5dcc4f266295001bcd0c785f"
		},
		{
			"idType": "email",
			"identifier": "tl@gmail.com"
		},
		{
			"idType": "email",
			"identifier": "cl@gmail.com"
		}
	],
	"interactions": [
		{
			"channelTypeText": "web",
			"channelTypeId": "9223372036854775807",
			"timestamp": "2019-11-13T18:47:17.405Z",
			"interactionTypeText": "view",
			"engagementScore": 20,
			"interactionTypeId": "9223372036854775807"
		},
		{
			"channelTypeText": "web",
			"channelTypeId": "9223372036854775807",
			"timestamp": "2019-11-13T18:47:29.206Z",
			"interactionTypeText": "blur",
			"engagementScore": 2,
			"interactionTypeId": "9223372036854775807"
		},
		}
	],
	"journeySteps": [
		{
			"journeyStepTypeId": "9223372036854775807",
			"timestamp": "2019-11-13T18:44:54.215Z",
			"journeyStepTypeText": "Visited Website"
		},
		{
			"journeyStepTypeId": "9223372036854775807",
			"timestamp": "2019-11-13T18:45:24.085Z",
			"journeyStepTypeText": "Submitted incomplete form"
		},
		{
			"journeyStepTypeId": "9223372036854775807",
			"timestamp": "2019-11-13T18:47:17.420Z",
			"journeyStepTypeText": "Visited Website"
		}
	]
}

Profile B

{
	"attributes": {
		"firstName": "Cindy",
		"lastName": "Liang",
		"destination": "Laos City Breaks",
		"favoriteColor": [
			"red",
			"blue"
		],
		"visits": 3,
		"travelers": "5",
		"duration": "22-31 days"
	},
	"identifiers": [
		{
			"idType": "kwCookie",
			"identifier": "a2455700-0a0c-11ea-94ac-e9e2287f01cf"
		},
		{
			"idType": "KWID",
			"identifier": "5dd2a56d629500fb5b0c788d"
		},
		{
			"idType": "email",
			"identifier": "cl@gmail.com"
		}
	],
	"interactions": [
		{	
			"channelTypeText": "web",
			"channelTypeId": "9223372036854775807",
			"timestamp": "2019-11-18T14:07:55.984Z",
			"interactionTypeText": "view",
			"engagementScore": 20,
			"interactionTypeId": "9223372036854775807"
		},
		{
			"channelTypeText": "web",
			"channelTypeId": "9223372036854775807",
			"timestamp": "2019-11-18T14:07:56.287Z",
			"interactionTypeText": "formSubmit",
			"engagementScore": 50,
			"interactionTypeId": "9223372036854775807"
		}
	],
	"journeySteps": [
		{
			"journeyStepTypeId": "9223372036854775807",
			"timestamp": "2019-11-18T14:06:37.351Z",
			"journeyStepTypeText": "Visited Website"
		},
		{
			"journeyStepTypeId": "9223372036854775807",
			"timestamp": "2019-11-18T14:06:40.052Z",
			"journeyStepTypeText": "Visited Website"
		},
		{
			"journeyStepTypeId": "9223372036854775807",
			"timestamp": "2019-11-18T14:07:56.022Z",
			"journeyStepTypeText": "Visited Website"
		},
		{
			"journeyStepTypeId": "9223372036854775807",
			"timestamp": "2019-11-18T14:07:56.262Z",
			"journeyStepTypeText": "Submitted incomplete form"
		}
	]
}


Merged Profile

{
	"attributes": {
		"firstName": "Cindy",
		"lastName": "Liang",
		"destination": "Laos City Breaks",
		"favoriteColor": [
			"purple",
			"blue"
		],
		"visits": 3,
		"travelers": "5",
		"duration": "22-31 days"
	},
	"identifiers": [
		{
			"idType": "kwCookie",
			"identifier": "e746d330-0645-11ea-9837-a5a3f29e14e2"
		},
		{
			"idType": "KWID",
			"identifier": "5dcc4fb56295004e450c7865"
		},
		{
			"idType": "kwCookie",
			"identifier": "7fed4e30-0645-11ea-ac77-3fa1b1cce38f"
		},
		{
			"idType": "KWID",
			"identifier": "5dcc4f266295001bcd0c785f"
		}, 
                      {
			"idType": "kwCookie",
			"identifier": "a2455700-0a0c-11ea-94ac-e9e2287f01cf"
		},
		{
			"idType": "KWID",
			"identifier": "5dd2a56d629500fb5b0c788d"
		},
		{
			"idType": "email",
			"identifier": "tl@gmail.com"
		},
		{
			"idType": "email",
			"identifier": "cl@gmail.com"
		}
	],
	"interactions": [
		{
			"channelTypeText": "web",
			"channelTypeId": "9223372036854775807",
			"timestamp": "2019-11-13T18:47:17.405Z",
			"interactionTypeText": "view",
			"engagementScore": 20,
			"interactionTypeId": "9223372036854775807"
		},
		{
			"channelTypeText": "web",
			"channelTypeId": "9223372036854775807",
			"timestamp": "2019-11-13T18:47:29.206Z",
			"interactionTypeText": "blur",
			"engagementScore": 2,
			"interactionTypeId": "9223372036854775807"
		},
		{
			"channelTypeText": "web",
			"channelTypeId": "9223372036854775807",
			"timestamp": "2019-11-18T14:07:55.984Z",
			"interactionTypeText": "view",
			"engagementScore": 20,
			"interactionTypeId": "9223372036854775807"
		},
		{
			"channelTypeText": "web",
			"channelTypeId": "9223372036854775807",
			"timestamp": "2019-11-18T14:07:56.287Z",
			"interactionTypeText": "formSubmit",
			"engagementScore": 50,
			"interactionTypeId": "9223372036854775807"
		}
	],
	"journeySteps": [
		{
			"journeyStepTypeId": "9223372036854775807",
			"timestamp": "2019-11-13T18:44:54.215Z",
			"journeyStepTypeText": "Visited Website"
		},
		{
			"journeyStepTypeId": "9223372036854775807",
			"timestamp": "2019-11-13T18:45:24.085Z",
			"journeyStepTypeText": "Submitted incomplete form"
		},
		{
			"journeyStepTypeId": "9223372036854775807",
			"timestamp": "2019-11-13T18:47:17.420Z",
			"journeyStepTypeText": "Visited Website"
		},
		{
			"journeyStepTypeId": "9223372036854775807",
			"timestamp": "2019-11-18T14:06:40.052Z",
			"journeyStepTypeText": "Visited Website"
		},
		{
			"journeyStepTypeId": "9223372036854775807",
			"timestamp": "2019-11-18T14:07:56.022Z",
			"journeyStepTypeText": "Visited Website"
		},
		{
			"journeyStepTypeId": "9223372036854775807",
			"timestamp": "2019-11-18T14:07:56.262Z",
			"journeyStepTypeText": "Submitted incomplete form"
		}
	]
}

Kitewheel ID Manager#Manage Deleted Journey Steps and Interaction Types

Journey Steps and Interaction Types, once deleted, will render the said node in the associated graphs and journey map into a ghost node. You can delete a journey step and interaction types in its respective areas: Delete a Journey Step and Delete an Interaction Type