In order to support ICO cookie compliance in regions that require end-user consent for allowing cookies to be set, Genesys DX now complies with this standard by making the tracking and analytics related cookies that are set through the touchpoint and visitor monitoring HTML snippets to be optional.

By default, all cookies will continue to be set upon page load. To restrict these cookies from loading automatically and only upon end-user consent, additional steps will be required on the website that the Genesys DX code is being deployed to.

Examples for deploying the ICO-compliant code are specific to each snippet:

Live Chat and AI Chatbot+Live Chat deployment through the use of Visitor Monitoring HTML example

<!-- BoldChat Live Chat Button HTML v5.00 (Type=Web,ChatButton=My Chat Button,Website=My Website) -->
<div style="text-align: center; white-space: nowrap;">
<script type="text/javascript">
 
  window.bc = window.bc || [];
  var bccbId = Math.random(); document.write(unescape('%3Cdiv id=' + bccbId + '%3E%3C/div%3E'));
  // Wrapping original embed code with function for delayed startability
  bc.startBoldChatWithCookieConsent = function (consent) {
    window._bcvma = window._bcvma || [];
    _bcvma.push(["setAccountID", "XXXXX"]);
    _bcvma.push(["setParameter", "WebsiteID", "XXXXX"]);
    _bcvma.push(["addStatic", {type: "chat", bdid: "XXXXX", id: bccbId}]);
    // This line enables the cookie policy feature based on the users choice
    _bcvma.push(["setCookieConsentPolicy", {optionalCookiesAllowed: consent}]);
    var bcLoad = function(){
      if(window.bcLoaded) return; window.bcLoaded = true;
      var vms = document.createElement("script"); vms.type = "text/javascript"; vms.async = true;
      vms.src = "https://vmss.boldchat.io/aid/xxxxx/bc.vms4/vms.js";
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(vms, s);
    };
    if(window.pageViewer && pageViewer.load) pageViewer.load();
    else if(document.readyState=="complete") bcLoad();
    else if(window.addEventListener) window.addEventListener('load', bcLoad, false);
    else window.attachEvent('onload', bcLoad);
  };
 
  // Examples for starting Boldchat with cookie consent
 
 
  // Check and start if we have the customer choice already stored
  function checkCustomerDecision() {
    if (customerAlreadyDecided()) {
      return bc.startBoldChatWithCookieConsent(readCustomerChoice());
 
    }
    askAboutCookies();
  }
 
  window.addEventListener('DOMContentLoaded', checkCustomerDecision);
 
 
  // Used for first time when we do not have the customer choice and want to start after its given without reloading the page
  function askAboutCookies() {
      var isAllowed = confirm('We are using cookies. Do you accept?');
      localStorage.setItem('bc.cookie_choice', isAllowed);
      bc.startBoldChatWithCookieConsent(isAllowed);
  }
 
  // Simple examples for storeing consent in local storage
 
  function customerAlreadyDecided() {
    return localStorage.getItem('bc.cookie_choice')
  }
 
  function readCustomerChoice() {
      var choice = localStorage.getItem('bc.cookie_choice')
      return choice === 'true'
  }
 
</script>
 <span style="font-family: Arial; font-size: 8pt; color: black;"><a href="http://www.boldchat.com" style="text-decoration: none; color: black;">Live chat</a> by BoldChat</span>
</div>
<!-- /BoldChat Live Chat Button HTML v5.00 -->

AI-only floating and embedded search Touchpoint HTML example

<!-- nanorep floating widget -->
 
// include CCP helper, use account specific url for for script src
<script type = "application/javascript" src = "https://ACCOUNTNAME.nanorep.co/web/cookie-consent-policy.js" ></script>
<script>
    // Enable the CCP feature
    window.nanorep.cookieConsentPolicy.enabled = true;
    // Wrapping original embed code with function for delayed startability
    window.nanorep.cookieConsentPolicy.helper.onCookieConsentReady(function () {
        (function(t, e, o, c, n, a) { var s = window.nanorep = window.nanorep || {}; s = s[e] = s[e] || {}, s.apiHost = a, s.host = n, s.path = c, s.account = t, s.protocol = "https:", s.on = s.on || function () { s._calls = s._calls || [], s._calls.push([].slice.call(arguments)) }; var p = s.protocol + "//" + n + c + o + "?account=" + t, l = document.createElement("script"); l.async = l.defer = !0, l.setAttribute("src", p), document.getElementsByTagName("head")[0].appendChild(l) } ("nanorep", "floatingWidget", "floating-widget.js", "/web/", "ACCOUNTNAME.nanorep.co"))
        nanorep.floatingWidget.on({
            init: function () {
                this.setConfigId('XXXXX');
                this.setKB('XXXXX');
            }
        });
    });
 
 
    // Examples for starting widget with cookie consent
 
    // Check and start if we have the customer choice already stored
    function checkCustomerDecision() {
        if (customerAlreadyDecided()) {
            return window.nanorep.cookieConsentPolicy.helper.setCookieConsentPolicy({ optionalCookiesAllowed: readCustomerChoice() });
        }
        askAboutCookies();
    }
 
    window.addEventListener('DOMContentLoaded', checkCustomerDecision);
 
    // Used for first time when we do not have the customer choice and want to start after its given without reloading the page
    function askAboutCookies() {
        var isAllowed = confirm('We are using cookies. Do you accept?');
        localStorage.setItem('bc.cookie_choice', isAllowed);
        window.nanorep.cookieConsentPolicy.helper.setCookieConsentPolicy({ optionalCookiesAllowed: isAllowed });
    }
 
    // Simple examples for storeing consent in local storage
 
    function customerAlreadyDecided() {
        return localStorage.getItem('bc.cookie_choice');
    }
 
    function readCustomerChoice() {
        var choice = localStorage.getItem('bc.cookie_choice');
        return choice === 'true';
    }
</script>
<!-- //nanorep floating widget -->

FAQ Widget example

<script>
    // Wrap the original FAQ function with the onCookieConsentReady helper.
    nanorep.cookieConsentPolicy.helper.onCookieConsentReady( function() {
        var faqWidget = new nanorep.sdk.FAQ({
            feedbackType: ‘survey’,
            hasSharing: true,
            hasDirectLink: true,
            apiParams: {
                days: 30,
                items: 10,
                kb: ‘<%Site.KBID%>’
            }
        }, document.getElementById(‘faq-example’));
    });
</script>

Support Center example

<!-- Use this snippet when Cookie Consent Policy is active -->
 <script type="text/javascript">
     window.nanorep = window.nanorep || {};
     window.nanorep.cookieConsentPolicy = window.nanorep.cookieConsentPolicy || {
         enabled: true
     };
 
     // Examples for starting Support center with cookie consent
 
     // Check and start if we have the customer choice already stored
     function checkCustomerDecision() {
       if (customerAlreadyDecided()) {
         return window.nanorep.cookieConsentPolicy.helper.setCookieConsentPolicy({ optionalCookiesAllowed: readCustomerChoice() });
       }
       askAboutCookies();
     }
 
      window.addEventListener('DOMContentLoaded', checkCustomerDecision);
 
     // Used for first time when we do not have the customer choice and want to start after its given without reloading the page
     function askAboutCookies() {
         var isAllowed = confirm('We are using cookies. Do you accept?');
         localStorage.setItem('bc.cookie_choice', isAllowed);
         window.nanorep.cookieConsentPolicy.helper.setCookieConsentPolicy({ optionalCookiesAllowed: isAllowed });
     }
 
     // Simple examples for storeing consent in local storage
 
     function customerAlreadyDecided() {
         return localStorage.getItem('bc.cookie_choice');
     }
 
     function readCustomerChoice() {
         var choice = localStorage.getItem('bc.cookie_choice');
         return choice === 'true';
     }
 </script>
 <!-- End of ACTIVE Cookie Consent Policy Block -->

Embedded Widget within Support Center example

<div id=“nanorep-embedded-widget”></div>
<script>
    // Wrap the original embed code function with the onCookieConsentReady helper.
    nanorep.cookieConsentPolicy.helper.onCookieConsentReady( function() {
        (function(account, expose, entry, path, staticHost, apiHost) {
            var ns = this.nanorep = this.nanorep || {}; ns = ns[expose] = ns[expose] || {}; ns.apiHost = apiHost; ns.host = staticHost; ns.path = path; ns.account = account; ns.protocol = (location.protocol === ‘https:’ ? ‘https:’ : ‘http:‘); ns.on = ns.on || function() {ns._calls = ns._calls || []; ns._calls.push([].slice.call(arguments)); }; var url = ns.protocol + ‘//’ + staticHost + path + entry + ‘?account=’ + account, script = document.createElement(‘script’); script.async = script.defer = true; script.setAttribute(‘src’, url); document.getElementsByTagName(‘head’)[0].appendChild(script);
        }(‘<%Site.Account%>’, ‘embeddedWidget’, ‘embedded-widget.js’, ‘/web/‘, ‘<%Site.cdnDomain%>‘, ‘<%Site.accountDNS%>’));
    });
</script>

Embedded Support Center example:

<!-- Additional code for Cookie Consent Policy -->
    <script>
        window.nanorep = window.nanorep || {};
        window.nanorep.cookieConsentPolicy = window.nanorep.cookieConsentPolicy || {
            enabled: true
        };
 
    // Examples for starting widget with cookie consent
  
    // Check and start if we have the customer choice already stored
    function checkCustomerDecision() {
        if (customerAlreadyDecided()) {
            return window.nanorep.cookieConsentPolicy.helper.setCookieConsentPolicy({ optionalCookiesAllowed: readCustomerChoice() });
        }
        askAboutCookies();
    }
  
    window.addEventListener('DOMContentLoaded', checkCustomerDecision);
  
    // Used for first time when we do not have the customer choice and want to start after its given without reloading the page
    function askAboutCookies() {
        var isAllowed = confirm('We are using cookies. Do you accept?');
        localStorage.setItem('bc.cookie_choice', isAllowed);
        window.nanorep.cookieConsentPolicy.helper.setCookieConsentPolicy({ optionalCookiesAllowed: isAllowed });
    }
  
    // Simple examples for storeing consent in local storage
  
    function customerAlreadyDecided() {
        return localStorage.getItem('bc.cookie_choice');
    }
  
    function readCustomerChoice() {
        var choice = localStorage.getItem('bc.cookie_choice');
        return choice === 'true';
    }
    </script>
 
    <!-- the plain old Support Center embedding script (ES6 version) -->
    <script>
        const host = 'csati-laptop.nanorep.com';
        const scHost = 'embedded1-sc.csati-nr.local';
 
        loadSupportCenterScript(scHost, "supportCenter", "support-center.js", "/web/", host);
 
        async function loadSupportCenterScript (scHost, namespace, o, n, nrHost) {
            let s = window.nanorep = window.nanorep || {};
            s = s[namespace] = s[namespace] || {}, s.host = nrHost, s.path = n, s.domain = scHost, s.protocol = "https:" === location.protocol ? "https:" : "http:", s.on = s.on || function () {
                s._calls = s._calls || [], s._calls.push([].slice.call(arguments))
            };
            const path = s.protocol + "//" + nrHost + n + o;
            await import(path);
        }
    </script>

Following these examples, this can also be integrated with existing user consent tracking solutions such as OneTrust. In addition to following the code examples, this additional code can be used for the integration.

AI only Touchpoints:

window.nanorep.cookieConsentPolicy.helper.setCookieConsentPolicy({ optionalCookiesAllowed: isAllowed })

AI+Live Chat Touchpoints:

bc.startBoldChatWithCookieConsent(isAllowed);

Please note that if an end user does not consent to allowing the cookies used by Genesys DX to bet set for tracking and analytics purposes, this data will not be captured through the service and will affect Genesys DX reporting as these interactions and engagements will not be tracked in order to be compliant with not collecting this information.

Affected reporting, analytics and visitor tracking cookies

These cookies are used for visitor tracking and monitoring to enable (AI) Reporting and Business Insights and they can be disabled by using the ICO Cookie Compliance settings.

Cookie Description Lifespan Category
Referer

It is responsible for the Support Center's traffic monitoring. It provides information to the backend about the origin of the page visits, tracking if the user opens the Support Center page from the same webdomain. 
If turned off, AI reporting does not collect data.

End of session Functional
[userId] Stores visits, last activity timestamp, engagement flags.
If turned off, AI reporting does not collect data.
Persistent Functional
bc.visitor_token Identifies the visitor in Business Insights, used also when navigating across subdomains and by the customer information hub. Persistent Functional
u The cookie is used by visitors' engagement tracking in Bold360Ai's reporting system and leveraged by internal analytics tools. If the 'u' cookie is blocked, then the Engagement and Interaction data in legacy AI reporting gets distorted.

Persistent

(max. 1 year)

Functional