diff --git a/spec/src/modules/tracker.js b/spec/src/modules/tracker.js index 7e701959..000ef290 100644 --- a/spec/src/modules/tracker.js +++ b/spec/src/modules/tracker.js @@ -4911,6 +4911,8 @@ describe(`ConstructorIO - Tracker${bundledDescriptionSuffix}`, () => { resultId: 'result-id', section: 'Products', analyticsTags: testAnalyticsTag, + slCampaignOwner: 'Campaign Man', + slCampaignId: 'Campaign 123', }; it('Backwards Compatibility - Should respond with a valid response when snake cased parameters are provided', (done) => { @@ -5186,6 +5188,8 @@ describe(`ConstructorIO - Tracker${bundledDescriptionSuffix}`, () => { expect(requestParams).to.have.property('result_id').to.equal(optionalParameters.resultId); expect(requestParams).to.have.property('section').to.equal(optionalParameters.section); expect(requestParams).to.have.property('analytics_tags').to.deep.equal(testAnalyticsTag); + expect(requestParams).to.have.property('sl_campaign_id').to.deep.equal(optionalParameters.slCampaignId); + expect(requestParams).to.have.property('sl_campaign_owner').to.deep.equal(optionalParameters.slCampaignOwner); // Response expect(responseParams).to.have.property('method').to.equal('POST'); diff --git a/src/modules/tracker.js b/src/modules/tracker.js index 0a970d3d..301800a5 100644 --- a/src/modules/tracker.js +++ b/src/modules/tracker.js @@ -1349,6 +1349,8 @@ class Tracker { * @param {object} [parameters.analyticsTags] - Pass additional analytics data * @param {object} [networkParameters] - Parameters relevant to the network request * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds) + * @param {string} [parameters.slCampaignId] - Pass campaign id of sponsored listing + * @param {string} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing * @returns {(true|Error)} * @description User clicked an item that appeared within a list of recommended results * @example @@ -1395,6 +1397,8 @@ class Tracker { item_name, itemName = item_name, analyticsTags, + slCampaignId, + slCampaignOwner, } = parameters; if (variationId) { @@ -1445,6 +1449,14 @@ class Tracker { bodyParams.analytics_tags = analyticsTags; } + if (slCampaignId) { + bodyParams.sl_campaign_id = slCampaignId; + } + + if (slCampaignOwner) { + bodyParams.sl_campaign_owner = slCampaignOwner; + } + const requestURL = `${requestPath}${applyParamsAsString({}, this.options)}`; const requestMethod = 'POST'; const requestBody = applyParams(bodyParams, { ...this.options, requestMethod }); diff --git a/src/types/tracker.d.ts b/src/types/tracker.d.ts index 75f08487..ba76b95f 100644 --- a/src/types/tracker.d.ts +++ b/src/types/tracker.d.ts @@ -163,6 +163,8 @@ declare class Tracker { resultPositionOnPage?: number; numResultsPerPage?: number; analyticsTags?: Record; + slCampaignId?: string; + slCampaignOwner?: string; }, networkParameters?: NetworkParameters ): true | Error;