WhatsApp chatbot that works with an Evolution API server to provide task management to a WhatsApp Community.
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
brobert 8a807d8af3 chore: desactiva checkOrigin CSRF de SvelteKit
Co-authored-by: aider (openrouter/openai/gpt-5) <aider@aider.chat>
2 weeks ago
apps/web chore: desactiva checkOrigin CSRF de SvelteKit 2 weeks ago
data feat: mover base de datos a carpeta data 2 months ago
docs feat: añade página intermedia de login y flujo de canje de token 2 weeks ago
src fix: usar dígitos del jid como fallback al normalizar WhatsApp ID 2 weeks ago
tests fix: endurece GroupSyncService y activa métricas en tests web-login 2 weeks ago
.env.example docs: actualizar documentación con migraciones, DB_PATH y login web 2 weeks ago
.gitignore añade doc de envs a gitignore 1 month ago
DEVTASKS_STAGE0_COMMANDS.txt feat: añadir DATA_DIR para DB compartida y configurar Bun workspaces 3 weeks ago
Dockerfile feat: gestiona rutas con proxy en Bun para /webhook y /metrics 2 weeks ago
README.md docs: actualizar documentación con migraciones, DB_PATH y login web 2 weeks ago
README.old.md se cepilla el README que ya no sirve 4 weeks ago
STATUS.md docs: reflejar multicomunidad, gating de grupos y /admin 4 weeks ago
bun.lock añade bun lock y package.json 7 months ago
bunfig.toml feat: añadir DATA_DIR para DB compartida y configurar Bun workspaces 3 weeks ago
captain-definition feat: add CapRover deployment files and env var validation 7 months ago
index.ts fix: Pasa instancia de db correctamente a initializeDatabase 4 months ago
package.json añade bun lock y package.json 7 months ago
proxy.ts feat: añadir logs y endpoint de salud en proxy y login 2 weeks ago
startup.sh fix: normalizar DB_PATH y DATA_DIR a rutas absolutas y esperar tablas 2 weeks ago
tsconfig.json Initial commit 7 months ago

README.md

Taskbot

Bot de tareas para WhatsApp con sincronización de grupos, recordatorios y control de acceso.

Taskbot ayuda a coordinar grupos en WhatsApp: crea y asigna tareas, recuerda pendientes y aplica gobierno de acceso por grupo. Está pensado para equipos y comunidades que ya operan en WhatsApp y quieren visibilidad ligera sin salir de la app.

Qué problema resuelve

  • Tareas que se pierden en el chat y falta de responsables o fechas.
  • Falta de visibilidad de pendientes por grupo o persona.
  • Necesidad de limitar en qué grupos opera el bot (descubrir y aprobar).

Características

  • Gestión de tareas: crear, asignar, reclamar/soltar, fechas límite y código corto de referencia.
  • Recordatorios configurables por usuario (frecuencia y hora, respetando zona horaria).
  • Control de acceso por grupos: modos off, discover y enforce; aprobación y bloqueo por admins.
  • Sincronización de grupos y miembros con cachés y schedulers configurables.
  • Alias de identidad con normalización de IDs.
  • Acceso web por token mágico (/t web), tokens de 10 min de un solo uso (migración y emisión implementadas).
  • Métricas listas para Prometheus en el endpoint /metrics.
  • Rate limiting por usuario para evitar abuso.
  • Persistencia simple con SQLite, migraciones automáticas y PRAGMAs seguros (WAL, FK, etc.).

Qué no es (limitaciones)

  • No es un framework general de bots ni un CRM.
  • No conecta directamente con WhatsApp: requiere Evolution API.
  • No gestiona flujos conversacionales complejos ni multimedia avanzada.
  • Panel web en desarrollo (MVP de login en marcha); hoy la interacción principal es vía WhatsApp.
  • Está optimizado para un despliegue por comunidad/instancia (no multi-tenant masivo).

Cómo funciona (alto nivel)

  1. Evolution API envía eventos al webhook de Taskbot.
  2. El servidor normaliza el mensaje, aplica control de acceso por grupo y rate limit.
  3. Los servicios de dominio (tareas, recordatorios, alias, colas) operan sobre SQLite.
  4. Las respuestas se encolan y envían a través de Evolution API.
  5. Schedulers ejecutan sincronización de grupos/miembros, recordatorios y tareas de mantenimiento.
  6. Las métricas se exponen en /metrics (Prometheus o JSON).

Uso básico

  • Los usuarios interactúan con comandos sencillos en WhatsApp para crear tareas, ver pendientes, asignarse o soltar.
  • Los administradores pueden aprobar o bloquear grupos cuando el modo de acceso está en discover/enforce.
  • Los recordatorios se configuran por usuario (frecuencia y hora) y respetan la zona horaria.
  • Formato de fechas en comandos: se aceptan YYYY-MM-DD y YY-MM-DD (YY → 20YY). También se admiten los tokens "hoy" y "mañana". Las fechas se almacenan normalizadas como YYYY-MM-DD y se muestran como dd/MM en los listados.

Instalación rápida

Requisitos:

  • Node.js LTS.
  • Acceso a una instancia de Evolution API.
  • URL pública para recibir el webhook.
  • Almacenamiento local para SQLite (directorio data/).

Pasos:

  • Clonar el repositorio e instalar dependencias.
  • Configurar variables de entorno.
  • Arrancar el servidor; la base de datos (data/tasks.db) y migraciones se gestionan automáticamente.

Recomendación: planificar copias de seguridad periódicas del directorio data/.

Configuración esencial

Variables clave:

  • EVOLUTION_API_URL, EVOLUTION_API_INSTANCE, EVOLUTION_API_KEY.
  • ADMIN_USERS (lista de IDs/JIDs autorizados).
  • GROUP_GATING_MODE: off | discover | enforce.
  • WHATSAPP_COMMUNITY_ID (para sincronización de grupos).
  • TZ (por defecto Europe/Madrid).
  • REMINDERS_GRACE_MINUTES (ventana de gracia tras la hora; por defecto 60).
  • ALLOWED_GROUPS (semilla inicial), NOTIFY_ADMINS_ON_DISCOVERY.
  • METRICS_ENABLED, PORT.
  • WEB_BASE_URL (host público de la web para generar enlaces absolutos; usado por /t web).
  • Rate limit: RATE_LIMIT_PER_MIN, RATE_LIMIT_BURST.
  • Intervalos y retención: GROUP_SYNC_INTERVAL_MS, GROUP_MEMBERS_SYNC_INTERVAL_MS, GROUP_MEMBERS_INACTIVE_RETENTION_DAYS.
  • DB_PATH: ruta al archivo SQLite. Tiene prioridad sobre DATA_DIR y permite aislar BD por rama/entorno. Ej.: DB_PATH='./data/tasks.db'
  • DATA_DIR: directorio raíz para la base de datos SQLite compartida (por defecto ./data).

Consulta:

  • docs/operations.md para operación, endpoints y variables de entorno.
  • docs/architecture.md para una visión técnica y responsabilidades por módulo.

Operación y mantenimiento

  • /metrics expone contadores y gauges; puede deshabilitarse por configuración.
  • Schedulers configurables; se evitan en entornos de test.
  • Migraciones up-only al arranque; logging de eventos de migración.
  • Copias de seguridad: respaldar el directorio data/ y planificar retención.

Estado y licencia

  • Nombre provisional: “Taskbot”.
  • Licencia por definir (software libre; se evaluará GPLv3/AGPL/MIT/Apache-2.0).
  • Progreso Etapa 1 (autenticación web): migración v10 (web_tokens/web_sessions) y comando /t web implementados; pendiente /login en la web y gestión de sesión (idle 2h).
  • Roadmap y contribuciones: pendientes de publicación.

Enlaces

  • Documentación de arquitectura: docs/architecture.md
  • Operación y configuración: docs/operations.md