> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://contentful.com/developers/docs/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://contentful.com/_mcp/server. # Segment plugin > Send Ninetailed Experience views as Twilio Segment `track` events. Segment is a powerful customer data orchestration tool. This plugin allows you to send experience views to a Segment as [track](https://segment.com/docs/connections/spec/track/#properties) events via a connected [Analytics.js source](https://segment.com/docs/connections/sources/catalog/libraries/website/javascript/). ## Installation Install the dependency: #### npm ```bash npm install @ninetailed/experience.js-plugin-segment ``` #### yarn ```bash yarn add @ninetailed/experience.js-plugin-segment ``` Then, add the plugin to the instance: #### React, Next.js ```jsx import { NinetailedSegmentPlugin } from '@ninetailed/experience.js-plugin-segment' ``` ```jsx //... ``` #### Gatsby ```javascript plugins: [ // ... { resolve: `@ninetailed/experience.js-gatsby`, options: { // ... componentViewTrackingThreshold: 2000, // (Optional prop) Number, default = 2000 ninetailedPlugins: [ { resolve: `@ninetailed/experience.js-plugin-segment`, options: {} } ] } } ] ``` #### JavaScript ```javascript import { Ninetailed } from '@ninetailed/experience.js'; import { NinetailedSegmentPlugin } from '@ninetailed/experience.js-plugin-segment' export const ninetailed = new Ninetailed( { clientId: // Your client ID environment: // Your Ninetailed environment }, { plugins: [ new NinetailedSegmentPlugin() ], // Specify an amount of time (ms) that a component must be present in the viewport to register a component view componentViewTrackingThreshold: 2000, } ); ``` ## Timing configuration The Insights Plugin logs that a component has been seen only after the component has remained within the user's viewport for a specified amount of time (in milliseconds), determined by the value of the `componentViewTrackingThreshold` property on the Ninetailed instance (see code samples above). If the option is unspecified, the value defaults to `2000`. ## Default data layer properties Events sent from this plugin are named `nt_experience`. They are sent with five default parameters: | Parameters | Value Type | Value Description | | ---------------------------- | ---------- | ------------------------------------------ | | ninetailed\_experience | String | Experience ID of the experience | | ninetailed\_experience\_name | String | Title of the experience entry from the CMS | | ninetailed\_variant | String | "control", "variant 1", "variant 2", … | | ninetailed\_audience | String | CMS entry ID of the audience | | ninetailed\_component | String | CMS entry ID of the shown variant | ## Custom event properties You can also define your own variables to push to Segment by passing in a configuration object when instantiating the plugin. To do so, define a config object with a `template` property whose value is an object consisting of key-value pairs, where the key is the name of the property you want to add to the Segment track event and the value is a string of the desired variable value surrounded by double curly braces (`{{ }}`). ### Available properties | Property | Notes | | -------------------------- | ------------------------------------------------------------------------------------------------- | | experience.id | | | experience.type | `nt_experiment` or `nt_personalization` | | experience.name | | | experience.description | | | audience.id | `ALL_VISITORS` if not set | | audience.name | `All Visitors` if not set | | audience.description | | | selectedVariant | | | selectedVariant.YOUR\_PROP | Specify any property key from the selected experience variant | | selectedVariantIndex | 0, 1, 2, etc. | | selectedVariantSelector | "control", "variant 1", "variant 2", etc. This is a mapping of `selectedVariantIndex` from above. | ### Example custom use This example shows passing the human-readable name of an audience to a custom event property titled `ninetailed_audience_name`. The default event properties are also pushed. #### React, Next.js ```jsx //... ``` #### Gatsby ```javascript plugins: [ // ... { resolve: `@ninetailed/experience.js-gatsby`, options: { // ... componentViewTrackingThreshold: 2000, ninetailedPlugins: [ { resolve: `@ninetailed/experience.js-plugin-segment`, options: { template: { ninetailed_audience_name: '{{ audience.name }}', } } } ] } } ] ``` #### JavaScript ```javascript import { Ninetailed } from '@ninetailed/experience.js'; import { NinetailedSegmentPlugin } from '@ninetailed/experience.js-plugin-segment' export const ninetailed = new Ninetailed( { clientId: // Your client ID environment: // Your Ninetailed environment }, { plugins: [ new NinetailedSegmentPlugin({ template: { ninetailed_audience_name: '{{ audience.name }}', }, }) ], // Specify an amount of time (ms) that a component must be present in the viewport to register a component view componentViewTrackingThreshold: 2000, } ); ``` > Send Ninetailed Experience views as Twilio Segment `track` events.