{{ currentUser.role === 'agent' ? 'Bandeja' : 'Centro de Control' }}
{{ currentUser.username ? currentUser.username.toUpperCase() : 'USER' }}
{{ currentUser.role }}
📋 Mis Chats
Todos tus leads asignados{{ bot.name || id }}
{{ bot.owner_username || 'Sin asignar' }}
⬛ Apagada
🟢 Online
🔴 Deslogueada
📷 Sin escanear
⏳ Iniciando…
⚠️
LÍNEA DESLOGUEADA
La sesión de WhatsApp se cerró
📱 Escaneá con WhatsApp para conectar
Expira en ~60 seg · se actualiza solo
Generando QR…
📊 Estado del Servidor
Sistema
{{ hardwareStats.os }} ({{ hardwareStats.arch }})
Procesador
{{ hardwareStats.cpuModel }} {{ hardwareStats.cpuCores }} Cores
Memoria RAM ({{ hardwareStats.totalRam }})
{{ hardwareStats.freeRam }} Libres
Actividad
{{ hardwareStats.uptime }}
W
Espacio de Trabajo Asesor
📬 Bandeja General — todos los chats asignados Conectado a Línea: {{ bots[activeMessagesBot] ? bots[activeMessagesBot].name : activeMessagesBot }}
👥
{{ (c.contactName || c.phone)[0].toUpperCase() }}
{{ c.contactName && c.contactName !== c.phone ? c.contactName : (c.realPhone || displayPhone(c.phone)) }}
👥 Grupo
+{{ c.realPhone }}
{{ c.phone }}
sin número
sin número
{{ formatChatTime(c.lastUpdate) }}
{{ c.unreadCount }}
{{ Math.round(c.score * 100) }}%
👤 Mío
👤 {{ c.assignedUsername }}
{{ c.label }}
{{ c.product_tag }}
📱 {{ bots[c.botId].name || c.botId }}
{{ c.class_sales }}
{{ c.class_quality }}
🤖 IA Activa
📱
Selecciona un chat de la bandeja
👥
👤
{{ activeChat.contactName && activeChat.contactName !== activeChat.phone ? activeChat.contactName : (activeChat.realPhone ? '+' + activeChat.realPhone : displayPhone(activeChat.phone)) }}
escribiendo... 👥 Grupo · {{ activeChat.phone }} +{{ activeChat.realPhone }} {{ activeChat.phone }} sin número 📱 Vía: {{ bots[activeChat.botId]?.name || activeChat.botId }}HISTORIAL DEL DATO
Sin eventos registrados
📞
🔄
⚡
✋
🏷️
📌
{{ ev.detail }}
{{ new Date(ev.createdAt).toLocaleString('es-AR',{day:'2-digit',month:'2-digit',year:'2-digit',hour:'2-digit',minute:'2-digit'}) }}
· {{ ev.actorUsername }}
→ {{ ev.assignedToUsername }}
Sin notas todavía
{{ note.username || 'Sin usuario' }} · {{ new Date(note.createdAt).toLocaleString('es-AR',{day:'2-digit',month:'2-digit',hour:'2-digit',minute:'2-digit'}) }}
{{ note.body }}
{{ getDateLabel(m.timestamp) }}
{{ m.text }}
{{ chatMessages.find(x => x.id === m.quotedMsgId)?.text || '📎 Adjunto' }}
{{ quotedMsg.dir === 'in' ? 'Contacto' : 'Tú' }}
{{ quotedMsg.mediaType ? '📎 ' + quotedMsg.mediaType : quotedMsg.text }}
{{ quotedMsg.mediaType ? '📎 ' + quotedMsg.mediaType : quotedMsg.text }}
●
{{ formatRecordingTime(recordingSeconds) }}
🚦 Enrutador PBX (Issabel)
{{ editingQueue ? '✏️ Editar Cola' : '➕ Nueva Cola' }}
📋 Colas Configuradas
| Extensión | Descripción | Líneas Asignadas | Estado | Acción |
|---|---|---|---|---|
| {{ q.queue }} | {{ q.name }} | {{ (Array.isArray(q.bots) ? q.bots : JSON.parse(q.bots || '[]')).length }} líneas | {{ q.active ? 'On' : 'Off' }} | |
| No hay colas PBX vinculadas. | ||||
Sistema de Colas
Cargando...
No hay líneas madre configuradas.
Activá "Línea Madre" en la configuración de un bot.
Activá "Línea Madre" en la configuración de un bot.
Líneas Madre
{{ m.bot_id }}
Cola de Redes — {{ colasActiveTab }}
{{ getActiveQueue('redes')?.active ? 'ACTIVA' : 'INACTIVA' }}
AGENTES EN COLA
{{ (getActiveQueue('redes')?.agents || []).filter(a => a.status === 'disponible').length }} disponibles
Sin agentes. Agregá uno abajo.
{{ agent.username || agent.bot_id }}
{{ agent.bot_id }} · {{ agent.current_concurrent }}/{{ agent.max_concurrent }} chats
AGREGAR AGENTE
Cola IVR — {{ colasActiveTab }}
{{ getActiveQueue('ivr')?.active ? 'ACTIVA' : 'INACTIVA' }}
AGENTES IVR
{{ agent.username || agent.bot_id }}
{{ agent.current_concurrent }}/{{ agent.max_concurrent }}
AGREGAR AGENTE IVR
CONFIGURACIÓN DE DÍGITOS
{{ d.digit }}
{{ d.product_name || '(sin nombre)' }}
{{ d.outgoing_message }}
Sin dígitos configurados
Métricas — {{ colasActiveTab }}
{{ m.queue_type }}
{{ m.total }}
Total
{{ m.ventas }}
Ventas
{{ m.no_ventas }}
No Ventas
{{ m.en_espera }}
Espera
{{ m.no_interesa }}
No interesa
{{ m.no_puede_acceder }}
Sin acceso
{{ m.intrabajable }}
Intrabajable
Tiempo promedio: {{ Number(m.avg_minutes).toFixed(1) }} min
Sin datos aún
POR AGENTE
| Agente | Tipo | Total | Ventas | Completados |
|---|---|---|---|---|
| {{ a.username || a.assigned_bot_id }} | {{ a.queue_type }} | {{ a.total }} | {{ a.ventas }} | {{ a.completados }} |
| Sin datos | ||||
Cerrar y catalogar chat
Seleccioná el motivo de cierre. El chat se desasignará y quedará en la línea madre.
Motivo de no venta
Origen
👥 Gestión de Personal
Admin > Gerente > Supervisor > Asesor| Usuario | Rol | Depende de | Acción |
|---|---|---|---|
| {{ u.username }} #{{ u.id }} | {{ {admin:'Admin',gerente:'Gerente',leader:'Supervisor',agent:'Asesor'}[u.role] || u.role }} | {{ users.find(x=>x.id===u.leader_id)?.username || (u.leader_id ? '(#'+u.leader_id+')' : '—') }} — {{ s.username }} — |
|
| {{ u.username }} | {{ {gerente:'Gerente',leader:'Supervisor',agent:'Asesor'}[u.role]||u.role }} |
|
|
+ Nuevo Usuario
Se creará como asesor bajo tu supervisión.
Pirámide
▲ Admin
▶ Gerentes ({{ users.filter(u=>u.role==='gerente').length }})
▶ Supervisores ({{ users.filter(u=>u.role==='leader').length }})
▶ Asesores ({{ users.filter(u=>u.role==='agent').length }})
{{ g.username }}
↳ {{ l.username }}
↳ {{ a.username }}
↳ {{ a.username }} (directo)
🔀 Transferir Chat
📞 Asignar número de teléfono
Contacto: {{ resolveLidContact?.contactName }}
ID interno: {{ resolveLidContact?.phone }}
{{ resolveLidError }}
📚 Base de Conocimiento
{{ k.text }}
Campañas de Difusión
Sin campañas registradas
| Nombre | Bot | Progreso | Estado | Intervalo | Acciones |
|---|---|---|---|---|---|
| {{ c.name }} | {{ c.bot_ids && c.bot_ids.split(',').length === 1 ? c.bot_ids : '' }} {{ c.bot_ids.split(',').length }} bots |
|
{{ c.status }} | {{ c.min_delay_sec }}–{{ c.max_delay_sec }}s |
|
Sin bots disponibles
Archivo: {{ campMediaFile.name }}
{{ fileCampCSV.name }}
{{ newCamp.numbers.split(/\r?\n/).filter(l=>l.trim()).length }} números
Bots seleccionados
{{ campRatePreview().botCount }}
Velocidad total
~{{ campRatePreview().msgsPerHour }} msgs/hora
Carga por bot
~{{ campRatePreview().msgsPerHourPerBot }} msgs/hora c/u
Intervalo entre msgs
~{{ campRatePreview().avgDelaySec }}s (c/bot cada {{ campRatePreview().botCount > 1 ? campRatePreview().avgDelaySec * campRatePreview().botCount + 's' : campRatePreview().avgDelaySec + 's' }})
Números a enviar
{{ campRatePreview().total }}
Sin bots disponibles
Actual: {{ editingCamp.media_path }}
Nuevo: {{ editCampMediaFile.name }}
📊 Tablero
{{ stats.totalMsgs }}
Mensajes Totales⚙️ Configuración Línea
Los chats nuevos en esta línea se asignarán automáticamente al siguiente agente del producto seleccionado.
Escaneá para conectar
➕ Iniciar Chat
■ Productos & Rutas
No hay productos configurados.
{{ prod.name }}
{{ prod.tag }}
📱 {{ prod.bot_count }} 👤 {{ prod.agent_count }}
✓ Guardado
{{ prod.drip_enabled ? '▶ GOTEO ON' : '■ GOTEO OFF' }}
Líneas madre
Sin líneas asignadas
📱 {{ bots[b.bot_id]?.name || b.bot_id }}
Equipo
Sin agentes asignados
👤 {{ a.username }}
{{ a.available?'Habilitado':'Pausado' }}
+ Nuevo Producto
Sin líneas disponibles
Sin asesores
| Tag | Dígito IVR | Tipo | Producto | Mensaje | Activa | |
|---|---|---|---|---|---|---|
| Sin rutas configuradas | ||||||
{{ r.product_tag }} |
{{ r.digit }} | {{ r.route_type === 'reingreso' ? 'Reingreso' : 'Nuevo' }} | {{ r.product_name || '—' }} | {{ r.message ? r.message.substring(0,40) + (r.message.length>40?'…':'') : '—' }} | {{ r.active?'SI':'NO' }} | |
+ Nueva Ruta
newRouteMedia = e.target.files[0]">No hay chats sin asignar.
| Teléfono | Línea | Producto | Ingresó | Asignar a | |
|---|---|---|---|---|---|
| {{ c.contact_name || c.phone }} | {{ c.bot_id }} |
{{ c.product_name || '—' }} | {{ formatChatTime(c.created_at) }} |