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.
36 lines
1.5 KiB
Markdown
36 lines
1.5 KiB
Markdown
# 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.
|