diff --git a/README.md b/README.md index 9e53ced..c015d51 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,8 @@ This service provides a WhatsApp interface for task management within WhatsApp g - Advanced listings: "/t ver" supports scopes "grupo", "mis", "sin" and "todos" with pagination ("… y X más"). - Complete tasks: "/t x " (aliases: hecho, completar, done) with compact DM feedback. - Claim/unassign tasks: "/t tomar " and "/t soltar " with compact DM feedback. +- Natural date parsing: supports "hoy"/"mañana" with TZ (env TZ; default Europe/Madrid). +- Unified date display: all dates are rendered as dd/MM; help available via DM with "/t" or "ayuda". - Optional: group notification on task creation controlled by NOTIFY_GROUP_ON_CREATE (default false), including proper mentions for visibility. ## 🔐 Security Model @@ -118,6 +120,9 @@ Estado: la tabla response_queue ya está creada e incluida en los tests de DB. - Response queue persistente con workers en background y envío vía Evolution API (`src/services/response-queue.ts`), persistiendo metadata `{ mentioned: [...] }` y enviándola como `mentioned` en el payload, con reintentos (backoff exponencial + jitter), recuperación de `processing` y limpieza/retención. - Contacts service and friendly names: `ContactsService` resolves display names via webhooks (CONTACTS_UPDATE/CHATS_UPDATE) and Evolution API fallback; used to render names in outgoing texts (falls back to numbers). Skips network calls under NODE_ENV=test for fast and isolated unit tests. - Notification UX: Always send DM acknowledgment to the creator in a single line (format: ✅ Tarea creada: "description"), DM to each assignee (excluding the creator); optional group notification controlled by `NOTIFY_GROUP_ON_CREATE` (default false) with proper mentions. +- Natural date tokens support (“hoy”/“mañana”) with TZ configurable (env TZ; default Europe/Madrid) in task creation. +- Unified dd/MM date formatting across outgoing texts. +- Help by DM for "/t" and "/t ayuda" with a concise guide and examples. - Environment variable validation (`src/server.ts`, `src/services/webhook-manager.ts`). - Health check endpoint (`/health`). - **Database isolation in unit tests**: Using in-memory instances to avoid conflicts. @@ -150,6 +155,7 @@ PORT=3007 # Port this service listens on # Runtime Environment NODE_ENV=production # Or development +TZ=Europe/Madrid # Default timezone used for "hoy/mañana" parsing and date displays # Optional # GROUP_SYNC_INTERVAL_MS=3600000 # Sync interval in ms (default: 24h) @@ -274,7 +280,7 @@ bun test - WhatsApp ID normalization (`whatsapp.test.ts`). - Group sync operations (`group-sync.test.ts`). - **Needed:** Tests for `ensureUserExists` integration, `isGroupActive` integration, `CommandService` logic, `ResponseQueue` processing (mocking API), `TaskService` operations. -- All unit tests passing. +- All unit tests passing. Added unit tests for CommandService (date parsing "hoy/mañana", DM help, dd/MM formatting, default assignment rules). ## 🧑‍💻 Contributing 1. Fork the repository @@ -337,10 +343,10 @@ Este apartado documenta las decisiones de UX aprobadas para el MVP y su evoluci ### Mensajes: plantillas compactas - Confirmación al crear (DM al creador): - ✅ 26 “*Acta de la reunión*” - - 📅 2025-09-12 + - 📅 12/09 - 👥 sin dueño (Junta AMPA) — o — 👤 @Juan - DM a asignados: - - 🔔 Tarea 26 — 📅 2025-09-12 + - 🔔 Tarea 26 — 📅 12/09 - “*Acta de la reunión*” - Grupo: Junta AMPA - Completar: /t x 26 diff --git a/STATUS.md b/STATUS.md index b4173da..9897707 100644 --- a/STATUS.md +++ b/STATUS.md @@ -28,6 +28,8 @@ - Listados: `/t ver` con `grupo`, `mis`, `sin` y `todos`, con tope y resumen “… y X más”, siempre por DM. - Completar: `/t x ` (alias: `hecho`, `completar`, `done`) con feedback compacto por DM. - Tomar/Soltar: `/t tomar ` y `/t soltar ` implementados end-to-end con feedback compacto por DM (idempotentes). + - Fechas naturales: soporte de “hoy/mañana” en creación con TZ configurable (env TZ; por defecto Europe/Madrid). + - Ayuda por DM: “/t” y “/t ayuda” devuelven una guía breve; el bot no publica en grupos. - **Contactos y Nombres** - Servicio `ContactsService` con 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. - **UX de Notificaciones** @@ -43,8 +45,6 @@ ## ⚠️ Funcionalidades Pendientes - **Gestión de Tareas** - Eliminación opcional de tareas y mejoras de edición. -- **Fechas y parsing** - - Parser de fechas naturales “hoy/mañana” en creación. - **Cola de Respuestas** - (Post-MVP) Observabilidad y métricas: contadores, latencias, tamaño de cola, endpoint /metrics. - **Validaciones** @@ -53,8 +53,8 @@ - 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 -1. Añadir parser “hoy/mañana” en creación y unificar formato de fechas (dd/MM) en todos los mensajes. -2. Ayuda por DM: guía corta con ejemplos cuando el usuario escribe “/t” o “ayuda”. +1. Métricas y observabilidad de ResponseQueue (/metrics). +2. Gestión de tareas: eliminación y mejoras de edición. ## 🐞 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. @@ -72,12 +72,12 @@ - Etapa 4 — Limpieza/retención: COMPLETADA. ## Commit history and status -- Latest status: All unit tests passing; UX Iteración A (parcial) con listados ver grupo/mis/sin/todos y política solo DM; ACK al creador en una línea; notificación al grupo opcional desactivada por defecto; ContactsService evita llamadas de red en tests; nombres amigables integrados. +- Latest status: All unit tests passing; soporte de fechas naturales “hoy/mañana” con TZ configurable (por defecto Europe/Madrid) y formato unificado dd/MM en mensajes; ayuda por DM (“/t”, “/t ayuda”); listados ver grupo/mis/sin/todos; política solo DM; ACK al creador en una línea; notificación al grupo opcional desactivada; ContactsService evita llamadas de red en tests; nombres amigables integrados. ## ▶️ Para continuar ahora Propuesta inmediata: -- Añadir parser de fechas “hoy/mañana” en creación. -- Ayuda “/t ayuda” por DM, guía breve y ejemplos. +- Métricas y observabilidad de ResponseQueue (contadores, latencias, tamaño de cola) y endpoint /metrics. +- Gestión de tareas: eliminación y edición básica. Para que pueda proponer cambios de código, añade estos archivos a este chat: - `src/services/command.ts`