Skip to content

Commit 7fbbbb7

Browse files
STRATCONN-6602 - [Google Enhanced Conversions] - journeys v2 support
1 parent 1512cfc commit 7fbbbb7

File tree

3 files changed

+90
-5
lines changed

3 files changed

+90
-5
lines changed

packages/destination-actions/src/destinations/google-enhanced-conversions/functions.ts

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -568,23 +568,44 @@ const extractUserIdentifiers = (
568568
}
569569
// Map user data to Google Ads API format
570570
for (const payload of payloads) {
571+
const engageAudienceMembership = getEngageAudienceMembership(payload)
572+
571573
if (
572574
payload.event_name === 'Audience Entered' ||
573575
syncMode === 'add' ||
574-
(syncMode === 'mirror' && payload.event_name === 'new')
576+
(syncMode === 'mirror' && payload.event_name === 'new') ||
577+
(syncMode === 'mirror' && engageAudienceMembership === true)
575578
) {
576579
addUserIdentifiers.push({ create: { userIdentifiers: identifierFunctions[idType](payload) } })
577580
} else if (
578581
payload.event_name === 'Audience Exited' ||
579582
syncMode === 'delete' ||
580-
(syncMode === 'mirror' && payload.event_name === 'deleted')
583+
(syncMode === 'mirror' && payload.event_name === 'deleted') ||
584+
(syncMode === 'mirror' && engageAudienceMembership === false)
581585
) {
582586
removeUserIdentifiers.push({ remove: { userIdentifiers: identifierFunctions[idType](payload) } })
583587
}
584588
}
585589
return [addUserIdentifiers, removeUserIdentifiers]
586590
}
587591

592+
const getEngageAudienceMembership = (payload: UserListPayload): boolean | undefined => {
593+
const {
594+
engage_fields: { traits_or_properties = undefined, audience_key = undefined, computation_class = undefined } = {}
595+
} = payload
596+
597+
const engageAudienceMembership =
598+
typeof computation_class === 'string' &&
599+
['audience', 'journey_step'].includes(computation_class) &&
600+
typeof audience_key === 'string' &&
601+
typeof traits_or_properties === 'object' &&
602+
typeof traits_or_properties[audience_key] === 'boolean'
603+
? traits_or_properties[audience_key]
604+
: undefined
605+
606+
return engageAudienceMembership
607+
}
608+
588609
const createOfflineUserJob = async (
589610
request: RequestClient,
590611
offlineUserJobPayload: OfflineUserJobPayload,
@@ -966,16 +987,20 @@ const extractBatchUserIdentifiers = (
966987

967988
// Helper function to determine operation type
968989
const determineOperationType = (payload: UserListPayload, syncMode?: string) => {
990+
const engageAudienceMembership = getEngageAudienceMembership(payload)
991+
969992
if (
970993
payload.event_name === 'Audience Entered' ||
971994
syncMode === 'add' ||
972-
(syncMode === 'mirror' && payload.event_name === 'new')
995+
(syncMode === 'mirror' && payload.event_name === 'new') ||
996+
(syncMode === 'mirror' && engageAudienceMembership === true)
973997
) {
974998
return 'add'
975999
} else if (
9761000
payload.event_name === 'Audience Exited' ||
9771001
syncMode === 'delete' ||
978-
(syncMode === 'mirror' && payload.event_name === 'deleted')
1002+
(syncMode === 'mirror' && payload.event_name === 'deleted') ||
1003+
(syncMode === 'mirror' && engageAudienceMembership === false)
9791004
) {
9801005
return 'remove'
9811006
}

packages/destination-actions/src/destinations/google-enhanced-conversions/userList/generated-types.ts

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/destination-actions/src/destinations/google-enhanced-conversions/userList/index.ts

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const action: ActionDefinition<Settings, Payload> = {
1919
syncMode: {
2020
description: 'Define how the records will be synced to Google',
2121
label: 'How to sync records',
22-
default: 'add',
22+
default: 'mirror',
2323
choices: [
2424
{ label: 'Adds users to the connected Google Customer Match User List', value: 'add' },
2525
{ label: 'Remove users from the connected Google Customer Match User List', value: 'delete' },
@@ -162,6 +162,47 @@ const action: ActionDefinition<Settings, Payload> = {
162162
'@path': '$.event'
163163
},
164164
unsafe_hidden: true
165+
},
166+
engage_fields: {
167+
label: 'Engage Audience Fields',
168+
description:
169+
'Field used for processing an Engage Audience. Segment uses these fields to determine if the payload is generated from an Engage Audience and to extract the necessary information for audience syncing. If these fields are empty the "Sync Mode" field will be used to determine if the payload is from an Engage Audience.',
170+
type: 'object',
171+
required: false,
172+
unsafe_hidden: true,
173+
properties: {
174+
traits_or_properties: {
175+
label: 'Traits or Properties',
176+
description: 'Field used for processing an Engage Audience.',
177+
type: 'object'
178+
},
179+
audience_key: {
180+
label: 'Segment Audience Key',
181+
description: 'Field used for processing an Engage Audience.',
182+
type: 'string'
183+
},
184+
computation_class: {
185+
label: 'Segment Computation Action',
186+
description:
187+
"Field used to check if the payload is generated by an Engage Audience. values with 'audience' or 'journey_step' indicate an Engage audience.",
188+
type: 'string'
189+
}
190+
},
191+
default: {
192+
traits_or_properties: {
193+
'@if': {
194+
exists: { '@path': '$.traits' },
195+
then: { '@path': '$.traits' },
196+
else: { '@path': '$.properties' }
197+
}
198+
},
199+
audience_key: {
200+
'@path': '$.context.personas.computation_key'
201+
},
202+
computation_class: {
203+
'@path': '$.context.personas.computation_class'
204+
}
205+
}
165206
}
166207
},
167208
hooks: {

0 commit comments

Comments
 (0)