FunnelConnect Service

Ident - Identity Resolution

The Ident call creates or links a user profile with a provided customer identifier. If a visitor profile existed before, it either merges or upgrades it to a customer profile. It can also switch the context of the device cookie from one customer profile to another in case the user changes identity from one login to another.

The Ident call is usually only fired when there is a customer identifier available and once per session.

The Ident call JS and pipeline configuration requires information about the customer idenifier, which is always of the type string. The JS configuration also needs to know how it can obtain the customer identifier, for example from session/local storage or browser data layer.

While the customer identifier query string parameter names can be freely defined in the pipeline, here some suggestions:

Name Description
fc_hemail Hashed (sha256 plus salt) email
fc_cid Customer ID
fc_hcid Hashed (sha256 plus salt) Customer ID
fc_hmsisdn Hashed (sha256 plus salt) mobile phone number

All JS and pipeline configuration is done by Teavaro ClientSDKs support team.

Example Request

curl -v -X GET 'https://funnelconnect.brand-demo.com/op/brand-demo-ident/ident?s2s=2&hemail=a684079545719bb06100288b8ad5c97b0d2223935beb42eda37abedd4b074aca'

Info - Profile Data

The Info call creates a visitor profile if none exists already. It also returns TargetData profile information as JSON, which is also stored in fcData local storage key.

Depending on the service use, the response will include the UMID, attributes and optionally marketing permissions and acknowledged notifications. Other TargetData profile information can be returned. Please contact your account mananager to discuss requirements.

The Info call is usually only fired once per session, but can also be fired on every page load or within defined period of time.

TargetData Visitor Profile

Example response also stored in fcData local storage key:

{
  "umid": "2a81077c-2a4b-4e6e-b578-b8870679f7a2",
  "state": 0,
  "permissions": {},
  "permissionsLastModification": {},
  "notificationHistory": [],
  "notificationStatus": {},
  "attributes": {
    "deviceName": "PC",
    "city": "London",
    "isp": "Amazon Data Services UK",
    "domainName": "amazon.com",
    "browserType": "BR",
    "region": "England",
    "mobileBrand": "",
    "cc": "GB",
    "osFamily": "Windows",
    "browserFamily": "Chrome"
  }
}

TargetData Customer Profile

Example response including permissions and acknowledged notifications, also stored in fcData local storage key:

{
  "umid": "c3641a83-8ea8-412f-b234-ea91cfaa3242",
  "state": 1,
  "permissions": {
    "LI-NBA": true,
    "TransactionData": true,
    "LI-OPT": true,
    "CustomerData": true,
    "LI-OM": true
  },
  "permissionsLastModification": {
    "LI-NBA": "2019-12-20T17:10:35.003Z",
    "TransactionData": "2020-09-18T11:51:00.684Z",
    "LI-OPT": "2019-12-20T17:10:35.003Z",
    "CustomerData": "2020-12-17T17:37:41.826Z",
    "LI-OM": "2020-04-21T13:30:58.064Z"
  },
  "notificationHistory": [
    {
      "name": "APP",
      "version": 1,
      "permissions": ["LI-OM", "LI-OPT", "LI-NBA"],
      "date": "2020-04-21T13:18:55.880Z"
    },
    {
      "name": "MAIN_PD",
      "version": 1,
      "permissions": ["LI-NBA"],
      "date": "2019-10-24T00:00:00Z"
    },
    {
      "name": "MAIN_P",
      "version": 1,
      "permissions": ["LI-OPT", "LI-OM"],
      "date": "2019-10-24T00:00:00Z"
    }
  ],
  "notificationStatus": {
    "LI-OM": true,
    "LI-OPT": true,
    "LI-NBA": true
  },
  "attributes": {
    "segment-1": "XXX",
    "segment-2": "YYY",
    "segment-3": "ZZZ",
    "deviceName": "PC",
    "city": "London",
    "isp": "Amazon Data Services UK",
    "domainName": "amazon.com",
    "browserType": "BR",
    "region": "England",
    "mobileBrand": "",
    "cc": "GB",
    "osFamily": "Windows",
    "browserFamily": "Chrome"
  }
}

Example Request

curl -v -X GET 'https://funnelconnect.brand-demo.com/op/brand-demo-info/info?out=json&permissions&notifications&attributes' \
  -H 'Cookie: umdid=NDcyNmQwYTgtOWQ4Ny00MDc5LTkwYmMtNjNhNTA2NGFhNzAwfGQ1YTNhYTc0LTMxZTItNDNlMi1hYjNjLTIwNDY5NjViMzg2OHww'

Track - Web Analytics

The Track call is normally fired on every page load, which is configurable. It provides web analytics information obtained from data layers, the visited page, referrer page, browser, and internet connection. Data is linked to the user’s active UMID and sent (streamed) to the Events database and Customer Data Store (CDS).

The Track call can be configured to obtain any data from available data layers. Configuration is handled in the client’s JS config set up by Teavaro ClientSDKs support team.

Example Request

curl -X POST 'https://funnelconnect.brand-demo.com/op/brand-demo-track/track' \
  -H 'Cookie: umdid=NDcyNmQwYTgtOWQ4Ny00MDc5LTkwYmMtNjNhNTA2NGFhNzAwfGQ1YTNhYTc0LTMxZTItNDNlMi1hYjNjLTIwNDY5NjViMzg2OHww' \
  --data-raw 'event_name=navigation&event_data=/product/marke-tsarine-caviar-50g/'

Data Layer Data Capture

Our library can capture data from 3rd party data layers, for example Google’s dataLayer or Tealium’s utaq data layer.

{
  "ROOT_VARIABLE": ["anyDataLayer1", "anyDataLayerN"],
  "SITE_VARIABLES": ["anyVariable1", "anyVariable2", "anyVariableN"],
  "EVENT_ATTRIBUTE_LIST": {
    //...
    "event_name" : ["attribute1, attribute2,", "attributeN"]
    //...
  }
}
  • ROOT_VARIABLE is used to define the name of the 3rd party dataLayer (multiple dataLayers are allowed).
  • SITE_VARIABLES defines the event names to be tracked.
  • EVENT_ATTRIBUTE_LIST enhance the tracking capabilities allowing tracking events formatted as an object. This allows us to capture events with a different format than previous key: value pairs.

Google / GA4 data layer example config:

{
  "ROOT_VARIABLE": ["dataLayer"],
  "SITE_VARIABLES": ["event_data", "page_url"],
  "EVENT_ATTRIBUTE_LIST": {
    "view_item": ["item_name", "price"],
    "add_to_cart": [
      "currency",
      "item_category",
      "item_category2",
      "item_category3",
      "item_category4",
      "item_category5",
      "item_brand",
      "item_id",
      "item_name",
      "item_list_id",
      "item_list_name",
      "coupon",
      "value"
    ]
  }
}

Tealium data layer example config:

{
  "ROOT_VARIABLE": ["utag:data"],
  "VARIABLES_DELIMITER": ":",
  "SITE_VARIABLES": ["event_data", "page_url"],
  "EVENT_ATTRIBUTE_LIST": {
    "view_item": ["item_name", "price"],
    "add_to_cart": [
      "currency",
      "item_category",
      "item_category2",
      "item_category3",
      "item_category4",
      "item_category5",
      "item_brand",
      "item_id",
      "item_name",
      "item_list_id",
      "item_list_name",
      "coupon",
      "value"
    ]
  }
}

It is possible to define a path inside the data layer to look for the variables as shown in utag:data. This tells the algorithm that the SITE_VARIABLES are located inside the data property, improving performance. In this case VARIABLES_DELIMITER is used when a specific path is defined for a data layer. It tells the algorithm which symbol to use to recursively navigate into the data layer.

Using umid as user_id in GA4

Our library can identify users in Google Analytics using umid. This allows us to create historic reports of users with no expiration date, whether they are logged in or not. To enable this just add the following configuration:

{
  "UMID_TO_DATALAYER_EVENTS": {
    "enabled": true,  
    "property_name": "custom_user_id"
  }
}

The enabled option allows us to control whether this feature is enabled or not. Using property_name we can use a different key for the umid in the Google dataLayer. If not provided the default value is user_id, as this name is recommended by Google. When enabled this event will be shown in the Google dataLayer:

dataLayer = [
  {
    // ...Google events
  },
  {
    "custom_user_id": "1k5jh9g3-73kj-k40j-975f-2c3ee62f70b3"
  },
  {
    // ...more Google events
  }
]

Data layer event listener

There may be situations when some events are programmatically pushed into the data layer after the Track call is fired, consequently, those events won’t be tracked.

To prevent this from happening there is an additional configuration that can be enabled to execute the Track call after every push event.

Client’s configuration file example:

const FC_CONF = {
    //...
    DISPATCH_DATALAYER_UPDATED_EVENT: true,
    //...
};

Every time a push listener event occur on each data layer defined in ROOT_VARIABLES, a Track call will be executed containing the recently pushed information.