Wiadomości grupowe (kanał internetowy WhatsApp)
Cel: pozwolić Clawd działać w grupach WhatsApp, wybudzać się tylko po pingnięciu i utrzymywać ten wątek oddzielnie od osobistej sesji DM. Uwaga:agents.list[].groupChat.mentionPatterns jest teraz używane także przez Telegram/Discord/Slack/iMessage; ten dokument koncentruje się na zachowaniu specyficznym dla WhatsApp. W konfiguracjach wieloagentowych ustaw agents.list[].groupChat.mentionPatterns dla każdego agenta (lub użyj messages.groupChat.mentionPatterns jako globalnego ustawienia zapasowego).
Bieżąca implementacja (2025-12-03)
- Tryby aktywacji:
mention(domyślnie) lubalways.mentionwymaga pingnięcia (rzeczywiste WhatsApp @-wzmianki przezmentionedJids, bezpieczne wzorce regex lub numer E.164 bota w dowolnym miejscu tekstu).alwayswybudza agenta przy każdej wiadomości, ale powinien on odpowiadać tylko wtedy, gdy może wnieść sensowną 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 każdej grupy przez/activation. Gdy ustawione jestchannels.whatsapp.groups, działa to również jako allowlista grup (uwzględnij"*", aby zezwolić na wszystkie). - Polityka grup:
channels.whatsapp.groupPolicyokreśla, czy wiadomości grupowe są akceptowane (open|disabled|allowlist).allowlistużywachannels.whatsapp.groupAllowFrom(ustawienie zapasowe: jawnechannels.whatsapp.allowFrom). Domyślnie jest toallowlist(zablokowane, dopóki nie dodasz nadawców). - Sesje per grupa: klucze sesji mają postać
agent:<agentId>:whatsapp:group:<jid>, więc polecenia takie jak/verbose onlub/think high(wysyłane jako samodzielne wiadomości) są ograniczone do tej grupy; stan osobistego DM pozostaje nietknięty. Heartbeaty są pomijane dla wątków grupowych. - Wstrzykiwanie kontekstu: grupowe wiadomości tylko oczekujące (domyślnie 50), które nie uruchomiły wykonania, są poprzedzane sekcją
[Chat messages since your last reply - for context], a linia wyzwalająca sekcją[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)], aby Pi wiedziało, kto mówi. - Ephemeral/view-once: rozpakowujemy je przed wyodrębnieniem tekstu/wzmianek, więc pingnięcia wewnątrz nich nadal wywołują uruchomienie.
- Prompt systemowy grupy: przy pierwszej turze sesji grupowej (oraz zawsze, gdy
/activationzmienia tryb) wstrzykujemy krótki fragment do promptu systemowego, 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 blokgroupChat do ~/.openclaw/openclaw.json, aby pingnięcia nazwą wyświetlaną działały nawet wtedy, gdy WhatsApp usuwa wizualny znak @ z treści wiadomości:
- Regexy są niewrażliwe na wielkość liter i używają tych samych zabezpieczeń safe-regex co inne powierzchnie konfiguracyjne regexów; 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 zapasowe dopasowanie po numerze rzadko jest potrzebne, ale stanowi przydatne zabezpieczenie.
Polecenie aktywacji (tylko właściciel)
Użyj polecenia czatu grupowego:/activation mention/activation always
channels.whatsapp.allowFrom lub własny numer E.164 bota, jeśli nie jest ustawiony) 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 …(lub dołącz numer). Tylko nadawcy z allowlisty mogą to wywołać, 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,/think high,/newlub/reset,/compact) dotyczą tylko sesji tej grupy; wysyłaj je jako samodzielne wiadomości, aby zostały zarejestrowane. Twoja osobista sesja DM pozostaje niezależna.
Testowanie / weryfikacja
- Ręczny smoke test:
- Wyślij ping
@openclaww grupie i potwierdź odpowiedź, która odnosi się do nazwy nadawcy. - Wyślij drugi ping i sprawdź, czy blok historii został dołączony, a potem wyczyszczony w następnej turze.
- Wyślij ping
- Sprawdź logi gateway (uruchomione z
--verbose), aby zobaczyć wpisyinbound web messagepokazującefrom: <groupJid>oraz sufiks[from: …].
Znane kwestie
- Heartbeaty są celowo pomijane dla grup, aby uniknąć hałaśliwych rozgłoszeń.
- Tłumienie echa używa połączonego ciągu partii; jeśli wyślesz identyczny tekst dwa razy bez wzmianek, odpowiedź zostanie wygenerowana tylko na pierwszy.
- Wpisy w magazynie sesji będą widoczne jako
agent:<agentId>:whatsapp:group:<jid>w magazynie sesji (~/.openclaw/agents/<agentId>/sessions/sessions.jsondomyślnie); brak wpisu oznacza tylko, że grupa nie wywołała jeszcze wykonania. - Wskaźniki pisania w grupach są zgodne z
agents.defaults.typingMode(domyślnie:message, gdy nie ma wzmianki).