Skip to content

Commit cf5f4d4

Browse files
committed
backward compatibility with the existing "Personalization" method
1 parent 02eede4 commit cf5f4d4

File tree

3 files changed

+52
-59
lines changed

3 files changed

+52
-59
lines changed

README.md

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -335,13 +335,47 @@ client.setAnalyticsTag('Navigation search');
335335

336336
### Personalization
337337

338+
#### Enable personalization tracking
339+
Enable personalization tracking, personalization token will be included in every stat events as "session ID". <br/>
340+
341+
Set stats session ID if personalization token is generated by your site.
342+
```js
343+
client.setStatsSessionId(id);
344+
```
345+
346+
If session ID is not set, a UUID is generated and stored in AddSearch's cookie. Cookie's name: addsearchPersonalizationToken
347+
Specify how many days personalization token stay in cookie. By default, it's 180 days.
348+
```js
349+
// Defaults - isEnabled: false, expirationDays: 180
350+
client.enablePersonalizationTracking(isEnabled, expirationDays);
351+
```
352+
353+
354+
#### Allow storing personalization token in cookie
355+
By default, the value is true. Set it to false when users disallow usage of functional/analytics cookie. <br/>
356+
This method is used when you have a cookie consent popup, and a function handler in case users rejects usage of personalization cookie.
357+
```js
358+
// Default: true
359+
client.consentAddSearchCookie(false);
360+
```
361+
362+
338363
#### Set user token (for personalized search results)
339364
```js
340365
// Add a user token to the search request (if personalization in use)
341-
client.setUserToken('uuid');
366+
client.setUserToken('Personalization token');
342367
```
343368

344-
#### Send personalization events with search query
369+
370+
#### Get personalization token from AddSearch cookie
371+
Get the personalization token which is stored in AddSearch cookie (if available).
372+
```js
373+
// Get a personalization token
374+
client.getPersonalizationToken();
375+
```
376+
377+
378+
#### Send personalization events with search query - deprecated
345379
In personalized search, user events are typically sent to AddSearch via API and a user token
346380
is passed with the search query (see setUserToken function).
347381
An alternative way is to send user events needed for personalization with the search query.
@@ -359,40 +393,6 @@ client.setPersonalizationEvents(events);
359393
```
360394

361395

362-
### Advanced Personalization
363-
364-
#### Set personalization token
365-
Set personalization token (for personalized search results). <br/>
366-
Use this method when personalization token is generated by your website.
367-
```js
368-
// Add a personalization token to the search/click event (if personalization in use)
369-
client.setPersonalizationToken('personalization_token');
370-
```
371-
372-
#### Get personalization token from AddSearch cookie
373-
Get the personalization token which is stored in AddSearch cookie (if available).
374-
```js
375-
// Add a personalization token to the stat events
376-
client.getPersonalizationTokenInCookie();
377-
```
378-
379-
#### Enable personalization tracking
380-
Enable personalization tracking, personalization token will be included in every stat events. <br/>
381-
If personalization token is not set, a UUID is generated and will be sent to AddSearch's cookie.
382-
Specify how many days personalization token stay in cookie. By default, it's 180 days.
383-
```js
384-
// Defaults - isEnabled: false, expirationDays: 180
385-
client.enablePersonalizationTracking(isEnabled, expirationDays);
386-
```
387-
388-
#### Enable AddSearch cookie
389-
Set it to false when users disallow usage of cookie. <br/>
390-
This method is used when you have a cookie consent popup, and a function handler in case users disallow usage of personalization cookie.
391-
```js
392-
// Default: true
393-
client.enableAddSearchCookie(isAllowedToSendCookie);
394-
```
395-
396396

397397
### Other
398398

src/index.js

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ var client = function(sitekey, privatekey) {
1717
this.apiHostname = API_HOSTNAME;
1818
this.settings = new Settings();
1919
this.sessionId = ('a-' + (Math.random() * 100000000)).substring(0, 10);
20-
this.personalizationToken = null;
21-
var personalizationToken = undefined;
20+
this.personalizationToken = cookie.getCookie(PERSONALIZATION_TOKEN_COOKIE_NAME) || util.generateUUID();
2221

2322
/**
2423
* Fetch search results
@@ -204,28 +203,25 @@ var client = function(sitekey, privatekey) {
204203
this.setCollectAnalytics = function(collectAnalytics) {this.settings.setCollectAnalytics(collectAnalytics);}
205204
this.setAnalyticsTag = function(tagName) {this.settings.setAnalyticsTag(tagName)}
206205
this.setThrottleTime = function(delay) {this.settings.setThrottleTime(delay);}
207-
this.setStatsSessionId = function(id) {this.sessionId = id;}
206+
this.setStatsSessionId = function(id) {
207+
this.sessionId = id;
208+
this.personalizationToken = id;
209+
}
208210
this.getStatsSessionId = function() {return this.sessionId;}
209211
this.enableLogicalOperators = function(enableLogicalOperators) {this.settings.enableLogicalOperators(enableLogicalOperators)};
210212
this.setSearchOperator = function(operator) {this.settings.setSearchOperator(operator)};
211213

212214
this.sendStatsEvent = function(type, keyword, data) {
213215

214-
215-
if (!personalizationToken && isAddSearchCookieEnabled) {
216-
personalizationToken = cookie.getCookie(PERSONALIZATION_TOKEN_COOKIE_NAME);
217-
218-
if (!personalizationToken) {
219-
personalizationToken = util.generateUUID();
220-
cookie.setCookie(PERSONALIZATION_TOKEN_COOKIE_NAME, personalizationToken, personalizationCookieExpireDays);
221-
}
216+
var usePersonalizationToken = isPersonalizationTrackingEnabled && isAddSearchCookieConsented;
217+
if (usePersonalizationToken && !cookie.getCookie(PERSONALIZATION_TOKEN_COOKIE_NAME)) {
218+
cookie.setCookie(PERSONALIZATION_TOKEN_COOKIE_NAME, this.personalizationToken, personalizationCookieExpireDays);
222219
}
223220

224221
if (type === 'search') {
225222
let payload = {
226223
action: 'search',
227-
session: this.sessionId,
228-
userToken: isPersonalizationTrackingEnabled ? personalizationToken : undefined,
224+
session: usePersonalizationToken ? this.personalizationToken : this.sessionId,
229225
keyword: keyword,
230226
numberOfResults: data.numberOfResults,
231227
analyticsTag: this.getSettings().analyticsTag
@@ -236,8 +232,7 @@ var client = function(sitekey, privatekey) {
236232
else if (type === 'click') {
237233
let payload = {
238234
action: 'click',
239-
session: this.sessionId,
240-
userToken: isPersonalizationTrackingEnabled ? personalizationToken : undefined,
235+
session: usePersonalizationToken ? this.personalizationToken : this.sessionId,
241236
keyword: keyword,
242237
docid: data.documentId,
243238
position: data.position,
@@ -255,13 +250,11 @@ var client = function(sitekey, privatekey) {
255250
* Personalization
256251
*/
257252
var isPersonalizationTrackingEnabled = false;
258-
var isAddSearchCookieEnabled = true;
253+
var isAddSearchCookieConsented = true;
259254
var personalizationCookieExpireDays = 180;
260255

261-
this.setPersonalizationToken = function(userToken) { personalizationToken = userToken };
262-
263-
this.getPersonalizationTokenInCookie = function() {
264-
return cookie.getCookie(PERSONALIZATION_TOKEN_COOKIE_NAME);
256+
this.getPersonalizationToken = function() {
257+
return this.personalizationToken;
265258
};
266259

267260
this.enablePersonalizationTracking = function(isEnabled, cookieExpireDays) {
@@ -271,8 +264,8 @@ var client = function(sitekey, privatekey) {
271264
}
272265
};
273266

274-
this.enableAddSearchCookie = function(isEnabled) {
275-
isAddSearchCookieEnabled = !!isEnabled;
267+
this.consentAddSearchCookie = function(isEnabled) {
268+
isAddSearchCookieConsented = !!isEnabled;
276269
};
277270

278271

src/util.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ const validateSetPagingParams = function(page, pageSize, sortBy, sortOrder) {
4141
}
4242

4343
const generateUUID = function() {
44-
return uuidv4();
44+
return uuidv4().replace(/-/g, '');
4545
};
4646

4747
module.exports = {

0 commit comments

Comments
 (0)