Configuration
Wiadomości grupowe WhatsApp
Model grup międzykanałowych (Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo) opisuje Grupy. Ta strona omawia zachowanie specyficzne dla WhatsApp nad tym modelem: aktywację, listy dozwolonych grup, klucze sesji dla poszczególnych grup oraz wstrzykiwanie kontekstu oczekujących wiadomości.
Cel: pozwolić OpenClaw działać w grupach WhatsApp, wybudzać się tylko po wywołaniu i utrzymywać ten wątek oddzielnie od osobistej sesji DM.
Zachowanie
- Tryby aktywacji:
mention(domyślnie) lubalways.mentionwymaga wywołania (rzeczywiste wzmianki @ w WhatsApp przezmentionedJids, bezpieczne wzorce regex albo E.164 bota w dowolnym miejscu tekstu).alwayswybudza agenta przy każdej wiadomości, ale powinien odpowiedzieć tylko wtedy, gdy może wnieść realną wartość; w przeciwnym razie zwraca dokładny cichy tokenNO_REPLY/no_reply. Wartości domyślne można ustawić w konfiguracji (channels.whatsapp.groups) i nadpisać dla grupy przez/activation. Gdy ustawione jestchannels.whatsapp.groups, działa też jako lista dozwolonych grup (dodaj"*", aby zezwolić na wszystkie). - Polityka grup:
channels.whatsapp.groupPolicykontroluje, czy wiadomości grupowe są akceptowane (open|disabled|allowlist).allowlistużywachannels.whatsapp.groupAllowFrom(awaryjnie: jawnechannels.whatsapp.allowFrom). Domyślnie jest toallowlist(blokowane, dopóki nie dodasz nadawców). - Sesje dla poszczególnych grup: klucze sesji mają postać
agent:<agentId>:whatsapp:group:<jid>, więc polecenia takie jak/verbose on,/trace onlub/think high(wysłane jako samodzielne wiadomości) są ograniczone do tej grupy; osobisty stan DM pozostaje nienaruszony. Heartbeat jest pomijany dla wątków grupowych. - Wstrzykiwanie kontekstu: tylko oczekujące wiadomości grupowe (domyślnie 50), które nie uruchomiły przebiegu, są poprzedzane nagłówkiem
[Chat messages since your last reply - for context], a linia wyzwalająca znajduje się pod[Current message - respond to this]. Wiadomości już obecne w sesji nie są wstrzykiwane ponownie. - Ujawnianie nadawcy: każda partia grupowa kończy się teraz
[from: Sender Name (+E164)], więc OpenClaw wie, kto mówi. - Efemeryczne/jednorazowego wyświetlenia: odpakowujemy je przed wyodrębnieniem tekstu/wzmianek, więc wywołania w ich treści nadal uruchamiają działanie.
- Systemowy prompt grupy: przy pierwszym kroku sesji grupowej (i za każdym razem, gdy
/activationzmieni tryb) wstrzykujemy do promptu systemowego krótki opis, taki jakYou are replying inside the WhatsApp group "<subject>". Group members: Alice (+44...), Bob (+43...), ... Activation: trigger-only ... Address the specific sender noted in the message context.Jeśli metadane nie są dostępne, nadal informujemy agenta, że to czat grupowy.
Przykład konfiguracji (WhatsApp)
Dodaj blok groupChat do ~/.openclaw/openclaw.json, aby wywołania nazwą wyświetlaną działały nawet wtedy, gdy WhatsApp usuwa wizualne @ z treści tekstu:
{ channels: { whatsapp: { groups: { "*": { requireMention: true }, }, }, }, agents: { list: [ { id: "main", groupChat: { historyLimit: 50, mentionPatterns: ["@?openclaw", "\\+?15555550123"], }, }, ], },}Uwagi:
- Regexy nie rozróżniają wielkości liter i używają tych samych zabezpieczeń safe-regex co inne powierzchnie regex w konfiguracji; nieprawidłowe wzorce i niebezpieczne zagnieżdżone powtórzenia są ignorowane.
- WhatsApp nadal wysyła kanoniczne wzmianki przez
mentionedJids, gdy ktoś stuknie kontakt, więc awaryjne użycie numeru rzadko jest potrzebne, ale stanowi użyteczną siatkę bezpieczeństwa.
Polecenie aktywacji (tylko właściciel)
Użyj polecenia czatu grupowego:
/activation mention/activation always
Tylko numer właściciela (z channels.whatsapp.allowFrom albo własny E.164 bota, gdy nie ustawiono) może to zmienić. Wyślij /status jako samodzielną wiadomość w grupie, aby zobaczyć bieżący tryb aktywacji.
Jak używać
- Dodaj swoje konto WhatsApp (to, na którym działa OpenClaw) do grupy.
- Napisz
@openclaw …(albo dołącz numer). Tylko nadawcy z listy dozwolonych mogą go uruchomić, chyba że ustawiszgroupPolicy: "open". - Prompt agenta będzie zawierać ostatni kontekst grupy oraz końcowy znacznik
[from: …], aby mógł zwrócić się do właściwej osoby. - Dyrektywy na poziomie sesji (
/verbose on,/trace on,/think high,/newlub/reset,/compact) dotyczą tylko sesji tej grupy; wyślij je jako samodzielne wiadomości, aby zostały zarejestrowane. Twoja osobista sesja DM pozostaje niezależna.
Testowanie / weryfikacja
- Ręczny smoke test:
- Wyślij wywołanie
@openclaww grupie i potwierdź odpowiedź, która odnosi się do nazwy nadawcy. - Wyślij drugie wywołanie i sprawdź, że blok historii został dołączony, a następnie wyczyszczony przy kolejnym kroku.
- Wyślij wywołanie
- Sprawdź logi Gateway (uruchom z
--verbose), aby zobaczyć wpisyinbound web messagepokazującefrom: <groupJid>oraz sufiks[from: …].
Znane kwestie
- Heartbeat jest celowo pomijany dla grup, aby uniknąć hałaśliwych transmisji.
- Tłumienie echa używa połączonego ciągu partii; jeśli wyślesz identyczny tekst dwa razy bez wzmianek, odpowiedź otrzyma tylko pierwszy.
- Wpisy magazynu sesji pojawią się jako
agent:<agentId>:whatsapp:group:<jid>w magazynie sesji (~/.openclaw/agents/<agentId>/sessions/sessions.jsondomyślnie); brak wpisu oznacza po prostu, że grupa nie uruchomiła jeszcze przebiegu. - Wskaźniki pisania w grupach podążają za
agents.defaults.typingMode. Gdy widoczne odpowiedzi są włączone tylko w trybie narzędzia wiadomości, pisanie domyślnie zaczyna się natychmiast, aby członkowie grupy widzieli, że agent pracuje, nawet jeśli nie zostanie opublikowana automatyczna odpowiedź końcowa. Jawna konfiguracja trybu pisania nadal ma pierwszeństwo.