var chatContainer = document.createElement("div"); chatContainer.id = "chatbot-chat-container"; document.body.appendChild(chatContainer); const el = document.querySelector("#chatbot-chat-container") const shadow = el.attachShadow({ mode: "open" }); shadow.innerHTML = `
Questa chatbot virtuale è una sperimentazione attivata dall'Università degli Studi Roma Tre con l'obiettivo di migliorare l'interazione offrendo un supporto rapido ed efficiente. Per ottenere i migliori risultati, ti consigliamo di formulare le richieste nel modo più chiaro e dettagliato possibile.
Ciao, sono l'assistente virtuale dell'Università degli Studi Roma Tre. Come posso aiutarti oggi?
" ); } initializeChat(); toggleButton.addEventListener("click", () => { mainDiv.classList.toggle("visible"); }); closeIconChat.addEventListener("click", () => { mainDiv.classList.remove("visible"); }); const chatForm = shadow.querySelector(".chatbot-chat-form"); chatForm.addEventListener("submit", function (event) { event.preventDefault(); // Previene il comportamento di default del form // Raccoglie i valori degli input const formData = new FormData(chatForm); formData.get("consent") == "on" ? anonymousConsent = true : anonymousConsent = false; const data = { firstName: formData.get("name"), consentToAnonymousImprovement: anonymousConsent }; fetch(apiPath + "contacts", { method: "POST", headers: { "Content-Type": "application/json", "X-API-KEY": "f1628f45-283e-4e35-b26c-a2c732f803aa", }, body: JSON.stringify(data), }) .then((response) => { if (response.ok) { getFaq("iscrizione"); return response.json(); } else { throw new Error("Errore nella richiesta"); } }) .then((data) => { onBoardingDiv.style.display = "block"; consentDiv.style.display = "none"; }) .catch((error) => { console.error("Error:", error); }); }); let isSendingMessage = false; const messageInputElement = shadow.getElementById("chatbot-message-input"); messageInputElement.addEventListener("keydown", function (event) { if (event.key === "Enter" && !event.shiftKey) { event.preventDefault(); if (!isSendingMessage) { getMessageAndSend(); } } }); function getMessageAndSend() { sendMessage(shadow.getElementById("chatbot-message-input").value.trim()); } async function sendMessage(messageInput) { if (isSendingMessage || messageInput === "") { return; } shadow.getElementById("chatbot-send-message-button").disabled = true; isSendingMessage = true; showSentMessage(messageInput); showBotTyping(); const { threadId } = getSessionStorageItems(); let runId = null; const data = { content: messageInput }; try { let response; if (threadId == undefined) { data.consentToAnonymousImprovement = anonymousConsent; response = await fetch(apiPath + "thread", { method: "POST", headers: { "Content-Type": "application/json", "X-API-KEY": "f1628f45-283e-4e35-b26c-a2c732f803aa", }, body: JSON.stringify(data), }); } else { response = await fetch(apiPath + "thread/" + threadId + "/message", { method: "POST", headers: { "Content-Type": "application/json", "X-API-KEY": "f1628f45-283e-4e35-b26c-a2c732f803aa", }, body: JSON.stringify(data), }); } if (!response.ok) { throw new Error("Network response was not ok"); } const responseData = await response.json(); if (threadId == undefined) { sessionStorage.setItem("thread_id", responseData.thread_id); } if (responseData.answer_type == "faq"){ setTimeout(() => { hideBotTyping(); isSendingMessage = false; shadow.getElementById("chatbot-send-message-button").disabled = false; showReceivedTextMessage(responseData.answer_content); getFaq(responseData.tags); }, 1000); }else{ runId = responseData.run_id; pollForMessages(runId); } } catch (error) { console.error("Error:", error); hideBotTyping(); showReceivedTextMessage( "Si è verificato un errore, riprova più tardi.
" ); isSendingMessage = false; shadow.getElementById("chatbot-send-message-button").disabled = false; } } async function receiveMessage(runId) { const { threadId } = getSessionStorageItems(); try { const response = await fetch( apiPath + "thread/" + threadId + "/run/" + runId + "/messages", { method: "GET", headers: { "Content-Type": "application/json", "X-API-KEY": "f1628f45-283e-4e35-b26c-a2c732f803aa", }, } ); const data = await response.json(); return data; } catch (error) { console.error("Error:", error); return { error: true }; } } async function pollForMessages(runId, interval = 2000) { let data; do { data = await receiveMessage(runId); if (data && data.messages && data.messages.length > 0) { showReceivedTextMessage(data.messages[0].content[0].text.value.response); if (data.messages[0].content[0].text.value.tags) { getFaq(data.messages[0].content[0].text.value.tags); } break; } await new Promise(resolve => setTimeout(resolve, interval)); } while (true); if (data.error) { showReceivedTextMessage("Si è verificato un errore, riprova più tardi.
"); } hideBotTyping(); isSendingMessage = false; shadow.getElementById("chatbot-send-message-button").disabled = false; } function getSessionStorageItems() { return { threadId: sessionStorage.getItem("thread_id"), runId: sessionStorage.getItem("run_id"), }; } function showBotTyping() { const botTypingHTML = '