WhatsApp Group Monitoring — jak to działa
Architektura przepływu wiadomości
WhatsApp → WAHA (port 13000, NOWEB engine)
↓ webhook (globalny, ALL groups)
n8n webhook /wa-router
↓ każda wiadomość z każdej grupy
Supabase: whatsapp_messages (status = 'new')
↓ co 5 min (n8n: wa-ai-to-inbox)
Claude AI → p24_l_emails_inbox
Co jest w pełni automatyczne (zero akcji)
Zbieranie wiadomości
Gdy numer zostanie dodany do nowej grupy WhatsApp — wiadomości z tej grupy automatycznie trafiają do Supabase bez żadnej konfiguracji.
Dlaczego: webhook WAHA (WHATSAPP_HOOK_URL) jest globalny — dotyczy CAŁEJ sesji,
nie pojedynczych grup. Każda wiadomość z każdej grupy wywołuje ten webhook i ląduje
w tabeli whatsapp_messages.
Konfiguracja webhooka (docker-compose.yml, kontener waha):
WHATSAPP_HOOK_URL=https://n8n.vps-h1.infra.zintegrowana.online/webhook/wa-router
WHATSAPP_HOOK_EVENTS=message,message.any,session.status
Co zawiera każdy rekord w whatsapp_messages
| Kolumna | Przykład | Źródło |
|---|---|---|
id | true_120363411900921854@g.us_... | WA message ID |
chat_id | 120363411900921854@g.us | JID grupy |
sender | 4915785573196@c.us | JID nadawcy |
sender_name | Radek | Nazwa z książki kontaktowej WAHA |
body | Mam usterkę monitora | Treść |
has_media | true | Czy jest zdjęcie/film |
status | new | Do przetworzenia przez AI |
Co wymaga ręcznej akcji — rejestr grup
Tabela whatsapp_groups to rejestr do zarządzania (aliasy, flaga monitored).
Sama w sobie nie wpływa na zbieranie wiadomości — ale AI processing (n8n flow
wa-ai-to-inbox) przetwarza tylko grupy z monitored = true.
Jeśli grup nie ma w rejestrze → wiadomości są zbierane, ale nie trafiają do
p24_l_emails_inbox dopóki nie dodasz grupy.
Jak dodać nową grupę (1-2 min)
Krok 1 — znajdź JID grupy
Opcja A — przez WAHA API (polecana, zwraca wszystkie znane grupy naraz):
# Z VPS (SSH):
curl -s 'http://127.0.0.1:13000/api/default/groups' \
-H "X-Api-Key: $WAHA_API_KEY" | python3 -m json.toolOdpowiedź: słownik {JID → {subject, ...}}. Szukaj po nazwie grupy.
Opcja B — z Supabase: wyślij wiadomość testową w grupie, a chat_id pojawi się
automatycznie w whatsapp_messages.
Krok 2 — dodaj do rejestru
INSERT INTO whatsapp_groups (id, name, alias, monitored, description)
VALUES (
'120363XXXXXXXXXX@g.us', -- JID z WAHA
'Nazwa grupy WA', -- dokładna nazwa z WhatsApp
'moj-alias', -- krótki alias używany w platformie (unikalny)
true,
'Opis — opcjonalny'
);Przez Supabase Dashboard → Table Editor → whatsapp_groups → Insert row.
Krok 3 — nic więcej
Wiadomości z tej grupy ze statusem new będą przetwarzane przez AI przy
następnym uruchomieniu cron (co 5 min).
Dla 30 grup — auto-sync skrypt
Zamiast dodawać każdą grupę ręcznie możesz uruchomić skrypt który zsynchronizuje wszystkie grupy z WAHA do Supabase. Grupy już w rejestrze są pomijane (ON CONFLICT DO NOTHING).
Skrypt sync (uruchom raz z dowolnej maszyny z dostępem SSH do VPS)
import paramiko, json, requests
# SSH do VPS → WAHA API
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('72.60.32.61', port=22, username='root',
key_filename=r'C:\Users\konar\.ssh\id_ed25519')
_, stdout, _ = client.exec_command(
'curl -s http://127.0.0.1:13000/api/default/groups '
'-H "X-Api-Key: FT0rwjdMvXzBtOyRYcAgN1sqlhZW7f32IDUa5QGn"'
)
groups = json.loads(stdout.read())
client.close()
# Supabase REST API
SUPABASE_URL = "https://mwkqmgadqnkkihjdeqsi.supabase.co"
SUPABASE_KEY = "<SUPABASE_SERVICE_ROLE_KEY>" # z .env.local
headers = {
"apikey": SUPABASE_KEY,
"Authorization": f"Bearer {SUPABASE_KEY}",
"Content-Type": "application/json",
"Prefer": "resolution=ignore-duplicates" # pomija istniejące
}
rows = []
for jid, g in groups.items():
subject = g.get('subject', '')
# Auto-alias: lowercase, spacje → myślniki
alias = subject.lower().replace(' ', '-').replace('ä','ae').replace('ö','oe').replace('ü','ue')[:40]
rows.append({
"id": jid,
"name": subject,
"alias": alias,
"monitored": True,
"description": f"Auto-sync {jid}"
})
resp = requests.post(
f"{SUPABASE_URL}/rest/v1/whatsapp_groups",
headers=headers,
json=rows
)
print(f"Sync result: {resp.status_code}")
for r in rows:
print(f" {r['id']} | {r['name']} → alias: {r['alias']}")Po imporcie możesz przejrzeć aliasy w Supabase i zmienić je na bardziej przyjazne.
Scenariusze
Numer dodany do nowej grupy
| Akcja | Automatyczne? |
|---|---|
Wiadomości zbierane w whatsapp_messages | TAK — od razu |
| Wiadomości przetwarzane przez AI | NIE — dopóki nie dodasz do whatsapp_groups |
Dodanie do whatsapp_groups | ręcznie lub auto-sync skryptem |
Numer usunięty z grupy
Wiadomości z tej grupy przestają przychodzić. Możesz ustawić monitored = false
w rejestrze żeby oznaczyć jako nieaktywną — wiadomości w bazie pozostają.
Chcesz chwilowo wyłączyć przetwarzanie jednej grupy (bez usuwania danych)
UPDATE whatsapp_groups SET monitored = false WHERE alias = 'awarie-dhl';Aktualny stan rejestru (2026-05-09)
| Alias | Nazwa WA | JID |
|---|---|---|
zgloszenia | et-operational-platform-zgloszenia | 120363411900921854@g.us |
awarie-dhl | Awarie dhl poczta | 4915224462971-1584089694@g.us |
awarie | Awarie | 4915253015583-1548075046@g.us |
dp-eutingen-awarie | Deutsche Post Eutingen Awarie | 120363401944773725@g.us |
Jak sprawdzić które grupy są wykryte przez WAHA (bez SSH)
Przez n8n — w każdej chwili możesz uruchomić HTTP Request node:
GET https://waha2.vps-h1.infra.zintegrowana.online/api/default/groups
Header: X-Api-Key: <WAHA_API_KEY>
Podsumowanie dla 30 grup
- Dodaj numer do wszystkich 30 grup w WhatsApp — wiadomości zaczną spływać automatycznie
- Uruchom raz skrypt auto-sync (powyżej) — wszystkie 30 grup pojawią się w
whatsapp_groups - Przejrzyj aliasy w Supabase i popraw jeśli trzeba
- Gotowe — AI processing uruchomi się automatycznie dla wszystkich
Nie musisz nic restartować ani rekonfigurować WAHA/n8n.