Microsoft Application Insights JavaScript SDK - Click Analytics Plugin
Click Analytics Plugin for the Application Insights Javascript SDK, enables automatic tracking of the click events on web pages based on data-*
meta tags.
This plugin uses the data-*
global attributes to capture the click events and populate telemetry data.
How to effectively use the plugin
-
Telemetry data generated from the click events are stored as customEvents
in the Application Insights section of the Azure portal.
-
The name
of the customEvent is populated based on the following rules:
-
The id
provided in the data-*-id
will be used as the customEvent name. For example, if the clicked HTML element has the attribute "data-sample-id"="button1", then "button1" will be the customEvent name.
-
If no such attribute exists and if the useDefaultContentNameOrId
is set to true
in the configuration, then the clicked element's HTML attribute id
or content name of the element will be used as the customEvent name. If both id
and content name are present, precedence is given to id
.
-
If useDefaultContentNameOrId
is false, then the customEvent name will be "not_specified".
[!TIP]
Our recommendations is to set useDefaultContentNameOrId
to true for generating meaningful data.
-
parentDataTag
does two things:
-
If this tag is present, the plugin will fetch the data-*
attributes and values from all the parent HTML elements of the clicked element.
-
To improve efficiency, the plugin uses this tag as a flag, when encountered it will stop itself from further processing the DOM (Document Object Model) upwards.
[!CAUTION]
Once parentDataTag
is used, the SDK will begin looking for parent tags across your entire application and not just the HTML element where you used it.
-
customDataPrefix
provided by the user should always start with data-
, for example data-sample-
. In HTML the data-*
global attributes form a class of attributes called custom data attributes, that allow proprietary information to be exchanged between the HTML and its DOM representation by scripts. Older browsers (Internet Explorer, Safari) will drop attributes that it doesn't understand, unless they start with data-
.
The *
in data-*
may be replaced by any name following the production rule of XML names with the following restrictions:
- The name must not start with "xml", whatever case is used for these letters.
- The name must not contain any semicolon (U+003A).
- The name must not contain capital letters.
What data does the plugin collect
The following are some of the key properties captured by default when the plugin is enabled:
Custom Event Properties
Name | Description | Sample |
---|
name | The name of the customEvent. More info on how this is populated is shown here. | About |
itemType | Type of event. | customEvent |
sdkVersion | version of Application Insights SDK along with click plugin | javascript:2.6.2_ClickPlugin2.6.2 |
Custom Dimensions
Name | Description | Sample |
---|
actionType | Action type that caused the click event. Can be left-click or right-click. | CL |
baseTypeSource | Base Type source of the custom event. | ClickEvent |
clickCoordinates | Coordinates where the click event is triggered. | 659X47 |
content | Placeholder to store additional data-* attributes and values. | [{sample1:value1, sample2:value2}] |
pageName | Title of the page where the click event is triggered. | Sample Title |
parentId | Id or name of the parent element | navbarContainer |
Custom Measurements
Name | Description | Sample |
---|
timeToAction | Time taken in millisecs for the user to click the element since initial page load | 87407 |
Getting Started
NPM Setup (ignore if using Snippet Setup)
Install npm package:
npm install --save @microsoft/applicationinsights-clickanalytics-js @microsoft/applicationinsights-web
import { ApplicationInsights } from '@microsoft/applicationinsights-web';
import { ClickAnalyticsPlugin } from '@microsoft/applicationinsights-clickanalytics-js';
const clickPluginInstance = new ClickAnalyticsPlugin();
const clickPluginConfig = {
autoCapture: true
};
const configObj = {
connectionString: 'YOUR_CONNECTION_STRING',
extensions: [clickPluginInstance],
extensionConfig: {
[clickPluginInstance.identifier]: clickPluginConfig
},
};
const appInsights = new ApplicationInsights({ config: configObj });
appInsights.loadAppInsights();
Snippet Setup (ignore if using NPM setup)
<script type="text/javascript" src="https://js.monitor.azure.com/scripts/b/ext/ai.clck.2.6.2.min.js"></script>
<script type="text/javascript">
var clickPluginInstance = new Microsoft.ApplicationInsights.ClickAnalyticsPlugin();
// Click Analytics configuration
var clickPluginConfig = {
autoCapture : true,
dataTags: {
useDefaultContentNameOrId: true
}
}
// Application Insights Configuration
var configObj = {
connectionString: 'YOUR CONNECTION STRING",
extensions: [
clickPluginInstance
],
extensionConfig: {
[clickPluginInstance.identifier] : clickPluginConfig
},
};
// Application Insights Snippet code
!function(T,l,y){}(window,document,{
src: "https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js",
crossOrigin: "anonymous",
cfg: configObj
});
</script>
Configuration
Name | Type | Default | Description |
---|
autoCapture | boolean | true | Automatic capture configuration. |
callback | IValueCallback | null | Callbacks configuration. |
pageTags | string | null | Page tags. |
dataTags | ICustomDataTags | null | Custom Data Tags provided to override default tags used to capture click data. |
urlCollectHash | boolean | false | Enables the logging of values after a "#" character of the URL. |
urlCollectQuery | boolean | false | Enables the logging of the query string of the URL. |
behaviorValidator | Function | null | Callback function to use for the data-*-bhvr value validation. For more information, go to behaviorValidator section. |
defaultRightClickBhvr | string (or) number | '' | Default Behavior value when Right Click event has occurred. This value will be overridden if the element has the data-*-bhvr attribute. |
dropInvalidEvents | boolean | false | Flag to drop events that do not have useful click data. |
IValueCallback
Name | Type | Default | Description |
---|
pageName | Function | null | Function to override the default pageName capturing behavior. |
pageActionPageTags | Function | null | A callback function to augment the default pageTags collected during pageAction event. |
contentName | Function | null | A callback function to populate customized contentName. |
ICustomDataTags
Name | Type | Default | Default Tag to Use in HTML | Description |
---|
useDefaultContentNameOrId | boolean | false | N/A | Collects standard HTML attribute for contentName when a particular element is not tagged with default customDataPrefix or when customDataPrefix is not provided by user. |
customDataPrefix | string | data- | data-* | Automatic capture content name and value of elements that are tagged with provided prefix. For example, data-*-id , data-<yourcustomattribute> can be used in the HTML tags. |
aiBlobAttributeTag | string | ai-blob | data-ai-blob | Plugin supports a JSON blob attribute instead of individual data-* attributes. |
metaDataPrefix | string | null | N/A | Automatic capture HTML Head's meta element name and content with provided prefix when capture. For example, custom- can be used in the HTML meta tag. |
captureAllMetaDataContent | boolean | false | N/A | Automatic capture all HTML Head's meta element names and content. Default is false. If enabled this will override provided metaDataPrefix. |
parentDataTag | string | null | N/A | Stops traversing up the DOM to capture content name and value of elements when encountered with this tag. For example, data-<yourparentDataTag> can be used in the HTML tags. |
dntDataTag | string | ai-dnt | data-ai-dnt | HTML elements with this attribute will be ignored by the plugin for capturing telemetry data. |
behaviorValidator
The behaviorValidator functions automatically checks that tagged behaviors in code conform to a pre-defined list. This ensures tagged behaviors are consistent with your enterprise's established taxonomy. It is not required or expected that most Azure Monitor customers will use this, but it's available for advanced scenarios. There are three different behaviorValidator callback functions exposed as part of this extension. However, users can use their own callback functions if the exposed functions do not solve your requirement. The intent is to bring your own behaviors data structure, the plugin uses this validator function while extracting the behaviors from the data tags.
Name | Description |
---|
BehaviorValueValidator | Use this callback function if your behaviors data structure is an array of strings. |
BehaviorMapValidator | Use this callback function if your behaviors data structure is a dictionary. |
BehaviorEnumValidator | Use this callback function if your behaviors data structure is an Enum. |
Sample usage with behaviorValidator
var clickPlugin = Microsoft.ApplicationInsights.ClickAnalyticsPlugin;
var clickPluginInstance = new clickPlugin();
var behaviorMap = {
UNDEFINED: 0,
NAVIGATIONBACK: 1,
NAVIGATION: 2,
NAVIGATIONFORWARD: 3,
APPLY: 4,
REMOVE: 5,
SORT: 6,
EXPAND: 7,
REDUCE: 8,
CONTEXTMENU: 9,
TAB: 10,
COPY: 11,
EXPERIMENTATION: 12,
PRINT: 13,
SHOW: 14,
HIDE: 15,
MAXIMIZE: 16,
MINIMIZE: 17,
BACKBUTTON: 18,
STARTPROCESS: 20,
PROCESSCHECKPOINT: 21,
COMPLETEPROCESS: 22,
SCENARIOCANCEL: 23,
DOWNLOADCOMMIT: 40,
DOWNLOAD: 41,
SEARCHAUTOCOMPLETE: 60,
SEARCH: 61,
SEARCHINITIATE: 62,
TEXTBOXINPUT: 63,
VIEWCART: 82,
ADDWISHLIST: 83,
FINDSTORE: 84,
CHECKOUT: 85,
REMOVEFROMCART: 86,
PURCHASECOMPLETE: 87,
VIEWCHECKOUTPAGE: 88,
VIEWCARTPAGE: 89,
VIEWPDP: 90,
UPDATEITEMQUANTITY: 91,
INTENTTOBUY: 92,
PUSHTOINSTALL: 93,
SIGNIN: 100,
SIGNOUT: 101,
SOCIALSHARE: 120,
SOCIALLIKE: 121,
SOCIALREPLY: 122,
CALL: 123,
EMAIL: 124,
COMMUNITY: 125,
VOTE: 140,
SURVEYCHECKPOINT: 145,
REGISTRATIONINITIATE: 161,
REGISTRATIONCOMPLETE: 162,
CANCELSUBSCRIPTION: 163,
RENEWSUBSCRIPTION: 164,
CHANGESUBSCRIPTION: 165,
REGISTRATIONCHECKPOINT: 166,
CHATINITIATE: 180,
CHATEND: 181,
TRIALSIGNUP: 200,
TRIALINITIATE: 201,
SIGNUP: 210,
FREESIGNUP: 211,
PARTNERREFERRAL: 220,
LEARNLOWFUNNEL: 230,
LEARNHIGHFUNNEL: 231,
SHOPPINGINTENT: 232,
VIDEOSTART: 240,
VIDEOPAUSE: 241,
VIDEOCONTINUE: 242,
VIDEOCHECKPOINT: 243,
VIDEOJUMP: 244,
VIDEOCOMPLETE: 245,
VIDEOBUFFERING: 246,
VIDEOERROR: 247,
VIDEOMUTE: 248,
VIDEOUNMUTE: 249,
VIDEOFULLSCREEN: 250,
VIDEOUNFULLSCREEN: 251,
VIDEOREPLAY: 252,
VIDEOPLAYERLOAD: 253,
VIDEOPLAYERCLICK: 254,
VIDEOVOLUMECONTROL: 255,
VIDEOAUDIOTRACKCONTROL: 256,
VIDEOCLOSEDCAPTIONCONTROL: 257,
VIDEOCLOSEDCAPTIONSTYLE: 258,
VIDEORESOLUTIONCONTROL: 259,
ADBUFFERING: 283,
ADERROR: 284,
ADSTART: 285,
ADCOMPLETE: 286,
ADSKIP: 287,
ADTIMEOUT: 288,
OTHER: 300
};
var configObj = {
connectionString: "YOUR CONNECTION STRING",
extensions: [clickPluginInstance],
extensionConfig: {
[clickPluginInstance.identifier]: {
behaviorValidator: Microsoft.ApplicationInsights.BehaviorMapValidator(behaviorMap),
defaultRightClickBhvr: 9
},
},
};
var appInsights = new Microsoft.ApplicationInsights.ApplicationInsights({
config: configObj
});
appInsights.loadAppInsights();
Sample app
Simple web app with Click Analytics Auto-collection Plugin enabled.
Contributing
This project welcomes contributions and suggestions. Most contributions require you to
agree to a Contributor License Agreement (CLA) declaring that you have the right to,
and actually do, grant us the rights to use your contribution. For details, visit
https://cla.microsoft.com.
When you submit a pull request, a CLA-bot will automatically determine whether you need
to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the
instructions provided by the bot. You will only need to do this once across all repositories using our CLA.
This project has adopted the Microsoft Open Source Code of Conduct.
For more information see the Code of Conduct FAQ
or contact opencode@microsoft.com with any additional questions or comments.
Data Collection
As this SDK is designed to enable applications to perform data collection which is sent to the Microsoft collection endpoints the following is required to identify our privacy statement.
The software may collect information about you and your use of the software and send it to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may turn off the telemetry as described in the repository. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with a copy of Microsoft’s privacy statement. Our privacy statement is located at https://go.microsoft.com/fwlink/?LinkID=824704. You can learn more about data collection and use in the help documentation and our privacy statement. Your use of the software operates as your consent to these practices.
Trademarks
This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft’s Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party’s policies.
License
MIT