Hi Support,
We are investigating an issue with our Salesforce integration where data is not persisting for new users, specifically regarding a race condition between the Salesforce Sync and the JS SDK boot method.
Our Setup:
-
Integration: Official Salesforce App.
-
Matching Logic: We currently match on Email.
-
User Creation: Users are created via the JS SDK (Intercom('boot')) when they first log into our portal.
The Scenario:
-
Time T1: A Contact is updated in Salesforce. A mapped custom field (salesforce_resource_access) is populated.
-
Time T1 + 5 min: The Salesforce Integration triggers a sync.
-
Note: At this moment, no User exists in Intercom with this email address.
-
-
Time T2 (Days later): The user logs into our web portal.
-
Time T2 + 1 sec: We call Intercom('boot', { email: ... }). The user is created in Intercom.
The Issue:
When the user is created via the JS SDK at Time T2, the salesforce_resource_access field is blank. The data synced at Time T1 is lost.
Our Questions:
-
"Create New Identity Mapping" Behavior:
Your documentation states that when a Person is updated in Salesforce and no match is found, the system will "Create new identity mapping" and "Sync all mapped attributes to Intercom."-
When this occurs for an email address that does not yet exist in Intercom, does this create any sort of persistent record or pending mapping?
-
If yes, why does our JS SDK boot at Time T2 (using the exact same email identifier) not recognize this mapping and inherit the fields synced at Time T1?
-
Does the "Identity Mapping" expire if the user isn't created within a certain window?
-
-
Switching to Unique Identifiers (Contact ID):
We are considering switching our matching logic from Email to Salesforce Contact ID.-
If we make this switch, is the integration better at handling this "sync-before-creation" scenario?
-
If Salesforce syncs a specific Contact ID before the user exists in Intercom, will Intercom create a placeholder record that guarantees the data is waiting when we finally boot the SDK with that user_id?
-
We are trying to decide if we should switch our ID strategy or simply implement a frontend workaround to force-push the data via the SDK.
Thanks!