50 lines
No EOL
1.5 KiB
JavaScript
50 lines
No EOL
1.5 KiB
JavaScript
require('dotenv').config()
|
|
const cron = require('node-cron')
|
|
const express = require('express')
|
|
const { handleWebhook } = require('./messageHandler')
|
|
const { loadDiensten } = require('./dienstService')
|
|
const { resetDay, getYesterdayTotal } = require('./dailyStats')
|
|
const { sendTextMessage } = require('./whatsappApi')
|
|
|
|
const app = express()
|
|
app.use(express.json({ limit: '10mb' }))
|
|
|
|
app.post('/webhook', async (req, res) => {
|
|
try {
|
|
await handleWebhook(req.body)
|
|
res.json({ success: true })
|
|
} catch (err) {
|
|
console.error('Webhook processing error:', err.message)
|
|
res.status(500).json({ success: false, error: err.message })
|
|
}
|
|
})
|
|
|
|
app.get('/health', (req, res) => {
|
|
res.json({ status: 'ok' })
|
|
})
|
|
|
|
const PORT = process.env.WEBHOOK_PORT || 3002
|
|
|
|
loadDiensten()
|
|
|
|
cron.schedule('0 10 * * *', () => {
|
|
const adminNumber = process.env.ADMIN_NUMBER
|
|
if (!adminNumber) {
|
|
console.error('ADMIN_NUMBER not configured, skipping daily summary')
|
|
return
|
|
}
|
|
|
|
resetDay()
|
|
const total = getYesterdayTotal()
|
|
|
|
sendTextMessage(adminNumber, `Aantal dienstaanvragen gisteren: ${total}`)
|
|
.then(() => console.log(`Daily summary sent: ${total} requests`))
|
|
.catch(err => console.error('Failed to send daily summary:', err.message))
|
|
})
|
|
|
|
app.listen(PORT, () => {
|
|
console.log(`dienst-bot listening on port ${PORT}`)
|
|
console.log(`Allowed group: ${process.env.ALLOWED_GROUP}`)
|
|
console.log(`Bot name: ${process.env.BOT_NAME}`)
|
|
console.log('Daily summary cron job scheduled for 10:00')
|
|
}) |