In post 1 of 4 we talked about getting started with Optimizely Experimentations on Commerce.
I have taken David’s original experiments project, pushed a version to my GitHub repository and added some updates that may be helpful for some others working with Commerce applications.
In this post I’ll discuss some of the specifics around this.
The Github repository is available:
johnnymullaney/Optimizely-Experiments (github.com)
Experiment Tracking Service
The foundation experiments code base does a really nice job of minimising library dependencies by using EPiServer Tracking to intercept the payload and send tracking events to Optimizely.
My situation was a little different. Visitor Intelligence is obsolete since the Zaius CDP acquisition .
I decided to add the EPiServer.Commerce.Core library as a dependency to the project. This allowed me to write a Tracking Service class that could be easily called from the main application.
Page View Tracking
To improve maintainability in you web application project, you can create a page view tracking attribute like below. The code below could easily be extended to CMS:
public class ExperimentPageViewTrackingActionFilter : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
base.OnResultExecuting(filterContext);
var viewResult = filterContext.Result as ViewResult;
if (viewResult == null)
{
return;
}
var experimentTrackingService = ServiceLocator.Current.GetInstance<ITrackingService>();
var currentLanguage = ServiceLocator.Current.GetInstance<ICurrentLanguage>();
var httpContext = new HttpContextWrapper(HttpContext.Current);
if (viewResult.Model is ProductListingPageViewModel listingPageViewModel)
{
experimentTrackingService.TrackProductListingEvent(httpContext, listingPageViewModel.CurrentPage.Name, currentLanguage.GetCurrentLanguage());
}
// check for Commerce Page types
if (viewResult.Model is ProductDetailPageViewModel)
{
experimentTrackingService.TrackProductPageView(httpContext, currentLanguage.GetCurrentLanguage());
}
}
}
Tracking User Interactions
User Interactions like Adding to Cart and Creating an Order can easily be tracked using the following code snippets
_experimentTrackingService.TrackOrderEvent(HttpContext, cart, _currentLanguage);
_experimentTrackingService.TrackBasketEvent(HttpContext, lineItem, _currentCurrency, _currentLanguage);
Bot Filtering
Bot Filtering will exclude tracking events triggered from bots in your reports. Although the capability to filter these requests is not included in the free Rollouts plan, it’s a good to be extend your integration so it can easilt be turned on in future.
Optimizely’s documentation specifies that you should pass the reserved $opt_user_agent
attribute in the Track, Activate, Is Feature Enabled, and Get Enabled Features functions.
How to filter out bots – Optimizely Full Stack
To enable bot filtering capabilties, I made the following update to the User Retiever class which generates the user context sent on each tracking request:
Next Post
In the next post in the series, we’ll use the Experiments project to execute a simple experiment and discuss the impact of that experiment in a real world example.
3 thoughts on “My Experience with Optimizely Fullstack (via Rollouts) – 2 of 4”