WhatsApp bot die dienstschema PNGs verstuurt op dienstnummer
  • JavaScript 77.9%
  • Shell 22.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-05-11 20:19:30 +02:00
docs/superpowers feat: complete dienst-bot v1.0 - webhook receiver, PNG sender, PM2 ready 2026-05-11 19:00:05 +02:00
src feat: integrate rate limiter into message handler 2026-05-11 20:07:07 +02:00
.env feat: scaffold project with dependencies and env config 2026-05-11 18:49:11 +02:00
.env.example feat: add rate limiting config option 2026-05-11 20:10:42 +02:00
.gitignore feat: add README, .env.example, fix mention detection with spaces, add diensten to .gitignore 2026-05-11 19:38:11 +02:00
package-lock.json feat: scaffold project with dependencies and env config 2026-05-11 18:49:11 +02:00
package.json feat: scaffold project with dependencies and env config 2026-05-11 18:49:11 +02:00
README.md README.md bijwerken 2026-05-11 20:19:30 +02:00

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

  1. Iemand tagt @EdGpt in de toegestane groep met een 4-cijferig dienstnummer (bijv. @EdGpt 4002)
  2. De bot zoekt het dienstschema op in dienst-tijden.json
  3. 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.