- New src/telegramBot.js: separate process for health checks + Telegram notifications - Updated src/whatsappApi.js notifyAdmin(): falls back to Telegram when WhatsApp API is down - Updated .env.example with TELEGRAM_* configuration variables - Design doc and implementation plan
4.4 KiB
4.4 KiB
Telegram Watchdog — Design Document
Doel
Een apart Telegram bot proces dat de admin waarschuwt wanneer de WhatsApp API (wwebjs-api) of de dienst-bot zelf niet bereikbaar is. Dit is het enige communicatiekanaal dat overblijft als WhatsApp uitvalt.
Architectuur
┌──────────────────┐
│ dienst-bot │ Node.js (nextcloud:3002)
│ (Express) │
└──────┬───────────┘
│ POST /notify (alleen bij falen WhatsApp)
│
┌──────▼───────────┐
│ telegram-bot │ Node.js (nextcloud:3003)
│ (Express) │
│ │
│ ─── health check │ dienst-bot /health (elke 5min)
│ ─── health check │ wwebjs-api /session/status (elke 5min)
│ ─── Telegram API │ verstuur notificaties naar admin
└──────────────────┘
Twee processen
- dienst-bot (bestaand, ongewijzigd behalve
notifyAdmin): stuurt bij fouten eerst WhatsApp, als dat faalt → Telegram via POST /notify - telegram-bot (nieuw): ontvangt notificaties van dienst-bot, voert zelfstandig health checks uit, stuurt Telegram berichten
Geen nieuwe npm packages
Zowel dienst-bot als telegram-bot gebruiken alleen axios en dotenv — beide al in gebruik.
telegram-bot — specificatie
Endpoints
| Endpoint | Doel |
|---|---|
POST /notify |
Ontvangt notificaties van dienst-bot (alleen als WhatsApp faalde) |
GET /health |
Health check voor systemd |
POST /notify body:
{
"text": "Kan wwebjs-api niet bereiken na 3 pogingen (ECONNREFUSED)"
}
Health checks (periodiek)
Elke 5 minuten worden beide endpoints gecheckt:
GET http://localhost:3002/health— dienst-botGET http://192.168.5.252:3001/session/status/EdGpt— wwebjs-api
Statusovergangen triggeren een notificatie:
- down → up: "✅ dienst-bot is weer online"
- up → down: "❌ dienst-bot niet bereikbaar (ECONNREFUSED)"
Notificaties bij opstart
Bij het opstarten stuurt telegram-bot direct een bericht: "✅ Telegram watchdog online — gezondheidschecks aktief"
.env variabelen (telegram-bot)
TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234
TELEGRAM_ADMIN_CHAT_ID=123456789
TELEGRAM_BOT_PORT=3003
DIENST_BOT_HEALTH_URL=http://localhost:3002/health
WWEBJS_API_SESSION_URL=http://192.168.5.252:3001/session/status/EdGpt
HEALTH_CHECK_INTERVAL_MS=300000
Wijzigingen aan dienst-bot
whatsappApi.js — notifyAdmin()
async function notifyAdmin(errorText) {
// WhatsApp eerst (als de API werkt)
try {
await sendTextMessage(adminNumber, `[dienst-bot fout] ${errorText}`)
} catch (err) {
// WhatsApp faalt (API down) → Telegram backup
await notifyTelegram(errorText)
}
}
async function notifyTelegram(text) {
const url = process.env.TELEGRAM_BOT_URL
if (!url) return
try {
await axios.post(`${url}/notify`, { text }, { timeout: 5000 })
} catch (err) {
console.error('Telegram notification failed:', err.message)
}
}
Nieuwe .env variabele (dienst-bot)
TELEGRAM_BOT_URL=http://localhost:3003
Systemd service
Bestand: /etc/systemd/system/telegram-bot.service
- Working directory:
/home/aiaiaiaiagent/whatsapp-scripts/dienst_echo_whatsappgroep - ExecStart:
/usr/bin/node src/telegramBot.js - User:
aiaiaiaiagent - Depends: dienst-bot.service (After= dienst-bot.service)
- Restart: always
Bestanden in de repo
| Bestand | Doel |
|---|---|
src/telegramBot.js |
Telegram watchdog process (Express server) |
.env.example |
Nieuwe TELEGRAM_* variabelen toevoegen |
docs/superpowers/specs/2026-07-12-telegram-watchdog-design.md |
Dit document |
Geen wijzigingen aan package.json — beide processen gebruiken dezelfde dependencies.
Error handling
- telegram-bot faalt: dienst-bot logt error, verder geen impact op WhatsApp verkeer
- dienst-bot faalt: telegram-bot detecteert via health check en stuurt notificatie
- telegram-bot zelf fault: systemd restart (Restart=always)
- Telegram API timeout: loggen en negeren (geen retry nodig)