UNIVERSITY SPECIALIST:

POWERED

BY

Open Suite

OpenSuite Assistant

${text}
`; } else { wrapper.innerHTML = `
${text}
`; } messagesContainer.appendChild(wrapper); messagesContainer.scrollTop = messagesContainer.scrollHeight; } function appendAudioMessage(audioUrl, transcriptText) { const wrapper = document.createElement("div"); wrapper.style.display = "flex"; wrapper.style.flexDirection = "column"; wrapper.style.alignItems = "flex-start"; wrapper.style.gap = "8px"; wrapper.innerHTML = `
${transcriptText}
`; messagesContainer.appendChild(wrapper); messagesContainer.scrollTop = messagesContainer.scrollHeight; } function showTypingDots() { const loader = document.createElement("div"); loader.id = "loaderDots"; loader.innerHTML = `
`; messagesContainer.appendChild(loader); messagesContainer.scrollTop = messagesContainer.scrollHeight; } function removeTypingDots() { const dots = document.getElementById("loaderDots"); if (dots) dots.remove(); } function sendMessage() { const userText = input.value.trim(); if (!userText) return; appendMessage(userText, "user"); input.value = ""; showTypingDots(); fetch(webhookUrl, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ question: userText }) }) .then(response => response.json()) .then(data => { removeTypingDots(); if (data.reply) { if (data.reply.audioUrl && data.reply.text) { appendAudioMessage(data.reply.audioUrl, data.reply.text); } else if (data.reply.text) { appendMessage(data.reply.text, "bot"); } else { appendMessage("🤖 Nessuna risposta testuale trovata.", "bot"); } } else { appendMessage("⚠️ Errore: nessuna risposta ricevuta", "bot"); } }) .catch(() => { removeTypingDots(); appendMessage("⚠️ Errore di connessione", "bot"); }); } input.addEventListener("keypress", function (e) { if (e.key === "Enter") { sendMessage(); } });