Day 15
25 Days of Sitecore EXM!
The Role of List Manager
When we think about mail delivery systems, we often think about the To: line. The list of people who will receive the eventual email. However, in Sitecore Email Experience Manager, the To: line is decided by choosing lists of contacts. Which means, EXM doesn’t manage who is on those lists.

In fact, EXM relies on a relationship of other marketing functions of Sitecore. It starts with the fundamental construct: the Contact which can be viewed as a single object in the Experience Profile, whereas List Manager looks at collections of multiple contacts.
List Manager is the Grand Central Station of these functions. Contacts are loaded via List Manager and Contacts are sorted into lists via List Manager. It’s these lists, that EXM relies on, and which form the bases for list subscription.
Understanding Subscription
If someone is subscribed to an email, that means that are on a list that is managed by List Manager. If someone unsubscribes from a single email, that means the Contact is removed from the list. If someone globally unsubscribes, then this is a special action, where the contact is added to the Global Opt-Out list. On the Manager Root of EXM, there is a field for selecting which list is the global opt-out for that manager root. The common denominator is that List Manager is managing these functions, not EXM.

Note the opt-out list that exists.
Type of Lists
As the image above shows, there are two types of lists: Contact List and Segmented List. There is a distinct difference between the two types of lists.
Contact Lists
The Contact List type is the default, standard list. This is a concrete list of contacts that can be managed manually. A tangible list of contacts is managed, that allows removal and addition of contacts to these types of lists. In Sitecore 9, xConnect maintains and keeps track of which Contact List a Contact belongs to.
As an example, I have enrolled into Corewarts. Through the enrollment process, I was added to the Corewarts Enrollment List which is a Contact list.

In doing so, xConnect shows the following List Subscription.
"ListSubscriptions": {
"ConcurrencyToken": "99bfa36b-576e-4e34-8d61-1bfb7562d12f",
"LastModified": "2018-12-15T14:52:50.7873975Z",
"Subscriptions": [
{
"Added": "2018-12-15T14:52:50.7348019Z",
"IsActive": true,
"ListDefinitionId": "6e72933a-c201-4d12-bb2c-34e710a25d97"
}
]
},
Note the ListDefinitionId which is the same as the List ID that shows up in List Manager’s URL.

Segmented Lists
On the other hand, Segmented Lists are very special, in that the author has little control over which contacts actually show up in the list. Instead, the author has the ability to curate a list of conditions that a contact must satisfy in order to be on the list. This means that Segmented Lists are making extremely good use of the xDB index and communication with xConnect.
To continue the Corewarts example once enrolled, the contact is sorted into a house of Corewarts. This sorting is visible in List Manager because I use a Segmented List.

Segmented Lists work off of the Rules Engine. In the example above the rule is specifying which contacts to show. The performance of this is fast, because it’s working off of the xDB index. The rule defined is as follows.

When conditions change on the contact, this Segmented List is immediately affected. In the event that this user is no longer in the Corewarts Enrollment List, per the rule, the contact is removed from the list. As such, if other contacts have conditions that change that would include them into this list, the contact is immediately added.
This means that there isn’t a concrete list of users on this list. This is going to be an important distinction when we get into EXM’s role of managing the unsubscribe, which happens to be the next mini-series.
Note below how the example contact is now in two different lists.

Another important distinction, is that because Segmented Lists are not a concrete list, xConnect does NOT keep track of the list on the contact profile. While it looks like a cut and paste of the above, this user, while in two lists, only shows up in one to xConnect.
"ListSubscriptions": {
"ConcurrencyToken": "99bfa36b-576e-4e34-8d61-1bfb7562d12f",
"LastModified": "2018-12-15T14:52:50.7873975Z",
"Subscriptions": [
{
"Added": "2018-12-15T14:52:50.7348019Z",
"IsActive": true,
"ListDefinitionId": "6e72933a-c201-4d12-bb2c-34e710a25d97"
}
]
},
Managing Contact Lists
Aside from manually managing lists from with in the List Manager UI, there are two other ways to automate the management of lists.
Marketing Automation

There are two Marketing Actions within Marketing Automation that can control adding a contact to a list or removing them from a list (which in MA is called unsubscribe not to be confused with unsubscribe in EXM which is slightly different).
EXM Client API Service
The second way to manage lists is by using the EXM Client API Service. This allows a developer to leverage code to manage lists as needed. On Day 1 of 25 Days of Christmas, I reviewed the API that is provided as part of Sitecore 9.1. You can also view Sitecore’s Documentation for Sitecore 9.1 Client API on their new doc site.
public interface IClientApiService
{
void SendAutomatedMessage(AutomatedMessage automatedMessage);
void ConfirmSubscription(ConfirmSubscriptionMessage confirmSubscriptionMessage);
void RegisterEmailOpen(EmailOpenMessage emailOpenMessage);
void UpdateListSubscription(UpdateListSubscriptionMessage message);
}
The UpdateListSubscription method allows for a couple of different operations based on the UpdateListSubscriptionMessage options that are sent in through the parameter argument. One of the properties on the class is called ListSubscriptionOperation.
These operations include:
- Subscribe
- Unsubscribe
- UnsubscribeFromAll
- AddToList
- RemoveFromList
Each of these options uses different properties made available through the UpdateListSubscriptionMessage class.
Client API For Sitecore 9.0
There were substantial changes to the Client API in 9.1, which is covered here. However, it should be noted that the Client API for 9.0 is still valid. For more information about the 9.0 API please reference the Sitecore Documentation site.
Looking Ahead
Tomorrow, we’ll take a look at the Hostname Mapper, which is Sitecore’s solution for figuring out URL’s in complicated environments and multi-site setups.
Additionally, I’m preparing for the next major mini-series coming up Managing the Unsubscribe which is one of the most important pieces of managing a successful Sitecore EXM implementation.
Did You Miss EXM Live!?
You’re in luck! You can now view EXM Live! On-Demand on YouTube!
Lucidly explained and informative! Good article
LikeLiked by 1 person