Customer Intent Analyzer

Customer Intent Analyzer

Analyze customer feedback to understand intent and sentiment.

Feedback Intent Analysis

Intent Distribution

Feedback Breakdown

Feedback Text Detected Intent

Customer Feedback Entries

${key === 'Purchase' ? 'Purchase Intent' : key}

${value}

`).join(''); // Render Table dashboardTableBody.innerHTML = ''; analysisResults.forEach(item => { const tr = document.createElement('tr'); tr.className = 'bg-white border-b hover:bg-gray-50'; const intentClass = `intent-${item.intent.toLowerCase()}`; tr.innerHTML = ` "${item.text}" ${item.intent} `; dashboardTableBody.appendChild(tr); }); // Render Chart renderChart(summary); }; const renderChart = (summary) => { const chartData = { labels: INTENT_TYPES.map(t => t === 'Purchase' ? 'Purchase Intent' : t), datasets: [{ data: INTENT_TYPES.map(t => summary[t]), backgroundColor: ['#dcfce7', '#cffafe', '#fee2e2', '#f0abfc', '#e5e7eb'], borderColor: ['#166534', '#0891b2', '#991b1b', '#86198f', '#4b5563'], borderWidth: 1 }] }; if (intentChartInstance) intentChartInstance.destroy(); intentChartInstance = new Chart(intentChartCanvas, { type: 'doughnut', data: chartData, options: { responsive: true, maintainAspectRatio: true, plugins: { legend: { position: 'top', } } } }); }; const calculateAndRenderAll = () => { const results = runAnalysis(); renderConfig(); renderDashboard(results); updateNavButtons(); }; // --- Tab & Navigation Logic --- function switchTab(targetTabId) { if (currentTab === 'config') { saveConfig(); } currentTab = targetTabId; tabs.forEach(tab => tab.classList.toggle('active', tab.dataset.tab === currentTab)); tabContents.forEach(content => content.classList.toggle('active', content.id === currentTab)); if (currentTab === 'dashboard') { const results = runAnalysis(); renderDashboard(results); } else { renderConfig(); } updateNavButtons(); } // --- Event Handlers --- addFeedbackBtn.addEventListener('click', () => createFeedbackRow()); tabs.forEach(tab => tab.addEventListener('click', () => switchTab(tab.dataset.tab))); nextBtn.addEventListener('click', () => currentTab === 'dashboard' ? switchTab('config') : switchTab('dashboard')); prevBtn.addEventListener('click', () => currentTab === 'config' ? switchTab('dashboard') : switchTab('config')); function updateNavButtons() { if (currentTab === 'dashboard') { nextBtn.textContent = 'Configure Data'; prevBtn.style.display = 'none'; pdfButtonContainer.style.display = 'block'; } else { nextBtn.textContent = 'Update Analysis'; prevBtn.style.display = 'inline-flex'; pdfButtonContainer.style.display = 'none'; } } // --- PDF Download --- downloadPdfBtn.addEventListener('click', async () => { const { jsPDF } = window.jspdf; const doc = new jsPDF({ orientation: 'l', unit: 'mm', format: 'a4' }); const content = document.getElementById('pdf-content'); document.getElementById('pdf-date').textContent = `Report Generated: ${new Date().toLocaleString()}`; await new Promise(r => setTimeout(r, 100)); // Allow chart to render fully const canvas = await html2canvas(content, { scale: 2 }); const imgData = canvas.toDataURL('image/jpeg', 1.0); const imgProps = doc.getImageProperties(imgData); const pdfWidth = doc.internal.pageSize.getWidth() - 28; const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width; doc.addImage(imgData, 'JPEG', 14, 15, pdfWidth, pdfHeight); document.getElementById('pdf-date').textContent = ''; doc.save(`Customer-Intent-Analysis-${new Date().toISOString().slice(0,10)}.pdf`); }); // --- Initial Load --- calculateAndRenderAll(); });
Scroll to Top