WhatsApp (kanał Web)
Status: gotowy do użycia produkcyjnego przez WhatsApp Web (Baileys). Brama zarządza połączonymi sesjami.Instalacja (na żądanie)
- Onboarding (
openclaw onboard) iopenclaw channels add --channel whatsappprzy pierwszym wybraniu kanału proponują instalację pluginu WhatsApp. openclaw channels login --channel whatsapptakże oferuje przepływ instalacji, gdy plugin nie jest jeszcze obecny.- Kanał deweloperski + checkout git: domyślnie używa lokalnej ścieżki pluginu.
- Stable/Beta: domyślnie używa pakietu npm
@openclaw/whatsapp.
Parowanie
Domyślna polityka DM dla nieznanych nadawców to parowanie.
Rozwiązywanie problemów z kanałem
Diagnostyka międzykanałowa i procedury naprawcze.
Konfiguracja bramy
Pełne wzorce konfiguracji kanałów i przykłady.
Szybka konfiguracja
OpenClaw zaleca, jeśli to możliwe, uruchamianie WhatsApp na osobnym numerze. (Metadane kanału i przepływ konfiguracji są zoptymalizowane pod taki układ, ale konfiguracje z numerem osobistym również są obsługiwane.)
Wzorce wdrożenia
Osobny numer (zalecane)
Osobny numer (zalecane)
To najczystszy tryb operacyjny:
- osobna tożsamość WhatsApp dla OpenClaw
- wyraźniejsze listy dozwolonych DM i granice routingu
- mniejsze ryzyko niejasności związanych z czatem z samym sobą
Tryb awaryjny z numerem osobistym
Tryb awaryjny z numerem osobistym
Onboarding obsługuje tryb numeru osobistego i zapisuje bazową konfigurację przyjazną czatowi z samym sobą:
dmPolicy: "allowlist"allowFromzawiera Twój numer osobistyselfChatMode: true
allowFrom.Zakres kanału tylko WhatsApp Web
Zakres kanału tylko WhatsApp Web
Kanał platformy wiadomości w bieżącej architekturze kanałów OpenClaw jest oparty na WhatsApp Web (
Baileys).W wbudowanym rejestrze kanałów czatu nie ma osobnego kanału wiadomości WhatsApp przez Twilio.Model działania
- Brama zarządza gniazdem WhatsApp i pętlą ponownego łączenia.
- Wysyłanie wychodzące wymaga aktywnego nasłuchu WhatsApp dla docelowego konta.
- Czaty statusów i rozgłoszeniowe są ignorowane (
@status,@broadcast). - Czaty bezpośrednie używają reguł sesji DM (
session.dmScope; domyślnemainzwija DM do głównej sesji agenta). - Sesje grupowe są izolowane (
agent:<agentId>:whatsapp:group:<jid>).
Kontrola dostępu i aktywacja
- Polityka DM
- Polityka grup + listy dozwolonych
- Wzmianki + /activation
channels.whatsapp.dmPolicy kontroluje dostęp do czatów bezpośrednich:pairing(domyślnie)allowlistopen(wymaga, abyallowFromzawierało"*")disabled
allowFrom akceptuje numery w stylu E.164 (normalizowane wewnętrznie).Nadpisanie dla wielu kont: channels.whatsapp.accounts.<id>.dmPolicy (oraz allowFrom) ma pierwszeństwo przed domyślnymi ustawieniami na poziomie kanału dla tego konta.Szczegóły zachowania w czasie działania:- parowania są utrwalane w magazynie list dozwolonych kanału i łączone ze skonfigurowanym
allowFrom - jeśli nie skonfigurowano żadnej listy dozwolonych, połączony własny numer jest domyślnie dozwolony
- wychodzące DM
fromMenigdy nie są automatycznie parowane
Numer osobisty i zachowanie czatu z samym sobą
Gdy połączony własny numer jest również obecny wallowFrom, aktywują się zabezpieczenia czatu z samym sobą w WhatsApp:
- pomijanie potwierdzeń odczytu dla tur czatu z samym sobą
- ignorowanie zachowania automatycznego wyzwalania mention-JID, które w przeciwnym razie pingowałoby Ciebie
- jeśli
messages.responsePrefixnie jest ustawione, odpowiedzi w czacie z samym sobą domyślnie używają[{identity.name}]lub[openclaw]
Normalizacja wiadomości i kontekst
Koperta przychodząca + kontekst odpowiedzi
Koperta przychodząca + kontekst odpowiedzi
Przychodzące wiadomości WhatsApp są opakowywane we wspólną kopertę wejściową.Jeśli istnieje cytowana odpowiedź, kontekst jest dołączany w tej postaci:Pola metadanych odpowiedzi są również wypełniane, gdy są dostępne (
ReplyToId, ReplyToBody, ReplyToSender, nadawca JID/E.164).Symbole zastępcze multimediów i wyodrębnianie lokalizacji/kontaktów
Symbole zastępcze multimediów i wyodrębnianie lokalizacji/kontaktów
Przychodzące wiadomości zawierające tylko multimedia są normalizowane za pomocą symboli zastępczych, takich jak:
<media:image><media:video><media:audio><media:document><media:sticker>
Wstrzykiwanie oczekującej historii grupy
Wstrzykiwanie oczekującej historii grupy
W przypadku grup nieprzetworzone wiadomości mogą być buforowane i wstrzykiwane jako kontekst, gdy bot zostanie w końcu wyzwolony.
- domyślny limit:
50 - konfiguracja:
channels.whatsapp.historyLimit - zapasowo:
messages.groupChat.historyLimit 0wyłącza
[Wiadomości czatu od Twojej ostatniej odpowiedzi - dla kontekstu][Bieżąca wiadomość - odpowiedz na nią]
Potwierdzenia odczytu
Potwierdzenia odczytu
Potwierdzenia odczytu są domyślnie włączone dla zaakceptowanych przychodzących wiadomości WhatsApp.Wyłącz globalnie:Nadpisanie dla konta:Tury czatu z samym sobą pomijają potwierdzenia odczytu nawet wtedy, gdy są globalnie włączone.
Dostarczanie, dzielenie i multimedia
Dzielenie tekstu
Dzielenie tekstu
- domyślny limit fragmentu:
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"- tryb
newlinepreferuje granice akapitów (puste wiersze), a następnie wraca do bezpiecznego dzielenia według długości
Zachowanie mediów wychodzących
Zachowanie mediów wychodzących
- obsługuje ładunki obrazów, wideo, audio (głosowe PTT) i dokumentów
audio/oggjest przepisywane naaudio/ogg; codecs=opusdla zgodności z wiadomościami głosowymi- odtwarzanie animowanych GIF-ów jest obsługiwane przez
gifPlayback: trueprzy wysyłaniu wideo - podpisy są stosowane do pierwszego elementu multimedialnego podczas wysyłania odpowiedzi wielomediowych
- źródłem multimediów może być HTTP(S),
file://lub ścieżka lokalna
Limity rozmiaru multimediów i zachowanie zapasowe
Limity rozmiaru multimediów i zachowanie zapasowe
- limit zapisu mediów przychodzących:
channels.whatsapp.mediaMaxMb(domyślnie50) - limit wysyłania mediów wychodzących:
channels.whatsapp.mediaMaxMb(domyślnie50) - nadpisania dla kont używają
channels.whatsapp.accounts.<accountId>.mediaMaxMb - obrazy są automatycznie optymalizowane (zmiana rozmiaru/przebieg jakości), aby zmieścić się w limitach
- przy błędzie wysyłania mediów zapasowy mechanizm dla pierwszego elementu wysyła ostrzeżenie tekstowe zamiast cicho porzucać odpowiedź
Poziom reakcji
channels.whatsapp.reactionLevel kontroluje, jak szeroko agent używa reakcji emoji w WhatsApp:
| Poziom | Reakcje potwierdzające | Reakcje inicjowane przez agenta | Opis |
|---|---|---|---|
"off" | Nie | Nie | Brak jakichkolwiek reakcji |
"ack" | Tak | Nie | Tylko reakcje potwierdzające (potwierdzenie przed odpowiedzią) |
"minimal" | Tak | Tak (zachowawczo) | Potwierdzenie + reakcje agenta z zachowawczymi wskazówkami |
"extensive" | Tak | Tak (zalecane) | Potwierdzenie + reakcje agenta z zalecanymi wskazówkami |
"minimal".
Nadpisania dla kont używają channels.whatsapp.accounts.<id>.reactionLevel.
Reakcje potwierdzające
WhatsApp obsługuje natychmiastowe reakcje potwierdzające po odebraniu wiadomości przychodzącej przezchannels.whatsapp.ackReaction.
Reakcje potwierdzające są kontrolowane przez reactionLevel — są wyciszane, gdy reactionLevel to "off".
- wysyłane natychmiast po zaakceptowaniu wiadomości przychodzącej (przed odpowiedzią)
- błędy są logowane, ale nie blokują normalnego dostarczenia odpowiedzi
- tryb grupowy
mentionsreaguje przy turach wyzwolonych wzmianką; aktywacja grupowaalwaysdziała jako obejście tego sprawdzenia - WhatsApp używa
channels.whatsapp.ackReaction(starszemessages.ackReactionnie jest tutaj używane)
Wiele kont i poświadczenia
Wybór konta i wartości domyślne
Wybór konta i wartości domyślne
- identyfikatory kont pochodzą z
channels.whatsapp.accounts - domyślny wybór konta:
default, jeśli istnieje, w przeciwnym razie pierwszy skonfigurowany identyfikator konta (posortowany) - identyfikatory kont są wewnętrznie normalizowane na potrzeby wyszukiwania
Ścieżki poświadczeń i zgodność ze starszymi wersjami
Ścieżki poświadczeń i zgodność ze starszymi wersjami
- bieżąca ścieżka uwierzytelniania:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - plik kopii zapasowej:
creds.json.bak - starsze domyślne uwierzytelnianie w
~/.openclaw/credentials/jest nadal rozpoznawane/migrowane dla przepływów domyślnego konta
Zachowanie wylogowania
Zachowanie wylogowania
openclaw channels logout --channel whatsapp [--account <id>] czyści stan uwierzytelniania WhatsApp dla tego konta.W starszych katalogach uwierzytelniania oauth.json jest zachowywany, podczas gdy pliki uwierzytelniania Baileys są usuwane.Narzędzia, akcje i zapisy konfiguracji
- Obsługa narzędzi agenta obejmuje akcję reakcji WhatsApp (
react). - Bramki akcji:
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- Zapisy konfiguracji inicjowane przez kanał są domyślnie włączone (wyłącz przez
channels.whatsapp.configWrites=false).
Rozwiązywanie problemów
Niepołączony (wymagany QR)
Niepołączony (wymagany QR)
Objaw: status kanału zgłasza brak połączenia.Naprawa:
Połączony, ale rozłączony / pętla ponownego łączenia
Połączony, ale rozłączony / pętla ponownego łączenia
Objaw: połączone konto z powtarzającymi się rozłączeniami lub próbami ponownego połączenia.Naprawa:W razie potrzeby połącz ponownie przez
channels login.Brak aktywnego nasłuchu podczas wysyłania
Brak aktywnego nasłuchu podczas wysyłania
Wysyłanie wychodzące szybko kończy się błędem, gdy dla docelowego konta nie istnieje aktywny nasłuch bramy.Upewnij się, że brama działa i konto jest połączone.
Wiadomości grupowe są nieoczekiwanie ignorowane
Wiadomości grupowe są nieoczekiwanie ignorowane
Sprawdź w tej kolejności:
groupPolicygroupAllowFrom/allowFrom- wpisy listy dozwolonych
groups - bramkowanie wzmianek (
requireMention+ wzorce wzmianek) - zduplikowane klucze w
openclaw.json(JSON5): późniejsze wpisy nadpisują wcześniejsze, więc zachowaj tylko jednogroupPolicyna zakres
Ostrzeżenie środowiska Bun
Ostrzeżenie środowiska Bun
Środowisko działania bramy WhatsApp powinno używać Node. Bun jest oznaczony jako niekompatybilny ze stabilnym działaniem bramy WhatsApp/Telegram.
Wskaźniki dokumentacji konfiguracji
Podstawowa dokumentacja: Pola WhatsApp o wysokim znaczeniu:- dostęp:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups - dostarczanie:
textChunkLimit,chunkMode,mediaMaxMb,sendReadReceipts,ackReaction,reactionLevel - wiele kont:
accounts.<id>.enabled,accounts.<id>.authDir, nadpisania na poziomie konta - operacje:
configWrites,debounceMs,web.enabled,web.heartbeatSeconds,web.reconnect.* - zachowanie sesji:
session.dmScope,historyLimit,dmHistoryLimit,dms.<id>.historyLimit