{"id":1102,"date":"2026-03-05T10:56:09","date_gmt":"2026-03-05T10:56:09","guid":{"rendered":"https:\/\/neowaybyose.com\/testeo-v16\/"},"modified":"2026-03-05T16:58:25","modified_gmt":"2026-03-05T16:58:25","slug":"testeo-v16","status":"publish","type":"page","link":"https:\/\/neowaybyose.com\/en\/testeo-v16\/","title":{"rendered":"Testeo V16"},"content":{"rendered":"<div class=\"nw-page-hero\">\n<div class=\"nw-page-container\">\n<h1>Diagnostica tu Baliza V16<\/h1>\n<p>Comprueba el estado de tu baliza Neoway V16 en tiempo real. Introduce tu IMEI y email para recibir un informe completo.<\/p>\n<\/p><\/div>\n<\/div>\n<div class=\"nw-page-section\">\n<div class=\"nw-page-container\">\n<h2 class=\"nw-section-title\">Diagn\u00f3stico de tu baliza<\/h2>\n<p class=\"nw-section-subtitle\">Introduce los datos de tu dispositivo y te enviaremos un informe detallado a tu email<\/p>\n\r\n        <div class=\"nw-diag-container\">\r\n            <form id=\"nw-diagnostico-form\" class=\"nw-diag-form\" novalidate>\r\n                <input type=\"hidden\" name=\"nw_nonce\" value=\"675ba125e1\">\r\n                <div class=\"nw-diag-field\">\r\n                    <label for=\"nw-diag-email\">Tu email<\/label>\r\n                    <input type=\"email\" id=\"nw-diag-email\" name=\"nw_diag_email\" required placeholder=\"tu@email.com\" autocomplete=\"email\">\r\n                    <div class=\"nw-diag-field-error\" id=\"nw-err-email\"><\/div>\r\n                <\/div>\r\n                <div class=\"nw-diag-field\">\r\n                    <label for=\"nw-diag-imei\">IMEI de tu baliza (15 d\u00edgitos)<\/label>\r\n                    <input type=\"text\" id=\"nw-diag-imei\" name=\"nw_diag_imei\" required maxlength=\"15\" pattern=\"[0-9]{15}\" placeholder=\"867725030012345\" inputmode=\"numeric\" autocomplete=\"off\">\r\n                    <small>Lo encontrar\u00e1s en la etiqueta de tu dispositivo o en la caja original<\/small>\r\n                    <div class=\"nw-diag-field-error\" id=\"nw-err-imei\"><\/div>\r\n                <\/div>\r\n                <div class=\"nw-diag-submit\">\r\n                    <button type=\"submit\" class=\"nw-btn nw-btn-lg\" id=\"nw-diag-btn\">Diagnosticar mi baliza<\/button>\r\n                <\/div>\r\n                <div id=\"nw-diag-result\" style=\"display:none\"><\/div>\r\n            <\/form>\r\n        <\/div>\r\n        <script>\r\n        (function(){\r\n            var form = document.getElementById(\"nw-diagnostico-form\");\r\n            var btn = document.getElementById(\"nw-diag-btn\");\r\n            var resultDiv = document.getElementById(\"nw-diag-result\");\r\n            var ajaxUrl = \"https:\/\/neowaybyose.com\/wp-admin\/admin-ajax.php\";\r\n\r\n            function luhnCheck(imei) {\r\n                if (!\/^\\d{15}$\/.test(imei)) return false;\r\n                var sum = 0;\r\n                for (var i = 0; i < 15; i++) {\r\n                    var d = parseInt(imei[i], 10);\r\n                    if (i % 2 === 1) { d *= 2; if (d > 9) d -= 9; }\r\n                    sum += d;\r\n                }\r\n                return sum % 10 === 0;\r\n            }\r\n\r\n            function showError(id, msg) {\r\n                var el = document.getElementById(id);\r\n                el.textContent = msg; el.style.display = \"block\";\r\n                el.previousElementSibling && el.previousElementSibling.tagName === \"INPUT\"\r\n                    ? el.parentElement.querySelector(\"input\").classList.add(\"nw-diag-input-error\")\r\n                    : null;\r\n            }\r\n\r\n            function clearErrors() {\r\n                document.querySelectorAll(\".nw-diag-field-error\").forEach(function(el){ el.style.display = \"none\"; });\r\n                document.querySelectorAll(\".nw-diag-input-error\").forEach(function(el){ el.classList.remove(\"nw-diag-input-error\"); });\r\n            }\r\n\r\n            function statusLabel(val) {\r\n                if (!val) return {cls:\"error\", text:\"Sin datos\"};\r\n                var v = val.toString().toLowerCase();\r\n                if (v === \"ok\" || v === \"good\" || v === \"excellent\" || v === \"buena\" || v === \"excelente\" || v === \"true\" || v === \"operational\") return {cls:\"ok\", text: val};\r\n                if (v === \"regular\" || v === \"low\" || v === \"weak\" || v === \"fair\") return {cls:\"warn\", text: val};\r\n                return {cls:\"error\", text: val};\r\n            }\r\n\r\n            function batteryLabel(pct, status) {\r\n                if (pct === null || pct === undefined) return {cls:\"error\", text:\"Sin datos\"};\r\n                if (pct > 50) return {cls:\"ok\", text: pct + \"%\"};\r\n                if (pct > 20) return {cls:\"warn\", text: pct + \"%\"};\r\n                return {cls:\"error\", text: pct + \"%\"};\r\n            }\r\n\r\n            function renderResult(data) {\r\n                var lm = data.last_message || {};\r\n                var dr = data.diag_response || {};\r\n                var code = data.diag_code || 0;\r\n                var hasMessages = data.message_count > 0;\r\n\r\n                var bat = batteryLabel(lm.battery_percentage, lm.battery_status);\r\n                var gpsOk = !!lm.gps_fix;\r\n                var gps = gpsOk ? {cls:\"ok\", text:\"Activo\"} : {cls:\"warn\", text:\"Sin se\u00f1al\"};\r\n                var net = statusLabel(lm.signal_quality);\r\n\r\n                var html = \"\";\r\n\r\n                \/\/ Header from diagnostic code\r\n                html += \"<div class=\\\"nw-diag-result-header \" + (dr.header_cls || \"status-warn\") + \"\\\">\";\r\n                html += \"<h3>\" + (dr.title || \"Diagn\u00f3stico\") + \"<\/h3>\";\r\n                html += \"<p style=\\\"font-size:12px;opacity:0.7;margin:4px 0 0\\\">C\u00f3digo: \" + code + \"<\/p>\";\r\n                html += \"<\/div>\";\r\n\r\n                \/\/ Main message\r\n                html += \"<div class=\\\"nw-diag-message-block\\\">\";\r\n                html += \"<p>\" + (dr.message || \"\") + \"<\/p>\";\r\n                html += \"<\/div>\";\r\n\r\n                \/\/ Action \/ recommendation\r\n                if (dr.action) {\r\n                    html += \"<div class=\\\"nw-diag-action-block\\\">\";\r\n                    html += \"<strong>\u00bfQu\u00e9 hacer?<\/strong>\";\r\n                    html += \"<p>\" + dr.action + \"<\/p>\";\r\n                    html += \"<\/div>\";\r\n                }\r\n\r\n                \/\/ Note\r\n                if (dr.note) {\r\n                    html += \"<div class=\\\"nw-diag-note-block\\\">\" + dr.note + \"<\/div>\";\r\n                }\r\n\r\n                \/\/ Status cards (only show if we have message data)\r\n                if (hasMessages) {\r\n                    html += \"<div class=\\\"nw-diag-cards\\\">\";\r\n                    html += \"<div class=\\\"nw-diag-card\\\"><div class=\\\"nw-diag-card-icon\\\">&#x1F50B;<\/div><h4>Bater\u00eda<\/h4><div class=\\\"nw-diag-card-value \" + bat.cls + \"\\\">\" + bat.text + \"<\/div><\/div>\";\r\n                    html += \"<div class=\\\"nw-diag-card\\\"><div class=\\\"nw-diag-card-icon\\\">&#x1F4E1;<\/div><h4>GPS<\/h4><div class=\\\"nw-diag-card-value \" + gps.cls + \"\\\">\" + gps.text + \"<\/div><\/div>\";\r\n                    html += \"<div class=\\\"nw-diag-card\\\"><div class=\\\"nw-diag-card-icon\\\">&#x1F4F6;<\/div><h4>Red<\/h4><div class=\\\"nw-diag-card-value \" + net.cls + \"\\\">\" + net.text + \"<\/div><\/div>\";\r\n                    html += \"<div class=\\\"nw-diag-card\\\"><div class=\\\"nw-diag-card-icon\\\">&#x1F4AC;<\/div><h4>Mensajes<\/h4><div class=\\\"nw-diag-card-value ok\\\">\" + (data.message_count || 0) + \"<\/div><\/div>\";\r\n                    html += \"<\/div>\";\r\n                }\r\n\r\n                html += \"<div class=\\\"nw-diag-email-notice\\\">Hemos enviado un informe detallado a <strong>\" + data.email + \"<\/strong><\/div>\";\r\n\r\n                return html;\r\n            }\r\n\r\n            form.addEventListener(\"submit\", function(e) {\r\n                e.preventDefault();\r\n                clearErrors();\r\n                var email = document.getElementById(\"nw-diag-email\").value.trim();\r\n                var imei = document.getElementById(\"nw-diag-imei\").value.trim();\r\n                var valid = true;\r\n\r\n                if (!email || !\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)) {\r\n                    showError(\"nw-err-email\", \"Introduce un email v\u00e1lido\");\r\n                    valid = false;\r\n                }\r\n                if (!imei || !\/^\\d{15}$\/.test(imei)) {\r\n                    showError(\"nw-err-imei\", \"El IMEI debe tener exactamente 15 d\u00edgitos num\u00e9ricos\");\r\n                    valid = false;\r\n                } else if (!luhnCheck(imei)) {\r\n                    showError(\"nw-err-imei\", \"El IMEI introducido no es v\u00e1lido. Revisa los d\u00edgitos.\");\r\n                    valid = false;\r\n                }\r\n                if (!valid) return;\r\n\r\n                btn.disabled = true;\r\n                btn.innerHTML = \"<span class=\\\"nw-diag-spinner\\\"><\/span> Diagnosticando...\";\r\n                resultDiv.style.display = \"none\";\r\n\r\n                var fd = new FormData();\r\n                fd.append(\"action\", \"nw_diagnostico\");\r\n                fd.append(\"nw_nonce\", form.querySelector(\"[name=nw_nonce]\").value);\r\n                fd.append(\"email\", email);\r\n                fd.append(\"imei\", imei);\r\n\r\n                fetch(ajaxUrl, { method: \"POST\", body: fd })\r\n                    .then(function(r){ return r.json(); })\r\n                    .then(function(resp) {\r\n                        btn.disabled = false;\r\n                        btn.innerHTML = \"Diagnosticar mi baliza\";\r\n                        resultDiv.style.display = \"block\";\r\n                        if (resp.success && resp.data) {\r\n                            resultDiv.innerHTML = renderResult(resp.data);\r\n                        } else {\r\n                            var msg = (resp.data && resp.data.message) ? resp.data.message : \"Error al realizar el diagn\u00f3stico. Int\u00e9ntalo de nuevo.\";\r\n                            resultDiv.innerHTML = \"<div class=\\\"nw-diag-error-msg\\\">\" + msg + \"<\/div>\";\r\n                        }\r\n                    })\r\n                    .catch(function() {\r\n                        btn.disabled = false;\r\n                        btn.innerHTML = \"Diagnosticar mi baliza\";\r\n                        resultDiv.style.display = \"block\";\r\n                        resultDiv.innerHTML = \"<div class=\\\"nw-diag-error-msg\\\">Error de conexi\u00f3n. Comprueba tu conexi\u00f3n a internet e int\u00e9ntalo de nuevo.<\/div>\";\r\n                    });\r\n            });\r\n\r\n            \/\/ Only allow digits in IMEI field\r\n            document.getElementById(\"nw-diag-imei\").addEventListener(\"input\", function(e) {\r\n                this.value = this.value.replace(\/\\D\/g, \"\").substring(0, 15);\r\n            });\r\n        })();\r\n        <\/script><\/div>\n<\/div>\n<div class=\"nw-page-section\">\n<div class=\"nw-page-container\">\n<h2 class=\"nw-section-title\">\u00bfC\u00f3mo funciona?<\/h2>\n<div class=\"nw-testeo-steps\">\n<div class=\"nw-testeo-step\">\n<h3>Localiza el IMEI<\/h3>\n<p>El IMEI se encuentra impreso en la etiqueta del dispositivo o en la caja original. Es un n\u00famero de 15 d\u00edgitos que identifica de forma \u00fanica tu baliza.<\/p>\n<\/p><\/div>\n<div class=\"nw-testeo-step\">\n<h3>Introduce tu email e IMEI<\/h3>\n<p>Escribe tu email y el IMEI de tu baliza en el formulario de arriba.<\/p>\n<\/p><\/div>\n<div class=\"nw-testeo-step\">\n<h3>Pulsa Diagnosticar<\/h3>\n<p>Nuestro sistema verifica en tiempo real: estado de la SIM, conectividad de red, funcionalidad GPS, bater\u00eda y registro en la plataforma DGT.<\/p>\n<\/p><\/div>\n<div class=\"nw-testeo-step\">\n<h3>Revisa tu email<\/h3>\n<p>Recibir\u00e1s un informe completo con el estado de cada componente. Si se detecta alg\u00fan problema, nuestro equipo t\u00e9cnico se pondr\u00e1 en contacto contigo.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<div class=\"nw-page-section\" style=\"background:#0f3460;color:#fff;text-align:center\">\n<div class=\"nw-page-container\">\n<h2 style=\"color:#fff;font-size:28px;margin-bottom:15px\">\u00bfNecesitas ayuda con tu baliza?<\/h2>\n<p style=\"color:rgba(255,255,255,0.8);margin-bottom:30px\">Nuestro equipo de soporte t\u00e9cnico est\u00e1 disponible para resolver cualquier incidencia.<\/p>\n<p>        <a href=\"https:\/\/soporte.neowaybyose.com\" target=\"_blank\" class=\"nw-btn\" style=\"background:#fff;color:#0f3460\">Soporte T\u00e9cnico<\/a><br \/>\n        <a href=\"\/contacto\/\" class=\"nw-btn nw-btn-outline\" style=\"border-color:#fff;color:#fff;margin-left:15px\">Contactar<\/a>\n    <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Diagnostica tu Baliza V16 Comprueba el estado de tu baliza Neoway V16 en tiempo real. Introduce tu&#8230;<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1102","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/neowaybyose.com\/en\/wp-json\/wp\/v2\/pages\/1102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/neowaybyose.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/neowaybyose.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/neowaybyose.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/neowaybyose.com\/en\/wp-json\/wp\/v2\/comments?post=1102"}],"version-history":[{"count":1,"href":"https:\/\/neowaybyose.com\/en\/wp-json\/wp\/v2\/pages\/1102\/revisions"}],"predecessor-version":[{"id":1114,"href":"https:\/\/neowaybyose.com\/en\/wp-json\/wp\/v2\/pages\/1102\/revisions\/1114"}],"wp:attachment":[{"href":"https:\/\/neowaybyose.com\/en\/wp-json\/wp\/v2\/media?parent=1102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}