Kustomer is a modern customer engagement platform designed for enterprises. It gives you a holistic view of your users and customer base, lets you provide best-in-class support, and engage with your customers through meaningful interactions.

You can now send your event data directly to Kustomer via RudderStack.

Find the open source transformer code for this destination in the GitHub repository.

Getting started

Before configuring your source and destination on the RudderStack, verify if the platform you are sending the events from is supported by Kustomer by referring to the following table:

Connection ModeWebMobileServer
Device mode---
Cloud modeSupportedSupportedSupported
To know more about the difference between cloud mode and device mode in RudderStack, refer to the RudderStack Connection Modes guide.

Once you have confirmed that the platform supports sending events to Kustomer, perform the steps below:

kustomer v3 config Configuration Settings for Kustomer

Configuration Settings

To successfully configure Kustomer as a destination, you will need to configure the following settings:

  • API Key: Your API Key is an unique key generated for your Kustomer account. You can find it under Settings by navigating to Security - API Keys.
  • Enable advanced Kustomer transformations: RudderStack handles the payload nuances for Kustomer if this option is enabled. Check the Advanced Kustomer Transformations section below for more information on this setting.
  • Add email as Tracking identity: If this setting is enabled, Rudderstack adds the email as an identifier when making track/page/screen calls to Kustomer.
  • Disable email as a Tracking property: If this option is enabled, Rudderstack will not add the email as a tracking property for the track/page/screen calls made to Kustomer.
  • Enable generic title for Page events: Enable this option to track all the page events with a generic name Web-Page-Viewed.
  • Enable generic title for Screen events: Enable this option to track all the screen events with a generic name Screen-Viewed.

The relevant roles (org.permission.customer.create, org.permission.customer.read, org.permission.customer.update, org.tracking) are required for an API Key to successfully access the Kustomer endpoints. Check the Kustomer docs for more information on how to do this.

All server-side destination requests require either a anonymousId or a userId in the payload.

Kustomer Payload Restrictions

For page, screen, and track events being sent to Kustomer, there are restrictions on some of the components of the event payload.

Event Name

The event name sent in the page, screen, and track events cannot include any spaces.

Event Name ExampleResult
Cart ViewedError
Cart-ViewedSuccessful
Cart_ViewedSuccessful

Meta Object

For page, screen, and track events, all of the data in the properties parameter will be sent to the Kustomer API through the meta object. However, there are certain restrictions in place on the key-value pairs within the meta object.

String Values

For the key-value pairs where the value is of the string type, the key must not end with the characters Num or At.

String Key Name ExampleResult
{ product_nameNum: 'UNO' }Error
{ product_nameAt: 'UNO' }Not Semantically Correct
{ product_name: 'UNO' }Successful

Date-time String Values

For key-value pairs where the value has a type of date-time string, the key must end with the characters At.

Date-time String Key Name ExampleResult
{ purchased: '2020-02-02T00:23:09.544Z' }Not Semantically Correct
{ purchasedAt: '2020-02-02T00:23:09.544Z' }Successful

Number Values

For key-value pairs where the value has a type of number, the key must end with the characters Num.

Number Key Name ExampleResult
{ revenue: 300 }Error
{ revenueNum: 30 }Successful

Object or Array Values

The values for all keys in the meta object must be flat, meaning they cannot be nested objects or arrays.

If you are using an advanced transformation, RudderStack will handle the nested objects, arrays, and Boolean and parse them to strings for compatibility with Kustomer.

Value ExampleResult
{ items: { price: 32, name: 'dinner plate' } }Error
{ items: [ 'dinner plate', 'fork', 'spoon' ] }Error

For track, page and screen events, Kustomer supports only number, string,and string with date-time (ISO) format for custom event properties. Please refer to the official Kustomer Documentation for more information on this.

Advanced Kustomer Transformations

When the Advanced Kustomer Transformation option is enabled, RudderStack will update the payload as per Kustomer's requirements.

The following behaviour is expected:

Event NameWith Advanced Transformation EnabledTransformed?
Order CompletedOrder-CompletedYes
OrderCompletedOrderCompletedNo
Order-CompletedOrder-CompletedNo

The event names with whitespaces will be replaced with -.

Event PropertyValueWith Advanced Transformation EnabledTransformed?
income500incomeNumYes
income Num500income-NumYes
income-Num500income-NumNo
income_Num500income_NumNo

The event properties with numeric values will be appended with Num if not already present, while the whitespaces will be replaced with -.

Event PropertyValueWith Advanced Transformation EnabledTransformed?
created'2020-02-02T00:23:09.544Z'createdAtYes
created At'2020-02-02T00:23:09.544Z'created-AtYes
created-At'2020-02-02T00:23:09.544Z'created-AtNo
created_At'2020-02-02T00:23:09.544Z'created_AtNo

The event properties with the date-time string values will be appended with At if not already present, while the whitespaces will be replaced with a -.

Event NameValueWith Advanced Transformation EnabledTransformed?
Cart NameTest CartCart-NameYes
CartNameTest CartCartNameNo
Cart-NameTest CartCart-NameNo

For the event properties with string values, the whitespaces will be replaced with -.

Page

The page call allows you to record information whenever a user sees a web page, along with its associated properties.

When you send a page event , RudderStack sends that event to Kustomer as a "Web Page Viewed Page Name event.

An example of a page call is shown below:

rudderanalytics.page("Cart", "Cart-Viewed", {
path: "/cart",
referrer: "test.com",
search: "term",
title: "test_item",
url: "http://test.in",
kustomerSessionId: "kSession",
kustomerTrackingId: "ktracking",
})

The event name must not include any spaces or the event will fail.

If the kustomerSessionId or kustomerTrackingId is included in properties, RudderStack will map it as sessionId and trackingId for that page event as per the Kustomer Tracking Event Reference.

Screen

The screen method allows you to record whenever a user sees the mobile screen, along with any associated optional properties. This call is similar to the page call, but is exclusive to your mobile device.

When you send a page event , RudderStack sends that event to Kustomer as a "Screen Viewed Screen Name event.

A sample screen call looks like the following code snippet:

[[RSClient sharedInstance] screen:@"Sample-Screen-Name" properties:@{@"prop_key" : @"prop_value"}];

The event name must not include any spaces or the event will fail.

If the kustomerSessionId or kustomerTrackingId is included in properties, RudderStack will map it as sessionId and trackingId for the page event as per the Kustomer Tracking Event Reference.

Track

The track call allows you to capture any action that the user might perform, along with the properties associated with that action. Each action is considered to be an event. It is similar to screen event, and the user is by default associated with userId or anonymousId.

A sample track call looks like the following:

rudderanalytics.track("Checked-Out", {
Clicked_Rush_delivery_Button: true,
total_value: 2000,
revenue: 2000,
})

The event name must not include any spaces or the event will fail.

In the above snippet, RudderStack captures the information related to the Checked Out event along with any additional information about that event; in this case, the details of the Checked out event.

If the kustomerSessionId or kustomerTrackingId is included in properties, RudderStack will map it as sessionId and trackingId for the page event as per the Kustomer Tracking Event Reference.

For track, page and screen events, Kustomer supports only number, string,and string with date-time format for custom event properties. Refer to the official Kustomer Documentation for more information on this.

Identify

The identify call lets you associate a user with their actions and capture all the relevant traits about them. This information includes unique userid as well as any optional information such as name, email, etc.

A number of Rudderstack's special traits map to Kustomer’s standard user profile fields, as shown in the table below.

KustomerRudderstackSupported Type
namename or firstName and lastNamestring
externalIduserId or anonymousIdstring
usernameuserNamestring
companycompanystring
signedUpAtcreatedAtstring date-time
lastActivityAtlastActivityAtstring date-time
lastCustomerActivityAtlastCustomerActivityAtstring date-time
lastSeenAtlastSeenAtstring date-time
avatarUrlavatarstring
gendergenderstring
tagstagsarray
emailsemails or emailarray or string
phonesphones or phonearray or string
socialssocialsarray
birthdayAtbirthday or dobstring date-time
urlswebsitestring
locationsaddressstring or object
localecontext.localestring
importedAtimportedAtstring date-time
customcustomObjectobject
sentimentsentimentobject
whatsappswhatsappsarray of object
facebookIdsfacebookIdsarray of object
instagramIdsinstagramIdsarray of object
timeZonetimeZonestring
defaultLangdefaultLanguagestring
revrevnumber

For more information on the supported traits, check out the official Kustomer Documentation

A sample identify call looks like the following:

rudderanalytics.identify("userId", {
email: "user@website.com",
phone: "phone",
birthday: "birthday",
name: "full name",
address: {
street: "street",
city: "city",
state: "state",
postalCode: "zip",
},
userName: "userName",
company: "company",
signedUpAt: "date-time",
lastActivityAt: "date-time",
lastCustomerActivityAt: "date-time",
lastSeenAt: "date-time",
avatar: "avatar-url",
gender: "male",
tags: ["tag1", "tag2"],
locale: "en_US",
website: "www.website.com",
socials: [
{
verified: true,
userid: "100",
type: "twitter",
username: "@twiiterHandle",
url: "http://twitter.com/twitterhandle",
},
{
verified: false,
userid: "200",
type: "facebook",
username: "facebookhandle",
url: "http://facebook.com/facebookhandle",
},
],
})

An identify call with multiple emails, and phones along with an address with string value looks like the following:

rudderanalytics.identify("userId", {
emails: [
{
"type": "home",
"email": "home@email.com"
},
{
"type": "work",
"email": "work@email.com"
}
],
phones: [
{
"type": "home",
"phone": "+188890987"
},
{
"type": "work",
"phone": "+1676330984"
}
],
birthday: "21-02-1988",
name: "Name Surname",
address: "street city state zip"
userName: "userName",
company: "company"
locale: "en_US",
website: "www.website.com"
});

If a customer already exists, the new values will be updated for that user. RudderStack automatically maps the userId (or anoymousId) to the customer's externalId in Kustomer.

If you choose to send Customer's id in context.externalId [{type:kustomerId, id:uniqueId}]) RudderStack will skip looking-up the customer using email/userId/anonymousIdand directly update the user information for thatid with the new attributes.

Contact us

If you come across any issues while configuring Kustomer with RudderStack, please feel free to contact us. You can also start a conversation in our Slack community; we will be happy to talk to you!

Contents