Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Responsys: Audiences as PETs mapping #2398

Open
wants to merge 24 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0621fd8
Initial implementation.
seg-leonelsanches Jul 26, 2024
aff152f
Merge remote-tracking branch 'origin/main' into responsys-audiences-a…
seg-leonelsanches Aug 20, 2024
8cb6edb
Using `testAuthentication` to fetch the auth token.
seg-leonelsanches Aug 20, 2024
17ae3f6
General improvements in Responsys Actions.
seg-leonelsanches Aug 23, 2024
ae764f6
- Better types in Responsys;
seg-leonelsanches Aug 27, 2024
ca5cf76
Merge remote-tracking branch 'origin/main' into responsys-audiences-a…
seg-leonelsanches Aug 27, 2024
5a68f1a
Fixes in Responsys while testing Send Audience as PET Action.
seg-leonelsanches Aug 28, 2024
df8b687
Merge remote-tracking branch 'origin/main' into responsys-audiences-a…
seg-leonelsanches Sep 3, 2024
e79bc3e
Merge remote-tracking branch 'origin/main' into responsys-audiences-a…
seg-leonelsanches Sep 5, 2024
58739e5
- Adding `computation_key`, `traits_or_props` to mapping;
seg-leonelsanches Sep 10, 2024
8f38e18
First implementation of mapping for one audience per PET in Responsys.
seg-leonelsanches Sep 13, 2024
b25dc94
Merge remote-tracking branch 'origin/main' into responsys-audiences-a…
seg-leonelsanches Sep 17, 2024
cb04621
Merge remote-tracking branch 'origin/main' into responsys-audiences-a…
seg-leonelsanches Sep 25, 2024
b2496cf
Merge remote-tracking branch 'origin/main' into responsys-audiences-a…
seg-leonelsanches Oct 1, 2024
961e0e1
Basic unit tests.
seg-leonelsanches Oct 1, 2024
577f4ce
Adding batch unit tests.
seg-leonelsanches Oct 2, 2024
274b2a9
Merge remote-tracking branch 'origin/main' into responsys-audiences-a…
seg-leonelsanches Oct 2, 2024
16f1d22
Code suggestions from PR.
seg-leonelsanches Oct 9, 2024
20475cb
Merge remote-tracking branch 'origin/main' into responsys-audiences-a…
seg-leonelsanches Oct 9, 2024
f5ab0e8
Code suggestions from PR.
seg-leonelsanches Oct 9, 2024
efe1485
Reversing suggestion that breaks the PR build.
seg-leonelsanches Oct 9, 2024
2ee891b
Updating testAuthentication unit test for Responsys.
seg-leonelsanches Oct 9, 2024
d8443d6
Merge remote-tracking branch 'origin/main' into responsys-audiences-a…
seg-leonelsanches Oct 21, 2024
e6e548e
Reversing `refreshAccessToken` method using `auth` parameters, back t…
seg-leonelsanches Oct 21, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import { Payload } from './generated-types'
import {
ResponsysAudiencePetUpdateRequestBody,
ResponsysListMemberRequestBody,
ResponsysMatchField,
ResponsysMatchType,
ResponsysMergeRule,
ResponsysRecordData
} from '../types'
Expand Down Expand Up @@ -82,21 +84,15 @@ export const updateProfileListAndPet = async (request: RequestClient, settings:
}
}

for (const [computationKey, recordCategories] of Object.entries(records)) {
for (const [audienceKey, recordCategories] of Object.entries(records)) {
if (recordCategories.recordsWithUserId.length > 0) {
records[computationKey].requestBodyUserId = buildPetUpdatePayload(
recordCategories.recordsWithUserId,
'CUSTOMER_ID'
)
records[audienceKey].requestBodyUserId = buildPetUpdatePayload(recordCategories.recordsWithUserId, 'CUSTOMER_ID')
}
if (recordCategories.recordsWithEmail.length > 0) {
records[computationKey].requestBodyEmail = buildPetUpdatePayload(
recordCategories.recordsWithEmail,
'EMAIL_ADDRESS'
)
records[audienceKey].requestBodyEmail = buildPetUpdatePayload(recordCategories.recordsWithEmail, 'EMAIL_ADDRESS')
}
if (recordCategories.recordsWithRiid.length > 0) {
records[computationKey].requestBodyRiid = buildPetUpdatePayload(recordCategories.recordsWithRiid, 'RIID')
records[audienceKey].requestBodyRiid = buildPetUpdatePayload(recordCategories.recordsWithRiid, 'RIID')
}
}

Expand All @@ -120,24 +116,26 @@ export const updateProfileListAndPet = async (request: RequestClient, settings:
return results
}

const buildPetUpdatePayload = (payloads: Payload[], matchType: 'CUSTOMER_ID' | 'EMAIL_ADDRESS' | 'RIID') => {
const resolvedMatchType = (matchType + '_') as 'CUSTOMER_ID_' | 'EMAIL_ADDRESS_' | 'RIID_'
const buildPetUpdatePayload = (payloads: Payload[], matchField: ResponsysMatchField) => {
const resolvedMatchType = (matchField + '_') as ResponsysMatchType
const firstPayload = payloads[0]
const records = payloads.map((payload) => {
const field = payload.userData[resolvedMatchType]
if (field) {
const inAudience = payload.traits_or_props[payload.computation_key] === true ? '1' : '0'
return [field, inAudience]
}
}) as string[][]

const requestBody = {
recordData: {
fieldNames: [resolvedMatchType, firstPayload.computation_key],
records: payloads.map((payload) => {
const field = payload.userData[resolvedMatchType]
if (field) {
const inAudience = payload.traits_or_props[payload.computation_key] === true ? '1' : '0'
return [field, inAudience]
}
}) as string[][],
records: records,
mapTemplateName: null
},
insertOnNoMatch: true,
updateOnMatch: 'REPLACE_ALL',
matchColumnName1: matchType
matchColumnName1: matchField
}

return requestBody
Expand All @@ -150,9 +148,13 @@ const updateProfileListMembers = async (request: RequestClient, settings: Settin
for (const payload of payloads) {
const record: string[] = []
for (const fieldName of fieldNames) {
const value = payload.userData[fieldName as 'EMAIL_ADDRESS_' | 'CUSTOMER_ID_' | 'RIID_']
record.push(value || '')
const resolvedFieldName = fieldName as 'EMAIL_ADDRESS_' | 'CUSTOMER_ID_' | 'RIID_'
if (payload.userData && payload.userData[resolvedFieldName]) {
const value = payload.userData[resolvedFieldName]
record.push(value || '')
seg-leonelsanches marked this conversation as resolved.
Show resolved Hide resolved
}
}

records.push(record)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ export interface Data {
}
}

export type ResponsysMatchField = 'CUSTOMER_ID' | 'EMAIL_ADDRESS' | 'RIID'
export type ResponsysMatchType = 'CUSTOMER_ID_' | 'EMAIL_ADDRESS_' | 'RIID_'

export type ResponsysMergeRule = {
/**
* Value of incoming preferred email format data. For example, 'H' may represent a preference for HTML formatted email.
Expand Down