// Pages.jsx — All dashboard pages with REAL Mostto data
// ─── REAL DATA ───────────────────────────────────────────────────────────────
const MOSTTO_DATA = {
// KPIs globales (datos mostto.xlsx — Dashboard sheet)
periodo: 'Abr 7 – May 4, 2026',
conversaciones: 655,
mensajes: 17271,
msgPorConv: 26.4,
tiempoRespMediano: '0,1 min',
tiempoRespPromedio: '19 min',
tiempoRespP90: '15,4 min',
conAtencionHumana: 651,
pctHumana: 99.4,
soloBot: 4,
horaPico: '14:00 hs',
diaPico: 'Miércoles',
paresAnalizados: 6013,
// Informe inicial KPIs
totalMensajesInforme: 25345,
mensajesInbound: 9121,
mensajesAI: 7250,
mensajesHuman: 7153,
mensajesManual: 1811,
convsResueltas: 769,
convsEscaladaHumano: 735,
convsSoloHumano: 15,
convsSinRespuesta: 19,
duracionMediana: 179.8,
primerRespPromedio: 84.7,
primerRespMediana: 0.1,
msgPromPorConv: 32.9,
// _Volumen (fechas como serial Excel → reales)
// Serial 46119 = 7 Abr 2026
volumenDiario: [
{ fecha: '07 Abr', dia: 'Mar', nuevas: 36, msgs: 141 },
{ fecha: '08 Abr', dia: 'Mié', nuevas: 42, msgs: 562 },
{ fecha: '09 Abr', dia: 'Jue', nuevas: 50, msgs: 572 },
{ fecha: '10 Abr', dia: 'Vie', nuevas: 32, msgs: 422 },
{ fecha: '11 Abr', dia: 'Sáb', nuevas: 2, msgs: 29 },
{ fecha: '12 Abr', dia: 'Dom', nuevas: 0, msgs: 3 },
{ fecha: '13 Abr', dia: 'Lun', nuevas: 41, msgs: 462 },
{ fecha: '14 Abr', dia: 'Mar', nuevas: 42, msgs: 480 },
{ fecha: '15 Abr', dia: 'Mié', nuevas: 52, msgs: 557 },
{ fecha: '16 Abr', dia: 'Jue', nuevas: 21, msgs: 250 },
{ fecha: '17 Abr', dia: 'Vie', nuevas: 35, msgs: 454 },
{ fecha: '18 Abr', dia: 'Sáb', nuevas: 3, msgs: 30 },
{ fecha: '19 Abr', dia: 'Dom', nuevas: 2, msgs: 3 },
{ fecha: '20 Abr', dia: 'Lun', nuevas: 18, msgs: 331 },
{ fecha: '21 Abr', dia: 'Mar', nuevas: 9, msgs: 139 },
{ fecha: '22 Abr', dia: 'Mié', nuevas: 45, msgs: 549 },
{ fecha: '23 Abr', dia: 'Jue', nuevas: 35, msgs: 411 },
{ fecha: '24 Abr', dia: 'Vie', nuevas: 44, msgs: 482 },
{ fecha: '25 Abr', dia: 'Sáb', nuevas: 7, msgs: 58 },
{ fecha: '26 Abr', dia: 'Dom', nuevas: 4, msgs: 25 },
{ fecha: '27 Abr', dia: 'Lun', nuevas: 38, msgs: 498 },
{ fecha: '28 Abr', dia: 'Mar', nuevas: 41, msgs: 463 },
{ fecha: '29 Abr', dia: 'Mié', nuevas: 48, msgs: 521 },
{ fecha: '30 Abr', dia: 'Jue', nuevas: 33, msgs: 388 },
{ fecha: '01 May', dia: 'Vie', nuevas: 29, msgs: 312 },
{ fecha: '02 May', dia: 'Sáb', nuevas: 5, msgs: 48 },
{ fecha: '03 May', dia: 'Dom', nuevas: 2, msgs: 11 },
{ fecha: '04 May', dia: 'Lun', nuevas: 19, msgs: 190 },
],
// _Temas
temas: [
{ label: 'Entrega/Flete', value: 287, color: '#7D2574' },
{ label: 'Presupuesto/Cotización', value: 162, color: '#29265B' },
{ label: 'Horarios/Sucursales', value: 158, color: '#2E90FA' },
{ label: 'Bot/Registro', value: 137, color: '#12B76A' },
{ label: 'Factura/Pago', value: 106, color: '#F79009' },
{ label: 'Seguimiento/Tracking', value: 104, color: '#B16AAB' },
{ label: 'Retiro/Pickup', value: 103, color: '#545A71' },
{ label: 'Reclamo/Queja', value: 26, color: '#F04438' },
{ label: 'Derivación/Asignación', value: 23, color: '#94A3B8' },
],
// Temas informe
temasInforme: [
{ label: 'Presupuesto/Cotización', value: 121 },
{ label: 'Envío/Encomienda', value: 108 },
{ label: 'Retiro a domicilio', value: 106 },
{ label: 'Horarios/Sucursal', value: 91 },
{ label: 'Carga grande/Flete', value: 82 },
{ label: 'Documentación/DNI', value: 69 },
{ label: 'Pago/Transferencia', value: 38 },
{ label: 'Seguimiento/Tracking', value: 33 },
],
// _Geo
geo: [
{ label: 'Entre Ríos', value: 713 },
{ label: 'Buenos Aires / AMBA', value: 293 },
{ label: 'Rosario / Santa Fe', value: 245 },
{ label: 'Córdoba', value: 65 },
{ label: 'Salta', value: 3 },
{ label: 'Mendoza', value: 3 },
{ label: 'Corrientes', value: 2 },
{ label: 'Misiones', value: 2 },
{ label: 'San Luis/La Pampa', value: 1 },
{ label: 'Tucumán', value: 1 },
],
// _Respuesta (datos mostto)
respuesta: [
{ label: '< 5 min', value: 5223, color: '#12B76A' },
{ label: '5–15 min', value: 182, color: '#F79009' },
{ label: '15–60 min', value: 272, color: '#F79009' },
{ label: '1–4 horas', value: 253, color: '#F04438' },
{ label: '> 4 horas', value: 83, color: '#D92D20' },
],
// Tiempos informe
primerRespuesta: [
{ label: '< 1 min', value: 699, color: '#12B76A' },
{ label: '1–5 min', value: 23, color: '#F79009' },
{ label: '5–30 min', value: 4, color: '#F79009' },
{ label: '30 min–2 h', value: 1, color: '#F04438' },
{ label: '2 h–24 h', value: 15, color: '#D92D20' },
{ label: '> 24 h', value: 7, color: '#B42318' },
{ label: 'Sin respuesta', value: 19, color: '#94A3B8' },
],
duracionConv: [
{ label: '< 5 min', value: 39, color: '#12B76A' },
{ label: '5–30 min', value: 49, color: '#34D399' },
{ label: '30 min–2 h', value: 244, color: '#F79009' },
{ label: '2 h–24 h', value: 256, color: '#F04438' },
{ label: '> 24 h', value: 181, color: '#D92D20' },
],
// _Agentes
agentes: [
{ nombre: 'Agente Principal', msgs: 7291, convs: 650, color: '#7D2574' },
{ nombre: 'Agente 20', msgs: 653, convs: 228, color: '#29265B' },
],
// _DiaSemana
diaSemana: [
{ label: 'Lun', value: 3090 },
{ label: 'Mar', value: 2601 },
{ label: 'Mié', value: 4168 },
{ label: 'Jue', value: 2661 },
{ label: 'Vie', value: 2840 },
{ label: 'Sáb', value: 241 },
{ label: 'Dom', value: 21 },
],
// _Horarios (fracciones → horas)
horarios: [
{ h: '00', v: 61 }, { h: '01', v: 69 }, { h: '02', v: 46 }, { h: '03', v: 6 },
{ h: '04', v: 23 }, { h: '05', v: 3 }, { h: '06', v: 1 }, { h: '07', v: 0 },
{ h: '08', v: 2 }, { h: '09', v: 1 }, { h: '10', v: 168 }, { h: '11', v: 917 },
{ h: '12', v: 2134 }, { h: '13', v: 2239 }, { h: '14', v: 2263 }, { h: '15', v: 1642 },
{ h: '16', v: 1032 }, { h: '17', v: 1579 }, { h: '18', v: 1332 }, { h: '19', v: 926 },
{ h: '20', v: 407 }, { h: '21', v: 175 }, { h: '22', v: 134 }, { h: '23', v: 112 },
],
// Menu
menu: [
{ label: '6 – Hablar con asesor', value: 241, pct: 33.8 },
{ label: '4 – Presupuestos', value: 187, pct: 26.3 },
{ label: '3 – Seguimiento', value: 162, pct: 22.8 },
{ label: '1 – Servicios', value: 56, pct: 7.9 },
{ label: '2 – Sucursales', value: 39, pct: 5.5 },
{ label: '5 – Reclamos', value: 27, pct: 3.8 },
],
// Bot
bot: {
totalConvs: 769,
conBot: 735,
resueltoSoloBot: 0,
escaladaHumano: 735,
soloHumano: 15,
sinRespuesta: 19,
tasaEscalacion: 100,
msgsAIporConv: 9.4,
},
};
// ─── HELPERS ─────────────────────────────────────────────────────────────────
function fmt(n) { return n.toLocaleString('es-AR'); }
function pct(a, b) { return ((a / b) * 100).toFixed(1).replace('.', ',') + '%'; }
function ChartLegend({ items }) {
return (
{items.map((it, i) => (
{it.label}
))}
);
}
// ─── OVERVIEW PAGE ───────────────────────────────────────────────────────────
function OverviewPage() {
const D = MOSTTO_DATA;
const totalMsgsResp = D.respuesta.reduce((a, r) => a + r.value, 0);
const pctRapida = ((D.respuesta[0].value / totalMsgsResp) * 100).toFixed(1).replace('.', ',');
// Build volume series for line chart (last 21 days weekdays only)
const weekdays = D.volumenDiario.filter(d => !['Sáb', 'Dom'].includes(d.dia));
const last14 = weekdays.slice(-14);
const labels = last14.map(d => d.fecha.split(' ')[0]);
return (
{/* Período badge */}
Vista general
Período: {D.periodo} · Canal: WhatsApp
27 días analizados
{/* Alert resumen */}
{/* KPI row */}
{/* Segunda fila KPIs */}
{/* Volumen + respuesta */}
d.nuevas) }]}
height={180}
/>
{D.respuesta.map((r, i) => (
))}
{/* Temas + Geo */}
{D.temas.slice(0, 7).map((t, i) => (
))}
{D.geo.slice(0, 8).map((g, i) => (
a + x.value, 0)} barColor='#7D2574' />
))}
);
}
// ─── VOLUMEN PAGE ─────────────────────────────────────────────────────────────
function VolumenPage() {
const D = MOSTTO_DATA;
const [view, setView] = React.useState('convs');
const all = D.volumenDiario;
const labels = all.map(d => d.fecha.replace(' ', '\n'));
const dataConvs = all.map(d => d.nuevas);
const dataMsgs = all.map(d => d.msgs);
const totalConvsSem = [0, 1, 2, 3].map(w => {
const seg = all.filter(d => !['Sáb', 'Dom'].includes(d.dia)).slice(w * 5, w * 5 + 5);
return seg.reduce((a, d) => a + d.nuevas, 0);
});
return (
Volumen diario
{[['convs', 'Conversaciones'], ['msgs', 'Mensajes']].map(([id, lab]) => (
setView(id)} style={{
fontSize: 12, fontWeight: 600, padding: '5px 10px', borderRadius: 6, cursor: 'pointer',
border: view === id ? '1.5px solid var(--primary-500)' : '1px solid var(--border-default)',
background: view === id ? 'var(--primary-50)' : '#fff',
color: view === id ? 'var(--primary-700)' : 'var(--fg-2)', fontFamily: 'var(--font-sans)',
}}>{lab}
))}
}
>
({ label: d.label, value: d.value, color: d.label === 'Mié' ? '#7D2574' : 'var(--primary-200)' }))}
height={200}
/>
Miércoles concentra el {((4168 / D.mensajes) * 100).toFixed(0)}% del tráfico semanal
{[
{ id: 5252, msgs: 142, dur: '27.708 min', cat: 'Escalada a humano' },
{ id: 7730, msgs: 141, dur: '20.137 min', cat: 'Escalada a humano' },
{ id: 4960, msgs: 134, dur: '12.709 min', cat: 'Escalada a humano' },
{ id: 7958, msgs: 129, dur: '11.920 min', cat: 'Escalada a humano' },
{ id: 7090, msgs: 112, dur: '5.901 min', cat: 'Escalada a humano' },
{ id: 8235, msgs: 112, dur: '7.395 min', cat: 'Escalada a humano' },
].map((c, i) => (
#{i+1}
#{c.id}
{c.dur}
{c.msgs} msgs
))}
);
}
// ─── TEMAS PAGE ───────────────────────────────────────────────────────────────
function TopicsPage() {
const D = MOSTTO_DATA;
const totalTemas = D.temas.reduce((a, t) => a + t.value, 0);
const totalGeo = D.geo.reduce((a, g) => a + g.value, 0);
return (
Temas frecuentes
({ label: t.label.split('/')[0], value: t.value, color: t.color }))} height={220} />
({ label: t.label, color: t.color }))} />
({ label: g.label.split(' ')[0], value: g.value, color: '#7D2574' }))} height={220} />
{D.temasInforme.map((t, i) => (
))}
{D.menu.map((m, i) => (
))}
Tasa de selección: 82,8% · Tasa de abandono: 17,2%
);
}
// ─── TIMING PAGE ──────────────────────────────────────────────────────────────
function TimingPage() {
const D = MOSTTO_DATA;
const totalPR = D.primerRespuesta.reduce((a, r) => a + r.value, 0);
const totalDur = D.duracionConv.reduce((a, r) => a + r.value, 0);
return (
Tiempos de respuesta
({ label: r.label, value: r.value, color: r.color }))} height={200} />
{D.primerRespuesta.map((r, i) => (
))}
({ label: r.label, value: r.value, color: r.color }))} height={200} />
{D.duracionConv.map((r, i) => (
))}
{[
{ label: 'Primer respuesta — Promedio', value: '84,7 min', note: 'Promedio sesgado por outliers (> 24 h)' },
{ label: 'Primer respuesta — Mediana (P50)', value: '0,1 min', note: '~6 segundos. Excelente.' },
{ label: 'Primer respuesta — P75', value: '0,1 min', note: '75% respondido en segundos' },
{ label: 'Primer respuesta — P90', value: '0,5 min', note: '90% en menos de 30 segundos' },
{ label: 'Duración conversación — Promedio', value: '2.229 min', note: '~37 horas promedio (outliers)' },
{ label: 'Duración conversación — Mediana', value: '179,8 min', note: '~3 horas por conversación' },
{ label: 'Duración conversación — P75', value: '1.338,5 min', note: '~22 horas para el 25% más largo' },
{ label: 'Duración conversación — P90', value: '6.194 min', note: '~4,3 días para el 10% más largo' },
{ label: 'Mensajes por conversación', value: '32,9', note: 'Mediana: 31 msgs/conv' },
].map((k, i) => (
{k.label}
{k.value}
{k.note}
))}
);
}
// ─── HEATMAP PAGE ─────────────────────────────────────────────────────────────
function HeatmapPage() {
const D = MOSTTO_DATA;
// Build heatmap data from diaSemana x horarios approximation
// Using Por Hora data from informe: rows 2-8 have per-day-per-hour
const days = ['Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom'];
const hours = ['07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21'];
// Approximate data based on informe "Por Hora" day/hour matrix
const heatData = [
// Lunes
{day:'Lun',hour:'07',value:34},{day:'Lun',hour:'08',value:303},{day:'Lun',hour:'09',value:505},
{day:'Lun',hour:'10',value:711},{day:'Lun',hour:'11',value:702},{day:'Lun',hour:'12',value:674},
{day:'Lun',hour:'13',value:325},{day:'Lun',hour:'14',value:355},{day:'Lun',hour:'15',value:181},
{day:'Lun',hour:'16',value:180},{day:'Lun',hour:'17',value:165},{day:'Lun',hour:'18',value:160},
{day:'Lun',hour:'19',value:44},{day:'Lun',hour:'20',value:23},{day:'Lun',hour:'21',value:16},
// Martes
{day:'Mar',hour:'07',value:73},{day:'Mar',hour:'08',value:286},{day:'Mar',hour:'09',value:423},
{day:'Mar',hour:'10',value:857},{day:'Mar',hour:'11',value:582},{day:'Mar',hour:'12',value:518},
{day:'Mar',hour:'13',value:357},{day:'Mar',hour:'14',value:584},{day:'Mar',hour:'15',value:552},
{day:'Mar',hour:'16',value:398},{day:'Mar',hour:'17',value:176},{day:'Mar',hour:'18',value:21},
{day:'Mar',hour:'19',value:80},{day:'Mar',hour:'20',value:6},{day:'Mar',hour:'21',value:4},
// Miércoles
{day:'Mié',hour:'07',value:69},{day:'Mié',hour:'08',value:417},{day:'Mié',hour:'09',value:708},
{day:'Mié',hour:'10',value:824},{day:'Mié',hour:'11',value:789},{day:'Mié',hour:'12',value:606},
{day:'Mié',hour:'13',value:477},{day:'Mié',hour:'14',value:613},{day:'Mié',hour:'15',value:635},
{day:'Mié',hour:'16',value:417},{day:'Mié',hour:'17',value:192},{day:'Mié',hour:'18',value:106},
{day:'Mié',hour:'19',value:20},{day:'Mié',hour:'20',value:96},{day:'Mié',hour:'21',value:63},
// Jueves
{day:'Jue',hour:'06',value:27},{day:'Jue',hour:'07',value:84},{day:'Jue',hour:'08',value:210},
{day:'Jue',hour:'09',value:971},{day:'Jue',hour:'10',value:715},{day:'Jue',hour:'11',value:688},
{day:'Jue',hour:'12',value:445},{day:'Jue',hour:'13',value:406},{day:'Jue',hour:'14',value:706},
{day:'Jue',hour:'15',value:457},{day:'Jue',hour:'16',value:540},{day:'Jue',hour:'17',value:131},
{day:'Jue',hour:'18',value:50},{day:'Jue',hour:'19',value:22},{day:'Jue',hour:'20',value:7},
// Viernes
{day:'Vie',hour:'07',value:36},{day:'Vie',hour:'08',value:135},{day:'Vie',hour:'09',value:433},
{day:'Vie',hour:'10',value:616},{day:'Vie',hour:'11',value:846},{day:'Vie',hour:'12',value:447},
{day:'Vie',hour:'13',value:237},{day:'Vie',hour:'14',value:332},{day:'Vie',hour:'15',value:404},
{day:'Vie',hour:'16',value:263},{day:'Vie',hour:'17',value:145},{day:'Vie',hour:'18',value:66},
{day:'Vie',hour:'19',value:8},{day:'Vie',hour:'20',value:0},{day:'Vie',hour:'21',value:1},
// Sábado
{day:'Sáb',hour:'08',value:33},{day:'Sáb',hour:'09',value:137},{day:'Sáb',hour:'10',value:39},
{day:'Sáb',hour:'11',value:52},{day:'Sáb',hour:'12',value:19},{day:'Sáb',hour:'13',value:2},
// Domingo
{day:'Dom',hour:'10',value:3},{day:'Dom',hour:'11',value:1},{day:'Dom',hour:'13',value:3},
{day:'Dom',hour:'14',value:1},{day:'Dom',hour:'16',value:4},{day:'Dom',hour:'17',value:6},
];
return (
Horarios y días
Poco tráfico
{['#e9d5f5','#c084d4','#9a3f90','#7d2574','#4a1545'].map((c, i) => (
))}
Mucho tráfico
({
label: d.label,
value: d.value,
color: d.label === 'Mié' ? '#7D2574' : d.label === 'Sáb' || d.label === 'Dom' ? 'var(--gray-300)' : 'var(--primary-300)'
}))}
height={200}
/>
({
label: parseInt(h.h) % 3 === 0 ? h.h + 'h' : '',
value: h.v,
color: h.h === '14' ? '#7D2574' : h.v > 1000 ? 'var(--primary-400)' : 'var(--primary-200)'
}))}
height={200}
/>
Ventana activa: 10:00–18:00 hs concentra el 78% del tráfico
);
}
// ─── GEO PAGE ─────────────────────────────────────────────────────────────────
function GeoPage() {
const D = MOSTTO_DATA;
const total = D.geo.reduce((a, g) => a + g.value, 0);
const colors = ['#7D2574','#29265B','#2E90FA','#12B76A','#F79009','#F04438','#B16AAB','#545A71','#94A3B8','#CBD5E1'];
return (
Geografía
({ label: g.label.split('/')[0].split(' ')[0], value: g.value, color: colors[i] || '#94A3B8' }))}
height={220}
/>
({ value: g.value, color: colors[i] }))}
size={180}
label={fmt(total)}
sub="menciones"
/>
{D.geo.slice(0, 5).map((g, i) => (
{g.label}
{((g.value/total)*100).toFixed(1).replace('.',',')}%
))}
{D.geo.map((g, i) => (
{g.label}
{fmt(g.value)}
{((g.value/total)*100).toFixed(1).replace('.',',')}%
))}
);
}
// ─── AGENTS PAGE ──────────────────────────────────────────────────────────────
function AgentsPage() {
const D = MOSTTO_DATA;
return (
Agentes
{D.agentes.map((a, i) => (
{[
{ label: 'Mensajes enviados', value: fmt(a.msgs), icon: 'send' },
{ label: 'Conversaciones atendidas', value: fmt(a.convs), icon: 'message-square' },
{ label: 'Msgs por conversación', value: (a.msgs / a.convs).toFixed(1).replace('.', ','), icon: 'hash' },
{ label: 'Participación mensajes', value: `${((a.msgs / (7291+653))*100).toFixed(1).replace('.',',')}%`, icon: 'pie-chart' },
].map((stat, j) => (
{stat.label}
{stat.value}
))}
Participación en mensajes
))}
{[
{ label: 'Inbound (cliente)', value: fmt(9121), pct: '36,0%', color: '#2E90FA' },
{ label: 'AI (bot)', value: fmt(7250), pct: '28,6%', color: '#12B76A' },
{ label: 'Humano (agente)', value: fmt(7153), pct: '28,2%', color: '#7D2574' },
{ label: 'Outbound manual', value: fmt(1811), pct: '7,1%', color: '#F79009' },
].map((t, i) => (
{t.label}
{t.value}
{t.pct} del total
))}
);
}
// ─── BOT PAGE ─────────────────────────────────────────────────────────────────
function BotPage() {
const D = MOSTTO_DATA;
const B = D.bot;
return (
Bot vs. humano
{[
{ label: 'Escalada a humano', value: B.escaladaHumano, color: '#7D2574' },
{ label: 'Solo humano (sin bot)', value: B.soloHumano, color: '#29265B' },
{ label: 'Sin respuesta', value: B.sinRespuesta, color: '#94A3B8' },
].map((r, i) => (
{r.label}
{fmt(r.value)}
{((r.value/B.totalConvs)*100).toFixed(1).replace('.',',')}%
))}
{[
{ label: 'Mensajes de clientes (inbound)', value: 9121, pct: 36.0, color: '#2E90FA' },
{ label: 'Mensajes del bot (AI)', value: 7250, pct: 28.6, color: '#12B76A' },
{ label: 'Mensajes de agentes (humano)', value: 7153, pct: 28.2, color: '#7D2574' },
{ label: 'Mensajes manuales outbound', value: 1811, pct: 7.1, color: '#F79009' },
].map((m, i) => (
{m.label}
{fmt(m.value)}
{m.pct.toFixed(1).replace('.',',')}% del total
))}
({ label: m.label.split(' – ')[1] || m.label, value: m.value, color: '#7D2574' }))}
height={180}
/>
{D.menu.map((m, i) => (
{m.label}
{m.value}
{m.pct.toFixed(1).replace('.',',')}%
))}
);
}
// ─── MENU PAGE ────────────────────────────────────────────────────────────────
function MenuPage() {
const D = MOSTTO_DATA;
return ;
}
// ─── INSIGHTS PAGE ────────────────────────────────────────────────────────────
function InsightsPage() {
const D = MOSTTO_DATA;
const insights = [
{
level: 'warning',
title: 'Bot sin capacidad de resolución',
body: 'El 100% de las conversaciones que inician con bot se escalan a humanos. El bot actúa como un enrutador (menú de opciones), no como resolutor. Considerar agregar respuestas automáticas para los temas más frecuentes: Entrega/Flete (287 convs), Horarios/Sucursales (158 convs), Seguimiento/Tracking (104 convs).',
action: 'Ver temas frecuentes',
},
{
level: 'info',
title: 'Alto porcentaje de abandono del menú (17,2%)',
body: 'De 860 veces que se mostró el menú del bot, 148 usuarios no seleccionaron ninguna opción. Revisar si las opciones son claras y si hay una opción de "ninguna de las anteriores" o texto libre.',
action: 'Ver menú',
},
{
level: 'success',
title: 'Tiempo de primera respuesta excelente',
body: 'El 91% de los clientes recibe su primera respuesta en menos de 1 minuto. La mediana es de 0,1 minutos (~6 segundos). Esto posiciona muy bien al equipo en términos de velocidad de atención.',
action: null,
},
{
level: 'warning',
title: 'Miércoles concentra el 24% del tráfico semanal',
body: 'Con 4.168 mensajes, los miércoles son el día más activo por amplio margen. Se recomienda asegurar cobertura completa de agentes ese día, especialmente en el horario 10:00–15:00 hs.',
action: 'Ver horarios',
},
{
level: 'warning',
title: '19 conversaciones sin respuesta',
body: `${((19/769)*100).toFixed(1)}% de las conversaciones (19 de 769) quedaron sin respuesta. Aunque es un porcentaje bajo, cada conversación sin respuesta es un cliente que no fue atendido. Revisar si hay un proceso de seguimiento para estos casos.`,
action: null,
},
{
level: 'info',
title: 'Concentración geográfica en Entre Ríos',
body: 'El 54,4% de las menciones geográficas corresponden a Entre Ríos (713 de 1.329). Buenos Aires/AMBA aporta el 22%, y Rosario/Santa Fe el 18,7%. Esto sugiere que Mostto tiene fuerte presencia en el NEA y debería reforzar operaciones en esa región.',
action: null,
},
{
level: 'success',
title: 'Fin de semana con actividad mínima',
body: 'Sábados y domingos concentran apenas el 1,1% del tráfico total (261 mensajes). Esto permite gestionar turnos de fin de semana con mínima cobertura o delegar al bot con un mensaje de "fuera de horario".',
action: null,
},
{
level: 'danger',
title: 'Conversaciones de duración extrema',
body: 'El 23,5% de las conversaciones dura más de 24 horas (181 de 769). La conversación más larga supera los 27.000 minutos (~19 días). Esto puede indicar conversaciones abandonadas que no fueron cerradas correctamente. Implementar cierre automático por inactividad.',
action: 'Ver tiempos',
},
];
const faqs = [
{ q: '¿Cuántas conversaciones se atendieron en el período?', a: '655 conversaciones en datos mostto (Abr 7 – May 4) y 769 conversaciones en el informe extendido (Abr 7–30). La diferencia se debe al alcance del período.' },
{ q: '¿Cuánto tarda el equipo en responder?', a: 'La mediana de primera respuesta es 0,1 minutos (~6 segundos). El 91% responde en menos de 1 minuto. El promedio (84,7 min) está distorsionado por conversaciones fuera de horario laboral.' },
{ q: '¿Qué consulta recibe más el equipo?', a: 'Entrega y flete lidera con 287 conversaciones (43,8% del total), seguido por Presupuesto/Cotización (24,7%) y Horarios/Sucursales (24,1%).' },
{ q: '¿Cuál es el horario de mayor demanda?', a: 'El pico es a las 14:00 hs. La ventana 10:00–18:00 hs concentra el 78% del tráfico. Los miércoles son el día más activo con 4.168 mensajes.' },
{ q: '¿El bot resuelve conversaciones?', a: 'No. El bot funciona como enrutador: muestra un menú de opciones y deriva todas las conversaciones (100%) a agentes humanos. La tasa de resolución automática es 0%.' },
{ q: '¿Qué porcentaje de clientes viene de Entre Ríos?', a: 'Entre Ríos lidera con el 54,4% de las menciones geográficas (713 de 1.329), seguido por Buenos Aires/AMBA (22,1%) y Rosario/Santa Fe (18,4%).' },
{ q: '¿Cuántos agentes hay y qué carga tienen?', a: 'Hay 2 agentes activos. El Agente Principal manejó 7.291 mensajes en 650 conversaciones (92,3% de la carga). El Agente 20 envió 653 mensajes en 228 conversaciones.' },
{ q: '¿Cuánto dura una conversación típica?', a: 'La duración mediana es de 179,8 minutos (~3 horas). El 63,5% de las conversaciones se resuelve en 30 minutos a 24 horas. El 23,5% supera las 24 horas.' },
];
const [openFaq, setOpenFaq] = React.useState(null);
return (
Alertas y mejoras
{/* Insights */}
Análisis y recomendaciones
{insights.map((ins, i) => (
))}
{/* FAQs */}
{faqs.map((faq, i) => (
setOpenFaq(openFaq === i ? null : i)}
style={{
display: 'flex', alignItems: 'center', justifyContent: 'space-between',
width: '100%', padding: '14px 4px', background: 'none', border: 'none',
cursor: 'pointer', textAlign: 'left', fontFamily: 'var(--font-sans)',
gap: 12,
}}
>
{faq.q}
{openFaq === i && (
{faq.a}
)}
))}
);
}
Object.assign(window, {
OverviewPage, VolumenPage, TopicsPage, TimingPage,
HeatmapPage, GeoPage, AgentsPage, BotPage, MenuPage, InsightsPage
});