Manoj Kumawat
Jun 1, 2022
(1 votes)

Working with product recommendations - Wishlist Recommendations

One of the useful features of Optmizely personalized contents is Product Recommendations. With Optimizely Product Recommendations, you can provide a personalized shopping experience for visitors to your e-commerce website. Personalization is based on website interaction such as order history, visitor profiles, and intelligent algorithms to suggest products of interest. A developer must first configure the tracking, personalization service, and recommendation widgets, then you can start working with Product Recommendations to define recommendations strategies using the Personalization Portal

A couple of days ago we integrated a widget for wishlist, Where users would see product recommendation based on their wishlist history. Below are the steps how you can do it step by step. This is the same configuration you can follow to create other widgets. 

Step 1 - Login to Personalization portal > Product Recommendations > Widgets > Create a new widget
For us this was wishlistWidget we needed on wishlist page. 

Step 2 - Configure the type of recommendations you would like to display on your website 
The algorithms are set to show Popular  only 3  recommendations. That way it would show us only 3 product recommendations.

Code > Wishlist > enable tracking 

private readonly TrackingDataFactory _trackingDataFactory;
private readonly ITrackingService _trackingService;
private readonly ServiceAccessor<IContentRouteHelper> _contentRouteHelperAccessor;

public async Task<TrackingResponseData> TrackWishlist(HttpContextBase httpContext)
      var trackingData = _trackingDataFactory.CreateWishListTrackingData(httpContext);

      return await InternalTrackAsync(trackingData, httpContext);

private async Task<TrackingResponseData> InternalTrackAsync(CommerceTrackingData commerceTrackingData, HttpContextBase httpContext)
	if (commerceTrackingData == null || httpContext == null)
		return null;

	var scope = _trackingDataFactory.GetCurrentTrackingScope();

	if (!string.IsNullOrEmpty(scope))
		return await _trackingService.TrackAsync(commerceTrackingData, httpContext, _contentRouteHelperAccessor().Content, scope);
		return await _trackingService.TrackAsync(commerceTrackingData, httpContext, _contentRouteHelperAccessor().Content);

Next > Get recommendations

using EPiServer.Personalization.Commerce.Tracking;

public static IEnumerable<Recommendation> GetRecommendations(this TrackingResponseData response, ReferenceConverter referenceConverter, string area) => response.GetRecommendationGroups(referenceConverter)
									.Where(x => (!string.IsNullOrEmpty(area) && x.Area.IsEqual(area)) 
									|| string.IsNullOrEmpty(area))
									.SelectMany(x => x.Recommendations);

This will fetch you configured recommendations on personlization portal. Similarly we can get recommendations wherever required. 

Here is the useful resource for enabling tracking for wishlist in commerce - 

Thank you for reading.

Jun 01, 2022


Please login to comment.
Latest blogs
Telemetry correlation for Scheduled Jobs in Optimizely

I previously demonstrated how to correlate telemetry to Azure Application Insights within a Hangfire job. But how about those jobs that are built a...

Stefan Holm Olsen | Mar 23, 2023 | Syndicated blog

Fixing Optimizely Content Syncing/Caching Issues on the DXP pre CMS.Core 12.13.0

Hi all, With our recent deployments to the DXP for .NET 6 projects (one a new build and one an upgrade) our clients had raised issues where there...

Scott Reed | Mar 23, 2023

Handle hostnames, schedule jobs and role access when synchronizing content

The Environment Synchronizer module helps you to set your environment into a known state after synchronizing databases between environments. In thi...

Ove Lartelius | Mar 23, 2023 | Syndicated blog

4 tips and tricks for Hangfire on Optimizely CMS

Here are four useful tricks I always apply to any site where I use Hangfire (code included).

Stefan Holm Olsen | Mar 21, 2023 | Syndicated blog

The new LinkItem property in Optimizely CMS, and why it matters

In the past, we have used different tricks to achieve this. Now, the LinkItem property is finally built-in in Optimizely CMS 12!

Tomas Hensrud Gulla | Mar 20, 2023 | Syndicated blog

A day in the life of an Optimizely Developer - Vertical Slicing in CMS12

There is such a vast choice these days in how you can build a website, aside from all of the different programming languages out there, there are...

Graham Carr | Mar 20, 2023