var chatContainer = document.createElement("div"); chatContainer.id = "chatbot-chat-container"; document.body.appendChild(chatContainer); const el = document.querySelector("#chatbot-chat-container") el.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.
Ciao, sono l'assistente virtuale dell'Università degli Studi Roma Tre. Come posso aiutarti oggi?
" ); showAllMessages(); toggleButton.addEventListener("click", () => { mainDiv.classList.toggle("visible"); console.log("clicked"); }); closeIconChat.addEventListener("click", () => { mainDiv.classList.remove("visible"); }); const chatForm = document.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); const data = { firstName: formData.get("name"), consentToAnonymousImprovement: formData.get("consent") == "on" ? true : false, }; 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) { return response.json(); } else { throw new Error("Errore nella richiesta"); } }) .then((data) => { onBoardingDiv.style.display = "block"; consentDiv.style.display = "none"; console.log("Success:", data); }) .catch((error) => { console.error("Error:", error); }); }); let isSendingMessage = false; const messageInputElement = document.getElementById("chatbot-message-input"); messageInputElement.addEventListener("keydown", function (event) { if (event.key === "Enter" && !event.shiftKey) { event.preventDefault(); if (!isSendingMessage) { getMessageAndSend(); } } }); function getMessageAndSend() { sendMessage(document.getElementById("chatbot-message-input").value.trim()); } async function sendMessage(messageInput) { if (isSendingMessage || messageInput === "") { return; } document.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) { 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) { console.log(responseData); sessionStorage.setItem("thread_id", responseData.thread_id); } if (responseData.answer_type == "faq"){ setTimeout(() => { hideBotTyping(); isSendingMessage = false; document.getElementById("chatbot-send-message-button").disabled = false; showReceivedTextMessage(responseData.answer_content); getFaq(responseData.tags); }, 1000); }else{ runId = responseData.run_id; receiveMessage(runId); } } catch (error) { console.error("Error:", error); hideBotTyping(); showReceivedTextMessage( "Si è verificato un errore, riprova più tardi.
" ); isSendingMessage = false; document.getElementById("chatbot-send-message-button").disabled = false; } } async function receiveMessage(runId) { const { threadId } = getSessionStorageItems(); console.log(threadId, runId); 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(); console.log("Success:", data); if (data.error) { showReceivedTextMessage( "Si è verificato un errore, riprova più tardi.
" ); } else { 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); } } } catch (error) { console.error("Error:", error); showReceivedTextMessage( "Si è verificato un errore, riprova più tardi.
" ); } finally { hideBotTyping(); isSendingMessage = false; document.getElementById("chatbot-send-message-button").disabled = false; } } function getSessionStorageItems() { return { threadId: sessionStorage.getItem("thread_id"), runId: sessionStorage.getItem("run_id"), }; } function showBotTyping() { const botTypingHTML = '