- PRIVATKUNDEN
- GESCHÄFTSKUNDEN
- O2 Shops
- Bestellhotline 089 78 79 79 409 Datenschutzhinweise
{{{ data }}}
Warenkorb
- Angebote für O2 Kunden
- Priority-Vorteilswelt
- O2 Community
- Vertragsverlängerung
- Zum Login
- Mein O2 App installieren
- Kennwort vergessen?
- Neu bei O2? Registrieren
Direkt zu den idealen Business-Angeboten
Warum ist das wichtig?
Je nach Anzahl der Verträge bieten wir individuell optimierteKonditionen. So sind z. B. unsereAngebote für Selbständigeperfekt auf wenige Nutzer abgestimmt – während dieO2 Business Angeboteexklusive Vorteile für viele Mitarbeiter bieten.
Service Netzstörung
Mobilfunkstörung prüfen und Empfang verbessern
Störungen in Echtzeit prüfen Profitipps bei Empfangsproblemen Hilfestellungen aus unserer O2 Community
Jetzt Störung prüfenZu den Profitipps
Möchtest du aktiv zur Verbesserung unseres Service zur O2 Netzstörung beitragen?
Dann nimm jetzt an unserer kurzen Umfrage teil und lass uns deine wertvolle Meinung wissen. Deine Teilnahme hilft uns dabei, eine noch bessere Auskunft über unser Netz für dich und alle unsere Kunden bereitzustellen.
Profitipps bei Empfangsproblemen
Wenn du auf dem Handy Empfangsprobleme hast, kannst du nachfolgende Tipps ausprobieren. Weitere Infos findest du auch auf der Seite Handyempfang verbessern.
Erste Hilfe bei Netzstörungen
- 1
- 2
- 3
- 4
- 5
Gerät neustarten
Führe einen Neustart durch, indem du dein Gerät einmal aus- und wieder einschaltest.
Deine SIM-Karte wählt sich dadurch neu ins Mobilfunknetz ein. Meist wird das Problem damit behoben – und du kannst wieder störungsfrei telefonieren, simsen und im Internet surfen.
Manuelle Netzwahl
Unter Umständen hilft auch eine manuelle Netzwahl. Diese kannst du in den Einstellungen deines Geräts vornehmen. Wähle bitte „o2 – de+“ als Netz aus. Nach einer erfolgreichen Einbuchung kannst du die Einstellungen wieder auf automatische Netzwahl zurückstellen.
Wenn du dabei Unterstützung benötigst, nutze gerne unsere O2 Handyhilfe.
Zur Handyhilfe
SIM-Karte in einem anderen Gerät testen
Um eine Netzstörung auszuschließen, lege die SIM-Karte bitte in ein anderes Gerät ein. Sollte das Problem dort nicht mehr bestehen, könnte die Störung an einem Defekt deines Geräts liegen.
Hilfe bei Handy-Defekt
Kein Erfolg?
Du hast die genannten Tipps durchgeführt und immer noch Netzeinschränkungen? Dann teste gerne noch unsere O2 my Service App, die weitere Tipps zur Störungsbehebung gibt.
Wenn du eine Störung melden möchtest, gib entweder im Live-Check hier oder in der Mein O2 App deinen Standort ein und klicke den Button „Geben Sie uns Feedback“.
So geht es weiter
Wir prüfen deine Störungsmeldung und informieren dich per SMS, wenn die Störung behoben ist.
Weitere Informationen
O2 Community: Aktuelle Beiträge rund um dein Thema
Keine Antwort gefunden? Gib deine Frage ein, durchsuche die O2 Community oder stöbere in anderen Beiträgenund unserem Ratgeber-Bereichfür mehr Hilfe.
FAQ
Wie lange kann eine Störung dauern?
Einige Netzstörungen lassen sich direkt per Mausklick von der Zentrale aus beseitigen und können innerhalb von kurzer Zeit behoben werden. In anderen Fällen muss ein Techniker ausrücken und die Einschränkung vor Ort beheben. Dies kann hin und wieder zu Herausforderungen führen, z. B. wenn es bei Orkan, Eis oder Schnee aus Sicherheitsgründen nicht möglich ist, auf den Funkmast zu steigen oder die notwendigen Arbeiten nicht ausgeführt werden können.
Liegt eine technisch komplexe Situation vor oder die Lieferzeit von speziellen Ersatzteilen dauert länger als üblich, kann die Entstörung der Basisstation mehr Zeit in Anspruch nehmen.
Netzstörung prüfen >
Hat O2 eine App die mich bei einer Störung unterstützt?
Ja, mit unserer innovativen O2myServiceApp kannst du nicht nur eine Störung melden oder einen Speedtest durchführen, sie bietet dir auch eine automatische Erkennung und Lösung für viele Netz-, WLAN- und Hardwareprobleme.
Und das Beste: Die App unterstützt dich nicht nur bei Mobilfunk und deinem Handy, sondern auch bei deinem O2 Internet- & Festnetz-Anschluss zuhause.
Lade dir die O2myServiceApp jetzt hier auf dein Smartphone.
Was ist der Unterschied zwischen dem Live Check und der Abfrage zur Netzabdeckung?
Der Live-Check informiert über tagesaktuelle Störungen oder geplante Arbeiten an unseren Basisstationen.
Die Abfrage der Netzabdeckung zeigt an, wie gut unser Netz an dem gesuchten Standort ausgebaut ist.
Was bedeutet der Button „Geben Sie uns Feedback“? Kann ich O2 darüber eine Störung melden?
Im Live-Check kannst du uns über den Button „Geben Sie uns Feedback“ Beeinträchtigungen im Netz am Standort mitteilen. Per SMS bestätigen wir dir den Eingang der Meldung und teilen dir die Ticketnummer mit. Ebenfalls per SMS informieren wir dich über den Status der Bearbeitung.
Bekomme ich eine Rückmeldung, wenn ich eine Störung melde?
Wir bestätigen dir den Eingang per SMS und sobald die Störung behoben ist, informieren wir dich ebenfalls per SMS.
Warum muss ich nach Klicken des Buttons „Geben Sie uns Feedback“ meine Rufnummer angeben?
Hast du eine Störung gemeldet, informieren wir dich per SMS über den Verlauf der Störungsbehebung. Dazu benötigen wir deine Rufnummer.
Den Schutz der Privatsphäre und personenbezogener Daten nehmen wir sehr ernst. Die im Rahmen dieses Dienstes erhobenen personenbezogenen Daten werden nur zum Zwecke der vollständigen Leistungserbringung gespeichert und danach gelöscht. Die Daten werden weder an Dritte weitergegebennoch zu anderen Zwecken verwendet.
Meine Datenverbindung ist langsam – was kann ich tun?
- Zunächst solltest du prüfen, ob das Handy im schnellsten verfügbaren Netz eingebucht ist.
Unter Netz > Einstellungen sollte „automatisch“ ausgewählt sein.
Beachte auch, dass in Kellern oder in massiv gebauten Gebäuden der Empfang nicht immer optimal ist. - Möglich ist auch, dass das High-Speed-Volumen deines Tarifs für den Abrechnungsmonat bereits verbraucht istoder dass in deinen Tarifkonditionen eine Maximalgeschwindigkeit festgelegt ist. Deine Tarifkonditionen und deinen Verbrauch kannst du jederzeit in Mein O2 oder der Mein O2 App einsehen.
Ist dies ausgeschlossen, kann es sich um einen punktuellen Kapazitätsengpass handeln. Dies kannst du im Live-Check prüfen.
Woran kann es liegen, dass ich keine Internet-/Datenverbindung bekomme?
Um auf das Netz zuzugreifen und eine Verbindung mit dem Internet herstellen zu können, muss ein Verbindungsprofil eingerichtet und aktiviert werden. Das Profil wird grundsätzlich automatisch auf deinem O2 Gerät installiert. Falls sich dein Gerät nicht mit dem Internet verbindet, kannst du die Einstellungen manuell überprüfen und festlegen. Die Möglichkeiten zurautomatischen und auch zur manuellen Konfigurationfindest du hier.
Können alle Kunden Störungsmeldungen abgeben?
Derzeit können nur O2 Kunden Störungsmeldungen abgeben bzw. sich über den Status von Basisstationen informieren lassen. Sobald weitere Kundengruppen anderer Marken auch die Möglichkeit haben, werden wir dies kommunizieren.
Verwandte Themen
Netzabdeckung
Du möchtest wissen, wie gut das O2 Netz an deinem Standort ist? Mit der interaktiven Karte kannst du die Netzabdeckung vor Ort prüfen.
- Zur Netzabdeckung
Alle Infos zu LTE und 5G
Auf die Abkürzungen LTE und 5G stößt man schnell, sobald man sich beim Kauf eines Smartphones mit dessen wichtigsten Funktionen und Eigenschaften beschäftigt. Doch was steckt eigentlich hinter diesen Bezeichnungen?
- Jetzt mehr erfahren
Zahlungsart
Einfach und sicher per Bankeinzug bezahlen
Zahlungsart
Bestellhotline
Anrufen und Vorteile sichern
Jetzt anrufen
Feedback zur Website
Schreibe uns gerne deine Ideen und Kritik
Feedback geben
Kontakt
Impressum
Hinweise ElektroG/BattG
Produktinformationsblatt
Datenschutz
Cookie-Einstellungen
Vertrag kündigen
Kontakt
Vielen Dank für dein Verständnis.")setTimeout(function () { //Added code to disable user input field July 7th 2023TeneoWebChat.call('disable_upload_button');}, 50)endConversation(TeneoWebChat.get('storage').getItem("cctSessionId"));}}function makeApiCall() {if (TeneoWebChat.get('storage').getItem("asyncFeature") == "Y") {getMessageFromCCT();} else {clearInterval(interval);}}// Initiate callfunction getMessageFromCCT() {fetch(cctURL + '/message/' + TeneoWebChat.get('storage').getItem("cctSessionId")).then((response) => response.json()).then((json) => {if (json.hasOwnProperty('output') && json.output.hasOwnProperty('text') && json.output.text != "") {const text1 = json.output.text;const arr = text1.split('||');for (var i = 0; i < arr.length; i++) {if (arr[i].includes("☺")) {arr[i] = arr[i].replace(/☺/g, "😊");}createAndAddTWCMessage("text", arr[i].replace(/\n/g, "
"));}}if (json.message == "Chat already closed") {TeneoWebChat.get('storage').setItem("asyncFeature", "N");TeneoWebChat.call('add_message', {type: 'text', author: 'bot', data: {text: 'Vielen Dank für das Gespräch. Wir stehen für deine Fragen immer zur Verfügung. Bis zum nächsten Mal.'}});setTimeout(function () { //Disable Endchat after Session end with AgentTeneoWebChat.call('disable_upload_button');}, 50)TeneoWebChat.get('storage').setItem("cctSessionId", "");endchatbuttonactive = false;}});}function createAndAddTWCMessage(type, data) {let message = {"type": type,"author": "bot","data": data}if (type == "text") {message["data"] = {"text": data}}TeneoWebChat.call('add_message', message);}async function syncStartCCTConversation(text, params) {var timeDiff = "";if (endChatButtonTime != null && endChatButtonTime != undefined) {timeDiff = Math.abs(new Date() - endChatButtonTime);}var teneodata = {"viewtype": "tieapi", "timeDiff": timeDiff, "greetingMessageStart": "N"};var errorParams = {}if (params != undefined && params != null && params != "" && params.size > 0) {params.forEach((value, key) => {teneodata[key] = value;errorParams[key] = value;});}var data = {"userinput": text,"brandid": "1","servicename": "CHAT_BOT_O2","teneodata": teneodata}var errorTeneoMsg = {"text": text,"silent": true,"greetingMessageStart": "N","parameters": errorParams}showBotTypingIndicator();disableUserInput();var response = {}try {const response = await fetch(cctURL + '/conversation/start', {method: "POST",body: JSON.stringify(data),headers: {"Content-type": "application/json"},signal: AbortSignal.timeout(10000)});if (response.status == 200) {const json = await response.json();console.log(json);if (json.status == 0) {endchatbuttonactive = true;TeneoWebChat.get('storage').setItem("cctSessionId", json.sessionId);var enouragementmsg = json.output.parameters // Encouagement Code setting encmsg ID 7-19-2023TeneoWebChat.get('storage').setItem("Enouragementmsg", enouragementmsg.encouragements); // Encouagement Code setting encmsg ID 7-19-2023callingEncouagementMethod(json.sessionId, enouragementmsg)if (json.output.parameters.hasOwnProperty('retriggerTeneo') && json.output.parameters.retriggerTeneo == "Y") {syncSendMessagetoCCT(text, params)} else {let message = {"type": "text","author": "bot","data": {"text": json.output.text}}TeneoWebChat.call('add_message', message);var webclientJson = "";try {var webclientJson = JSON.parse(json.output.parameters.teneowebclient);} catch (ex) {console.error(ex);}createAndAddTWCMessage(webclientJson.type, webclientJson);}if (json.output.parameters.hasOwnProperty('chatStatus') && json.output.parameters.chatStatus == "AGENT_TRANSFER" && TeneoWebChat.get('storage').getItem("asyncFeature") == "N") {TeneoWebChat.get('storage').setItem("asyncFeature", "Y");interval = setInterval(makeApiCall, 10000);cancelAllEncouragements();}} else {console.log(json.message);TeneoWebChat.get('storage').setItem("sendToCCT", "N");errorTeneoMsg.parameters["CCT_Connect_error"] = "Error Response from CCT / JSON status : " + json.status + " and Message: " + json.message;TeneoWebChat.call('send_input', errorTeneoMsg);}} else {TeneoWebChat.get('storage').setItem("sendToCCT", "N");firstmessage = true;errorTeneoMsg.parameters["CCT_Connect_error"] = "Request Errored Out/HTTP Response status : " + response.status;TeneoWebChat.call('send_input', errorTeneoMsg);}} catch (e) {TeneoWebChat.get('storage').setItem("sendToCCT", "N");var errorString = ""if (e.name === "AbortError") {console.log('Connection to CCT aborted due to timeout');errorString = "Request Timed Out"} else {errorString = "Misc Error with error message: " + e;console.log(e)}errorTeneoMsg.parameters["CCT_Connect_error"] = errorString;TeneoWebChat.call('send_input', errorTeneoMsg);}endChatButtonTime = null;hideBotTypingIndicator();return response;}function showBotTypingIndicator() {var indicator = {"author": "bot","data": {"dateline": "Aura"}};TeneoWebChat.call('show_typing_indicator', indicator);TeneoWebChat.call('disable_upload_button');disableEmoji();}function hideBotTypingIndicator() {var indicator = {"author": "bot"};TeneoWebChat.call('hide_typing_indicator', indicator);enableEmoji();TeneoWebChat.call('enable_user_input') //Added code to enable user input field July 7th 2023if (endchatbuttonactive) {TeneoWebChat.call('enable_upload_button')} else {TeneoWebChat.call('disable_upload_button')}}//End Conversation API callasync function endConversation(id) {try {const response = await fetch(`${cctURL}/conversation/${id}/end`, {method: "DELETE",timeout: 20000, // Set timeout in the fetch options});if (response.status === 200) {const json = await response.json();// Process the JSON data if needed} else {console.log("Failed to end conversation:", response.status);}} catch (error) {console.error("An error occurred while ending the conversation:", error);}}function disableUserInput() {setTimeout(function () { //Added code to disable user input field July 7th 2023TeneoWebChat.call('disable_user_input')disableEmoji();}, 500)}async function onUploadButtonClicked() {// handle EndChat Button button functionalityTeneoWebChat.call('add_message', {type: 'modal', author: 'bot', data: {"type": "modal", "button_items": [{"title": "Ja", "postback": "Yes", "parameters": {"button": "Endchat"}}, {"title": "Nein", "postback": "No", "parameters": {"button": "model_datatype_No"}}], "title": "Willst du den Chat wirklich beenden?"}});disableEmoji();}TeneoWebChat.on('upload_button_clicked', onUploadButtonClicked)function onMinimizeButtonClicked(payload) {// handle minimize button clicked eventminimizebuttonclicked = true;}TeneoWebChat.on('minimize_button_clicked', onMinimizeButtonClicked)function onPageReload() {const cctSessionId = TeneoWebChat.get('storage').getItem("cctSessionId");const sessionId = TeneoWebChat.get('storage').getItem("teneo-web-chat-session-id");if ((cctSessionId) || (sessionId !== null && sessionId !== "")) {endchatbuttonactive = true} else {endchatbuttonactive = false}}// Attach the event listener for the beforeunload eventdocument.addEventListener("DOMContentLoaded", onPageReload);function receivedModalData(json) {if (json != null && json.output != null && json.output.parameters != null && json.output.parameters.teneowebclient != null) {var modaldatatype = JSON.parse(json.output.parameters.teneowebclient)if (modaldatatype != null && modaldatatype.type != null && modaldatatype.type === "modal") {setTimeout(function () {disableEmoji();}, 100);}}}function enableEmoji() {setTimeout(function () { //Added code to disable user input field July 7th 2023const showEmojisButton = document.getElementById('showEmojisButton');showEmojisButton.classList.remove('disabled'); // Remove any previous state classshowEmojisButton.classList.add('enabled');showEmojisButton.style.pointerEvents = 'auto';}, 100)}function disableEmoji() {setTimeout(function () { //Added code to disable user input field July 7th 2023const showEmojisButton = document.getElementById('showEmojisButton');showEmojisButton.classList.remove('enabled'); // Remove any previous state classshowEmojisButton.classList.add('disabled');showEmojisButton.style.pointerEvents = 'none';}, 100)}function hideoutmesg() {TeneoWebChat.call('show_callout', 'Chatte mit mir!');setTimeout(function () { //Added code to disable user input field July 7th 2023// Disable the buttonTeneoWebChat.call('hide_callout')}, 3000)}window.addEventListener("load", function () {// Get a reference to the chat icon elementvar chatIcon = document.getElementById("twc-launchbutton");// Attach an event listener for the "mouseover" event// Check if the element was foundif (chatIcon) {// Attach an event listener for the "mouseover" eventchatIcon.addEventListener("mouseover", hideoutmesg);}});function addThumbsIcons() {var botMessages = document.querySelectorAll('.twc-message.twc-bot');// Check if botMessages is not nullif (botMessages.length > 0) {var message = botMessages[botMessages.length - 1];if (message.querySelector('.twc-buttons')) {message = botMessages[botMessages.length - 2];}if(splitmessage){message = botMessages[botMessages.length - 3];splitmessage=false;}// Skip messages with the class 'twc-combo'if (message.querySelector('.twc-combo')) {return;}var messageContent = message.querySelector('.twc-text-message');if (messageContent != null) {// Create a new
element for thumbs-up wrappervar thumbsUpWrapper = document.createElement('div');thumbsUpWrapper.classList.add('thumbs-up-wrapper');var thumbsUpIcon = document.createElement('span');thumbsUpIcon.classList.add('thumbs-up');thumbsUpIcon.textContent = '👍';thumbsUpIcon.title = 'gefällt mir';thumbsUpIcon.addEventListener('click', function () {// Handle thumbs up actionconsole.log('Thumbs up clicked');toggleThumbs(thumbsUpIcon, thumbsDownIcon);if (TeneoWebChat.get('storage').getItem("sendToCCT") == "Y") {const map = new Map();map.set("feedbackreaction", 'thumbsup');if (TeneoWebChat.get('storage').getItem("cctSessionId") != "") { // Encouagement Code To check restart session 7-19-2023syncSendMessagetoCCT("feedback", map);}}else {let message = {"text": 'feedback',"parameters": {"feedbackreaction": 'thumbsup'},"silent": true}TeneoWebChat.call('send_input', message)}});var thumbsDownIcon = document.createElement('span');thumbsDownIcon.classList.add('thumbs-down');thumbsDownIcon.textContent = '👎';thumbsDownIcon.title = 'gefällt mir nicht';thumbsDownIcon.addEventListener('click', function () {// Handle thumbs down actionconsole.log('Thumbs down clicked');toggleThumbs(thumbsDownIcon, thumbsUpIcon);if (TeneoWebChat.get('storage').getItem("sendToCCT") == "Y") {const map = new Map();map.set("feedbackreaction", 'thumbsdown');if (TeneoWebChat.get('storage').getItem("cctSessionId") != "") { // Encouagement Code To check restart session 7-19-2023syncSendMessagetoCCT("feedback", map);}}else {let message = {"text": 'feedback',"parameters": {"feedbackreaction": 'thumbsdown'},"silent": true}TeneoWebChat.call('send_input', message)}});thumbsadded = true;messageContent.appendChild(thumbsUpIcon);messageContent.appendChild(thumbsDownIcon);}}}// Function to toggle the appearance of thumbs iconsfunction toggleThumbs(clickedIcon, otherIcon) {reactionclicked = clickedIcon// Highlight the clicked iconclickedIcon.classList.add('highlight');// Gray out the other iconotherIcon.classList.add('grayed-out');// Remove highlight from the other iconotherIcon.classList.remove('highlight');}// Function to disable thumbs iconsfunction disableThumbsIcons() {var thumbsUpIcons = document.querySelectorAll('.thumbs-up');var thumbsDownIcons = document.querySelectorAll('.thumbs-down');for (var i = 0; i < thumbsUpIcons.length; i++) {var icon = thumbsUpIcons[i];if (icon.classList.contains('highlight')) {icon.style.pointerEvents = 'none';} else {icon.classList.add('grayed-out');icon.style.pointerEvents = 'none';}}for (var j = 0; j < thumbsDownIcons.length; j++) {var icon = thumbsDownIcons[j];if (icon.classList.contains('highlight')) {icon.style.pointerEvents = 'none';} else {icon.classList.add('grayed-out');icon.style.pointerEvents = 'none';}}thumbsadded = false; // Reset thumbsadded flag}function preventUrlDragAndDrop() {const inputField = document.getElementById('twc-user-input-field');// Prevent drag and drop events for URLsinputField.addEventListener('dragover', function (event) {event.preventDefault();});inputField.addEventListener('drop', function (event) {// Check if any data types other than plain text and HTML are presentconst dataTypes = event.dataTransfer.types;const isPlainText = dataTypes.includes('text/plain');const isHtmlText = dataTypes.includes('text/html');const isNotPlainTextOrHtml = dataTypes.some(type => type !== 'text/plain' && type !== 'text/html');if (isNotPlainTextOrHtml || (!isPlainText && !isHtmlText)) {// Prevent dropping of anything other than plain text and HTMLevent.preventDefault();} else {// Allow dropping of plain text or HTMLevent.preventDefault();if (isPlainText) {const textData = event.dataTransfer.getData('text/plain');const newText = inputField.value + textData;if (newText.length <= 300) {inputField.value = newText;} else {inputField.value = newText.slice(0, 300);}}if (isHtmlText) {const htmlData = event.dataTransfer.getData('text/html');// Handle HTML data// Assuming inputField.innerHTML += htmlData; for simplicityconst newText = inputField.innerHTML + htmlData;if (newText.length <= 300) {inputField.innerHTML = newText;} else {inputField.innerHTML = newText.slice(0, 300);}}}});inputField.addEventListener('input', function (event) {if (inputField.value.length > 300) {inputField.value = inputField.value.slice(0, 300);}});}function splitMessage(message, indexesString) {const indexes = JSON.parse(indexesString.replace(/^"|\["/g, '[').replace(/\]"$/g, ']'));return indexes.map(index => message.substring(index[0], index[1]));}//Encouagement Code start ID 7-19-2023function encouragementVarDeclaraion_Rename() {storage = window.TeneoWebChat.get('storage');SESSION_ID = sName + '_sessionId';GLOBAL_ENCOURAGEMENTS = sName + '_globalEncouragements';NODE_ENCOURAGEMENTS = sName + '_nodeEncouragements';ENCOURAGEMENT_INDEX = sName + '_encouragementIndex';ENCOURAGEMENT_THREAD_START = sName + '_encouragementThreadStart';sessionId = storage.getItem(SESSION_ID);if (isSessionOpen()) {if (bDebug) console.debug(sName, 'Session is open on reload');doEncouragementThread();} else {cancelAllEncouragements();if (bDebug) console.debug(sName, 'Session is not open on reload');}}function callingEncouagementMethod(getsessionId, enouragementmsg) {TeneoWebChat.get('storage').setItem(SESSION_ID, sessionId = getsessionId);var x = enouragementmsg;if (x) doEncouragementThread(0, x.encouragements, x.nodeEncouragements);else doEncouragementThread(0);}const isSessionOpen = () => (sessionId && window.TeneoWebChat.get('chat_history').length !== 0),getBooleanFromString = s => {if (s == null || (s = s.trim()).length === 0 || s == 0) return false;s = s.toLowerCase();return s !== 'false' && s !== 'null';},isValidEncouragementArray = xx => {if (!Array.isArray(xx)) return false;for (var i = 0; i !== xx.length; i++) {if (!(xx[i].delaySeconds > 0 && (xx[i].text || xx[i].command))) {console.warn(sName, 'Bad encouragement object', xx[i]);return false;}}return true;},toEncouragements = s => {try {const r = JSON.parse(s);if (isValidEncouragementArray(r)) return r;console.warn(sName, 'Skipping parsed encouragements value as it is either a non-array or has incorrect format', s);} catch (err) {console.error(sName, 'Bad encouragements value', s, err);}return null;},stopEncouragementThread = () => {if (encouragementThreadId == null) return;clearTimeout(encouragementThreadId);encouragementThreadId = null;if (bDebug) console.debug(sName, 'Stopping encouragements thread');},cancelAllEncouragements = () => {stopEncouragementThread();globalEncouragements = null;storage.removeItem(GLOBAL_ENCOURAGEMENTS);storage.removeItem(NODE_ENCOURAGEMENTS);storage.removeItem(ENCOURAGEMENT_INDEX);storage.removeItem(ENCOURAGEMENT_THREAD_START);if (bDebug) console.debug(sName, 'Deleting encouragements');},isProvidedWithInput = m => {if (m) {var x = m.type;if (x && (x === 'form' || x === 'buttons' || x === 'clickablelist' || x === 'quickreply' || x === 'form')) return true;if (Array.isArray(m)) {x = m.length;while (--x >= 0) {if (isProvidedWithInput(m[x])) return true;}} else if ('object' === typeof m) {for (x in m) {if (m.hasOwnProperty(x) && (x === 'postback' || x === 'parameters' || isProvidedWithInput(m[x]))) return true;}}}return false;},doEncouragementThread = (nEncInd, sGlobalEncouragements, sNodeEncouragements, nodeEncouragements) => {if (nEncInd == null) {if (sGlobalEncouragements == null) sGlobalEncouragements = storage.getItem(GLOBAL_ENCOURAGEMENTS);if (sNodeEncouragements == null) sNodeEncouragements = storage.getItem(NODE_ENCOURAGEMENTS);}if (sGlobalEncouragements != null && (sGlobalEncouragements = sGlobalEncouragements.trim()).length !== 0) {globalEncouragements = toEncouragements(sGlobalEncouragements);if (globalEncouragements == null) storage.removeItem(GLOBAL_ENCOURAGEMENTS);else if (globalEncouragements.length === 0) {globalEncouragements = null;storage.removeItem(GLOBAL_ENCOURAGEMENTS);} else {storage.setItem(GLOBAL_ENCOURAGEMENTS, sGlobalEncouragements);}} else {if (globalEncouragements == null) storage.removeItem(GLOBAL_ENCOURAGEMENTS);}if (sNodeEncouragements != null && (sNodeEncouragements = sNodeEncouragements.trim()).length !== 0) {nodeEncouragements = toEncouragements(sNodeEncouragements);if (nodeEncouragements == null) storage.removeItem(NODE_ENCOURAGEMENTS);else storage.setItem(NODE_ENCOURAGEMENTS, sNodeEncouragements);} else {if (nodeEncouragements == null) storage.removeItem(NODE_ENCOURAGEMENTS);}const encs = nodeEncouragements || globalEncouragements;if (encs == null) {cancelAllEncouragements();return;}stopEncouragementThread();if (encs.length === 0) return;var x;if (nEncInd != null) storage.setItem(ENCOURAGEMENT_INDEX, nEncInd);else {// Page is refreshedx = storage.getItem(ENCOURAGEMENT_INDEX);if (x == null || (x = x.trim()).length === 0) nEncInd = 0;else if (Number.isNaN(nEncInd = Number.parseInt(x))) {console.warn(sName, 'Bad [' + ENCOURAGEMENT_INDEX + '] value:', x);return;}if (encs.length === nEncInd) {// Page is refreshed after all the encouragements have been displayedif (bDebug) console.debug(sName, 'encs.length==' + encs.length + ', nEncInd==' + nEncInd);return;}x = storage.getItem(ENCOURAGEMENT_THREAD_START);if (x != null) {if ((x = x.trim()).length === 0) x = null;else if (Number.isNaN(x = Number.parseInt(x))) {console.warn(sName, 'Bad [' + ENCOURAGEMENT_THREAD_START + '] value:', storage.getItem(ENCOURAGEMENT_THREAD_START));return;}}}// Here, x is the start time point for the countdown for the currently planned encouragement// or null (undefined) if it has not started yet or is irrelevant. nEncInd is the integer// index of the encouragement to be executed.const enc = encs[nEncInd],nDelay = (x == null) ? enc.delaySeconds * 1000 : (enc.delaySeconds * 1000 - (Date.now() - x));if (enc == null) {console.warn(sName, 'Bad nEncInd value', nEncInd, 'for encs', encs);return;}// If the encouragement countdown hasn't been set previously, set it to the current time point:if (x == null) storage.setItem(ENCOURAGEMENT_THREAD_START, Date.now());if (bDebug) console.debug(sName, 'Starting encouragement thread with calculated delay in milliseconds', nDelay, 'and value', enc);x = sessionId;encouragementThreadId = setTimeout(() => {encouragementThreadId = null;storage.removeItem(ENCOURAGEMENT_THREAD_START);if (!isSessionOpen()) {console.info(sName, 'Ignoring encouragements because the session closed');cancelAllEncouragements();return;}if (x !== sessionId) {console.info(sName, 'Ignoring encouragements because the session changed from', x, 'to', sessionId);cancelAllEncouragements();return;}if (bDebug) console.debug(sName, 'Printing encouragement', enc);if (enc.text) {TeneoWebChat.call('add_message', {type: 'text',author: 'bot',data: {text: enc.text}});if (TeneoWebChat.get('storage').getItem("teneo-web-chat-session-id") == null || TeneoWebChat.get('storage').getItem("teneo-web-chat-session-id") == "") {const cctSessionId = TeneoWebChat.get('storage').getItem("cctSessionId");endConversation(cctSessionId);endchatbuttonactive = false;TeneoWebChat.call('disable_upload_button')} else {TeneoWebChat.call('end_session')endchatbuttonactive = false;TeneoWebChat.call('disable_upload_button')}if (thumbsadded = true) {disableThumbsIcons();}}nEncInd++;storage.setItem(ENCOURAGEMENT_INDEX, nEncInd);if (nEncInd < encs.length) doEncouragementThread(nEncInd, null, null, nodeEncouragements);}, nDelay > 0 ? nDelay : 0);},resetData = () => {cancelAllEncouragements();sessionId = null;storage.removeItem(SESSION_ID);if (bDebug) console.debug(sName, 'Data reset');};})('TWCEncouragement');////Encouagement Code end ID 7-19-2023