3.1 KiB
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()— verhoogtdailyTotalmet 1getYesterdayTotal()— returnedyesterdayTotalresetDay()— zetyesterdayTotal = dailyTotal, dandailyTotal = 0
Scheduling: node-cron
Cron expressie 0 10 * * * triggert exact om 10:00 elke dag een callback die:
dailyStats.resetDay()aanroept (snapshot van gisteren)sendTextMessage(adminNumber, bericht)aanroept om het totaal te versturen- Bij falen van verzending: error loggen, maar reset blijft van kracht
Bestaande modules — wijzigingen
src/index.js
- Importeert
node-cronendailyStats - Registreert cron job bij server startup
- Huidige
expresssetup blijft ongewijzigd
src/messageHandler.js
- Importeert
dailyStats - Roept
dailyStats.increment()aan na de bestaandeincrement(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 →
dailyTotalenyesterdayTotalzijn 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-crontoevoegen aanpackage.json- Geen nieuwe
.envvariabelen —ADMIN_NUMBERwordt hergebruikt
Berichtformaat
Aantal dienstaanvragen gisteren: N
Waar N het totaal aantal is van 00:00 tot 23:59 van de vorige kalenderdag.
Teststrategie
-
dailyStatsunit testsincrement()verhoogtdailyTotalcorrectresetDay()kopieertdailyTotalnaaryesterdayTotalen zetdailyTotalop 0getYesterdayTotal()returned gecachte waarde
-
Integratietest
- Cron callback handmatig aanroepen → verifieer dat
sendTextMessagewordt aangeroepen met juiste admin nummer en bericht
- Cron callback handmatig aanroepen → verifieer dat
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