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.

1.5 KiB

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