public

Página de presentación pública

El sistema incluye una página de presentación pública accesible en /presentacion. Esta página usa el diseño Hyperspace con la paleta de colores de Ixtanet y sirve como punto de entrada para visitantes que aún no tienen sesión iniciada.

Comportamiento

Secciones de la landing page

SecciónContenido
Inicio (hero)Descripción principal del sistema + tarjeta de vista previa del panel
CaracterísticasTres puntos clave: Gestión centralizada, Facturación automática, Monitoreo en vivo
ServiciosSeis funciones destacadas en tarjetas: clientes, facturación, MikroTik, POE, WhatsApp, reportes
Integración MikroTikSimple Queues, Address List y detección ARP explicados visualmente
AccesoBotón de llamado a la acción para iniciar sesión o ir al panel
info
NotaLa página de presentación no tiene acceso a datos del sistema. Es puramente informativa y no expone información de clientes ni del router.
login

Acceso al panel

El panel es accesible desde cualquier navegador en la red local (o desde internet si se configura el router).

CampoValor por defecto
URLhttp://IP_DEL_SERVIDOR:8080
Usuarioadmin
Contraseñaadmin123
warning
ImportanteCambia la contraseña por defecto inmediatamente en Ajustes → Seguridad antes de poner el panel en producción.
people

Tab Clientes (directorio + cartera + monitor)

La pestaña Clientes unifica el directorio, el estado de deuda y el monitoreo en tiempo real en una sola vista. Cada tarjeta de cliente muestra su estado online/offline, si está al día o en mora, y tiene acceso directo a todas las acciones.

Chips de filtro

Cuatro chips en la parte superior filtran la vista al instante:

ChipMuestra
TodosTodos los clientes registrados
En MoraSolo clientes con facturas pendientes
SuspendidosSolo clientes cortados en MikroTik
En LíneaSolo clientes activos en ARP del router

Tarjeta de cliente

Cada cliente se muestra como una tarjeta con:

Búsqueda

El campo de búsqueda en la barra superior filtra las tarjetas visibles por texto (nombre, IP, dirección).

Campos del cliente

CampoDescripciónRequerido
NombreIdentificador único del cliente (clave primaria)
IPDirección IP asignada al clienteSí para corte
TeléfonoNúmero WhatsApp (sin código de país si está configurado globalmente)Opcional
DirecciónDirección física del clienteOpcional
PlanPlan de servicio (rellena velocidad y monto automáticamente)Sí para facturar
Monto mensualCuota individual (puede diferir del plan)Sí para facturar
Límite facturasNro. de facturas pendientes antes del corte automático (default: 3)Opcional
ZonaZona / nodo al que pertenece el cliente. Determina qué MikroTik gestiona sus colas y cortes.Opcional
info
Al guardar un cliente con IP y plan asignados, el panel crea o actualiza automáticamente la cola Simple Queue en MikroTik. No necesitas entrar al router.

Importar desde CSV

Usa el botón Importar CSV para cargar tu directorio existente. El archivo debe tener columnas: nombre, ip, telefono, direccion, monto_mensual, velocidad_mbps.

add_circle

Nueva instalación de cliente

Cuando conectas un cliente nuevo, sigue estos pasos en el panel:

1

Registrar el cliente

En el tab Clientes, expande el acordeón Nuevo / Editar Cliente y activa el modo Nueva Instalación. Llena nombre, IP asignada, teléfono y selecciona el plan.

2

Cola MikroTik creada automáticamente

Al guardar, el panel crea la Simple Queue en el router con el ancho de banda del plan. No necesitas entrar al router.

3

Verificar en el mismo tab

El cliente aparece en la grilla. Usa el chip En Línea para verificar que ya tiene punto verde si está conectado.

receipt_long

Facturación

Facturación masiva automática

El sistema genera facturas automáticamente el día configurado en Ajustes → Facturación. No requiere intervención.

Facturación masiva manual

En la pestaña Facturas, el botón "Facturar todos" genera facturas pendientes para todos los clientes con monto > 0. Es idempotente: si ya existe la factura del mes actual, no crea una duplicada.

Facturación por tipo de zona (Prepago / Postpago)

El concepto de cada factura generada automáticamente depende del tipo de cobro configurado en la zona del cliente:

Tipo de zonaConcepto generadoEjemplo (ejecución 1 jun 2026)
PostpagoServicio del mes en curso“Servicio Junio 2026”
PrepagoServicio del mes siguiente“Servicio Julio 2026”

Los clientes sin zona asignada son tratados como postpago.

Factura individual

En la pestaña Facturas → Emitir Factura Individual, selecciona el cliente y genera la factura si lo necesitas fuera del ciclo normal.

warning
Clientes sin montoSi un cliente tiene monto_mensual = 0, no se le generan facturas automáticas. Asegúrate de asignar un plan o monto.
payments

Cobros y pagos

El registro de pagos se hace desde la pestaña Clientes o desde Facturas.

Cobrar una factura

1

Seleccionar la factura

En la tarjeta del cliente (tab Clientes), la sección de deuda lista cada factura pendiente con su botón Cobrar. También puedes cobrarlas desde el tab Facturas.

2

Confirmar el pago

Ingresa el método de pago (efectivo, transferencia, etc.) y confirma. La factura cambia a estado Pagada.

3

Recibo y WhatsApp

Se genera el recibo imprimible. Si WhatsApp está activo, se envía un mensaje de confirmación al cliente. Si el envío falla, el detalle del error aparece en la campana de notificaciones — nunca bloquea el registro del pago.

4

Reactivación automática

Si el cliente estaba suspendido y al pagar baja su deuda por debajo del límite, se reactiva automáticamente en el router.

Liquidar toda la deuda

En la tarjeta del cliente (tab Clientes), el botón Total cobra todas las facturas pendientes del cliente de una sola vez.

Historial de pagos

La pestaña Pagos muestra todos los cobros registrados con fecha, monto y método. Cada pago tiene tres acciones rápidas:

BotónAcción
print ImprimirAbre el recibo en formato imprimible en una nueva pestaña
picture_as_pdf PDF WhatsAppGenera el recibo en PDF y lo envía al número del cliente vía WhatsApp. Requiere configurar la URL de documentos en Ajustes → WhatsApp.
delete EliminarElimina el registro de pago y revierte la factura a estado Pendiente
event_available

Pago adelantado

Permite registrar el pago de uno o varios meses futuros de un cliente. Las facturas se crean directamente con estado Pagada y la facturación automática las saltará cuando llegue su fecha.

Cómo registrar un pago adelantado

1

Abrir el modal

En la tarjeta del cliente (tab Clientes), haz clic en el botón Adelantar (ícono de calendario verde).

2

Indicar cuántos meses

Escribe el número de meses a adelantar (mínimo 1, máximo 12) y selecciona el método de pago: Efectivo, Transferencia o Tarjeta.

3

Confirmar

Haz clic en Confirmar. El sistema crea N facturas con estado Pagada y N registros de pago vinculados. Si WhatsApp está activo, se envía un mensaje de confirmación al cliente.

¿Desde qué mes empieza?

El sistema toma como punto de partida la última factura registrada del cliente y genera los meses siguientes. Ejemplo:

Última facturaMeses adelantadosFacturas creadas
Mayo 20263Junio · Julio · Agosto 2026
Diciembre 20262Enero · Febrero 2027

Efecto en la facturación automática

Cuando el scheduler genera la facturación mensual, verifica si ya existe una factura del mes para ese cliente. Como las facturas adelantadas ya existen (aunque sean Pagadas, el concepto del mes coincide), no se duplican.

check_circle
Sin riesgo de duplicadosLa facturación automática es idempotente: nunca genera dos facturas del mismo concepto en el mismo mes para el mismo cliente.
info
PermisosEl botón Adelantar es visible para los roles admin y finanzas. El rol tecnico no puede registrar pagos adelantados.
contact_page

Actualización obligatoria de datos antes de cobrar

Cuando esta opción está activa, el sistema verifica que el teléfono y la dirección del cliente estén actualizados antes de registrar cualquier cobro. Si los datos tienen más días de antigüedad que el período configurado, aparece un modal pidiendo confirmar o corregir la información.

Configurar el período

1

Ir a Ajustes → Automatización

En el campo "Actualización de datos cada (días)", ingresa el número de días que deben pasar antes de requerir una actualización. Valores comunes: 90, 180, 365.

2

Guardar

Haz clic en Guardar configuración. El cambio aplica de inmediato — no requiere reiniciar el servidor.

info
0 = desactivado — Si el período es 0, el sistema nunca solicita actualización y el cobro procede directamente.

¿Cómo funciona al cobrar?

Al hacer clic en cualquier botón de cobro (factura individual, cobrar total o desde la pestaña Facturas), el panel consulta /api/check_actualizacion/<nombre> antes de enviar el formulario:

ResultadoComportamiento
necesita: falseEl cobro procede normalmente sin interrupción
necesita: trueSe abre el modal "Actualizar datos del cliente"

Modal de actualización

El modal muestra el nombre del cliente (no editable), el teléfono actual y la dirección actual, listos para confirmar o corregir. Al hacer clic en "Guardar y Cobrar":

  1. Se guardan los datos actualizados del cliente (POST /api/actualizar_datos_cliente)
  2. Se actualiza ultima_actualizacion en la base de datos
  3. Se envía el formulario de cobro original automáticamente
check_circle
Sin bloqueo de cobros — Si hay un error de red al verificar, el cobro procede de todas formas. La verificación nunca impide cobrar por falla técnica.

¿Cuándo se reinicia el contador?

La fecha de ultima_actualizacion se actualiza en dos momentos:

block

Cortes y suspensiones

Corte automático

El sistema evalúa el estado del cliente cada vez que se crea o cobra una factura. Si las facturas pendientes superan el límite configurado (por defecto 3), el cliente es suspendido automáticamente en MikroTik.

warning
Corte inmediato en zonas prepago — Los clientes de zonas configuradas como prepago son cortados en cuanto acumulan 1 factura pendiente, independientemente del límite individual del cliente.
info
El corte funciona agregando la IP del cliente a la address-list clientes_suspendidos del router. Tus reglas de firewall deben bloquear esa lista.

Corte manual

En la pestaña Clientes, cada tarjeta tiene el botón Cortar para suspender manualmente sin importar la deuda. También hay un formulario rápido con el botón Suspender manual en la barra de herramientas.

Reactivación

Al cobrar suficientes facturas para bajar la deuda por debajo del límite, el sistema reactiva automáticamente al cliente. También puedes reactivar manualmente con el botón Reactivar en la tarjeta del cliente (tab Clientes).

Corte masivo

El día de corte configurado en Ajustes, el job automático de las 6 AM evalúa a todos los clientes y aplica suspensiones masivas según su deuda acumulada.

AcciónEfecto en MikroTik
SuspenderIP agregada a clientes_suspendidos
Activar / pagarIP eliminada de clientes_suspendidos
monitor_heart

Estado en línea y alertas de caída

El monitoreo de conectividad está integrado directamente en el tab Clientes. No hay pestaña Monitor separada.

IndicadorSignificado
Punto verdeCliente en línea (detectado en ARP del router)
Punto rojoCliente fuera de línea o suspendido
Badge N en la pestaña ClientesCantidad de antenas sin conexión detectadas
Chip En LíneaFiltrar solo clientes activos en ARP

Panel de caídas

Al detectar una antena caída, aparece el panel de alertas en la parte superior del tab Clientes, con nombre del cliente y hora exacta de cada caída.

Actualizaciones

El estado se refresca cada 3 segundos en el frontend (vía /api/estado) y el backend verifica cambios cada 1 minuto para generar notificaciones persistentes.

check_circle
La primera revisión del backend solo inicializa el estado sin generar notificaciones. Esto evita alertas falsas al arrancar el servidor.

Notificación WA por caída de servicio

Cuando el sistema confirma que un cliente ha perdido conexión (tras 2 ciclos consecutivos offline), puede enviarle automáticamente un mensaje personalizado por WhatsApp informándole del corte — ideal para avisar que si hay apagón eléctrico el servicio volverá solo cuando regrese la luz.

Actívalo en Ajustes → Automatización → Notificar al cliente cuando pierde conexión (WA). Personaliza el mensaje con los comodines {cliente} e {ip}.

Anti-spam: caída de sitio completo

Si en un mismo ciclo caen ≥ N clientes simultáneamente (umbral configurable, por defecto 3), el sistema interpreta que es un corte eléctrico por zona y omite los WA individuales. En su lugar genera una única alerta interna: "Caída masiva: N clientes sin internet — posible corte eléctrico por zona". Esto evita spam masivo cuando se va la luz en una colonia entera.

Campo en AjustesDescripción
Activar aviso WA por caídaToggle para habilitar/deshabilitar la función
Mensaje de caídaPlantilla personalizable — comodines: {cliente}, {ip}
Umbral caída de sitioNúmero de clientes que deben caer al mismo tiempo para considerar caída de zona (recomendado 3–5)
notifications

Sistema de notificaciones

El panel tiene un sistema de notificaciones persistentes. La campana 🔔 en la barra superior muestra las alertas no leídas.

Tipos de notificaciones

TipoColorCuándo se genera
Caída de clientedangerCuando un cliente pasa de en línea a fuera de línea
ReconexiónsuccessCuando un cliente vuelve a conectarse
Caída masiva de sitiowarningCuando ≥ umbral clientes caen simultáneamente (posible corte eléctrico por zona) — WA individuales omitidos
Fallo WA por caídawarningSi el aviso de caída no pudo enviarse a un cliente
Cliente suspendidodangerAl aplicar corte automático o manual
Cliente reactivadosuccessAl cobrar y reactivar automáticamente
Facturación completadainfoAl terminar la facturación masiva diaria
Corte masivo ejecutadowarningAl terminar el corte masivo del día de corte

Historial

Haz clic en la campana para abrir el panel de historial con las últimas 50 notificaciones. Las notificaciones se marcan como leídas al recuperarlas.

dashboard

Dashboard

La pestaña Inicio muestra métricas en vivo del sistema.

MétricaDescripciónFrecuencia
Clientes al díaSin facturas pendientesEn cada carga
Clientes en moraCon al menos una factura pendienteEn cada carga
Clientes en líneaDetectados en ARP del routerCada 3 s
Total clientesTotal registrados en la DBEn cada carga
CPU del routerUso de CPU del MikroTikCada 3 s
Tráfico WANBajada/subida en tiempo realCada 3 s
router

Integración MikroTik

El panel se conecta al router MikroTik vía API RouterOS (puerto 8728 por defecto). Soporta RouterOS 6 y 7.

Configurar la conexión

1

Habilitar API en MikroTik

En Winbox: IP → Services → api — asegúrate de que esté habilitado (puerto 8728).

2

Ingresar credenciales en Ajustes

En el panel: Ajustes → MikroTik. Llena IP/host, usuario y contraseña del router.

3

Configurar firewall para cortes

Agrega una regla en MikroTik: IP → Firewall → Filter — bloquear tráfico forward desde src-address-list=clientes_suspendidos.

warning
Si el router no respondeEl panel muestra la página error_router.html con botón para reintentar. Los datos de clientes en la DB siguen accesibles aunque el router esté apagado.
wifi_off

Portal de Suspensión

Cuando un cliente está suspendido, cualquier página web que intente visitar (HTTP) es redirigida automáticamente a una página de aviso personalizada que muestra sus facturas pendientes, datos de contacto y métodos de pago — igual al sistema de WispHub.

Cómo funciona

El sistema usa el Web Proxy de MikroTik (RouterOS), que intercepta el tráfico HTTP y envía al cliente un redirect HTTP 302 a la URL del portal con su nombre incluido:

link
http://<IP_PANEL>/portal/suspendido/NOMBRE_CLIENTE

Lo que ocurre al suspender un cliente:

  1. La IP del cliente se agrega a clientes_suspendidos (address-list del firewall).
  2. El panel habilita el Web Proxy en MikroTik (/ip/web-proxy enabled=yes) si no estaba activo.
  3. Se crea (si no existe) la regla NAT que redirige el tráfico HTTP de clientes suspendidos al proxy.
  4. Se agrega una regla en /ip/web-proxy/access para esa IP específica con action=redirect a la URL del portal.

Al reactivar, la regla del web proxy se elimina automáticamente.

Configurar en Ajustes

CampoDescripción
IP del PanelIP de este servidor accesible desde los clientes (ej. 10.1.9.17). Es la IP que aparecerá en la URL del portal.
Puerto ProxyPuerto del Web Proxy en MikroTik. Default 8080. WispHub usa 999. Debe coincidir con lo configurado en el router.
Contenido del PortalEditor HTML (CodeMirror) para personalizar el bloque de información: dirección, horario, email, métodos de pago. Acepta cualquier HTML con estilos inline y clases material-symbols-rounded.

Lo que ve el cliente

warning
Solo funciona con HTTP (puerto 80). El Web Proxy de RouterOS no intercepta HTTPS. Los clientes que escriban https:// o visiten sitios HTTPS verán un error de conexión normal. Para una experiencia completa, el cliente debe intentar visitar un sitio HTTP primero — los navegadores modernos intentan HTTP antes de HTTPS al escribir una URL sin protocolo.
info
No necesitas ejecutar “Exportar Reglas” primero. Al suspender el primer cliente, el panel configura el Web Proxy y la regla NAT automáticamente. “Exportar Reglas” sigue siendo útil para sincronización masiva después de un reset del router.
cloud_sync

Exportar MikroTik

El botón "Exportar MikroTik" en la pestaña Clientes sincroniza todos los clientes al router como Simple Queues. Si tienes varias Zonas configuradas, la exportación agrupa los clientes por zona y sincroniza cada router por separado — todo en un solo clic.

Úsalo cuando:

Clientes sin plan asignado

Si algún cliente tiene velocidad_mbps = 0, el sistema muestra un modal para asignar plan antes de exportar.

Clientes sin cola en el router

Si un cliente existe en la DB pero no tiene cola en MikroTik (nunca fue instalado), aparece en la lista "Sin cola". Debes crear la cola manualmente o registrar la instalación del cliente con una IP válida.

Colas dinámicas

MikroTik genera colas dinámicas para conexiones DHCP y PPPoE (nombres como <pppoe-oficina> o dhcp-ds<MAC>). Estas colas no se pueden editar. El panel las detecta y las salta automáticamente durante la exportación — no generan error.

check_circle
Soporte multi-zona — Si tienes varias zonas configuradas, la exportación agrupa los clientes por zona y sincroniza cada router por separado en un solo clic. Ver sección Zonas / Nodos Starlink.
cell_tower

Zonas / Nodos Starlink

El sistema de zonas permite gestionar múltiples routers MikroTik simultáneamente. Cada zona representa un nodo de red — por ejemplo, cada enlace Starlink con su propio MikroTik. Cada cliente se asigna a una zona y todas las operaciones (colas, cortes, reactivaciones, exportaciones) se ejecutan automáticamente en el router de esa zona.

check_circle
Retrocompatible — Los clientes sin zona asignada siguen usando el router principal configurado en Ajustes → MikroTik. No necesitas migrar todo de golpe.

Crear una zona

1

Ir a Ajustes → Zonas / Nodos Starlink

En la sección de Zonas de la página de Ajustes, haz clic en Agregar Zona.

2

Llenar los datos de la zona

Ingresa el nombre (ej. "Starlink Norte"), el host/IP del MikroTik de esa zona — puede ser una IP WireGuard si está detrás de Starlink —, el usuario, la contraseña y una descripción opcional.

3

Probar la conexión

Usa el botón Probar junto a la zona. El sistema se conecta al router y devuelve la versión de RouterOS. Si falla, verifica IP, credenciales y que la API (puerto 8728) esté habilitada.

4

Asignar clientes a la zona

Al editar o crear un cliente, el formulario muestra un selector de zona (visible si hay al menos una zona creada). Elige la zona correspondiente y guarda.

Comportamiento por operación

OperaciónComportamiento con zonas
Crear / editar clienteLa cola Simple Queue se crea/actualiza en el router de la zona del cliente
Corte automático / manualLa IP se agrega a clientes_suspendidos en el router de la zona
ReactivarLa IP se elimina de clientes_suspendidos en el router correcto
Exportar MikroTikLos clientes se agrupan por zona y se sincroniza cada router por separado en un solo clic
Monitor (cada 1 min)Se consultan ARP y colas de todos los routers y se fusionan en la vista unificada
Check de estado en vivoEl dashboard muestra clientes online de todos los routers combinados

Badge de zona en el directorio

Cada tarjeta de cliente muestra el nombre de su zona bajo el nombre del cliente con el ícono de antena cell_tower. Si la zona es prepago, también se muestra el badge PREPAGO. Esto permite identificar a qué nodo y modelo de cobro pertenece cada cliente de un vistazo.

Tipo de cobro: Prepago vs Postpago

Cada zona puede configurarse como postpago (predeterminado) o prepago. Esto cambia el comportamiento de la facturación automática y el umbral de corte para todos los clientes de esa zona.

AspectoPostpago (default)Prepago
Concepto de facturaMes en curso (ej. “Servicio Mayo 2026”)Mes siguiente (ej. “Servicio Junio 2026”)
Cuándo se generaAl inicio del mes actualAl inicio del mes actual (para cubrir el mes siguiente)
Límite para corte automáticoEl configurado en el cliente (default 3)1 — corte inmediato con 1 factura pendiente
Badge en directorioPREPAGO

Configurar el tipo de cobro de una zona

1

Abrir el modal de la zona

En Ajustes → Zonas, haz clic en el botón Editar de la zona que deseas configurar.

2

Seleccionar el tipo de cobro

En el campo “Tipo de cobro”, elige entre Postpago — factura mes actual o Prepago — factura mes siguiente (pago anticipado).

3

Guardar

Haz clic en Guardar. El cambio aplica en el próximo ciclo de facturación automática.

warning
Corte inmediato en prepago — Al configurar una zona como prepago, los clientes de esa zona serán cortados en MikroTik tan pronto acumulen 1 factura pendiente, independientemente del límite configurado en el cliente individual.

Gestión de zonas

AcciónDescripción
EditarActualiza nombre, host, usuario y descripción. La contraseña solo se cambia si se escribe una nueva en el modal.
ProbarVerifica la conexión al MikroTik de la zona en tiempo real y muestra la versión de RouterOS.
EliminarElimina la zona. Los clientes asignados quedan sin zona (pasan a usar el router principal). El tipo de cobro también se pierde.
info
WireGuard recomendado para Starlink — Los routers detrás de Starlink usan CGNAT y no tienen IP pública fija. Usa WireGuard para alcanzarlos. Una vez activo el túnel, usa la IP WireGuard del router como host de la zona. Consulta la sección MikroTik remoto (WireGuard) para el procedimiento completo.
cable

Powerbox POE

Monitoreo de switches MikroTik con puertos POE. El link Powerbox POE solo aparece en el menú si tienes al menos un switch registrado.

Agregar un switch POE

Ve a Ajustes → Powerbox POE y registra el switch con su nombre y datos de conexión al router. Desde ese momento el panel tomará lecturas cada 5 minutos.

Información por puerto

DatoDescripción
Voltaje (V)Tensión en el puerto POE
Corriente (mA)Corriente consumida
Potencia (W)Potencia activa = V × mA
EstadoActivo · Esperando · Falla · Deshabilitado

Historial gráfico

Selecciona el período: diario, semanal, mensual o trimestral. Los datos se muestrean cada 5 minutos.

hub

MikroTik remoto detrás de Starlink (WireGuard)

Si tienes routers MikroTik en ubicaciones remotas que se conectan a internet vía Starlink, no tienen IP pública fija (CGNAT). El panel no puede alcanzarlos directamente. La solución es crear una VPN WireGuard donde el servidor del panel actúa de hub y cada MikroTik se conecta como cliente.

info
Requisito — El servidor donde corre el panel sí debe tener IP pública (o un dominio DDNS apuntando a él). Los MikroTik detrás de Starlink solo necesitan salida a internet.

Arquitectura

NodoIP WireGuardRol
Servidor del panel10.200.0.1Hub VPN (siempre accesible)
MikroTik 1 (Starlink A)10.200.0.2Peer VPN / router de clientes
MikroTik 2 (Starlink B)10.200.0.3Peer VPN / router de clientes

Paso 1 — Instalar WireGuard en el servidor Linux

1

Instalar y generar llaves

apt install wireguard -y
cd /etc/wireguard

# Llave del servidor
wg genkey | tee server_priv | wg pubkey > server_pub

# Una llave por cada MikroTik
wg genkey | tee mt1_priv | wg pubkey > mt1_pub
wg genkey | tee mt2_priv | wg pubkey > mt2_pub
2

Crear /etc/wireguard/wg0.conf

[Interface]
Address = 10.200.0.1/24
ListenPort = 51820
PrivateKey = <contenido de server_priv>

# MikroTik 1
[Peer]
PublicKey = <contenido de mt1_pub>
AllowedIPs = 10.200.0.2/32

# MikroTik 2
[Peer]
PublicKey = <contenido de mt2_pub>
AllowedIPs = 10.200.0.3/32
3

Activar la VPN y abrir el puerto

systemctl enable --now wg-quick@wg0
ufw allow 51820/udp

Paso 2 — Configurar WireGuard en cada MikroTik (RouterOS 7)

Ejecuta esto en la terminal de cada MikroTik (Winbox → Terminal o SSH). Reemplaza los valores entre < >:

# ── MikroTik 1 (repite en MikroTik 2 cambiando la IP a 10.200.0.3) ──

/interface/wireguard/add \
    name=wg-panel \
    listen-port=13231 \
    private-key="<contenido de mt1_priv>"

/interface/wireguard/peers/add \
    interface=wg-panel \
    public-key="<contenido de server_pub>" \
    endpoint-address=<IP_PUBLICA_SERVIDOR> \
    endpoint-port=51820 \
    allowed-address=10.200.0.0/24 \
    persistent-keepalive=25

/ip/address/add address=10.200.0.2/24 interface=wg-panel
check_circle
Verificar el túnel — Desde el servidor: ping 10.200.0.2 y ping 10.200.0.3. Si responden, el túnel está activo.

Paso 3 — Habilitar API en cada MikroTik

El panel se conecta a los routers vía la API RouterOS (puerto 8728). Asegúrate de que la API esté habilitada y acepte conexiones desde la VPN:

/ip/service/set api disabled=no
# Opcional: restringir a solo la IP del servidor VPN
/ip/service/set api address=10.200.0.1/32

Paso 4 — Apuntar el panel al router remoto

Una vez activo el túnel, el router responde en su IP WireGuard. Para operarlo desde el panel:

  1. Ve a Ajustes → MikroTik
  2. Cambia el Host a la IP WireGuard del router deseado (ej. 10.200.0.2)
  3. Ingresa usuario y contraseña del router remoto
  4. Guarda — el panel apuntará a ese router
check_circle
Multi-router nativo disponible — El panel soporta múltiples routers simultáneamente a través del sistema de Zonas. Una vez activo el túnel WireGuard, crea una zona en Ajustes → Zonas con la IP WireGuard del router remoto y asigna los clientes correspondientes. Consulta la sección Zonas / Nodos Starlink.

¿Por qué persistent-keepalive?

Starlink usa CGNAT, lo que significa que el NAT cierra sesiones UDP inactivas. El parámetro persistent-keepalive=25 hace que el MikroTik envíe un paquete al servidor cada 25 segundos, manteniendo el túnel siempre abierto aunque no haya tráfico real de clientes.

settings

Ajustes generales

SecciónQué configura
EmpresaNombre de la empresa y teléfono de contacto
MikroTikIP/host, usuario y contraseña del router
SeguridadUsuario y contraseña del panel de administración
FacturaciónDía del mes para generar facturas, día de corte, concepto mensual
AutomatizaciónPeríodo de actualización obligatoria de datos del cliente antes de cobrar (0 = desactivado)
WhatsAppURL de API, método, headers y cuerpo del mensaje
SMTPServidor de correo para backups automáticos
PlanesPlanes de servicio con velocidad y monto
Zonas / Nodos StarlinkRouters MikroTik adicionales. Cada zona tiene host, usuario y contraseña propios, y define el tipo de cobro (postpago o prepago) para sus clientes. Los clientes se asignan a una zona para que sus operaciones usen el router correcto.
sell

Planes de servicio

Los planes se administran en Ajustes → Planes de Servicio. Cada plan tiene:

Al seleccionar un plan en el formulario de cliente, se rellenan automáticamente velocidad y monto.

chat

Integración WhatsApp

El panel puede enviar mensajes a través de cualquier API de WhatsApp (CallMeBot, UltraMsg, Twilio, etc.).

Configuración

En Ajustes → WhatsApp:

CampoDescripción
URLEndpoint de tu API de WhatsApp
MétodoGET o POST según tu proveedor
HeadersJSON con cabeceras (ej. {"apikey": "xxx"})
Body templateCuerpo del mensaje con variables {cliente}, {monto}, {count}
Código de paísSe agrega como prefijo al teléfono del cliente (ej. 502 para Guatemala)

Cuándo se envían mensajes

Envío de recibo PDF

El botón PDF en cada fila de la pestaña Pagos genera el recibo en PDF y lo envía vía API. Para usarlo, configura:

Campo en AjustesDescripción
URL documentos PDFEndpoint para enviar documentos (ej. Evolution API: https://tu-servidor/message/sendMedia/INSTANCIA)
Body PDF (JSON)Template JSON con comodines: {destinatario}, {documento_base64}, {filename}

Los headers y el método se heredan de la configuración principal de WhatsApp.

Si WhatsApp falla

Los errores de envío no bloquean el cobro. El pago se registra igualmente y el detalle completo del error de la API aparece en la campana de notificaciones con el título "Fallo WA — [nombre del cliente]".

warning
Connection ClosedSi el error dice "Connection Closed", la instancia de WhatsApp en tu servidor Evolution API está desconectada. Entra al panel de Evolution, busca tu instancia y reconecta escaneando el código QR.

Recordatorios masivos — prevenir bloqueo de cuenta

WhatsApp detecta como spam cuando se envían muchos mensajes seguidos en segundos. Para evitar que tu número sea bloqueado, el sistema agrega automáticamente una pausa aleatoria de 8 a 18 segundos entre cada recordatorio masivo del fin de mes. Esto imita el comportamiento humano y reduce la probabilidad de bloqueo.

Práctica recomendadaDetalle
Pausa entre mensajes8–18 s aleatorios (implementado automáticamente)
Mensaje personalizadoUsa {cliente} en el template para que cada mensaje sea único
Evitar palabras bloqueadasNo uses "gratis", "promoción", "ganar" ni URLs acortadas
Número verificadoUsa WhatsApp Business con número registrado a nombre de la empresa
info
Tiempo total de envío — Con 50 clientes morosos el envío tarda aproximadamente 10–15 minutos. El job se ejecuta a las 6:00 AM así que termina mucho antes del horario laboral.
backup

Backup automático

El sistema puede enviar una copia de la base de datos por correo electrónico de forma automática.

Configura el servidor SMTP en Ajustes → SMTP con host, puerto, usuario y contraseña. Selecciona la frecuencia (diaria, cada 3 días, semanal).

check_circle
También puedes exportar los clientes y deudas en cualquier momento desde el Directorio en formato CSV.
schedule

Automatización (scheduler)

El panel ejecuta 4 tareas automáticas en segundo plano:

JobFrecuenciaQué hace
job_diarioCada día a las 6:00 AMFacturación masiva (postpago: mes actual; prepago: mes siguiente) + corte automático + recordatorios WA del último día del mes
job_muestreoCada 15 minutosGuarda el tráfico WAN para las gráficas de consumo
job_muestreo_poeCada 5 minutosRegistra lecturas POE por puerto en los switches
job_monitoreo_clientesCada 1 minutoVerifica conectividad en todos los routers (principal + por zona), genera notificaciones ante cambios de estado y envía WA personalizado al cliente cuando pierde conexión (si ≥ umbral clientes caen simultáneamente, omite los WA y genera una única alerta interna)
info
El scheduler arranca automáticamente con la aplicación. No requiere cron externo ni configuración adicional.
help

Preguntas frecuentes

¿Qué pasa si el MikroTik se apaga?

El panel sigue funcionando. Los datos de clientes, facturas y pagos están en la base de datos local (SQLite). Al volver el router, usa Exportar MikroTik para resincronizar las colas.

¿Puedo tener varios routers MikroTik?

Sí. El panel soporta múltiples routers simultáneamente mediante el sistema de Zonas. Crea una zona por router en Ajustes → Zonas / Nodos Starlink, ingresa las credenciales de cada MikroTik y asigna los clientes a su zona correspondiente. Si los routers están detrás de Starlink (CGNAT), conéctalos al servidor con WireGuard VPN y usa la IP del túnel como host de la zona. Consulta la sección Zonas / Nodos Starlink y MikroTik remoto (WireGuard) del manual.

¿Cómo actualizo el panel?

cd ~/panel-isp-ixtanet
bash start.sh

El script de inicio hace git pull automáticamente y reinicia la aplicación.

¿Dónde está la base de datos?

Archivo pagos.db en la carpeta del proyecto. Es un SQLite estándar — puedes abrirlo con cualquier cliente SQLite (DB Browser, TablePlus, etc.).

¿Por qué me llegó la misma notificación varias veces?

Ocurre si el servidor fue iniciado más de una vez sin detener el proceso anterior, generando múltiples schedulers. Solucionado con bash start.sh que mata procesos previos antes de arrancar.

Un cliente está en línea pero aparece como offline

El estado se basa en la tabla ARP del MikroTik. Si el cliente no está en ARP (por ejemplo, su equipo está inactivo), aparecerá offline. Revisa en el router: IP → ARP.

¿Puedo acceder desde el celular?

Sí. La interfaz es responsive y funciona bien en dispositivos móviles. Las tarjetas de clientes, facturas y pagos se adaptan a pantallas pequeñas. Asegúrate de acceder desde la red local o configurar acceso remoto en tu router.

¿Cómo importo clientes desde WispHub?

Descarga el backup desde WispHub (CSV de clientes + historial de pagos). Copia los archivos a la carpeta del proyecto y ejecuta en la terminal:

python _importar_wisphub.py

El script importa clientes, facturas y pagos; y agrega columnas extra a la tabla clientes: ip, cedula, fecha_instalacion, id_wisphub, zona. Edita la ruta del backup dentro del script antes de ejecutarlo.

La deuda pendiente muestra un monto muy alto

Si importaste historial desde otro sistema, la DB contiene facturas pendientes de años anteriores. El dashboard filtra la deuda al año actual para mostrar solo lo relevante. El historial completo sigue disponible en la pestaña Facturas.


Panel ISP  ·  Datos 100% locales  ·  Sin dependencias de nube