{"id":5933,"date":"2026-07-02T14:06:48","date_gmt":"2026-07-02T12:06:48","guid":{"rendered":"https:\/\/www.bring2.bim.name\/?page_id=5933"},"modified":"2026-07-23T17:02:19","modified_gmt":"2026-07-23T15:02:19","slug":"chatbot","status":"publish","type":"page","link":"https:\/\/www.bring2.bim.name\/it\/chatbot\/","title":{"rendered":"Chatbot"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5933\" class=\"elementor elementor-5933 elementor-4587\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0dceea1 e-flex e-con-boxed e-con e-parent\" data-id=\"0dceea1\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-320068f elementor-widget elementor-widget-text-editor\" data-id=\"320068f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<link rel='stylesheet' href='https:\/\/www.bring2.bim.name\/wp-content\/plugins\/bring-chatbot\/css\/bring-chatbot.css'>        \r\n        <style>\r\n            html, body {\r\n                width: 100%;\r\n                max-width: 100%;\r\n                overflow-x: hidden;\r\n            }\r\n\r\n            html {\r\n                height: -webkit-fill-available;\r\n            }\r\n            body {\r\n                min-height: -webkit-fill-available;\r\n            }\r\n\r\n            .bring-msg-contentBox {\r\n                display: inline-block;\r\n            }\r\n\r\n            .bring-msg-ctrlBox {\r\n                display: inline;\r\n            }\r\n\r\n            .bring-chat-container {\r\n                display: flex;\r\n                font-family: sans-serif;\r\n                border: 1px solid #ccc;\r\n                border-radius: 8px;\r\n                background: #f9f9f9;\r\n                position: relative;\r\n\r\n                \/*\r\n                height: 500px;\r\n                max-width: 100%;\r\n                overflow: hidden;\r\n*\/\r\n                width: 100%;\r\n                max-width: 100%;\r\n                height: calc(var(--vh) * 100);\r\n                overflow-y: auto;\r\n\r\n            }\r\n\r\n            .bring-chat-main {\r\n                flex: 1;\r\n                display: flex;\r\n                flex-direction: column;\r\n                height: 100%;\r\n                width: 80%;\r\n            }\r\n\r\n            .bring-chat-window {\r\n                flex: 1;\r\n                padding: 15px;\r\n                overflow-y: auto;\r\n                background: #fff;\r\n                display: flex;\r\n                flex-direction: column;\r\n                gap: 10px;\r\n            }\r\n\r\n            .bring-chat-sidebar {\r\n                width: 180px;\r\n                background: #f1f1f1;\r\n                border-left: 1px solid #ccc;\r\n                display: flex;\r\n                flex-direction: column;\r\n                padding: 10px;\r\n                gap: 8px;\r\n            }\r\n\r\n            .bring-chat-sidebar button {\r\n                padding: 10px;\r\n                border: none;\r\n                background: #0073aa;\r\n                color: #fff;\r\n                border-radius: 4px;\r\n                cursor: pointer;\r\n                text-align: left;\r\n                font-size: 13px;\r\n            }\r\n\r\n            .bring-chat-sidebar button:hover {\r\n                background: #005177;\r\n            }\r\n\r\n            .bring-chat-input-area {\r\n                display: flex;\r\n                padding: 10px;\r\n                background: #eee;\r\n                border-top: 1px solid #ccc;\r\n            }\r\n\r\n            .bring-chat-input-area input {\r\n                flex: 1;\r\n                padding: 10px;\r\n                border: 1px solid #ccc;\r\n                border-radius: 4px;\r\n            }\r\n\r\n            .bring-chat-input-area button {\r\n                padding: 10px 15px;\r\n                margin-left: 5px;\r\n                background: #005746;\r\n                color: white;\r\n                border: none;\r\n                border-radius: 4px;\r\n                cursor: pointer;\r\n            }\r\n\r\n            \/* Message Types *\/\r\n            .bring-msg {\r\n                padding: 10px;\r\n                border-radius: 6px;\r\n                max-width: 85%;\r\n                position: relative;\r\n                margin-bottom: 5px;\r\n                word-wrap: break-word;\r\n            }\r\n\r\n            .bring-msg-user {\r\n                background: #e2f0fd;\r\n                align-self: flex-end;\r\n            }\r\n\r\n            .bring-msg-ok {\r\n                background: #e7f7ed;\r\n                border-left: 4px solid #46b450;\r\n                align-self: flex-start;\r\n            }\r\n\r\n            .bring-msg-feedback {\r\n            }\r\n\r\n            .bring-msg-feedback .bring-msg-ctrlBox{\r\n                display: none;\r\n            }\r\n\r\n            .bring-msg-warning, .bring-msg-privacy {\r\n                background: #fff8e5;\r\n                border-left: 4px solid #ffb900;\r\n                align-self: flex-start;\r\n            }\r\n\r\n            .bring-msg-error {\r\n                background: #fbeae5;\r\n                border-left: 4px solid #dc3232;\r\n                align-self: flex-start;\r\n            }\r\n\r\n            .bring-msg-waiting {\r\n                min-height: 50px;\r\n                background-image: url(https:\/\/upload.wikimedia.org\/wikipedia\/commons\/b\/b1\/Loading_icon.gif);\r\n                background-size: contain;\r\n                background-repeat: no-repeat;\r\n            }\r\n\r\n            \/* Fullscreen Modis *\/\r\n            .bring-fullscreen-chat {\r\n                position: fixed !important;\r\n                top: 0;\r\n                left: 0;\r\n                width: 100vw !important;\r\n                \/* height: 100vh !important; *\/\r\n                height: calc(var(--vh) * 100);\r\n                z-index: 99999;\r\n            }\r\n\r\n            .bring-msg-fullscreen {\r\n                position: fixed !important;\r\n                top: 10%;\r\n                left: 10%;\r\n                width: 80% !important;\r\n                height: 80% !important;\r\n                z-index: 100000;\r\n                xbackground: white !important;\r\n                border: 2px solid #333;\r\n                padding: 30px !important;\r\n                overflow: auto;\r\n                box-shadow: 0 0 20px rgba(0, 0, 0, 0.5);\r\n            }\r\n\r\n            .bring-expand-btn {\r\n                font-size: 16px;\r\n                color: #777;\r\n                cursor: pointer;\r\n                float: right;\r\n                xtext-decoration: underline;\r\n                margin-left: 10px;\r\n                border: 1px solid gray;\r\n                padding: 5px;\r\n                line-height: 10px;\r\n                font-weight: bold;\r\n                border-radius: 4px;\r\n                background: white;\r\n            }\r\n\r\n            hr {\r\n                margin: 0 0 1rem 0;\r\n            }\r\n\r\n            .btn-feedback-request {\r\n                display: inline-block;\r\n                background: #005746;\r\n                color: #fff;\r\n                padding: 12px 20px;\r\n                border-radius: 12px;\r\n                font-size: 15px;\r\n                font-weight: 600;\r\n                cursor: pointer;\r\n                text-align: center;\r\n                box-shadow: 0 4px 10px rgba(0,0,0,0.15);\r\n                transition: all 0.25s ease;\r\n                user-select: none;\r\n                margin: 20px 0;\r\n            }\r\n\r\n            .btn-feedback-request:hover {\r\n                background: #005746;\r\n                transform: translateY(-2px);\r\n                box-shadow: 0 6px 14px rgba(0,0,0,0.22);\r\n            }\r\n\r\n            .btn-feedback-request:active {\r\n                transform: translateY(0);\r\n                box-shadow: 0 3px 8px rgba(0,0,0,0.18);\r\n            }\r\n\r\n            @media (max-width: 600px) {\r\n                .bring-chat-sidebar {\r\n                    display: none;\r\n                }\r\n                #cya11y-container {\r\n                    display: none !important;\r\n                }\r\n            }\r\n        <\/style>\r\n        <div class=\"bring-chat-container bring-fullscreen-chat\" id=\"bringChatContainer\">\r\n            <div class=\"bring-chat-main\">\r\n                <div class=\"bring-chat-window\" id=\"bringChatWindow\">\r\n                    <div class=\"bring-msg bring-msg-ok\">\r\n                        Le diamo il benvenuto nel Chatbot di BRING. Scriva qui la Sua richiesta: cercher\u00f2 subito la risposta nel nostro archivio.<br>Trattandosi di risposte generate da un&#8217;intelligenza artificiale<i><ul><li>Non si possono escludere eventuali errori.<\/li><li>Consigliamo di verificare le risposte consultando i documenti allegati.<\/li><li>Non \u00e8 possibile garantire che tutti i documenti siano sempre aggiornati. In caso di dubbi, si prega di rivolgersi al team di consulenza.<\/li><\/ul><\/i><\/div>\r\n                    <div class=\"bring-msg bring-msg-ok\">\r\n                        Questo servizio \u00e8 riservato ai soci dell&#8217;organizzazione BRING.<br>Per accedere al servizio, inserisca l&#8217;indirizzo email.<\/div>\r\n                <\/div>\r\n                <div class=\"bring-chat-input-area\">\r\n                    <input type=\"text\" id=\"bringChatInput\" placeholder=\"Inserisca qui la Sua domanda...\">\r\n                    <button id=\"bringChatSend\">Invia<\/button>\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"bring-chat-sidebar\">\r\n                                    <button\r\n                        onclick=\"triggerBringAction('clearChat', 'Chat-Verlauf gel\u00f6scht.')\">Cancella storico<\/button>\r\n                                    <button\r\n                        onclick=\"triggerBringAction('login', 'Anmelden')\">Accedi<\/button>\r\n                                    <button\r\n                        onclick=\"triggerBringAction('eventList', 'Aktuelle')\">Eventi<\/button>\r\n                                    <button\r\n                        onclick=\"triggerBringAction('consultantContact', 'Kontakte der Berater')\">Contatti colsulente<\/button>\r\n                            <\/div>\r\n        <\/div>\r\n\r\n        <script>\r\n            let privacyAccepted = false;\r\n            let bringSessionId = '';\r\n            const sessionLocale = 'it_IT';\r\n\r\n            function updateViewportHeight() {\r\n                const vh = window.innerHeight * 0.01;\r\n                document.documentElement.style.setProperty('--vh', `${vh}px`);\r\n            }\r\n\r\n            function appendBringMessage(text, type = 'bring-msg-ok') {\r\n\r\n                if (text.constructor === String)\r\n                    text = [text];\r\n\r\n                if (text.length == 0)\r\n                    return;\r\n\r\n                textToShow = text.splice(0, 1)[0];\r\n\r\n                const win = document.getElementById('bringChatWindow');\r\n                const msgDiv = document.createElement('div');\r\n                \r\n                if (type.startsWith(\"bring-msg-\") == false)\r\n                    type = \"bring-msg-\" + type;\r\n                msgDiv.className = `bring-msg ${type}`;\r\n\r\n                const contentBox = document.createElement('div');\r\n                contentBox.className = \"bring-msg-contentBox\";\r\n                msgDiv.appendChild(contentBox);\r\n\r\n                \/\/ Fullscreen Button f\u00fcr einzelne Nachrichten au\u00dfer User-Inputs\r\n                switch (type) {\r\n                    case 'bring-msg-waiting':\r\n                        break;\r\n\r\n                    case 'bring-msg-user':\r\n                        break;\r\n\r\n                    default:\r\n\r\n                        const ctrlBox = document.createElement('div');\r\n                        ctrlBox.className = \"bring-msg-ctrlBox\";\r\n                        msgDiv.insertBefore(ctrlBox, contentBox);\r\n\r\n                        const exp = document.createElement('span');\r\n                        exp.className = 'bring-expand-btn';\r\n                        exp.innerText = '\u2922';\r\n                        exp.onclick = function () {\r\n                            msgDiv.classList.toggle('bring-msg-fullscreen');\r\n                            this.innerText = msgDiv.classList.contains('bring-msg-fullscreen') ? '\u2716' : '\u2922';\r\n                        };\r\n                        ctrlBox.appendChild(exp); \r\n                }\r\n                contentBox.innerHTML = textToShow;\r\n\r\n                if (type == \"bring-msg-privacy\")\r\n                    win.insertBefore(msgDiv, document.getElementById(\"bring-privacyDialog\"));\r\n                else\r\n                    win.appendChild(msgDiv);\r\n                win.scrollTop = win.scrollHeight;\r\n\r\n                renderUserFeedbackButton(msgDiv);\r\n\r\n                if (text.length == 0)\r\n                    return msgDiv;\r\n                else\r\n                    return appendBringMessage(text, type);\r\n            }\r\n\r\n            function sendBringMessage(overrideText = null, overrideAction = 'message') {\r\n\r\n                if (checkPrivacyAccepted() == false)\r\n                    return;\r\n\r\n                const input = document.getElementById('bringChatInput');\r\n                const msgText = overrideText ? overrideText : input.value.trim();\r\n                if (!msgText && overrideAction === 'message') return;\r\n\r\n                if (!overrideText) {\r\n                    appendBringMessage(msgText, 'bring-msg-user');\r\n                    input.value = '';\r\n                }\r\n\r\n                const feedbackMsg = document.querySelector('.bring-msg-feedback');\r\n                if (feedbackMsg != null)\r\n                    feedbackMsg.parentElement.removeChild(feedbackMsg);\r\n\r\n                appendBringMessage(\"\", `bring-msg-waiting`, \"\");\r\n                fetch('\/wp-json\/bringchatbot\/v1\/chat', {\r\n                    method: 'POST',\r\n                    headers: { 'Content-Type': 'application\/json' },\r\n                    body: JSON.stringify({\r\n                        action: overrideAction,\r\n                        message: msgText,\r\n                        sessionId: bringSessionId,\r\n                        locale: sessionLocale\r\n                    })\r\n                })\r\n                    .then(res => res.json())\r\n                    .then(data => {\r\n                        bringSessionId = data.sessionId;\r\n                        document.getElementsByClassName(\"bring-msg-waiting\")[0].remove();\r\n                        \/\/console.log(data.message);\r\n                        divBox = appendBringMessage(data.message, `bring-msg-${data.messageId}`, data.messageId);\r\n                    });\r\n            }\r\n\r\n            function triggerBringAction(action, defaultMsg) {\r\n                switch (action.toLowerCase())\r\n                {\r\n                    case 'clearchat':\r\n                        const win = document.getElementById('bringChatWindow');\r\n                        win.innerHTML = '';\r\n                        return;\r\n                        break;\r\n\r\n                    case 'openurl':\r\n                        window.open(defaultMsg).focus();\r\n                        return;\r\n                        break;\r\n                }\r\n                sendBringMessage(defaultMsg, action);\r\n            }\r\n\r\n            function checkPrivacyAccepted()\r\n            {\r\n                if (privacyAccepted == true)\r\n                    return true\r\n\r\n                let privacyDialog = document.getElementById(\"bring-privacyDialog\");\r\n                if (privacyDialog != null) {\r\n                    const xx = appendBringMessage(\"Per poter utilizzare lo chatbot \u00e8 necessario accettare la privacy. \", \"privacy\");\r\n                    \/\/privacyDialog.parentElement.insertBefore(xx, privacyDialog);\r\n                    return false;\r\n                }\r\n\r\n                \/\/ add accept privacy dialog to chat history\r\n                privacyDialog = appendBringMessage(\"Per poter utilizzare lo chatbot \u00e8 necessario accettare la privacy. \", \"warning\");\r\n                privacyDialog.id = \"bring-privacyDialog\";\r\n\r\n                const p = document.createElement('p');\r\n                privacyDialog.appendChild(p);\r\n\r\n                \/\/ add checkbox\r\n                const privacyCheckbox = document.createElement('input');\r\n                privacyCheckbox.type = \"checkbox\";\r\n                privacyCheckbox.name = \"privacyCheckbox\";\r\n                if (privacyAccepted == true)\r\n                    privacyCheckbox.checked = \"1\";\r\n                privacyCheckbox.onclick = function() { \r\n                    privacyAccepted = this.checked;\r\n\r\n                    if (privacyAccepted == false)\r\n                        return;\r\n\r\n                    const privacyDialog = document.getElementById(\"bring-privacyDialog\");\r\n                    privacyDialog.parentElement.removeChild(privacyDialog);\r\n\r\n                    appendBringMessage(\"Grazie. La preghiamo di fare un login per poter utilizzare lo chatbot.\", \"ok\");\r\n                };\r\n                p.appendChild(privacyCheckbox);\r\n                const privacyLink = document.createElement('span');\r\n                privacyLink.innerHTML = \" Accetto le <a href='https:\/\/www.bring2.bim.name\/it\/privacy\/' target='_blank'>Termini e condizioni elaborazione dati personali<\/a>.\";\r\n                p.appendChild(privacyLink);\r\n\r\n                const chatList = document.getElementById(\"bringChatWindow\");\r\n                chatList.scrollTop = chatList.scrollHeight;\r\n\r\n                return privacyAccepted;\r\n            }\r\n\r\n            function renderUserFeedbackButton(msgDiv) {\r\n\r\n                \/\/ Check if feedback buttons already exist\r\n                btnFeedbackRequest = msgDiv.querySelector('.bring-msg-contentBox .btn-feedback-request');\r\n                if (btnFeedbackRequest == null)\r\n                    return;\r\n\r\n                msgDiv.classList.remove(\"bring-msg-ok\");\r\n                msgDiv.classList.add(\"bring-msg-feedback\");\r\n\r\n                btnFeedbackRequest.addEventListener('click', function () {\r\n                    \/\/ Send feedback to the server\r\n                    sendBringMessage(\"answerWasUseful\", 'feedback'); \r\n                });\r\n\r\n            }\r\n\r\n            updateViewportHeight();\r\n            window.addEventListener('resize', updateViewportHeight);\r\n            document.getElementById('bringChatSend').addEventListener('click', () => \r\n                sendBringMessage());\r\n            document.getElementById('bringChatInput').addEventListener('keypress', (e) => \r\n                { if (e.key === 'Enter') sendBringMessage(); });\r\n            \/\/ Attach event listener after DOM is loaded\r\n            document.addEventListener(\"DOMContentLoaded\", function () {\r\n                document.addEventListener(\"keydown\", function (event) {\r\n                    \/\/ Check if the pressed key is Escape\r\n                    if (event.key === \"Escape\" || event.key === \"Esc\") {\r\n                        msgList = document.getElementsByClassName(\"bring-msg-fullscreen\");\r\n                        if (msgList.length == 0)\r\n                            return;\r\n\r\n                        event.preventDefault(); \/\/ Optional: prevent default browser behavior\r\n                        for (let index=0; index < msgList.length; index++) {\r\n                            msgList[index].getElementsByClassName(\"bring-expand-btn\")[0].innerText = \"\u2922\";\r\n                            msgList[index].classList.toggle('bring-msg-fullscreen');\r\n                            \r\n                        } \r\n                    }\r\n                });\r\n            });\r\n\r\n            \/\/ document.getElementById('bringToggleFS').addEventListener('click', () => {\r\n            \/\/    document.getElementById('bringChatContainer').classList.toggle('bring-fullscreen-chat');\r\n            \/\/ });\r\n\r\n            if (window.orientation == 0 && window.innerWidth <= 768){\r\n                \r\n                msgDiv = appendBringMessage(\"Wir empfehlen f\u00fcr die Nutzung des Chatbot das Smartphone zu drehen \/ Querformat!\", \"warning\");\r\n            \r\n                const smartphoneImg = document.createElement('img');\r\n                smartphoneImg.src = \"\/wp-content\/plugins\/bring-chatbot\/images\/DSG-RotateSmartPhone-400.png\";\r\n                smartphoneImg.width = 300;\r\n                msgDiv.appendChild(smartphoneImg);\r\n\r\n                const list = document.getElementById(\"bringChatWindow\");\r\n                list.scrollTop = list.scrollHeight;\r\n            }\r\n\r\n            checkPrivacyAccepted();\r\n\r\n        <\/script>\r\n        \t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-5933","page","type-page","status-publish","hentry"],"acf":[],"publishpress_future_action":{"enabled":false,"date":"2026-10-26 19:57:42","action":"change-status","newStatus":"draft","terms":[],"taxonomy":"translation_priority","extraData":[]},"publishpress_future_workflow_manual_trigger":{"enabledWorkflows":[]},"_links":{"self":[{"href":"https:\/\/www.bring2.bim.name\/it\/wp-json\/wp\/v2\/pages\/5933","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bring2.bim.name\/it\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.bring2.bim.name\/it\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.bring2.bim.name\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bring2.bim.name\/it\/wp-json\/wp\/v2\/comments?post=5933"}],"version-history":[{"count":0,"href":"https:\/\/www.bring2.bim.name\/it\/wp-json\/wp\/v2\/pages\/5933\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.bring2.bim.name\/it\/wp-json\/wp\/v2\/media?parent=5933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}