IL DOC • suiteAI
IL DOC • suiteAI
Trasforma il modo in cui:
STUDI • LAVORI • CREI

La tua guida nell’Intelligenza Artificiale ?
IA Assistant • Università • Content Creator AI
Dimmi.. Cosa ti serve?
Ask AI
Oppure usa questi Link:
`; aiMsgs.appendChild(holder); aiMsgs.scrollTop=aiMsgs.scrollHeight; } const hideTyping=()=>{ const el=document.getElementById("aiTyping"); if(el) el.remove(); }; const openPopup = (messages)=>{ aiMask.style.display="block"; aiModal.style.display="flex"; renderPopup(messages); }; const closePopup= ()=>{ aiMask.style.display="none"; aiModal.style.display="none"; }; /* ========= SEND to N8N (robusta) ========= */ async function sendToWebhook(text){ ensureChatId(); showTyping(); try{ const res = await fetch(WEBHOOK,{ method:"POST", headers:{ "Content-Type":"application/json" }, body: JSON.stringify({ question:text, chat_id:CHAT_ID }), mode:"cors", cache:"no-store", credentials:"omit" }); const ct = res.headers.get('content-type') || ''; let payload; if (ct.includes('application/json')) payload = await res.json(); else payload = { reply:{ text: await res.text() } }; hideTyping(); const arr = Array.isArray(payload) ? payload : [payload]; const p0 = arr[0] || {}; const raw = p0.reply?.details ?? p0.data ?? p0.reply?.text ?? p0.message ?? ''; const botMsg={ role:'bot', html: raw ? normalizeBullets(raw) : '

✅ Messaggio inviato.

' }; HISTORY.push(botMsg); const last=loadLast(); last.push(botMsg); saveLast(last); renderPopup(); }catch(e){ hideTyping(); const err={role:'bot', html:"

⚠️ Errore di connessione.

"}; HISTORY.push(err); const last=loadLast(); last.push(err); saveLast(last); renderPopup(); } } /* ========= HOME: Ask AI ========= */ function activateAskInput(){ askInput.style.display="block"; askCta.style.display="none"; askInput.focus(); } function closeHomePopover(){ askPop.classList.remove('open','dir-up'); askPop.setAttribute('aria-hidden','true'); askPlus.classList.remove('rotated'); askPop.style.transform=''; } function toggleHomePopover(){ if(askPop.classList.contains('open')) return closeHomePopover(); askPop.classList.add('open'); askPop.setAttribute('aria-hidden','false'); askPlus.classList.add('rotated'); const r=askBar.getBoundingClientRect(); const pop=askPop.getBoundingClientRect(); const below=window.innerHeight - r.bottom; const above=r.top; askPop.classList.toggle('dir-up', below pop.height + 16); const pad=10; const rec=askPop.getBoundingClientRect(); if(rec.right > window.innerWidth - pad){ askPop.style.transform=`translateX(-${ rec.right-(window.innerWidth-pad) }px)`; } else if(rec.left { e.stopPropagation(); toggleHomePopover(); }); document.addEventListener("click", e=>{ if(askPop.classList.contains('open') && !askPop.contains(e.target) && !askPlus.contains(e.target)) closeHomePopover(); }); document.addEventListener("keydown", e=>{ if(e.key==="Escape" && askPop.classList.contains('open')) closeHomePopover(); }); askPop.addEventListener("click", (e)=>{ const b=e.target.closest(".ask-item"); if(!b) return; closeHomePopover(); if(b.dataset.action==="chat_passata"){ const last=loadLast(); openPopup(last.length? last : []); return; } activateAskInput(); askInput.value = b.dataset.fill || ""; }); function homeSend(){ const txt=askInput.value.trim(); if(!txt) return; askInput.value=""; const user={role:'user', text:txt}; HISTORY.push(user); const last=loadLast(); last.push(user); saveLast(last); openPopup(); renderPopup(); sendToWebhook(txt); } askCta.addEventListener("click", activateAskInput); askSend.addEventListener("click", homeSend); askInput.addEventListener("keypress", e=>{ if(e.key==="Enter") homeSend(); }); /* ========= POPUP: Ask AI ========= */ aiAskPlus.addEventListener('click', (e)=>{ e.preventDefault(); e.stopPropagation(); const open = aiAskMini.style.display === 'block'; aiAskMini.style.display = open ? 'none' : 'block'; aiAskPlus.style.transform = open ? 'rotate(0deg)' : 'rotate(45deg)'; }); document.addEventListener('click', (e)=>{ const wrap = document.getElementById('aiAskWrap'); if(wrap && !wrap.contains(e.target)){ aiAskMini.style.display='none'; aiAskPlus.style.transform='rotate(0deg)'; } }); aiAskMini.querySelectorAll('.mini-item').forEach(btn=>{ btn.addEventListener('click', ()=>{ aiAskInput.value = btn.dataset.fill || btn.textContent.trim(); aiAskMini.style.display='none'; aiAskPlus.style.transform='rotate(0deg)'; aiAskInput.focus(); }); }); function popupSend(){ const txt = (aiAskInput.value||'').trim(); if(!txt) return; aiAskInput.value = ''; const user={role:'user', text:txt}; HISTORY.push(user); const last=loadLast(); last.push(user); saveLast(last); renderPopup(); sendToWebhook(txt); } aiAskSend.addEventListener('click', popupSend); aiAskInput.addEventListener('keypress', e=>{ if(e.key==='Enter') popupSend(); }); /* ========= CLOSE POPUP ========= */ aiClose.addEventListener("click", closePopup); aiMask.addEventListener("click", closePopup); /* ========= BOOT ========= */ ensureChatId();