3 KiB
Dienst Bot
Dit project is gemaakt door middel van vibecoding met OpenCode 1.14.40 en Z.AI/GLM-5.1. De feature ratelimiting is gemaakt door middel van vibecoding met Deepseek v4 Pro
WhatsApp bot die dienstschema's (PNG) verstuurt op basis van een dienstnummer in een WhatsApp groep.
Hoe het werkt
- Iemand tagt @EdGpt in de toegestane groep met een 4-cijferig dienstnummer (bijv.
@EdGpt 4002) - De bot zoekt het dienstschema op in
dienst-tijden.json - De bijbehorende PNG-bestanden worden privé naar de afzender gestuurd
Vereisten
- Node.js 18+
- wwebjs-api Docker container (poort 3000)
- WhatsApp sessie "EdGpt" actief in wwebjs-api
- PM2 (optioneel, voor procesbeheer)
Installatie
git clone <repo-url>
cd dienst_echo_whatsappgroep
npm install
Configuratie
Kopieer .env.example naar .env en vul de waarden in:
# WhatsApp API
WHATSAPP_API_ENDPOINT=http://localhost:3000
WHATSAPP_SESSION=EdGpt
# Webhook
WEBHOOK_PORT=3002
ALLOWED_GROUP=120363407356808413@g.us
BOT_NAME=EdGpt
# Bestanden
DIENSTEN_JSON=./diensten/dienst-tijden.json
DIENSTEN_PNG=./diensten/png
# Admin
ADMIN_NUMBER=31620248011@c.us
wwebjs-api webhook config
In de .env van wwebjs-api:
BASE_WEBHOOK_URL=http://host.docker.internal:3002/webhook
ENABLE_LOCAL_CALLBACK_EXAMPLE=FALSE
ENABLE_WEBHOOK=TRUE
Belangrijk: gebruik docker compose up -d (niet docker restart) om .env wijzigingen door te voeren.
Data
De map diensten/ bevat:
dienst-tijden.json— array met dienstmetadata:[ { "dienstnummer": "4002", "startTime": "09:30", "endTime": "10:30", "paginas": [ { "bestandsnaam": "4002-001.png" }, { "bestandsnaam": "4002-002.png" } ] } ]png/— PNG bestanden met dienstschema's (bijv.4002-001.png)
Beide zijn uitgesloten van git via .gitignore.
Gebruik
Starten
npm start
Of met PM2:
npx pm2 start src/index.js --name dienst-bot
npx pm2 save
Stoppen
npx pm2 stop dienst-bot
Logs bekijken
npx pm2 logs dienst-bot
Projectstructuur
src/
index.js # Express webhook server
messageHandler.js # Berichtverwerking en filtering
rateLimiter.js # Spam protectie (max 5 per dag)
dienstService.js # JSON lookup en PNG bestandspaden
whatsappApi.js # WhatsApp API client (bericht + afbeelding)
Foutafhandeling
- Ongeldig dienstnummer: de bot stuurt een melding terug naar de afzender
- Fout bij verzenden PNG: de admin krijgt een WhatsApp melding
- Webhook fout: wordt gelogd in PM2 logs
Spam protectie
Elke gebruiker kan maximaal MAX_REQUESTS_PER_DAY (standaard 5) diensten per dag opvragen. Bij overschrijding krijgt de gebruiker een melding. De teller wordt dagelijks automatisch gereset (bij de eerste request na middernacht).
Licentie
Privé project — niet voor distributie.