dienst_echo_whatsappgroep/docs/superpowers/specs/2025-05-12-daily-summary-design.md

3.1 KiB

Dagelijkse WhatsApp samenvatting — Design

Doel

Elke dag om 10:00 uur een WhatsApp-bericht sturen naar de admin (31620248011) met het totaal aantal dienstaanvragen van de vorige dag (00:00 t/m 23:59).

Requirement samenvatting

Item Keuze
Inhoud bericht Alleen totaal aantal
Periode Vorige kalenderdag (00:00-23:59)
Persistentie In-memory (geen disk)
Verzendtijd 10:00 elke ochtend
Ontvanger ADMIN_NUMBER uit .env (31620248011@c.us)

Architectuur

Nieuwe module: src/dailyStats.js

Houdt twee tellers bij in memory:

  • dailyTotal — aantal aanvragen vandaag (lopende dag)
  • yesterdayTotal — aantal aanvragen van gisteren (voor verzending om 10:00)

Publieke API:

  • increment() — verhoogt dailyTotal met 1
  • getYesterdayTotal() — returned yesterdayTotal
  • resetDay() — zet yesterdayTotal = dailyTotal, dan dailyTotal = 0

Scheduling: node-cron

Cron expressie 0 10 * * * triggert exact om 10:00 elke dag een callback die:

  1. dailyStats.resetDay() aanroept (snapshot van gisteren)
  2. sendTextMessage(adminNumber, bericht) aanroept om het totaal te versturen
  3. Bij falen van verzending: error loggen, maar reset blijft van kracht

Bestaande modules — wijzigingen

src/index.js

  • Importeert node-cron en dailyStats
  • Registreert cron job bij server startup
  • Huidige express setup blijft ongewijzigd

src/messageHandler.js

  • Importeert dailyStats
  • Roept dailyStats.increment() aan na de bestaande increment(author) (rate limiter)

Data flow

webhook POST /webhook
  → messageHandler.handleWebhook()
    → rateLimiter.increment(author)        [bestaand]
    → dailyStats.increment()               [nieuw, 1 regel]

om 10:00 (node-cron trigger):
  → dailyStats.resetDay()
  → whatsappApi.sendTextMessage(admin, "Aantal dienstaanvragen gisteren: N")

Foutafhandeling

  • Verzending faalt → error wordt gelogd, geen retry, reset is al gedaan
  • Server herstart voor 10:00 → dailyTotal en yesterdayTotal zijn 0, cron start opnieuw, om 10:00 wordt bericht met "0" verstuurd (verlies van telling geaccepteerd conform in-memory keuze)
  • Server draait niet om 10:00 → geen bericht die dag

Afhankelijkheden

  • node-cron toevoegen aan package.json
  • Geen nieuwe .env variabelen — ADMIN_NUMBER wordt hergebruikt

Berichtformaat

Aantal dienstaanvragen gisteren: N

Waar N het totaal aantal is van 00:00 tot 23:59 van de vorige kalenderdag.

Teststrategie

  1. dailyStats unit tests

    • increment() verhoogt dailyTotal correct
    • resetDay() kopieert dailyTotal naar yesterdayTotal en zet dailyTotal op 0
    • getYesterdayTotal() returned gecachte waarde
  2. Integratietest

    • Cron callback handmatig aanroepen → verifieer dat sendTextMessage wordt aangeroepen met juiste admin nummer en bericht

Scope & grenzen

  • Binnen scope: teller bijhouden, cron trigger, WhatsApp verzending
  • Buiten scope: persistentie op disk, uitsplitsingen per gebruiker/dienst, herstel van gemiste data na crash, historische rapportages