Why won’t these campaign members sync over to the Journey?
Combining three of the coolest features of Marketing Cloud into a single message series turned out to be complicated and we learned something new. So, I wanted to document and share it. Note, this scenario takes place in a Marketing Cloud enterprise 2.0 account using the Connector to the Salescloud CRM.
The issue (in a nutshell):
- Journey Builder entrance criteria was a Salesforce Campaign – which we have had success with in other Journeys – except that we introduced the Dynamic Sender Profile for this new Journey.
- When selecting the Salesforce Campaign entry source, we selected several fields used for personalization strings in the message body and sender profile, including CampaignMember:LeadOrContactOwner:User data.
- We added contacts to the campaign, however, they never got injected into the Journey.
- To test the functionality and gather more information, I went to the Marketing Cloud app within the CRM, clicked the link to Configure Marketing Cloud Connector, then select Initiate Log.
- Next, I added a contact to the campaign again so that it could fail while the logs are running for 1 hour (though it only took about a minute).
- Next, I went to the Documents object within the CRM, selected the Marketing Cloud documents folder and clicked to view the most recent log file.
- Within it was the following error message:
- “EXCEPTION | SObject row was retrieved via SOQL without querying the requested field: CampaignMember.Name”
- That was not very helpful, so I opened a ticket with Marketing Cloud Support.
The insights gained:
- It turned out that only data that’s linked directly to the Campaign Member object could be injected based on our data schema – even though Journey Builder basically mislead us by displaying other objects like User and let us pick the Lead or Contact Owner. It even passed validation, so we thought we were good to go.
- Side note: it does this because it would work to select some User object data. For example, the User that created the Campaign or the user that added the members to the campaign is recorded and available when selecting Campaign Members. However, it couldn’t automagically make the reach between three objects: linking back from the Campaign Member to the Contact record to see which User record was assigned as the ‘contact owner,’ to then retrieve that User’s specific details (Name, email, etc.).
- Or as support put it, “when using CampaignMember:LeadOrContactOwner:User field, it does not inject properly. I then went to Salesforce to check the Object relationships, and it looks like that information isn’t visible to the CampaignMember object by default. So, in this case, you will need to create a relationship between the CampaignMember and User objects to get the fields you require.”
- We created new formula fields on the Campaign Member object in Salesforce that surface up the Contact Owner’s User record details (Name, Email, Marketing Cloud Email, Title, Phone).
- Now that those details appear on the Campaign Member object and you can see them for each campaign member, I was able to create a new version of the Journey, create the Entry Event as Salesforce Campaign again, select that campaign, but this time there were new fields available:
- Finally, I updated all the personalization strings in the Dynamic Sender Profiles and the email subject lines & body accordingly.
- The journey then passed the built-in verification test, so I tested it further by adding four of our test contacts to the Campaign and see that they were successfully injected into the journey!
During testing, the emails came “from” the default contact owner to my email addresses as expected, but student contacts received the email from their specific admissions counselor (a.k.a. contact owner). With the test complete, we added real contacts to the campaign, and they’ve been successfully injected into the journey with the right data.
If you have a wait period at the beginning of the journey, you have time to take a look at the contacts in the journey’s associated data extension (in Contact Builder) to make sure the right data is in the fields. In our case, the right contact owner/admissions counselor is associated with the right contact/student so all merge fields including the dynamic sender profile are good to go now and whenever we use this dynamic sender profile option again in the future.