console.log('[IdleChat] oasis-script started executing'); var idleTimer; var IDLE_DELAY_MS = 30000; // 30 seconds var widgetReady = false; var readyPoll; var pollCount = 0; function resetIdleTimer() { if (!widgetReady) return; clearTimeout(idleTimer); idleTimer = setTimeout(openChatOnIdle, IDLE_DELAY_MS); console.log('[IdleChat] idle timer (re)started'); } function openChatOnIdle() { console.log('[IdleChat] 30s idle reached, attempting launchChat()'); try { if (window.embeddedservice_bootstrap && window.embeddedservice_bootstrap.utilAPI) { window.embeddedservice_bootstrap.utilAPI.launchChat() .then(function () { console.log('[IdleChat] SUCCESS - proactive chat opened'); }) .catch(function (err) { console.error('[IdleChat] launchChat FAILED:', err); }); } else { console.warn('[IdleChat] embeddedservice_bootstrap not available at idle time'); } } catch (e) { console.error('[IdleChat] Exception calling launchChat:', e); } } ['mousemove', 'keydown', 'scroll', 'click', 'touchstart'].forEach(function (evt) { document.addEventListener(evt, function () { console.log('[IdleChat] activity detected: ' + evt); resetIdleTimer(); }, true); }); // Poll for widget readiness instead of relying on the cross-context event readyPoll = setInterval(function () { pollCount++; console.log('[IdleChat] poll #' + pollCount + ' - checking widget readiness...'); if (window.embeddedservice_bootstrap && window.embeddedservice_bootstrap.utilAPI) { widgetReady = true; clearInterval(readyPoll); console.log('[IdleChat] widget is READY, starting idle timer'); // Try the setting too (harmless, but won't affect an already-rendered button) try { if (window.embeddedservice_bootstrap.settings) { window.embeddedservice_bootstrap.settings.defaultMinimizedText = 'Merlin'; } } catch (e) { console.error('[IdleChat] Could not set defaultMinimizedText:', e); } resetIdleTimer(); // start the 30s countdown once ready } if (pollCount > 30) { clearInterval(readyPoll); console.error('[IdleChat] gave up polling after 30s - widget never became available inside oasis-script'); } }, 1000); // --- Rename the launcher/minimized button text directly in the DOM --- var NEW_LABEL = 'Merlin'; var OLD_LABEL = 'Ask Me Anything'; function renameLauncherButton(root) { try { var walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null, false); var node; while ((node = walker.nextNode())) { if (node.nodeValue && node.nodeValue.indexOf(OLD_LABEL) !== -1) { node.nodeValue = node.nodeValue.replace(OLD_LABEL, NEW_LABEL); console.log('[IdleChat] Renamed launcher button text to ' + NEW_LABEL); } } } catch (e) { console.error('[IdleChat] renameLauncherButton error:', e); } } // Run once immediately in case the button already exists renameLauncherButton(document.body); // Watch for the button being added/re-rendered later (e.g. after minimizing chat) var buttonObserver = new MutationObserver(function (mutations) { for (var i = 0; i < mutations.length; i++) { var m = mutations[i]; if (m.addedNodes && m.addedNodes.length) { for (var j = 0; j < m.addedNodes.length; j++) { var added = m.addedNodes[j]; if (added.nodeType === 1) { renameLauncherButton(added); } } } } }); buttonObserver.observe(document.body, { childList: true, subtree: true }); console.log('[IdleChat] MutationObserver watching for launcher button text');