# Cómo añadir un nuevo comando

Objetivo
- Incorporar un comando de texto que procese mensajes entrantes y responda por la cola.

Pasos
1) Parseo en CommandService
   - Ubicación: src/services/command.ts
   - Añade lógica para detectar el patrón (p.ej., "t listar", "t info 0012").
   - Normaliza IDs con utils/whatsapp.normalizeWhatsAppId cuando corresponda.
   - Registra métricas si procede (Metrics.inc).

2) Lógica de dominio
   - Si afecta a tareas, delega en src/tasks/service.ts.
   - Asegúrate de crear usuarios con ensureUserExists si se persisten referencias.

3) Respuesta al usuario
   - Encola la respuesta en src/services/response-queue.ts con el destinatario adecuado (usuario o grupo).
   - Incluye metadata JSON si mencionas usuarios (@) para formateo posterior.

4) Rate limiting y UX
   - Verifica RateLimiter.checkAndConsume(sender) si el comando puede ser abusado.
   - Usa RateLimiter.shouldNotify para evitar spam de notificaciones de rate limit.

5) Tests
   - Crea una prueba en tests/unit/services/command.<tu-comando>.test.ts
   - Usa Database(':memory:') + initializeDatabase(memdb) e inyecta CommandService/TaskService.dbInstance.

6) Documentación
   - Añade una breve descripción del comando a docs/overview.md (flujos) si es relevante.
   - Si el comando expone nuevas métricas o env vars, actualiza docs/operations.md.

Consejos
- Mantén CommandService como orquestador; la lógica compleja debe vivir en servicios dedicados.
- Usa nombres y mensajes consistentes con el resto de comandos.
