I am currently designing a data model around Marketing Cloud for one of my clients and I am facing some conceptual questions regarding the integration with Service Cloud via the Connector and Apache Kafka via API Calls.
Service Cloud will be the master of data (accounts, contacts, leads, custom objects) and Kafka will send API calls to trigger Journeys for transactional messages (confirmation email after registration for eg).
I have to major questions regarding my design :
What is the best way to sync Service Cloud objects with populations in Contact Builder ?
I have two records types in the Person Account object that represents two populations. Data Stream won't make the distinction between these two records types. So I imagined something like this :
- Retrieve the "Account" Object with the Data Stream in the "Account" Synchronized data extension
- Run an automation with two Query activities on the "Account" Synchronized Data Extension that populates two tables in MC relative to the two populations in Contact Builder.
My second question is linked to a special use case :
- An account is created in a system X
- system X sends two API calls. One to Service Cloud to create the Account and one to Journey Builder to fire a confirmation email journey
in my understanding of Contact Builder and Journey Builder, the Account that is created will be duplicated (two records with two different ContactID) in Marketing Cloud. First one will be created by Journey Builder after injection into the Journey. Second one will be created after the Data stream synchronization and automation completeness.
This goes against my vision of a single record per Account in Marketing Cloud.
Can you please give me some insights on these questions ? Feel free to complete or ask for more clarification.
Great thinking so far ! :) I think I can answer most, if not all of your concerns. First of all, and just for your reference - synchronised data extensions exists as "hidden populations" via the connector, so if all your data is coming from salesforce, an all communications are initiated through that, you should be safe - but i agree with your proposal:
As for the second part - Michael is correct in that you could pass the correct id via the api call (but do note, that you need to use the PersonContactId, ContactId or LeadId as the subscriber key - this is a requirement for the connector. MC Connect operates based on what can go into a "WhoId" field inside salesforce core)
Based on you second story though, unless there is a specific payload that you need to pass via the API call, I would offer a different solution - namely to use Salesforce Triggered Sends or Journey Builder combined with Salesforce Data Entry. Essentially, you are creating a record with certain parameters inside salesforce core - and then based on those parameters, you leverage marketing cloud connect's native features to push them onto a journey or triggered send based on the record creation and/or field updates.
Alternatively, as long as you make sure that you have the right Id passed as part of the API call, as michael says, you should be safe. (right id is not equal to account id)