> For the complete documentation index, see [llms.txt](https://developer.harness.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.harness.io/feature-management-experimentation/management-and-administration/integrations/fullstory.md).

# FullStory

### Harness FME + FullStory <a href="#harness-fme-fullstory" id="harness-fme-fullstory"></a>

FullStory is a digital experience analytics platform that records users’ sessions for playback and analysis. FullStory events allow FullStory customers to add additional information to a session while it is being recorded. Harness FME leverages FullStory events to report feature flag impressions to the FullStory session, and as a source of events for measurement and experimentation in FME (there is a section below for both types of integration).

Follow the guide for your type of integration to proceed with installation. Segments integration deals with passing FME impressions to FullStory sessions. Events integration covers passing FullStory events to Harness FME for use in measurement and experimentation.

### Prerequisites <a href="#prerequisites" id="prerequisites"></a>

To connect FullStory with Harness FME, you need:

* FullStory API recording JavaScript installed
* FME JavaScript SDK 10.12.1 or later installed
* AWS lambda experience recommended
* Node.js developer experience recommended

### Integrating FullStory impressions into Harness FME <a href="#integrating-fullstory-impressions-into-harness-fme" id="integrating-fullstory-impressions-into-harness-fme"></a>

The following sections explain how to integrate FullStory impressions into Harness FME.

#### Send FME impressions as FullStory custom events <a href="#send-fme-impressions-as-fullstory-custom-events" id="send-fme-impressions-as-fullstory-custom-events"></a>

The Harness FME + FullStory integration uses out-of-the-box features of both products.

![](/files/i1dCFLz8l2TzQkYCNqrP)

1. Associate the FullStory recording with the same key used for FME `getTreatment` evaluations by calling FS.identify. In the listing above, the user\_id is shared by the FS.identify API call and the FME SDK configuration key (shown in blue).
2. Add a custom impression listener to report FME impressions to FullStory’s custom events API. As highlighted in red above, the FullStory custom event API is called for a “split\_evaluation” event, passing the entire impression data as properties for that event. The impression data includes the name of the feature flag evaluated and the treatment the user received.

If you’re not familiar with the FME JavaScript SDK configuration, go to [JavaScript SDK documentation](/feature-management-experimentation/new-to-fme/sdks-and-customer-deployed-components/client-side-sdks/client-side-standard-sdks/javascript-sdk.md) for more information.

#### Verify split\_evaluation events are arriving in FullStory <a href="#verify-splitevaluation-events-are-arriving-in-fullstory" id="verify-splitevaluation-events-are-arriving-in-fullstory"></a>

To verify events are arriving in FullStory, do the following:

1. On the session playback screen, look for the split\_evaluation event.

   ![](/files/5Osa4LyD8rAOr03JgbOp)
2. If you have many events, search for split\_evaluation using the **Filter events** function.

   ![](/files/sR7LdcPBZYZPMghIaeAR)

#### Create a segment based on a treatment received <a href="#create-a-segment-based-on-a-treatment-received" id="create-a-segment-based-on-a-treatment-received"></a>

Once you have split\_evaluation events, create a new FullStory segment that contains all the users who received a particular treatment from a given feature flag. Do the following:

1. From the FullStory home page, click to create a new segment.

   ![](/files/RfAbitcGZYZygfW1FwV5)
2. Under API events, click **split\_evaluation**.

   ![](/files/NR9vS5hDqHXhe4mzdO4G)
3. Build an Event filter for any feature flag and treatment you’ve integrated.

   ![](/files/kk4rLGpTIocwNNC2UryA)

In this example, the segment shows sessions where there is a getTreatment call to “multivariant\_demo” and the user received “v3” as their treatment.

![](/files/LzANHX0Rui5h7MuilmCp)

You can now play back and review specific customer experiences. Every session in this playlist showed v3 of the multivariant\_demo feature flag.

Knowing which treatment a user saw for a particular feature flag is crucial data for evaluating their experience with FullStory. This simple integration makes that data available to analyze a single user’s session and to create segments for overall comparison of behavior between treatment groups.

### Integrating FullStory events into Harness FME <a href="#integrating-fullstory-events-into-harness-fme" id="integrating-fullstory-events-into-harness-fme"></a>

Send FullStory events to Harness FME to use in experimentation. FullStory events are received from a FullStory webhook, transformed, and reported to FME. This lets FME share the event data channel that may already be in place for FullStory.

Using the FullStory events webhook, you can pass FullStory events to FME to use for measurement, alerts, and experimentation. Events are the result of an FS.event() call from the FullStory SDK, for example:

![](/files/dooaIMM1VmlOd67p7dYz)

This transforms into the corresponding FME event:

![](/files/7zcSRMX9DpiNX4hd6Sh4)

{% hint style="info" %}
**NOTE**

If you want an FME value, you must put the value in a split{} section, as shown in the example above.
{% endhint %}

```json
split: {
  value: 42
}, // etc.
```

### Installing the FullStory events webhook <a href="#installing-the-fullstory-events-webhook" id="installing-the-fullstory-events-webhook"></a>

To install the FullStory events webhook, do the following:

1. Clone the [fullstory events repository](https://github.com/splitio/fullstory-events-2-split) in an empty directory.
2. Inside the directory, copy your API keys (carefully) into files with the following names:

   * SPLIT\_API\_KEY (server-side API key for your desired environment)
   * FULLSTORY\_API\_KEY (I used admin)\ <br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>IMPORTANT</strong></p><p>The files must precisely have these names. An extra space at the end of the line or empty lines after it could cause issues later.</p></div>
3. From this same directory:

{% hint style="info" %}
**BREW**

**If you have brew installed, you can perform a "brew install npm" on OSX. Follow the instructions to install npm for other operating systems described in** [**Downloading and installing Node.js and npm**](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)**. The fullstory.zip should include the index.js, the key files, and a full node\_modules directory.**
{% endhint %}

### Installing the FullStory events webhook <a href="#installing-the-fullstory-events-webhook" id="installing-the-fullstory-events-webhook"></a>

A single node.js lambda does the work for the integration, using only the filesystem (for API keys) and the Axios HTTP client. The integration makes two cheap API calls per FullStory event. To install a FullStory webhook in AWS, do the following:

1. Create a new lambda called fullstory using the Node.js language.
2. Upload fullstory.zip to the Code screen of your AWS lambda.
3. Give the lambda a function URL to POST to it. Enable CORS and give the Allow Headers field a \*.
4. Provide the function URL to the FullStory events webhook.
5. Use the FullStory webhook test button to make sure you get back a 200 response from your lambda.

{% hint style="info" %}
**TESTING**

**When testing, it can sometimes take 5 to 10 minutes for FS.event calls to propagate to Harness FME. Try reloading your page after a minute to accelerate the event publishing.**
{% endhint %}

### Debugging <a href="#debugging" id="debugging"></a>

Use [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) to look at inbound events and check they're properly handled. Some events take time to propagate, but CloudWatch gives early indication of trouble.

### About this integration <a href="#about-this-integration" id="about-this-integration"></a>

This is a third-party integration that has been tested by the Harness FME team. Harness does not own or maintain this integration. For more information, contact the [contributor](mailto:david.martin@split.io).

If you’d like a demo of Harness FME or help to implement any of our integrations, contact <support@split.io>.
