diff --git a/packages/destination-actions/src/destinations/google-enhanced-conversions/__tests__/functions.test.ts b/packages/destination-actions/src/destinations/google-enhanced-conversions/__tests__/functions.test.ts index 443e6873964..47cc0142bb1 100644 --- a/packages/destination-actions/src/destinations/google-enhanced-conversions/__tests__/functions.test.ts +++ b/packages/destination-actions/src/destinations/google-enhanced-conversions/__tests__/functions.test.ts @@ -1,7 +1,7 @@ import { createTestIntegration, DynamicFieldResponse } from '@segment/actions-core' import { Features } from '@segment/actions-core/mapping-kit' import nock from 'nock' -import { CANARY_API_VERSION, formatToE164, commonEmailValidation, convertTimestamp } from '../functions' +import { CANARY_API_VERSION, formatToE164, commonEmailValidation, convertTimestamp, timestampToEpochMicroseconds } from '../functions' import destination from '../index' const testDestination = createTestIntegration(destination) @@ -192,3 +192,18 @@ describe('convertTimestamp', () => { expect(result).toEqual('2025-03-11 17:57:29+00:00') }) }) + +describe('timestampToEpochMicroseconds', () => { + it('should convert timestamp with milliseconds to epoch microseconds', () => { + const timestamp = '2025-10-31T12:13:51.053Z' + const result = timestampToEpochMicroseconds(timestamp) + expect(result).toEqual('1761912831053000') + }) + + it('should return undefined for bad timestamps', () => { + const timestamp = 'I AM NOT A TIMESTAMP - BLEEP BLOOP' + const result = timestampToEpochMicroseconds(timestamp) + expect(result).toEqual(undefined) + }) +}) + diff --git a/packages/destination-actions/src/destinations/google-enhanced-conversions/__tests__/uploadClickConversion.test.ts b/packages/destination-actions/src/destinations/google-enhanced-conversions/__tests__/uploadClickConversion.test.ts index d37e91fb62a..8b7e99cbf64 100644 --- a/packages/destination-actions/src/destinations/google-enhanced-conversions/__tests__/uploadClickConversion.test.ts +++ b/packages/destination-actions/src/destinations/google-enhanced-conversions/__tests__/uploadClickConversion.test.ts @@ -43,7 +43,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -85,7 +85,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -127,7 +127,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -183,7 +183,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[1].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[],\\"customVariables\\":[{\\"conversionCustomVariable\\":\\"customers/1234/conversionCustomVariables/123445\\",\\"value\\":\\"spongebob\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[],\\"customVariables\\":[{\\"conversionCustomVariable\\":\\"customers/1234/conversionCustomVariables/123445\\",\\"value\\":\\"spongebob\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(2) @@ -262,7 +262,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -305,7 +305,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -387,7 +387,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -432,7 +432,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"1dba01a96da19f6df771cff07e0a8d822126709b82ae7adc6a3839b3aaa68a16\\"}],\\"consent\\":{\\"adPersonalization\\":\\"GRANTED\\"}}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"1dba01a96da19f6df771cff07e0a8d822126709b82ae7adc6a3839b3aaa68a16\\"}],\\"consent\\":{\\"adPersonalization\\":\\"GRANTED\\"}}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -517,7 +517,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}],\\"consent\\":{\\"adUserData\\":\\"DENIED\\",\\"adPersonalization\\":\\"DENIED\\"}}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}],\\"consent\\":{\\"adUserData\\":\\"DENIED\\",\\"adPersonalization\\":\\"DENIED\\"}}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) expect(responses[0].status).toBe(201) @@ -681,10 +681,103 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toBe( - '{"conversions":[{"conversionAction":"customers/1234/conversionActions/12345","conversionDateTime":"2021-06-10 18:08:04+00:00","sessionAttributesEncoded":"eyJzZXNzaW9uX3N0YXJ0X3RpbWVfdXNlYyI6IjE3NTIxNDgxOTgwNzMwMDAiLCJsYW5kaW5nX3BhZ2VfdXJsIjoiaHR0cHM6Ly9yby5jby93ZWlnaHQtbG9zcy9jaGVja2VyLXBhdGgvP2djbGlkPTIxNDIzNTQiLCJsYW5kaW5nX3BhZ2VfcmVmZXJyZXIiOiIiLCJsYW5kaW5nX3BhZ2VfdXNlcl9hZ2VudCI6Ik1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzcuMC4wLjAgU2FmYXJpLzUzNy4zNiJ9","orderId":"1234","conversionValue":200,"currencyCode":"USD","cartData":{"items":[{"productId":"1234","quantity":3,"unitPrice":10.99}]},"userIdentifiers":[{"hashedEmail":"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674"}]}],"partialFailure":true}' + '{"conversions":[{"conversionAction":"customers/1234/conversionActions/12345","conversionDateTime":"2021-06-10 18:08:04+00:00","userIpAddress":"8.8.8.8","sessionAttributesEncoded":"eyJzZXNzaW9uX3N0YXJ0X3RpbWVfdXNlYyI6IjE3NTIxNDgxOTgwNzMwMDAiLCJsYW5kaW5nX3BhZ2VfdXJsIjoiaHR0cHM6Ly9yby5jby93ZWlnaHQtbG9zcy9jaGVja2VyLXBhdGgvP2djbGlkPTIxNDIzNTQiLCJsYW5kaW5nX3BhZ2VfcmVmZXJyZXIiOiIiLCJsYW5kaW5nX3BhZ2VfdXNlcl9hZ2VudCI6Ik1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzcuMC4wLjAgU2FmYXJpLzUzNy4zNiJ9","orderId":"1234","conversionValue":200,"currencyCode":"USD","cartData":{"items":[{"productId":"1234","quantity":3,"unitPrice":10.99}]},"userIdentifiers":[{"hashedEmail":"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674"}]}],"partialFailure":true}' ) expect(responses[0].status).toBe(201) }) + + it('sends sessionAttributesKeyValuePairs when provided and sessionAttributesEncoded not provided', async () => { + const event = createTestEvent({ + timestamp, + event: 'Test Event', + properties: { + gclid: '54321', + email: 'test@gmail.com', + orderId: '1234', + total: '200', + currency: 'USD', + gad_source: 'Google', + gad_campaignid: '2142354', + session_start_time_usec: timestamp, + products: [ + { + product_id: '1234', + quantity: 3, + price: 10.99 + } + ] + } + }) + + nock(`https://googleads.googleapis.com/${API_VERSION}/customers/${customerId}:uploadClickConversions`) + .post('') + .reply(201, { results: [{}] }) + + const responses = await testDestination.testAction('uploadClickConversion', { + event, + mapping: { + conversion_action: '12345', + session_attributes_encoded: null, + session_attributes_key_value_pairs: { + gad_source: { + '@path': '$.properties.gad_source' + }, + gad_campaignid: { + '@path': '$.properties.gad_campaignid' + }, + landing_page_url: { + '@path': '$.context.page.url' + }, + session_start_time_usec: { + '@path': '$.properties.session_start_time_usec' + }, + landing_page_referrer: { + '@path': '$.context.page.referrer' + }, + landing_page_user_agent: { + '@path': '$.context.userAgent' + } + }, + __segment_internal_sync_mode: 'add' + }, + useDefaultMappings: true, + settings: { + customerId + } + }) + + expect(responses[0].options.json).toMatchObject({ + conversions: [ + { + conversionAction: 'customers/1234/conversionActions/12345', + conversionDateTime: '2021-06-10 18:08:04+00:00', + userIpAddress: '8.8.8.8', + sessionAttributesKeyValuePairs: { + keyValuePairs: [ + { sessionAttributeKey: 'gad_source', sessionAttributeValue: 'Google' }, + { sessionAttributeKey: 'gad_campaignid', sessionAttributeValue: '2142354' }, + { sessionAttributeKey: 'landing_page_url', sessionAttributeValue: 'https://segment.com/academy/' }, + { sessionAttributeKey: 'session_start_time_usec', sessionAttributeValue: '1623348484000000' }, + { + sessionAttributeKey: 'landing_page_user_agent', + sessionAttributeValue: + 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1' + } + ] + }, + orderId: '1234', + conversionValue: 200, + currencyCode: 'USD', + cartData: { + items: [{ productId: '1234', quantity: 3, unitPrice: 10.99 }] + }, + userIdentifiers: [{ hashedEmail: '87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674' }] + } + ], + partialFailure: true + }) + expect(responses[0].status).toBe(201) + }) }) describe('uploadClickConversion Batch Event', () => { @@ -742,7 +835,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -805,7 +898,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -868,7 +961,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -943,7 +1036,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[1].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[],\\"customVariables\\":[{\\"conversionCustomVariable\\":\\"customers/1234/conversionCustomVariables/123445\\",\\"value\\":\\"spongebob\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[],\\"customVariables\\":[{\\"conversionCustomVariable\\":\\"customers/1234/conversionCustomVariables/123445\\",\\"value\\":\\"spongebob\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[],\\"customVariables\\":[{\\"conversionCustomVariable\\":\\"customers/1234/conversionCustomVariables/123445\\",\\"value\\":\\"spongebob\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[],\\"customVariables\\":[{\\"conversionCustomVariable\\":\\"customers/1234/conversionCustomVariables/123445\\",\\"value\\":\\"spongebob\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(2) @@ -1062,7 +1155,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -1126,7 +1219,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -1248,7 +1341,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -1314,7 +1407,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"},{\\"hashedPhoneNumber\\":\\"64eab4e4d9e8e4f801e34d4f9043494ac3ccf778fb428dcbb555e632bb29d84b\\"}],\\"consent\\":{\\"adPersonalization\\":\\"GRANTED\\"}},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"},{\\"hashedPhoneNumber\\":\\"1dba01a96da19f6df771cff07e0a8d822126709b82ae7adc6a3839b3aaa68a16\\"}],\\"consent\\":{\\"adPersonalization\\":\\"GRANTED\\"}}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"},{\\"hashedPhoneNumber\\":\\"64eab4e4d9e8e4f801e34d4f9043494ac3ccf778fb428dcbb555e632bb29d84b\\"}],\\"consent\\":{\\"adPersonalization\\":\\"GRANTED\\"}},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"},{\\"hashedPhoneNumber\\":\\"1dba01a96da19f6df771cff07e0a8d822126709b82ae7adc6a3839b3aaa68a16\\"}],\\"consent\\":{\\"adPersonalization\\":\\"GRANTED\\"}}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -1439,7 +1532,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"}],\\"consent\\":{\\"adUserData\\":\\"DENIED\\",\\"adPersonalization\\":\\"DENIED\\"}},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"}],\\"consent\\":{\\"adUserData\\":\\"DENIED\\",\\"adPersonalization\\":\\"DENIED\\"}}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"}],\\"consent\\":{\\"adUserData\\":\\"DENIED\\",\\"adPersonalization\\":\\"DENIED\\"}},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"}],\\"consent\\":{\\"adUserData\\":\\"DENIED\\",\\"adPersonalization\\":\\"DENIED\\"}}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) expect(responses[0].status).toBe(201) @@ -1504,10 +1597,152 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toBe( - '{"conversions":[{"conversionAction":"customers/1234/conversionActions/12345","conversionDateTime":"2021-06-10 18:08:04+00:00","sessionAttributesEncoded":"eyJzZXNzaW9uX3N0YXJ0X3RpbWVfdXNlYyI6IjE3NTIxNDgxOTgwNzMwMDAiLCJsYW5kaW5nX3BhZ2VfdXJsIjoiaHR0cHM6Ly9yby5jby93ZWlnaHQtbG9zcy9jaGVja2VyLXBhdGgvP2djbGlkPTIxNDIzNTQiLCJsYW5kaW5nX3BhZ2VfcmVmZXJyZXIiOiIiLCJsYW5kaW5nX3BhZ2VfdXNlcl9hZ2VudCI6Ik1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzcuMC4wLjAgU2FmYXJpLzUzNy4zNiJ9","orderId":"1234","conversionValue":200,"currencyCode":"USD","cartData":{"items":[{"productId":"1234","quantity":3,"unitPrice":10.99}]},"userIdentifiers":[{"hashedEmail":"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9"}]},{"conversionAction":"customers/1234/conversionActions/12345","conversionDateTime":"2021-06-10 18:08:04+00:00","sessionAttributesEncoded":"eyJzZXNzaW9uX3N0YXJ0X3RpbWVfdXNlYyI6IjE3NTIxNDgxOTgwNzMwMDAiLCJsYW5kaW5nX3BhZ2VfdXJsIjoiaHR0cHM6Ly9yby5jby93ZWlnaHQtbG9zcy9jaGVja2VyLXBhdGgvP2djbGlkPTIxNDIzNTQiLCJsYW5kaW5nX3BhZ2VfcmVmZXJyZXIiOiIiLCJsYW5kaW5nX3BhZ2VfdXNlcl9hZ2VudCI6Ik1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzcuMC4wLjAgU2FmYXJpLzUzNy4zNiJ9","orderId":"1234","conversionValue":200,"currencyCode":"USD","cartData":{"items":[{"productId":"1234","quantity":3,"unitPrice":10.99}]},"userIdentifiers":[{"hashedEmail":"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47"}]}],"partialFailure":true}' + '{"conversions":[{"conversionAction":"customers/1234/conversionActions/12345","conversionDateTime":"2021-06-10 18:08:04+00:00","userIpAddress":"8.8.8.8","sessionAttributesEncoded":"eyJzZXNzaW9uX3N0YXJ0X3RpbWVfdXNlYyI6IjE3NTIxNDgxOTgwNzMwMDAiLCJsYW5kaW5nX3BhZ2VfdXJsIjoiaHR0cHM6Ly9yby5jby93ZWlnaHQtbG9zcy9jaGVja2VyLXBhdGgvP2djbGlkPTIxNDIzNTQiLCJsYW5kaW5nX3BhZ2VfcmVmZXJyZXIiOiIiLCJsYW5kaW5nX3BhZ2VfdXNlcl9hZ2VudCI6Ik1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzcuMC4wLjAgU2FmYXJpLzUzNy4zNiJ9","orderId":"1234","conversionValue":200,"currencyCode":"USD","cartData":{"items":[{"productId":"1234","quantity":3,"unitPrice":10.99}]},"userIdentifiers":[{"hashedEmail":"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9"}]},{"conversionAction":"customers/1234/conversionActions/12345","conversionDateTime":"2021-06-10 18:08:04+00:00","userIpAddress":"8.8.8.8","sessionAttributesEncoded":"eyJzZXNzaW9uX3N0YXJ0X3RpbWVfdXNlYyI6IjE3NTIxNDgxOTgwNzMwMDAiLCJsYW5kaW5nX3BhZ2VfdXJsIjoiaHR0cHM6Ly9yby5jby93ZWlnaHQtbG9zcy9jaGVja2VyLXBhdGgvP2djbGlkPTIxNDIzNTQiLCJsYW5kaW5nX3BhZ2VfcmVmZXJyZXIiOiIiLCJsYW5kaW5nX3BhZ2VfdXNlcl9hZ2VudCI6Ik1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzcuMC4wLjAgU2FmYXJpLzUzNy4zNiJ9","orderId":"1234","conversionValue":200,"currencyCode":"USD","cartData":{"items":[{"productId":"1234","quantity":3,"unitPrice":10.99}]},"userIdentifiers":[{"hashedEmail":"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47"}]}],"partialFailure":true}' ) expect(responses.length).toBe(1) expect(responses[0].status).toBe(201) }) + + it('sends sessionAttributesKeyValuePairs when provided and sessionAttributesEncoded not provided', async () => { + const events: SegmentEvent[] = [ + createTestEvent({ + timestamp, + event: 'Test Event 1', + properties: { + gclid: '54321', + email: 'test1@gmail.com', + orderId: '1234', + total: '200', + currency: 'USD', + gad_source: 'Google', + gad_campaignid: '2142354', + session_start_time_usec: timestamp, + products: [ + { + product_id: '1234', + quantity: 3, + price: 10.99 + } + ] + } + }), + createTestEvent({ + timestamp, + event: 'Test Event 2', + properties: { + gclid: '54321', + email: 'test2@gmail.com', + orderId: '1234', + total: '200', + currency: 'USD', + gad_source: 'Giggle', + gad_campaignid: '9998776', + session_start_time_usec: timestamp, + products: [ + { + product_id: '1234', + quantity: 3, + price: 10.99 + } + ] + } + }) + ] + + nock(`https://googleads.googleapis.com/${API_VERSION}/customers/${customerId}:uploadClickConversions`) + .post('') + .reply(201, { results: [{}] }) + + const responses = await testDestination.testBatchAction('uploadClickConversion', { + events, + mapping: { + conversion_action: '12345', + session_attributes_encoded: null, + session_attributes_key_value_pairs: { + gad_source: { + '@path': '$.properties.gad_source' + }, + gad_campaignid: { + '@path': '$.properties.gad_campaignid' + }, + landing_page_url: { + '@path': '$.context.page.url' + }, + session_start_time_usec: { + '@path': '$.properties.session_start_time_usec' + }, + landing_page_referrer: { + '@path': '$.context.page.referrer' + }, + landing_page_user_agent: { + '@path': '$.context.userAgent' + } + }, + __segment_internal_sync_mode: 'add' + }, + useDefaultMappings: true, + settings: { + customerId + } + }) + + expect(responses[0].options.json).toMatchObject({ + conversions: [ + { + conversionAction: 'customers/1234/conversionActions/12345', + conversionDateTime: '2021-06-10 18:08:04+00:00', + userIpAddress: '8.8.8.8', + sessionAttributesKeyValuePairs: { + keyValuePairs: [ + { sessionAttributeKey: 'gad_source', sessionAttributeValue: 'Google' }, + { sessionAttributeKey: 'gad_campaignid', sessionAttributeValue: '2142354' }, + { sessionAttributeKey: 'landing_page_url', sessionAttributeValue: 'https://segment.com/academy/' }, + { sessionAttributeKey: 'session_start_time_usec', sessionAttributeValue: '1623348484000000' }, + { + sessionAttributeKey: 'landing_page_user_agent', + sessionAttributeValue: + 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1' + } + ] + }, + orderId: '1234', + conversionValue: 200, + currencyCode: 'USD', + cartData: { + items: [{ productId: '1234', quantity: 3, unitPrice: 10.99 }] + }, + userIdentifiers: [{ hashedEmail: 'a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9' }] + }, + { + conversionAction: 'customers/1234/conversionActions/12345', + conversionDateTime: '2021-06-10 18:08:04+00:00', + userIpAddress: '8.8.8.8', + sessionAttributesKeyValuePairs: { + keyValuePairs: [ + { sessionAttributeKey: 'gad_source', sessionAttributeValue: 'Giggle' }, + { sessionAttributeKey: 'gad_campaignid', sessionAttributeValue: '9998776' }, + { sessionAttributeKey: 'landing_page_url', sessionAttributeValue: 'https://segment.com/academy/' }, + { sessionAttributeKey: 'session_start_time_usec', sessionAttributeValue: '1623348484000000' }, + { + sessionAttributeKey: 'landing_page_user_agent', + sessionAttributeValue: + 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1' + } + ] + }, + orderId: '1234', + conversionValue: 200, + currencyCode: 'USD', + cartData: { + items: [{ productId: '1234', quantity: 3, unitPrice: 10.99 }] + }, + userIdentifiers: [{ hashedEmail: 'cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47' }] + } + ], + partialFailure: true + }) + expect(responses.length).toBe(1) + expect(responses[0].status).toBe(201) + }) }) }) diff --git a/packages/destination-actions/src/destinations/google-enhanced-conversions/__tests__/uploadClickConversion2.test.ts b/packages/destination-actions/src/destinations/google-enhanced-conversions/__tests__/uploadClickConversion2.test.ts index a087b190780..d8d0befddb1 100644 --- a/packages/destination-actions/src/destinations/google-enhanced-conversions/__tests__/uploadClickConversion2.test.ts +++ b/packages/destination-actions/src/destinations/google-enhanced-conversions/__tests__/uploadClickConversion2.test.ts @@ -47,7 +47,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -92,7 +92,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -137,7 +137,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -197,7 +197,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[1].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[],\\"customVariables\\":[{\\"conversionCustomVariable\\":\\"customers/1234/conversionCustomVariables/123445\\",\\"value\\":\\"spongebob\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[],\\"customVariables\\":[{\\"conversionCustomVariable\\":\\"customers/1234/conversionCustomVariables/123445\\",\\"value\\":\\"spongebob\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(2) @@ -282,7 +282,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -328,7 +328,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -416,7 +416,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -462,7 +462,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"1dba01a96da19f6df771cff07e0a8d822126709b82ae7adc6a3839b3aaa68a16\\"}],\\"consent\\":{\\"adPersonalization\\":\\"GRANTED\\"}}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"},{\\"hashedPhoneNumber\\":\\"1dba01a96da19f6df771cff07e0a8d822126709b82ae7adc6a3839b3aaa68a16\\"}],\\"consent\\":{\\"adPersonalization\\":\\"GRANTED\\"}}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -551,7 +551,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}],\\"consent\\":{\\"adUserData\\":\\"DENIED\\",\\"adPersonalization\\":\\"DENIED\\"}}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}],\\"consent\\":{\\"adUserData\\":\\"DENIED\\",\\"adPersonalization\\":\\"DENIED\\"}}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) expect(responses[0].status).toBe(201) @@ -636,10 +636,103 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toBe( - '{"conversions":[{"conversionAction":"customers/1234/conversionActions/12345","conversionDateTime":"2021-06-10 18:08:04+00:00","sessionAttributesEncoded":"eyJzZXNzaW9uX3N0YXJ0X3RpbWVfdXNlYyI6IjE3NTIxNDgxOTgwNzMwMDAiLCJsYW5kaW5nX3BhZ2VfdXJsIjoiaHR0cHM6Ly9yby5jby93ZWlnaHQtbG9zcy9jaGVja2VyLXBhdGgvP2djbGlkPTIxNDIzNTQiLCJsYW5kaW5nX3BhZ2VfcmVmZXJyZXIiOiIiLCJsYW5kaW5nX3BhZ2VfdXNlcl9hZ2VudCI6Ik1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzcuMC4wLjAgU2FmYXJpLzUzNy4zNiJ9","orderId":"1234","conversionValue":200,"currencyCode":"USD","cartData":{"items":[{"productId":"1234","quantity":3,"unitPrice":10.99}]},"userIdentifiers":[{"hashedEmail":"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674"}]}],"partialFailure":true}' + '{"conversions":[{"conversionAction":"customers/1234/conversionActions/12345","conversionDateTime":"2021-06-10 18:08:04+00:00","userIpAddress":"8.8.8.8","sessionAttributesEncoded":"eyJzZXNzaW9uX3N0YXJ0X3RpbWVfdXNlYyI6IjE3NTIxNDgxOTgwNzMwMDAiLCJsYW5kaW5nX3BhZ2VfdXJsIjoiaHR0cHM6Ly9yby5jby93ZWlnaHQtbG9zcy9jaGVja2VyLXBhdGgvP2djbGlkPTIxNDIzNTQiLCJsYW5kaW5nX3BhZ2VfcmVmZXJyZXIiOiIiLCJsYW5kaW5nX3BhZ2VfdXNlcl9hZ2VudCI6Ik1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzcuMC4wLjAgU2FmYXJpLzUzNy4zNiJ9","orderId":"1234","conversionValue":200,"currencyCode":"USD","cartData":{"items":[{"productId":"1234","quantity":3,"unitPrice":10.99}]},"userIdentifiers":[{"hashedEmail":"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674"}]}],"partialFailure":true}' ) expect(responses[0].status).toBe(201) }) + + it('sends sessionAttributesKeyValuePairs when provided and sessionAttributesEncoded not provided', async () => { + const event = createTestEvent({ + timestamp, + event: 'Test Event', + properties: { + gclid: '54321', + email: 'test@gmail.com', + orderId: '1234', + total: '200', + currency: 'USD', + gad_source: 'Google', + gad_campaignid: '2142354', + session_start_time_usec: timestamp, + products: [ + { + product_id: '1234', + quantity: 3, + price: 10.99 + } + ] + } + }) + + nock(`https://googleads.googleapis.com/${API_VERSION}/customers/${customerId}:uploadClickConversions`) + .post('') + .reply(201, { results: [{}] }) + + const responses = await testDestination.testAction('uploadClickConversion2', { + event, + mapping: { + conversion_action: '12345', + session_attributes_encoded: null, + session_attributes_key_value_pairs: { + gad_source: { + '@path': '$.properties.gad_source' + }, + gad_campaignid: { + '@path': '$.properties.gad_campaignid' + }, + landing_page_url: { + '@path': '$.context.page.url' + }, + session_start_time_usec: { + '@path': '$.properties.session_start_time_usec' + }, + landing_page_referrer: { + '@path': '$.context.page.referrer' + }, + landing_page_user_agent: { + '@path': '$.context.userAgent' + } + }, + __segment_internal_sync_mode: 'add' + }, + useDefaultMappings: true, + settings: { + customerId + } + }) + + expect(responses[0].options.json).toMatchObject({ + conversions: [ + { + conversionAction: 'customers/1234/conversionActions/12345', + conversionDateTime: '2021-06-10 18:08:04+00:00', + userIpAddress: '8.8.8.8', + sessionAttributesKeyValuePairs: { + keyValuePairs: [ + { sessionAttributeKey: 'gad_source', sessionAttributeValue: 'Google' }, + { sessionAttributeKey: 'gad_campaignid', sessionAttributeValue: '2142354' }, + { sessionAttributeKey: 'landing_page_url', sessionAttributeValue: 'https://segment.com/academy/' }, + { sessionAttributeKey: 'session_start_time_usec', sessionAttributeValue: '1623348484000000' }, + { + sessionAttributeKey: 'landing_page_user_agent', + sessionAttributeValue: + 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1' + } + ] + }, + orderId: '1234', + conversionValue: 200, + currencyCode: 'USD', + cartData: { + items: [{ productId: '1234', quantity: 3, unitPrice: 10.99 }] + }, + userIdentifiers: [{ hashedEmail: '87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674' }] + } + ], + partialFailure: true + }) + expect(responses[0].status).toBe(201) + }) }) describe('uploadClickConversion2 Batch Event', () => { @@ -700,7 +793,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -766,7 +859,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -833,7 +926,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"},{\\"hashedPhoneNumber\\":\\"22563905dd330440cb95d11761541dd3bd7f9b704b132392c717a3633582884c\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"},{\\"hashedPhoneNumber\\":\\"22563905dd330440cb95d11761541dd3bd7f9b704b132392c717a3633582884c\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -912,7 +1005,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[1].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[],\\"customVariables\\":[{\\"conversionCustomVariable\\":\\"customers/1234/conversionCustomVariables/123445\\",\\"value\\":\\"spongebob\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[],\\"customVariables\\":[{\\"conversionCustomVariable\\":\\"customers/1234/conversionCustomVariables/123445\\",\\"value\\":\\"spongebob\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[],\\"customVariables\\":[{\\"conversionCustomVariable\\":\\"customers/1234/conversionCustomVariables/123445\\",\\"value\\":\\"spongebob\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[],\\"customVariables\\":[{\\"conversionCustomVariable\\":\\"customers/1234/conversionCustomVariables/123445\\",\\"value\\":\\"spongebob\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(2) @@ -1037,7 +1130,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -1104,7 +1197,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"},{\\"hashedPhoneNumber\\":\\"22563905dd330440cb95d11761541dd3bd7f9b704b132392c717a3633582884c\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"},{\\"hashedPhoneNumber\\":\\"22563905dd330440cb95d11761541dd3bd7f9b704b132392c717a3633582884c\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"},{\\"hashedPhoneNumber\\":\\"76ff44c6428f2fc2750fec01cb3190423adaebb21e797d942f339f3c7c1761dd\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -1232,7 +1325,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}]}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -1299,7 +1392,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"},{\\"hashedPhoneNumber\\":\\"64eab4e4d9e8e4f801e34d4f9043494ac3ccf778fb428dcbb555e632bb29d84b\\"}],\\"consent\\":{\\"adPersonalization\\":\\"GRANTED\\"}},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"},{\\"hashedPhoneNumber\\":\\"1dba01a96da19f6df771cff07e0a8d822126709b82ae7adc6a3839b3aaa68a16\\"}],\\"consent\\":{\\"adPersonalization\\":\\"GRANTED\\"}}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9\\"},{\\"hashedPhoneNumber\\":\\"64eab4e4d9e8e4f801e34d4f9043494ac3ccf778fb428dcbb555e632bb29d84b\\"}],\\"consent\\":{\\"adPersonalization\\":\\"GRANTED\\"}},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47\\"},{\\"hashedPhoneNumber\\":\\"1dba01a96da19f6df771cff07e0a8d822126709b82ae7adc6a3839b3aaa68a16\\"}],\\"consent\\":{\\"adPersonalization\\":\\"GRANTED\\"}}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) @@ -1428,7 +1521,7 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toMatchInlineSnapshot( - `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}],\\"consent\\":{\\"adUserData\\":\\"DENIED\\",\\"adPersonalization\\":\\"DENIED\\"}},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}],\\"consent\\":{\\"adUserData\\":\\"DENIED\\",\\"adPersonalization\\":\\"DENIED\\"}}],\\"partialFailure\\":true}"` + `"{\\"conversions\\":[{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}],\\"consent\\":{\\"adUserData\\":\\"DENIED\\",\\"adPersonalization\\":\\"DENIED\\"}},{\\"conversionAction\\":\\"customers/1234/conversionActions/12345\\",\\"conversionDateTime\\":\\"2021-06-10 18:08:04+00:00\\",\\"userIpAddress\\":\\"8.8.8.8\\",\\"sessionAttributesKeyValuePairs\\":{\\"keyValuePairs\\":[{\\"sessionAttributeKey\\":\\"landing_page_url\\",\\"sessionAttributeValue\\":\\"https://segment.com/academy/\\"},{\\"sessionAttributeKey\\":\\"landing_page_user_agent\\",\\"sessionAttributeValue\\":\\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\\"}]},\\"orderId\\":\\"1234\\",\\"conversionValue\\":200,\\"currencyCode\\":\\"USD\\",\\"cartData\\":{\\"items\\":[{\\"productId\\":\\"1234\\",\\"quantity\\":3,\\"unitPrice\\":10.99}]},\\"userIdentifiers\\":[{\\"hashedEmail\\":\\"87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674\\"}],\\"consent\\":{\\"adUserData\\":\\"DENIED\\",\\"adPersonalization\\":\\"DENIED\\"}}],\\"partialFailure\\":true}"` ) expect(responses.length).toBe(1) expect(responses[0].status).toBe(201) @@ -1553,10 +1646,152 @@ describe('GoogleEnhancedConversions', () => { }) expect(responses[0].options.body).toBe( - '{"conversions":[{"conversionAction":"customers/1234/conversionActions/12345","conversionDateTime":"2021-06-10 18:08:04+00:00","sessionAttributesEncoded":"eyJzZXNzaW9uX3N0YXJ0X3RpbWVfdXNlYyI6IjE3NTIxNDgxOTgwNzMwMDAiLCJsYW5kaW5nX3BhZ2VfdXJsIjoiaHR0cHM6Ly9yby5jby93ZWlnaHQtbG9zcy9jaGVja2VyLXBhdGgvP2djbGlkPTIxNDIzNTQiLCJsYW5kaW5nX3BhZ2VfcmVmZXJyZXIiOiIiLCJsYW5kaW5nX3BhZ2VfdXNlcl9hZ2VudCI6Ik1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzcuMC4wLjAgU2FmYXJpLzUzNy4zNiJ9","orderId":"1234","conversionValue":200,"currencyCode":"USD","cartData":{"items":[{"productId":"1234","quantity":3,"unitPrice":10.99}]},"userIdentifiers":[{"hashedEmail":"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9"}]},{"conversionAction":"customers/1234/conversionActions/12345","conversionDateTime":"2021-06-10 18:08:04+00:00","sessionAttributesEncoded":"eyJzZXNzaW9uX3N0YXJ0X3RpbWVfdXNlYyI6IjE3NTIxNDgxOTgwNzMwMDAiLCJsYW5kaW5nX3BhZ2VfdXJsIjoiaHR0cHM6Ly9yby5jby93ZWlnaHQtbG9zcy9jaGVja2VyLXBhdGgvP2djbGlkPTIxNDIzNTQiLCJsYW5kaW5nX3BhZ2VfcmVmZXJyZXIiOiIiLCJsYW5kaW5nX3BhZ2VfdXNlcl9hZ2VudCI6Ik1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzcuMC4wLjAgU2FmYXJpLzUzNy4zNiJ9","orderId":"1234","conversionValue":200,"currencyCode":"USD","cartData":{"items":[{"productId":"1234","quantity":3,"unitPrice":10.99}]},"userIdentifiers":[{"hashedEmail":"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47"}]}],"partialFailure":true}' + '{"conversions":[{"conversionAction":"customers/1234/conversionActions/12345","conversionDateTime":"2021-06-10 18:08:04+00:00","userIpAddress":"8.8.8.8","sessionAttributesEncoded":"eyJzZXNzaW9uX3N0YXJ0X3RpbWVfdXNlYyI6IjE3NTIxNDgxOTgwNzMwMDAiLCJsYW5kaW5nX3BhZ2VfdXJsIjoiaHR0cHM6Ly9yby5jby93ZWlnaHQtbG9zcy9jaGVja2VyLXBhdGgvP2djbGlkPTIxNDIzNTQiLCJsYW5kaW5nX3BhZ2VfcmVmZXJyZXIiOiIiLCJsYW5kaW5nX3BhZ2VfdXNlcl9hZ2VudCI6Ik1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzcuMC4wLjAgU2FmYXJpLzUzNy4zNiJ9","orderId":"1234","conversionValue":200,"currencyCode":"USD","cartData":{"items":[{"productId":"1234","quantity":3,"unitPrice":10.99}]},"userIdentifiers":[{"hashedEmail":"a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9"}]},{"conversionAction":"customers/1234/conversionActions/12345","conversionDateTime":"2021-06-10 18:08:04+00:00","userIpAddress":"8.8.8.8","sessionAttributesEncoded":"eyJzZXNzaW9uX3N0YXJ0X3RpbWVfdXNlYyI6IjE3NTIxNDgxOTgwNzMwMDAiLCJsYW5kaW5nX3BhZ2VfdXJsIjoiaHR0cHM6Ly9yby5jby93ZWlnaHQtbG9zcy9jaGVja2VyLXBhdGgvP2djbGlkPTIxNDIzNTQiLCJsYW5kaW5nX3BhZ2VfcmVmZXJyZXIiOiIiLCJsYW5kaW5nX3BhZ2VfdXNlcl9hZ2VudCI6Ik1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzcuMC4wLjAgU2FmYXJpLzUzNy4zNiJ9","orderId":"1234","conversionValue":200,"currencyCode":"USD","cartData":{"items":[{"productId":"1234","quantity":3,"unitPrice":10.99}]},"userIdentifiers":[{"hashedEmail":"cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47"}]}],"partialFailure":true}' ) expect(responses.length).toBe(1) expect(responses[0].status).toBe(201) }) + + it('sends sessionAttributesKeyValuePairs when provided and sessionAttributesEncoded not provided', async () => { + const events: SegmentEvent[] = [ + createTestEvent({ + timestamp, + event: 'Test Event 1', + properties: { + gclid: '54321', + email: 'test1@gmail.com', + orderId: '1234', + total: '200', + currency: 'USD', + gad_source: 'Google', + gad_campaignid: '2142354', + session_start_time_usec: timestamp, + products: [ + { + product_id: '1234', + quantity: 3, + price: 10.99 + } + ] + } + }), + createTestEvent({ + timestamp, + event: 'Test Event 2', + properties: { + gclid: '54321', + email: 'test2@gmail.com', + orderId: '1234', + total: '200', + currency: 'USD', + gad_source: 'Giggle', + gad_campaignid: '9998776', + session_start_time_usec: timestamp, + products: [ + { + product_id: '1234', + quantity: 3, + price: 10.99 + } + ] + } + }) + ] + + nock(`https://googleads.googleapis.com/${API_VERSION}/customers/${customerId}:uploadClickConversions`) + .post('') + .reply(201, { results: [{}] }) + + const responses = await testDestination.testBatchAction('uploadClickConversion2', { + events, + mapping: { + conversion_action: '12345', + session_attributes_encoded: null, + session_attributes_key_value_pairs: { + gad_source: { + '@path': '$.properties.gad_source' + }, + gad_campaignid: { + '@path': '$.properties.gad_campaignid' + }, + landing_page_url: { + '@path': '$.context.page.url' + }, + session_start_time_usec: { + '@path': '$.properties.session_start_time_usec' + }, + landing_page_referrer: { + '@path': '$.context.page.referrer' + }, + landing_page_user_agent: { + '@path': '$.context.userAgent' + } + }, + __segment_internal_sync_mode: 'add' + }, + useDefaultMappings: true, + settings: { + customerId + } + }) + + expect(responses[0].options.json).toMatchObject({ + conversions: [ + { + conversionAction: 'customers/1234/conversionActions/12345', + conversionDateTime: '2021-06-10 18:08:04+00:00', + userIpAddress: '8.8.8.8', + sessionAttributesKeyValuePairs: { + keyValuePairs: [ + { sessionAttributeKey: 'gad_source', sessionAttributeValue: 'Google' }, + { sessionAttributeKey: 'gad_campaignid', sessionAttributeValue: '2142354' }, + { sessionAttributeKey: 'landing_page_url', sessionAttributeValue: 'https://segment.com/academy/' }, + { sessionAttributeKey: 'session_start_time_usec', sessionAttributeValue: '1623348484000000' }, + { + sessionAttributeKey: 'landing_page_user_agent', + sessionAttributeValue: + 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1' + } + ] + }, + orderId: '1234', + conversionValue: 200, + currencyCode: 'USD', + cartData: { + items: [{ productId: '1234', quantity: 3, unitPrice: 10.99 }] + }, + userIdentifiers: [{ hashedEmail: 'a295fa4e457ca8c72751ffb6196f34b2349dcd91443b8c70ad76082d30dbdcd9' }] + }, + { + conversionAction: 'customers/1234/conversionActions/12345', + conversionDateTime: '2021-06-10 18:08:04+00:00', + userIpAddress: '8.8.8.8', + sessionAttributesKeyValuePairs: { + keyValuePairs: [ + { sessionAttributeKey: 'gad_source', sessionAttributeValue: 'Giggle' }, + { sessionAttributeKey: 'gad_campaignid', sessionAttributeValue: '9998776' }, + { sessionAttributeKey: 'landing_page_url', sessionAttributeValue: 'https://segment.com/academy/' }, + { sessionAttributeKey: 'session_start_time_usec', sessionAttributeValue: '1623348484000000' }, + { + sessionAttributeKey: 'landing_page_user_agent', + sessionAttributeValue: + 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1' + } + ] + }, + orderId: '1234', + conversionValue: 200, + currencyCode: 'USD', + cartData: { + items: [{ productId: '1234', quantity: 3, unitPrice: 10.99 }] + }, + userIdentifiers: [{ hashedEmail: 'cc2e166955ec49675e749f9dce21db0cbd2979d4aac4a845bdde35ccb642bc47' }] + } + ], + partialFailure: true + }) + expect(responses.length).toBe(1) + expect(responses[0].status).toBe(201) + }) }) }) diff --git a/packages/destination-actions/src/destinations/google-enhanced-conversions/functions.ts b/packages/destination-actions/src/destinations/google-enhanced-conversions/functions.ts index c88209592e3..d52c5d61a0e 100644 --- a/packages/destination-actions/src/destinations/google-enhanced-conversions/functions.ts +++ b/packages/destination-actions/src/destinations/google-enhanced-conversions/functions.ts @@ -12,7 +12,9 @@ import { UserListResponse, UserList, OfflineUserJobPayload, - AddOperationPayload + AddOperationPayload, + KeyValuePairList, + KeyValueItem } from './types' import { ModifiedResponse, @@ -30,6 +32,8 @@ import { StatsContext } from '@segment/actions-core/destination-kit' import { fullFormats } from 'ajv-formats/dist/formats' import { HTTPError } from '@segment/actions-core' import type { Payload as UserListPayload } from './userList/generated-types' +import type { Payload as ClickConversionPayload } from './uploadClickConversion/generated-types' +import type { Payload as ClickConversionPayload2 } from './uploadClickConversion2/generated-types' import { RefreshTokenResponse } from '.' import { STATUS_CODE_MAPPING } from './constants' import { processHashing } from '../../lib/hashing-utils' @@ -39,6 +43,8 @@ export const FLAGON_NAME = 'google-enhanced-canary-version' export const FLAGON_NAME_PHONE_VALIDATION_CHECK = 'google-enhanced-phone-validation-check' import { PhoneNumberUtil, PhoneNumberFormat } from 'google-libphonenumber' + + const phoneUtil = PhoneNumberUtil.getInstance() type GoogleAdsErrorData = { @@ -219,6 +225,17 @@ export function convertTimestamp(timestamp: string | undefined): string | undefi return timestamp.replace(/T/, ' ').replace(/(\.\d+)?Z/, '+00:00') } +export function timestampToEpochMicroseconds(timestamp: string): string | undefined { + if(!timestamp){ + return undefined + } + const date = new Date(timestamp) + if (!isNaN(date.getTime())) { + return (date.getTime() * 1000).toString() + } + return undefined +} + export function getApiVersion(features?: Features, statsContext?: StatsContext): string { const statsClient = statsContext?.statsClient const tags = statsContext?.tags @@ -1088,3 +1105,44 @@ export const handleJobExecutionError = ( } }) } + +export function getSessionAttributesKeyValuePairs(payload: ClickConversionPayload | ClickConversionPayload2) { + const { + session_attributes_encoded, + session_attributes_key_value_pairs: { + gad_source, + gad_campaignid, + landing_page_url, + session_start_time_usec, + landing_page_referrer, + landing_page_user_agent + } = {} + } = payload + + const sessionStartTimeUsec = typeof session_start_time_usec === 'string' + ? timestampToEpochMicroseconds(session_start_time_usec) + : undefined + + const entries: [KeyValueItem['sessionAttributeKey'], string | undefined][] = [ + ['gad_source', gad_source], + ['gad_campaignid', gad_campaignid], + ['landing_page_url', landing_page_url], + ['session_start_time_usec', sessionStartTimeUsec], + ['landing_page_referrer', landing_page_referrer], + ['landing_page_user_agent', landing_page_user_agent] + ] + + const keyValuePairList: KeyValuePairList = entries + .filter( + ([_, value]) => value !== undefined && value !== null && value !== '' + ) + .map(([key, value]) => ({ + sessionAttributeKey: key, + sessionAttributeValue: value + })) + + return (!session_attributes_encoded && keyValuePairList.length > 0 + ? { sessionAttributesKeyValuePairs: { keyValuePairs: keyValuePairList } } + : {} + ) +} diff --git a/packages/destination-actions/src/destinations/google-enhanced-conversions/types.ts b/packages/destination-actions/src/destinations/google-enhanced-conversions/types.ts index 120bf405b74..5a7aee6eaba 100644 --- a/packages/destination-actions/src/destinations/google-enhanced-conversions/types.ts +++ b/packages/destination-actions/src/destinations/google-enhanced-conversions/types.ts @@ -80,7 +80,6 @@ export interface ConversionAdjustmentRequestObjectInterface { userAgent: string | undefined restatementValue?: RestatementValueInterface } - export interface ClickConversionRequestObjectInterface { cartData: CartDataInterface | undefined consent?: ConsentInterface @@ -93,11 +92,28 @@ export interface ClickConversionRequestObjectInterface { gclid: string | undefined gbraid: string | undefined wbraid: string | undefined - sessionAttributesEncoded: string | undefined + userIpAddress?: string + sessionAttributesEncoded?: string + sessionAttributesKeyValuePairs?: { + keyValuePairs: KeyValuePairList + } orderId: string | undefined userIdentifiers: UserIdentifierInterface[] } +export type KeyValuePairList = Array + +export type KeyValueItem = { + sessionAttributeKey: + 'gad_source' + | 'gad_campaignid' + | 'landing_page_url' + | 'session_start_time_usec' + | 'landing_page_referrer' + | 'landing_page_user_agent' + sessionAttributeValue?: string +} + export interface ConversionActionId { conversionAction: { resourceName: string diff --git a/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion/generated-types.ts b/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion/generated-types.ts index 67acef1f594..abfc49ebfee 100644 --- a/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion/generated-types.ts +++ b/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion/generated-types.ts @@ -18,9 +18,42 @@ export interface Payload { */ wbraid?: string /** - * A base64url-encoded JSON string containing session attributes collected from the user's browser. This provides additional attribution context if gclid, gbraid, or user identifiers are missing. + * The IP address of the user who initiated the conversion. + */ + user_ip_address?: string + /** + * A base64url-encoded JSON string containing session attributes collected from the user's browser. Provides additional attribution context if gclid, gbraid, or user identifiers are missing. */ session_attributes_encoded?: string + /** + * An alternative to the 'Session Attributes (Encoded)' field which can be used for Offline Conversions. If both 'Session Attributes (Encoded)' and 'Session Attributes (Key Value Pairs)' are provided, the encoded field takes precedence. + */ + session_attributes_key_value_pairs?: { + /** + * An aggregate parameter served in the URL to identify the source of traffic originating from ads. See [Google's docs](https://support.google.com/google-ads/answer/16193746?sjid=2692215861659291994) + */ + gad_source?: string + /** + * The ID of the specific ad campaign that drove the ad click. See [Google's docs](https://support.google.com/google-ads/answer/16193746?sjid=2692215861659291994) + */ + gad_campaignid?: string + /** + * The full URL of the landing page on your website. This indicates the specific page the user first arrived on. + */ + landing_page_url?: string + /** + * The timestamp of when the user's session began on your website. This helps track the duration of user visits. The format should be a full ISO 8601 string. For example "2025-11-18T08:52:17.023Z". + */ + session_start_time_usec?: string + /** + * The URL of the webpage that linked the user to your website. This helps understand the traffic sources leading to your site. See [Google's docs](https://support.google.com/google-ads/answer/2382957?sjid=658827203196258052) + */ + landing_page_referrer?: string + /** + * A string that identifies the user's browser and operating system. This information can be useful for understanding the technical environment of your users. + */ + landing_page_user_agent?: string + } /** * The date time at which the conversion occurred. Must be after the click time. The timezone must be specified. The format is "yyyy-mm-dd hh:mm:ss+|-hh:mm", e.g. "2019-01-01 12:32:45-08:00". */ diff --git a/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion/index.ts b/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion/index.ts index d560b751b7d..192d1da99be 100644 --- a/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion/index.ts +++ b/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion/index.ts @@ -22,7 +22,8 @@ import { getApiVersion, commonEmailValidation, getConversionActionDynamicData, - formatPhone + formatPhone, + getSessionAttributesKeyValuePairs } from '../functions' import { GOOGLE_ENHANCED_CONVERSIONS_BATCH_SIZE } from '../constants' import { processHashing } from '../../../lib/hashing-utils' @@ -55,11 +56,89 @@ const action: ActionDefinition = { 'The click identifier for clicks associated with web conversions and originating from iOS devices starting with iOS14.', type: 'string' }, + user_ip_address: { + label: 'User IP Address', + description: 'The IP address of the user who initiated the conversion.', + type: 'string', + default: { + '@path': '$.context.ip' + } + }, session_attributes_encoded: { label: 'Session Attributes (Encoded)', description: - "A base64url-encoded JSON string containing session attributes collected from the user's browser. This provides additional attribution context if gclid, gbraid, or user identifiers are missing.", - type: 'string' + "A base64url-encoded JSON string containing session attributes collected from the user's browser. Provides additional attribution context if gclid, gbraid, or user identifiers are missing. ", + type: 'string', + default: { + '@path': '$.integrations.Google Ads Conversions.session_attributes_encoded' + } + }, + session_attributes_key_value_pairs: { + label: 'Session Attributes (Key Value Pairs)', + description: + "An alternative to the 'Session Attributes (Encoded)' field which can be used for Offline Conversions. If both 'Session Attributes (Encoded)' and 'Session Attributes (Key Value Pairs)' are provided, the encoded field takes precedence.", + type: 'object', + additionalProperties: false, + defaultObjectUI: 'keyvalue', + properties: { + gad_source: { + label: 'GAD Source', + description: + "An aggregate parameter served in the URL to identify the source of traffic originating from ads. See [Google's docs](https://support.google.com/google-ads/answer/16193746?sjid=2692215861659291994)", + type: 'string' + }, + gad_campaignid: { + label: 'GAD Campaign ID', + description: + "The ID of the specific ad campaign that drove the ad click. See [Google's docs](https://support.google.com/google-ads/answer/16193746?sjid=2692215861659291994)", + type: 'string' + }, + landing_page_url: { + label: 'Landing Page URL', + description: + 'The full URL of the landing page on your website. This indicates the specific page the user first arrived on.', + type: 'string' + }, + session_start_time_usec: { + label: 'Session Start Time', + description: + "The timestamp of when the user's session began on your website. This helps track the duration of user visits. The format should be a full ISO 8601 string. For example \"2025-11-18T08:52:17.023Z\".", + type: 'string', + format: 'date-time' + }, + landing_page_referrer: { + label: 'Landing Page Referrer', + description: + "The URL of the webpage that linked the user to your website. This helps understand the traffic sources leading to your site. See [Google's docs](https://support.google.com/google-ads/answer/2382957?sjid=658827203196258052)", + type: 'string' + }, + landing_page_user_agent: { + label: 'Landing Page User Agent', + description: + "A string that identifies the user's browser and operating system. This information can be useful for understanding the technical environment of your users.", + type: 'string' + } + }, + default: { + gad_source: { + '@path': '$.properties.gad_source' + }, + gad_campaignid: { + '@path': '$.properties.gad_campaignid' + }, + landing_page_url: { + '@path': '$.context.page.url' + }, + session_start_time_usec: { + '@path': '$.properties.session_start_time_usec' + }, + landing_page_referrer: { + '@path': '$.context.page.referrer' + }, + landing_page_user_agent: { + '@path': '$.context.userAgent' + } + } }, conversion_timestamp: { label: 'Conversion Timestamp', @@ -279,13 +358,17 @@ const action: ActionDefinition = { }) } + const { session_attributes_encoded, user_ip_address } = payload + const request_object: ClickConversionRequestObjectInterface = { conversionAction: `customers/${settings.customerId}/conversionActions/${payload.conversion_action}`, conversionDateTime: convertTimestamp(payload.conversion_timestamp), gclid: payload.gclid, gbraid: payload.gbraid, wbraid: payload.wbraid, - sessionAttributesEncoded: payload.session_attributes_encoded, + ...(user_ip_address ? { userIpAddress: user_ip_address } : {}), + ...(session_attributes_encoded ? { sessionAttributesEncoded: session_attributes_encoded } : {}), + ...getSessionAttributesKeyValuePairs(payload), orderId: payload.order_id, conversionValue: payload.value, currencyCode: payload.currency, @@ -386,13 +469,17 @@ const action: ActionDefinition = { }) } + const { session_attributes_encoded, user_ip_address } = payload + const request_object: ClickConversionRequestObjectInterface = { conversionAction: `customers/${customerId}/conversionActions/${payload.conversion_action}`, conversionDateTime: convertTimestamp(payload.conversion_timestamp), gclid: payload.gclid, gbraid: payload.gbraid, wbraid: payload.wbraid, - sessionAttributesEncoded: payload.session_attributes_encoded, + ...(user_ip_address ? { userIpAddress: user_ip_address } : {}), + ...(session_attributes_encoded ? { sessionAttributesEncoded: session_attributes_encoded } : {}), + ...getSessionAttributesKeyValuePairs(payload), orderId: payload.order_id, conversionValue: payload.value, currencyCode: payload.currency, diff --git a/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion2/generated-types.ts b/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion2/generated-types.ts index 67acef1f594..abfc49ebfee 100644 --- a/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion2/generated-types.ts +++ b/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion2/generated-types.ts @@ -18,9 +18,42 @@ export interface Payload { */ wbraid?: string /** - * A base64url-encoded JSON string containing session attributes collected from the user's browser. This provides additional attribution context if gclid, gbraid, or user identifiers are missing. + * The IP address of the user who initiated the conversion. + */ + user_ip_address?: string + /** + * A base64url-encoded JSON string containing session attributes collected from the user's browser. Provides additional attribution context if gclid, gbraid, or user identifiers are missing. */ session_attributes_encoded?: string + /** + * An alternative to the 'Session Attributes (Encoded)' field which can be used for Offline Conversions. If both 'Session Attributes (Encoded)' and 'Session Attributes (Key Value Pairs)' are provided, the encoded field takes precedence. + */ + session_attributes_key_value_pairs?: { + /** + * An aggregate parameter served in the URL to identify the source of traffic originating from ads. See [Google's docs](https://support.google.com/google-ads/answer/16193746?sjid=2692215861659291994) + */ + gad_source?: string + /** + * The ID of the specific ad campaign that drove the ad click. See [Google's docs](https://support.google.com/google-ads/answer/16193746?sjid=2692215861659291994) + */ + gad_campaignid?: string + /** + * The full URL of the landing page on your website. This indicates the specific page the user first arrived on. + */ + landing_page_url?: string + /** + * The timestamp of when the user's session began on your website. This helps track the duration of user visits. The format should be a full ISO 8601 string. For example "2025-11-18T08:52:17.023Z". + */ + session_start_time_usec?: string + /** + * The URL of the webpage that linked the user to your website. This helps understand the traffic sources leading to your site. See [Google's docs](https://support.google.com/google-ads/answer/2382957?sjid=658827203196258052) + */ + landing_page_referrer?: string + /** + * A string that identifies the user's browser and operating system. This information can be useful for understanding the technical environment of your users. + */ + landing_page_user_agent?: string + } /** * The date time at which the conversion occurred. Must be after the click time. The timezone must be specified. The format is "yyyy-mm-dd hh:mm:ss+|-hh:mm", e.g. "2019-01-01 12:32:45-08:00". */ diff --git a/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion2/index.ts b/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion2/index.ts index ed1760c9c2d..f2d3d0027f9 100644 --- a/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion2/index.ts +++ b/packages/destination-actions/src/destinations/google-enhanced-conversions/uploadClickConversion2/index.ts @@ -23,7 +23,8 @@ import { commonEmailValidation, getConversionActionDynamicData, memoizedGetCustomVariables, - formatPhone + formatPhone, + getSessionAttributesKeyValuePairs } from '../functions' import { GOOGLE_ENHANCED_CONVERSIONS_BATCH_SIZE } from '../constants' import { processHashing } from '../../../lib/hashing-utils' @@ -62,11 +63,89 @@ const action: ActionDefinition = { 'The click identifier for clicks associated with web conversions and originating from iOS devices starting with iOS14.', type: 'string' }, + user_ip_address: { + label: 'User IP Address', + description: 'The IP address of the user who initiated the conversion.', + type: 'string', + default: { + '@path': '$.context.ip' + } + }, session_attributes_encoded: { label: 'Session Attributes (Encoded)', description: - "A base64url-encoded JSON string containing session attributes collected from the user's browser. This provides additional attribution context if gclid, gbraid, or user identifiers are missing.", - type: 'string' + "A base64url-encoded JSON string containing session attributes collected from the user's browser. Provides additional attribution context if gclid, gbraid, or user identifiers are missing. ", + type: 'string', + default: { + '@path': '$.integrations.Google Ads Conversions.session_attributes_encoded' + } + }, + session_attributes_key_value_pairs: { + label: 'Session Attributes (Key Value Pairs)', + description: + "An alternative to the 'Session Attributes (Encoded)' field which can be used for Offline Conversions. If both 'Session Attributes (Encoded)' and 'Session Attributes (Key Value Pairs)' are provided, the encoded field takes precedence.", + type: 'object', + additionalProperties: false, + defaultObjectUI: 'keyvalue', + properties: { + gad_source: { + label: 'GAD Source', + description: + "An aggregate parameter served in the URL to identify the source of traffic originating from ads. See [Google's docs](https://support.google.com/google-ads/answer/16193746?sjid=2692215861659291994)", + type: 'string' + }, + gad_campaignid: { + label: 'GAD Campaign ID', + description: + "The ID of the specific ad campaign that drove the ad click. See [Google's docs](https://support.google.com/google-ads/answer/16193746?sjid=2692215861659291994)", + type: 'string' + }, + landing_page_url: { + label: 'Landing Page URL', + description: + 'The full URL of the landing page on your website. This indicates the specific page the user first arrived on.', + type: 'string' + }, + session_start_time_usec: { + label: 'Session Start Time', + description: + "The timestamp of when the user's session began on your website. This helps track the duration of user visits. The format should be a full ISO 8601 string. For example \"2025-11-18T08:52:17.023Z\".", + type: 'string', + format: 'date-time' + }, + landing_page_referrer: { + label: 'Landing Page Referrer', + description: + "The URL of the webpage that linked the user to your website. This helps understand the traffic sources leading to your site. See [Google's docs](https://support.google.com/google-ads/answer/2382957?sjid=658827203196258052)", + type: 'string' + }, + landing_page_user_agent: { + label: 'Landing Page User Agent', + description: + "A string that identifies the user's browser and operating system. This information can be useful for understanding the technical environment of your users.", + type: 'string' + } + }, + default: { + gad_source: { + '@path': '$.properties.gad_source' + }, + gad_campaignid: { + '@path': '$.properties.gad_campaignid' + }, + landing_page_url: { + '@path': '$.context.page.url' + }, + session_start_time_usec: { + '@path': '$.properties.session_start_time_usec' + }, + landing_page_referrer: { + '@path': '$.context.page.referrer' + }, + landing_page_user_agent: { + '@path': '$.context.userAgent' + } + } }, conversion_timestamp: { label: 'Conversion Timestamp', @@ -287,13 +366,17 @@ const action: ActionDefinition = { }) } + const { session_attributes_encoded, user_ip_address } = payload + const request_object: ClickConversionRequestObjectInterface = { conversionAction: `customers/${settings.customerId}/conversionActions/${payload.conversion_action}`, conversionDateTime: convertTimestamp(payload.conversion_timestamp), gclid: payload.gclid, gbraid: payload.gbraid, wbraid: payload.wbraid, - sessionAttributesEncoded: payload.session_attributes_encoded, + ...(user_ip_address ? { userIpAddress: user_ip_address } : {}), + ...(session_attributes_encoded ? { sessionAttributesEncoded: session_attributes_encoded } : {}), + ...getSessionAttributesKeyValuePairs(payload), orderId: payload.order_id, conversionValue: payload.value, currencyCode: payload.currency, @@ -400,13 +483,17 @@ const action: ActionDefinition = { }) } + const { session_attributes_encoded, user_ip_address } = payloadItem + const request_object: ClickConversionRequestObjectInterface = { conversionAction: `customers/${settings.customerId}/conversionActions/${payloadItem.conversion_action}`, conversionDateTime: convertTimestamp(payloadItem.conversion_timestamp), gclid: payloadItem.gclid, gbraid: payloadItem.gbraid, wbraid: payloadItem.wbraid, - sessionAttributesEncoded: payloadItem.session_attributes_encoded, + ...(user_ip_address ? { userIpAddress: user_ip_address } : {}), + ...(session_attributes_encoded ? { sessionAttributesEncoded: session_attributes_encoded } : {}), + ...getSessionAttributesKeyValuePairs(payloadItem), orderId: payloadItem.order_id, conversionValue: payloadItem.value, currencyCode: payloadItem.currency,