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.
 |