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.
4.9 KiB
4.9 KiB
Estado del Proyecto - Task Manager para WhatsApp
✅ Funcionalidades Completadas
- Infraestructura Principal
- Servidor webhook con health checks
- Dockerización y despliegue CapRover
- Gestión de dependencias con Bun
- Base de Datos
- Modelo de tareas y asignaciones
- Normalización de IDs de WhatsApp
- Transacciones atómicas
- Migrador up-only para SQLite con tabla
schema_migrations, backup automático conVACUUM INTOy baseline automático si ya existe esquema - Esquema de
response_queueextendido con columnametadata
- Sincronización de Grupos
- Caché de grupos activos y validación en el servidor
- Sync periódico con Evolution API
- Webhooks
- Registro/verificación con Evolution API
- Manejo de eventos (MESSAGES_UPSERT) con normalización del nombre del evento
- Corrección: extracción robusta de remitente en DMs vs grupos para evitar 'Invalid sender ID'
- Cola de Respuestas
- Persistencia en DB y envío real a Evolution API
- Workers en background activos
- Soporte de menciones: persistencia en
metadatay envío comomentioneden el payload - Reintentos con backoff exponencial + jitter (4xx = fallo definitivo; 5xx/red = reintento hasta RQ_MAX_ATTEMPTS con
next_attempt_at)
- Comandos
/tarea nuevaend-to-end: parseo de descripción y última fecha futura, extracción de asignados desde menciones y tokens@..., limpieza de la descripción, persistencia de tarea y asignaciones, y respuesta con menciones.
- Contactos y Nombres
- Servicio
ContactsServicecon caché en memoria (TTL) y actualización por webhooks (CONTACTS_UPDATE/CHATS_UPDATE); fallback a Evolution API para obtener nombres. Se usa para mostrar nombres en los textos (con fallback a números). En entorno de test evita llamadas de red para acelerar y aislar la suite.
- Servicio
- UX de Notificaciones
- Confirmación por DM al creador siempre (en una sola línea con id y descripción) y DM a cada asignado (excluyendo al creador).
- Notificación opcional al grupo controlada por
NOTIFY_GROUP_ON_CREATE(false por defecto), incluyendo menciones para visibilidad.
- Validaciones de Usuario
- Integración completa de normalización y
ensureUserExistsen el flujo principal de mensajes - Tests de integración para validaciones de usuarios
- Integración completa de normalización y
- Testing
- Suite de tests unitarios con DB en memoria para aislamiento
⚠️ Funcionalidades Pendientes
- Gestión de Tareas
- Eliminación opcional de tareas y mejoras de edición
- Cola de Respuestas
- Recuperación de ítems en estado
processingtras caídas (lease/expiración) - Métricas/observabilidad
- Limpieza/retención
- Recuperación de ítems en estado
- Validaciones
- Permisos de usuario (roles) y pertenencia a grupos (si se requiere política estricta)
- Menciones y nombres
- Refinar políticas de caché (TTL, invalidación) y ampliar compatibilidad de endpoints; en DM, WhatsApp no pinta chips de mención de terceros (limitación del cliente).
➡️ Próximos Pasos Prioritarios
- Añadir tests de Fase 3 (ver/x, entradas extendidas) y paginación “… y X más”.
- Mejorar UX de menciones: resolver nombres y formateo de “asignados”.
- Unificar y pulir formatos de mensajes (dd/MM en todos, compacidad).
- Mejoras de fiabilidad de la cola: reintentos con backoff y recuperación de
processing. - Métricas/observabilidad básicas y plan de migraciones de DB.
🐞 Problemas conocidos
- En chats privados, WhatsApp no renderiza chips de mención para terceros; en grupos sí se resuelven al nombre local de cada receptor. El bot incluye nombres en el texto cuando los conoce y números como @dígitos para acción rápida; no hay reescritura por receptor.
🔧 Archivos Clave a Modificar
src/services/response-queue.tssrc/services/command.tssrc/tasks/service.tssrc/server.ts
Phase 4 — Desglose y estado
- Etapa 1 — Reintentos con backoff exponencial + jitter: COMPLETADA.
- Etapa 2 — Recuperación de items en
processing(lease/expiración): PENDIENTE. - Etapa 3 — Métricas y observabilidad: PENDIENTE.
- Etapa 4 — Limpieza/retención: PENDIENTE.
Commit history and status
- Latest status: All unit tests passing; Phase 2 completada; ACK to creator always in single-line format; optional group notify disabled by default; ContactsService avoids network calls under tests; basic name resolution via ContactsService integrated.
▶️ Para continuar ahora
Propuesta inmediata:
- Implementar comandos:
/t ver(grupo y mis) y/t x <id>. - Asegurar comportamiento “solo DM” en
src/server.ts(no responder en grupos). - Extender
TaskServicecon métodosclaimTask,unassignTask,completeTask. - Afinar
ResponseQueuepara DMs de listados y confirmaciones (manteniendo metadata de menciones).
Para que pueda proponer cambios de código, añade estos archivos a este chat:
src/services/command.tssrc/tasks/service.tssrc/services/response-queue.tssrc/server.ts