Docs: AGENTS.md naar wuzapi-architectuur (1 sessie + multiplexer, poorten)
This commit is contained in:
parent
49d6fe15d6
commit
9aea446bec
1 changed files with 65 additions and 32 deletions
95
AGENTS.md
95
AGENTS.md
|
|
@ -2,6 +2,12 @@
|
||||||
|
|
||||||
## 🚨 VERPLICHT: bridgestore is GEEN waarheid over bezorging
|
## 🚨 VERPLICHT: bridgestore is GEEN waarheid over bezorging
|
||||||
|
|
||||||
|
> Geldt ook hier (wuzapi-tijdperk): afhandeling/acks van de bridge zijn géén
|
||||||
|
> bezorgbewijs. Deze sectie beschrijft de bewezen wwebjs-fabricatie (historie, tot
|
||||||
|
> wuzapi-migratie 2026-10-11); de les blijft: alleen het apparaat van de ontvanger is
|
||||||
|
> waarheid. Bij wuzapi geldt: de `/chat/send/*`-respons `{"code":200}` bevestigt
|
||||||
|
> serverontvangst, niet zichtbaarheid op het doelapparaat.
|
||||||
|
|
||||||
De wwebjs-api **bridgestore is niet betrouwbaar** als bewijs dat een bericht bezorgd/gelezen
|
De wwebjs-api **bridgestore is niet betrouwbaar** als bewijs dat een bericht bezorgd/gelezen
|
||||||
is. Bevestigd 2026-09-24: een dienst-PNG werd 3× naar dezelfde ontvanger "verzonden"
|
is. Bevestigd 2026-09-24: een dienst-PNG werd 3× naar dezelfde ontvanger "verzonden"
|
||||||
(success + message-ID), de store toonde 3 berichten **allemaal ack 3**, maar de ontvanger
|
(success + message-ID), de store toonde 3 berichten **allemaal ack 3**, maar de ontvanger
|
||||||
|
|
@ -48,10 +54,13 @@ De bot draait op de **nextcloud** server (192.168.5.252) als **systemd service**
|
||||||
|
|
||||||
| Poort | Service | Type | Beheer |
|
| Poort | Service | Type | Beheer |
|
||||||
|-------|---------|------|--------|
|
|-------|---------|------|--------|
|
||||||
| **3001** | wwebjs-api | Docker container | WhatsApp bridge |
|
| **8082** | wuzapi | systemd service | WhatsApp bridge (whatsmeow, 1 sessie EdGpt) |
|
||||||
|
| **3007** | wuzapi-multiplexer | systemd service | Webhook router per chat-groep |
|
||||||
| **3002** | dienst-bot | systemd service | Dienst opvragen bot (dit project) |
|
| **3002** | dienst-bot | systemd service | Dienst opvragen bot (dit project) |
|
||||||
| **3003** | aankondigingen-webhook | systemd service | Losse webhook receiver (Eddy sessie) |
|
| **3003** | aankondigingen-webhook | systemd service | Losse webhook receiver (EBS-aankondigingen) |
|
||||||
| **3004** | telegram-bot | systemd service | Telegram watchdog (dit project) |
|
| **3004** | telegram-bot | systemd service | Telegram watchdog (dit project) |
|
||||||
|
| **3006** | ebs-merplus | systemd service | MerPlus→EBS aankondigingen doorstuurbot |
|
||||||
|
| ~~3001~~ | ~~wwebjs-api~~ | ~~Docker container~~ | **Vervangen door wuzapi (2026-10-11), container gestopt** |
|
||||||
| ~~3000~~ | Forgejo | systemd service | **NIET onze service!** Niet aanraken. |
|
| ~~3000~~ | Forgejo | systemd service | **NIET onze service!** Niet aanraken. |
|
||||||
|
|
||||||
### dienst-bot
|
### dienst-bot
|
||||||
|
|
@ -82,51 +91,66 @@ ssh aiaiaiaiagent@nextcloud "journalctl -u dienst-bot --since today"
|
||||||
ssh aiaiaiaiagent@nextcloud "journalctl -u telegram-bot --since today"
|
ssh aiaiaiaiagent@nextcloud "journalctl -u telegram-bot --since today"
|
||||||
```
|
```
|
||||||
|
|
||||||
## WhatsApp API (wwebjs-api)
|
## WhatsApp API (wuzapi)
|
||||||
|
|
||||||
De wwebjs-api draait als Docker container op nextcloud.
|
De WhatsApp-bridge is sinds **2026-10-11 wuzapi** (vroeger wwebjs-api op :3001, container
|
||||||
|
gestopt). wuzapi draait als systemd service op **:8082**. Volledige installatie/
|
||||||
|
config/credentials staan in de vault ([[Wuzapi]] + [[Whatsapp rest-api]] historie).
|
||||||
|
|
||||||
| Wat | Waarde |
|
| Wat | Waarde |
|
||||||
|-----|--------|
|
|-----|--------|
|
||||||
| Docker container | `wwebjs-api` |
|
| Systemd service | `wuzapi.service` |
|
||||||
| Image | `wwebjs-api-api` |
|
| URL | `http://127.0.0.1:8082` |
|
||||||
| URL | `http://192.168.5.252:3001` |
|
| Binary | `/usr/local/bin/wuzapi` (SELinux `bin_t`) |
|
||||||
| Sessie dienst-bot | `EdGpt` |
|
| Datadir | `/home/aiaiaiaiagent/wuzapi/` (.env + SQLite `dbdata/`) |
|
||||||
| Sessie persoonlijk | `Eddy` |
|
| Sessie | `EdGpt` (user id `09efd1be…`, een sessie voor heel nummer 31616173970) |
|
||||||
| Webhook dienst-bot | `http://192.168.5.252:3002/webhook` |
|
| User token | `EdGpt-BOhLAsGkIfVZnKVi` (vault) |
|
||||||
| Webhook aankondigingen | `http://192.168.5.252:3003/webhook` (Eddy-sessie, niet dit project) |
|
| Webhook | `http://127.0.0.1:3007/webhook` (multiplexer) |
|
||||||
|
| Events | Message |
|
||||||
|
|
||||||
### Docker commando's
|
> **1 sessie + multiplexer (besluit 2026-10-11):** wuzapi koppelt per user één
|
||||||
|
> whatsmeow-device. Twee users op hetzelfde nummer delen dezelfde `users.jid` en
|
||||||
|
> conflicts in `resolveDeviceStore` (events gingen willekeurig naar één van beide
|
||||||
|
> webhooks). Daarom: **1 sessie (EdGpt)** voor alle WhatsApp-verkeer van het nummer, en de
|
||||||
|
> **multiplexer** (:3007) routeert per chat-groep naar de juiste bot (zie hieronder).
|
||||||
|
|
||||||
```bash
|
### Multiplexer (`src/multiplexer.js`, systemd `wuzapi-multiplexer.service`)
|
||||||
ssh aiaiaiaiagent@nextcloud
|
|
||||||
docker ps --filter "name=wwebjs" # status
|
Ontvangt de wuzapi-webhook op :3007 en stuurt per chat-groep door:
|
||||||
docker restart wwebjs-api # herstarten
|
|
||||||
docker logs wwebjs-api --tail 30 # logs
|
| Chat-groep | Naar |
|
||||||
```
|
|---|---|
|
||||||
|
| `120363407613652082@g.us` (Dienst opvragen) | dienst-bot :3002 |
|
||||||
|
| `120363429978048879@g.us` (Anonieme aankondigingen) | EBS-MerPlus :3006 |
|
||||||
|
|
||||||
### Sessie status
|
### Sessie status
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl http://192.168.5.252:3001/session/status/EdGpt
|
curl http://127.0.0.1:8082/session/status -H "Token: $TOKEN"
|
||||||
# → {"success":true,"state":"CONNECTED","message":"session_connected"}
|
# → {"code":200,"data":{"LoggedIn":true,"Connected":true},...}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Wekelijkse container restart
|
### Wuzapi-commando's
|
||||||
|
|
||||||
De wwebjs-api container wordt elke **zondag om 02:00** automatisch herstart om vastlopers te voorkomen.
|
|
||||||
|
|
||||||
| Wat | Waarde |
|
|
||||||
|-----|--------|
|
|
||||||
| Timer | `docker-restart-wwebjs.timer` |
|
|
||||||
| Service | `docker-restart-wwebjs.service` |
|
|
||||||
| Commando | `docker restart wwebjs-api` |
|
|
||||||
| Volgende run | check: `systemctl list-timers --no-pager \| grep wwebjs` |
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh aiaiaiaiagent@nextcloud "sudo systemctl list-timers --no-pager | grep wwebjs"
|
ssh aiaiaiaiagent@nextcloud
|
||||||
|
sudo -A systemctl status wuzapi # bridge status
|
||||||
|
sudo -A journalctl -u wuzapi --since today # logs
|
||||||
|
# Webhook-verzending zien:
|
||||||
|
sudo -A journalctl -u wuzapi | grep "Calling user webhook"
|
||||||
|
# Multiplexer routing (+ dienst-bot + MerPlus):
|
||||||
|
sudo -A journalctl -u wuzapi-multiplexer / -u dienst-bot / -u ebs-merplus --since today
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### wuzapi-API-knoppen (voor de bot)
|
||||||
|
|
||||||
|
- Send text: `POST /chat/send/text` `{Phone, Body}` — header `Token:` (user token)
|
||||||
|
- Send image: `POST /chat/send/image` `{Phone, Image:"data:image/jpeg;base64,...", Caption?}`
|
||||||
|
- Send document: `POST /chat/send/document` `{Phone, Document, FileName, Caption?}`
|
||||||
|
- Mark read: `POST /chat/markread` `{Id:[...], Chat}`
|
||||||
|
- Admin (users/webhook-beheer): `Authorization:` header met admin-token (vault)
|
||||||
|
- Webhook-payload: `{type:"Message", event:{Info:{Chat:{User,Server}, Sender, IsFromMe, ID}, Message:{...}}, base64?, mimeType?, fileName?}`
|
||||||
|
|
||||||
## Release-proces
|
## Release-proces
|
||||||
|
|
||||||
1. Code wijzigen lokaal in `/Users/eddy/src/dienst_echo_whatsappgroep/`
|
1. Code wijzigen lokaal in `/Users/eddy/src/dienst_echo_whatsappgroep/`
|
||||||
|
|
@ -144,7 +168,10 @@ ssh aiaiaiaiagent@nextcloud "sudo systemctl list-timers --no-pager | grep wwebjs
|
||||||
```bash
|
```bash
|
||||||
ssh aiaiaiaiagent@nextcloud "sudo systemctl restart dienst-bot"
|
ssh aiaiaiaiagent@nextcloud "sudo systemctl restart dienst-bot"
|
||||||
ssh aiaiaiaiagent@nextcloud "sudo systemctl restart telegram-bot"
|
ssh aiaiaiaiagent@nextcloud "sudo systemctl restart telegram-bot"
|
||||||
|
ssh aiaiaiaiagent@nextcloud "sudo systemctl restart wuzapi-multiplexer" # als multiplexer.js wijzigde
|
||||||
```
|
```
|
||||||
|
Voor EBS-MerPlus geldt dezelfde flow in zijn eigen repo (`~/whatsapp-scripts/EBS-MerPlus`,
|
||||||
|
service `ebs-merplus` :3006) — inclusive herstart.
|
||||||
5. Logs checken:
|
5. Logs checken:
|
||||||
```bash
|
```bash
|
||||||
ssh aiaiaiaiagent@nextcloud "journalctl -u dienst-bot --since '5 minutes ago'"
|
ssh aiaiaiaiagent@nextcloud "journalctl -u dienst-bot --since '5 minutes ago'"
|
||||||
|
|
@ -155,6 +182,12 @@ ssh aiaiaiaiagent@nextcloud "sudo systemctl list-timers --no-pager | grep wwebjs
|
||||||
|
|
||||||
De `.env` bevat alle instellingen (niet in git). Template staat in `.env.example`.
|
De `.env` bevat alle instellingen (niet in git). Template staat in `.env.example`.
|
||||||
|
|
||||||
|
> **De secties hieronder (`Resilience maatregelen`, ack-tracking, RCA staged-ghost,
|
||||||
|
> Media-levering twee foutklassen, `dienst-media-test.js`) beschrijven de wwebjs-api-
|
||||||
|
> historie vóór de wuzapi-migratie van 2026-10-11.** Bewaard voor context/RCA; de
|
||||||
|
> huidige bridge is wuzapi (geen wwebjs-container meer). De staged-ghost-race en
|
||||||
|
> ack-fabricatie waren eigen aan de wwebjs-fork.
|
||||||
|
|
||||||
## Resilience maatregelen (juni 2026)
|
## Resilience maatregelen (juni 2026)
|
||||||
|
|
||||||
Deze maatregelen zijn toegevoegd na een incident met HTTP 500 van de wwebjs-api en een EADDRINUSE restart-loop.
|
Deze maatregelen zijn toegevoegd na een incident met HTTP 500 van de wwebjs-api en een EADDRINUSE restart-loop.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue