Digital Agent Mailing List Subscription
SUBSCRIBE TO ONE-TO-ONE INSIGHTS NEWSLETTER
Almost Finished...
We need to confirm your email address.
To complete the subscription process, please click the link in the email we just sent you.
(function () { // Function to initialize our logic function initFunction(modal, button) { // Return if AWS Connect elements are not rendered if (!button || !modal) return; // Set up constants for timers/intervals/localStorage const FIFTEEN_MINUTES = 15 * 60 * 1000; const FIVE_MINUTES = 5 * 60 * 1000; const FIFTEEN_SECONDS = 15 * 1000; const STORAGE_KEY = "lastClickTime"; // Set up variables to track timers/intervals/pageSync let autoClickTimeout = null; let expirationInterval = null; let hasScheduledInitial = false; let isInitialized = false; // Only execute logic in active tab function isActiveTab() { return document.visibilityState === "visible"; } function isModalClosed() { return !modal.classList.contains("show"); } // Updates localStorage time with updated timestamp on click function saveClickTime(timestamp) { if (timestamp === null || timestamp === undefined) return; localStorage.setItem(STORAGE_KEY, timestamp.toString()); } // Gets latest localStorage timestamp for current tab function getClickTime() { let stored = localStorage.getItem(STORAGE_KEY); if (!stored) return null; let parsed = parseInt(stored, 10); if (isNaN(parsed)) return null; return parsed; } // Executive function for timers/intervals (manages the button click) function executeTrigger() { const lastClickTime = getClickTime(); // If button was never clicked, or clicked 15 minutes ago; if (!lastClickTime || Date.now() - lastClickTime >= FIFTEEN_MINUTES) { if (isActiveTab() && isModalClosed()) { // Click the button if the tab is active and modal is closed: button.click(); } } } // Start timers and intervals for current tab function startAutoClickCycle() { if (hasScheduledInitial) return; hasScheduledInitial = true; autoClickTimeout = setTimeout(executeTrigger, FIFTEEN_SECONDS); expirationInterval = setInterval(executeTrigger, FIVE_MINUTES); } // Cancel all timers/intervals on page unload function cancelTimers() { if (autoClickTimeout) { clearTimeout(autoClickTimeout); autoClickTimeout = null; } if (expirationInterval) { clearInterval(expirationInterval); expirationInterval = null; } hasScheduledInitial = false; } // Existing connector code (trigger click on first major scroll event) function onScroll() { if (window.scrollY > 1500) { executeTrigger(); window.removeEventListener('scroll', onScroll); } } window.addEventListener('scroll', onScroll); window.addEventListener('unload', function() { cancelTimers(); }); // Handle button click // This event handler will always run AFTER the AWS handler because of load order. // We force this script to delay initialization until AWS Connect widget is available on the page button.addEventListener('click', function() { if (autoClickTimeout) { clearTimeout(autoClickTimeout); autoClickTimeout = null; } saveClickTime(Date.now()); }); startAutoClickCycle(); } // Force wait for AWS Connect widget to be loaded on page before initializing function waitForElements(callback) { const MODAL_ID = 'amazon-connect-widget-frame'; const BUTTON_ID = "amazon-connect-open-widget-button"; let failCounter = 0; // Retry check a maximum of 3 times, with 500ms delay between each attempt const interval = setInterval(function() { const modal = document.getElementById(MODAL_ID) || null; const button = document.getElementById(BUTTON_ID) || null; if (( modal && button ) || failCounter > 3) { // Initialize logic if AWS Connect button and modal exist clearInterval(interval); callback(modal, button); } else { failCounter++; } }, 500); } // This ensures that we always call waitForElements when the document is ready if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", function() { waitForElements(initFunction) }); } else { waitForElements(initFunction); } })();