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.
12 KiB
12 KiB
Plan de Modernización de Ayuda y Estilo de Mensajes (Help v2)
Estado: propuesta
Ámbito: bot (responde siempre por DM)
Objetivo: hacer la ayuda consistente, útil ante comandos desconocidos, visible el acceso web, y estandarizar el estilo de todos los mensajes.
Principios
- Responder siempre por DM (incluso si el comando se escribe en un grupo).
- Ayuda accesible y progresiva: ayuda rápida en flujos comunes y ayuda extendida bajo demanda.
- Estilo WhatsApp consistente: secciones en negrita y mayúsculas, listas con “- ”, comandos en monoespaciado, notas en cursiva.
- Fuente única para contenidos de ayuda (centralizar copy).
- Cambios compatibles con tests: minimizar fragilidad de asserts por copy.
Inventario de comandos actual (derivado de src/services/command.ts)
- Crear
- Comandos:
/t n,/t nueva,/t crear,/t + - Soporta: fecha explícita
YYYY-MM-DD,YY-MM-DD(expande a20YY), tokenshoy/mañana - Asignación:
- En DM: por defecto asignada al creador si no hay menciones
- En grupo: por defecto “sin responsable” si no hay menciones
- Menciones: detecta
@tokensy JIDs crudos; filtra no plausibles; emite DM “JIT onboarding” si no se pudo resolver
- Comandos:
- Ver
- Comando base:
/t ver(alias:ver,mostrar,listar,ls) - Alcances:
grupo(si se escribe desde grupo activo),mis(DM),todos(mis + sin responsable de grupos donde soy miembro activo),sin(solo sin responsable del grupo actual) - Límite: 10 ítems; “… y N más” cuando excede
- Indicadores:
- Fecha en formato
DD/MM - Aviso de vencida (⚠️) cuando
due_date < hoy(calculado por TZ configurada)
- Fecha en formato
- Comando base:
- Completar
- Comandos:
/t x,/t hecho,/t completar,/t done - Acepta múltiples IDs (separados por espacios y/o comas); máx. 10
- Resolución de ID: primero por
display_codede tareas activas; si no, por PK - Gating opcional: si
GROUP_MEMBERS_ENFORCE=truey snapshot fresca, requiere ser miembro activo
- Comandos:
- Tomar
- Comandos:
/t tomar,/t claim,/t asumir,/t asumo - Múltiples IDs; máx. 10; gating de membresía igual que “completar”
- Comandos:
- Soltar
- Comandos:
/t soltar,/t unassign,/t dejar,/t liberar,/t renunciar - Un solo ID
- Comandos:
- Configurar recordatorios
- Comandos:
/t configurar diario|l-v|semanal|off [HH:MM] - Mapea alias a
daily,weekdays,weekly,off; hora opcional con normalización
- Comandos:
- Ayuda
- Comandos:
/t ayuda,/t help,/t ?, y variante “ayuda avanzada” - Actualmente genera mensajes en línea (no centralizados)
- Comandos:
- Web
- Comando:
/t web - Genera token one-shot, invalida tokens previos, devuelve URL de login basada en
WEB_BASE_URL
- Comando:
- Notas de formato ya en uso
- IDs se muestran con 4 dígitos (backticks)
- Estilos disponibles:
bold,italic; se usacodeId()para IDs yformatDDMM()para fechas
Roadmap por fases
Fase 0 — Documentación de inventario y estilo (docs)
- Objetivo: dejar por escrito el inventario de comandos y una guía de estilo para WhatsApp.
- Tareas:
- Crear
docs/commands-inventory.mdcon matriz de comandos, alias, alcance, ejemplos, límites y prerequisitos. - Crear
docs/whatsapp-style-guide.mdcon convenciones de formato y ejemplos.
- Crear
- Archivos a crear:
docs/commands-inventory.mddocs/whatsapp-style-guide.md
- Criterios de aceptación:
- El inventario cubre todos los comandos listados arriba.
- La guía incluye: secciones, comandos en monoespaciado, bullets, notas en cursiva y ejemplos cortos.
Fase 1 — Helpers mínimos de formato (código)
- Objetivo: ofrecer utilidades simples y reutilizables sin romper lo existente.
- Cambios:
- Extender
src/utils/formatting.tsañadiendo:export function code(s: string): string→ wrap con backticksexport function section(s: string): string→*${s.toUpperCase()}*export function bullets(items: string[]): string→- ${item}por línea
- Extender
- Archivos a tocar:
src/utils/formatting.ts(añadir funciones)
- Tests:
- Nuevo:
tests/unit/utils/formatting.test.ts(paracode,section,bullets)
- Nuevo:
- Criterios de aceptación:
- Formateadores devuelven exactamente el formato esperado y no rompen los existentes.
Fase 2 — Centralizar contenido de ayuda (completado)
- Objetivo: tener una única fuente de verdad para la ayuda.
- Cambios:
- Crear
src/services/messages/help.tscon:getQuickHelp(baseUrl?: string): stringgetFullHelp(baseUrl?: string): string
- Contenido sugerido (resumen):
- Ayuda rápida:
- Secciones: “COMANDOS BÁSICOS”, “LISTADOS”, “ACCESO WEB”
- Bullets con: crear (
/t n ...), ver (/t ver mis|grupo|todos|sin), completar/tomar/soltar, configurar recordatorios, y/t web - Nota: El bot responde por DM, incluso si escribes desde un grupo.
- Ayuda extendida:
- Además: formatos de fecha (
YYYY-MM-DD,YY-MM-DD→20YY-MM-DD,hoy|mañana), límites (máx. 10 IDs), reglas de asignación por contexto, gating de grupos, detalles de “ver todos”.
- Además: formatos de fecha (
- Ayuda rápida:
- Crear
- Archivos a crear:
src/services/messages/help.ts
- Archivos a consultar:
src/services/command.ts(para mantener alineación de copy con funcionalidad)
- Tests:
- Nuevo:
tests/unit/services/help-content.test.ts(asserts por substrings clave, no igualdad exacta)
- Nuevo:
- Criterios de aceptación:
getQuickHelp()incluye/t weby comandos básicos.getFullHelp()cubre scopes de “ver”, formatos de fecha y límites.
Fase 3 — Comportamiento ante comandos desconocidos (completado)
- Objetivo: responder útilmente cuando no se reconoce la acción.
- Cambios en
src/services/command.ts:- Reemplazar la respuesta “Acción X no implementada aún” por:
- Encabezado tipo:
❓ Comando no reconocido - Sugerencia: “Prueba
/t ayuda” - Adjuntar
getQuickHelp(baseUrl)en el mismo mensaje
- Encabezado tipo:
- Mantener logging/telemetría si aplica (ej.
Metrics.inc('commands_unknown_total')opcional)
- Reemplazar la respuesta “Acción X no implementada aún” por:
- Archivos a tocar:
src/services/command.tssrc/services/messages/help.ts(uso desde aquí)
- Tests:
- Nuevo:
tests/unit/services/command.unknown-help.test.ts- Input:
/t qué tareas tengo hoy? - Expect: mensaje contenga indicador de comando desconocido,
/t ayuda, y fragmentos de quick help (p.ej.,/t ver mis,/t web)
- Input:
- Nuevo:
- Criterios de aceptación:
- DM siempre; mensaje claro y accionable.
Fase 4 — Unificar el comando /t ayuda (completado)
- Objetivo: que
/t ayuday “ayuda avanzada” usen el módulo centralizado. - Cambios en
src/services/command.ts:- Si
ayudacon “avanzada” →getFullHelp(baseUrl) - Si
ayudasin “avanzada” →getQuickHelp(baseUrl)+ CTA a “ayuda avanzada” - Quitar los textos embebidos actuales en
command.tspara estos casos
- Si
- Archivos a tocar:
src/services/command.tssrc/services/messages/help.ts
- Archivos a consultar:
src/services/command.ts(acciónayuda)
- Tests:
- Nuevo:
tests/unit/services/command.help.test.ts- “/t ayuda” incluye
/t web - “/t ayuda avanzada” incluye scopes de “ver” y formatos de fecha
- “/t ayuda” incluye
- Nuevo:
- Criterios de aceptación:
- Ayuda centralizada y consistente en ambos modos.
Fase 5 — Flag de activación y configuración
- Objetivo: habilitar rollback rápido si hiciera falta.
- Cambios:
- Soportar
FEATURE_HELP_V2(por defectotrue). Sifalse, usar el comportamiento actual (fallback). - Fuente para
baseUrl:process.env.WEB_BASE_URL(ya empleada por/t web); pasarla opcionalmente ahelp.ts.
- Soportar
- Archivos a tocar:
src/services/command.ts(condicionar branches de ayuda/fallback con el flag)src/services/messages/help.ts(aceptarbaseUrl?)
- Tests:
- Añadir caso con
FEATURE_HELP_V2=falseque mantenga el behavior anterior (solo si compensa; opcional).
- Añadir caso con
- Criterios de aceptación:
- Con flag on/off, el bot responde acorde.
Fase 6 — Estilo global en mensajes (incremental)
- Objetivo: aplicar el estilo unificado en más respuestas (crear, tomar, soltar, completar, ver).
- Cambios (incrementales, por PRs pequeños):
- Introducir helpers de estilo donde falten (
bold,italic,code,section,bullets) - Estandarizar encabezados, bloques de detalle y notas
- Introducir helpers de estilo donde falten (
- Archivos a tocar:
src/services/command.ts(copys de confirmaciones y listados)- Potenciales módulos de mensajes:
src/services/messages/*.ts(si extraemos piezas)
- Tests:
- Actualizar asserts frágiles para comparar substrings semánticos, o crear helper de test
stripFormattingque quite*,_,`para aserciones menos frágiles.
- Actualizar asserts frágiles para comparar substrings semánticos, o crear helper de test
- Criterios de aceptación:
- Mensajes alineados con la guía de estilo, sin romper funcionalidad.
Fase 7 — Tests y mantenimiento
- Nuevos tests a añadir:
tests/unit/utils/formatting.test.tstests/unit/services/help-content.test.tstests/unit/services/command.unknown-help.test.tstests/unit/services/command.help.test.ts
- Tests existentes a revisar (no editar salvo necesario):
tests/unit/services/command.*.test.tstests/unit/server.*.test.ts(si comparan copys)tests/unit/web/*no deberían verse afectados
- Estrategia:
- Preferir asserts por “contiene” para evitar fragilidad.
- Añadir helper
stripFormattingen tests si se requiere.
Archivos implicados
- A crear (docs):
docs/commands-inventory.mddocs/whatsapp-style-guide.md
- A crear (código):
src/services/messages/help.ts
- A modificar (código — ya disponibles en este chat):
src/services/command.tssrc/utils/formatting.ts
- A consultar (sin cambios, solo referencia):
src/services/webhook-manager.ts(no requiere cambios para Help v2)
- A modificar (tests — NO añadidos aún a este chat; cuando llegue el momento, añadir):
tests/unit/utils/formatting.test.tstests/unit/services/help-content.test.tstests/unit/services/command.unknown-help.test.tstests/unit/services/command.help.test.ts
Cuando ejecutemos las fases de código/tests, si estos archivos no están en el chat, pediré que los añadas para poder proponer los parches exactos.
Criterios de aceptación globales
- Un comando desconocido devuelve un mensaje útil con ayuda rápida (incluye
/t ayuday referencia a/t web). /t ayudausa contenido centralizado; “ayuda avanzada” despliega la versión extendida.- Estilo consistente: secciones en negrita y mayúsculas; comandos/IDs en monoespaciado; listas con “- ”; notas en cursiva.
- Documentación (inventario y guía de estilo) creada.
- Tests nuevos cubriendo formateadores y flujos de ayuda.
Riesgos y mitigaciones
- Riesgo: rotura de tests por cambios de copy.
- Mitigación: asserts por substrings; helper
stripFormatting; cambios incrementales.
- Mitigación: asserts por substrings; helper
- Riesgo: ambigüedad de URLs/web.
- Mitigación: mostrar CTA a
/t weben la ayuda; opcionalmente mostrarWEB_BASE_URLcomo referencia informativa sin token.
- Mitigación: mostrar CTA a
- Riesgo: sobrecarga de mensajes.
- Mitigación: quick vs full help; mantener mensajes cortos y con bullets.
Siguientes pasos
- Fase 0 (docs) — crear
docs/commands-inventory.mdydocs/whatsapp-style-guide.md. - Fase 1 (helpers) — añadir
code,section,bulletsasrc/utils/formatting.ts+ tests. - Fase 2 (help.ts) — centralizar ayuda + tests de contenido.
- Fase 3-4 (wire-up) — usar help.ts en
/t ayuday en comando desconocido. - Fase 5-6 — flag
FEATURE_HELP_V2y estandarización incremental de copys.
Incluye validación manual: probar /t ayuda, /t ayuda avanzada, un comando desconocido y /t web.
Comandos útiles
- Añadir y confirmar este documento:
git add docs/commands-inventory.md docs/whatsapp-style-guide.md docs/plan-ayuda-bot.mdgit commit -m "docs: plan Help v2, inventario y guía de estilo"