OpenClaw i komunikatory: WhatsApp, Telegram, Slack, Discord, Signal

Agent, do którego trzeba się logować przez terminal, szybko przestaje być asystentem i zostaje projektem pobocznym. OpenClaw rozwiązuje to inaczej: wpina się do komunikatorów, których używasz codziennie — piszesz do niego na WhatsAppie z kolejki w sklepie, wołasz go z firmowego Slacka, wrzucasz plik na Telegramie. Ten poradnik pokazuje, czego wymaga każdy z pięciu najpopularniejszych kanałów, gdzie leżą jego poświadczenia i co się przy nim psuje najczęściej.

Kanał w OpenClaw to plugin, nie wbudowana funkcja

W rdzeniu instalacji siedzą trzy kanały: WebChat, Telegram i iMessage — działają bez instalowania czegokolwiek. Każdy pozostały komunikator to osobny plugin. Gateway ładuje go dopiero wtedy, gdy kanał jest faktycznie aktywny — instalacja odbywa się on-demand z ClawHub albo npm. Po zainstalowaniu pluginu Gateway trzeba zrestartować, inaczej kanał nie wstanie.

Są trzy drogi do tego samego celu: komenda openclaw plugins install z identyfikatorem pluginu, kreator openclaw onboard przy pierwszej konfiguracji albo openclaw channels add, jeśli Gateway już działa i dokładasz kolejny komunikator. Kreator prowadzi przez token, konto i politykę dostępu, więc przy pierwszym kanale jest wygodniejszy niż ręczna edycja configu.

Lista wspieranych kanałów jest długa i część z nich to pluginy zewnętrzne, a nie oficjalne paczki @openclaw/*. Wszystkie obsługują tekst, natomiast media, reakcje i potwierdzenia odczytu różnią się mocno między platformami — to zwykle decyduje o tym, który kanał wybierzesz jako główny.

openclaw plugins install @openclaw/slack
openclaw channels add
Instalacja pluginu kanału i uruchomienie kreatora, który przeprowadzi przez token i politykę dostępu.
  • Oficjalne i społecznościowe pluginy kanałów: Discord, Feishu, Google Chat, IRC, LINE, Matrix, Mattermost, Microsoft Teams, Nostr, QQ Bot, Signal, Slack, SMS (Twilio), Synology Chat, Tlon, Twitch, Voice Call, WeChat, WhatsApp, Zalo
  • WebChat, Telegram i iMessage — wbudowane w rdzeń, nie wymagają instalacji pluginu. Najszybszy start daje Telegram: wystarczy token bota od @BotFather
  • Instalacja: openclaw plugins install @openclaw/<id> lub clawhub:@openclaw/<id>
  • Po każdej instalacji pluginu: restart Gateway

Kto w ogóle może pisać do agenta: dmPolicy i groupPolicy

Model kontroli dostępu jest wspólny dla wszystkich kanałów i opiera się na dwóch kluczach. dmPolicy przyjmuje wartości pairing (domyślna), allowlist, open i disabled. groupPolicy ma trzy: open, allowlist i disabled. Uzupełniają je allowFrom z listą dozwolonych nadawców, rejestr groups oraz requireMention, czyli wymóg wzmianki agenta w rozmowie grupowej.

Domyślne pairing działa tak, że nieznany nadawca dostaje kod parowania z ograniczonym czasem życia, a Ty zatwierdzasz go z linii poleceń. Kody wygasają po godzinie, a w WhatsAppie oczekujące żądania są limitowane do trzech na konto — jeśli ktoś próbuje trzeci raz i nic się nie dzieje, sprawdź kolejkę parowania, zanim zaczniesz szukać błędu gdzie indziej.

To najczęstsze źródło wrażenia, że agent „nie działa”. W logach zobaczysz wtedy wpisy typu „pairing request”, „blocked” albo „allowlist” — żaden z nich nie oznacza awarii, tylko że wiadomość została świadomie odrzucona przez politykę dostępu.

openclaw pairing list <kanał>
openclaw pairing approve <kanał> <CODE>
Podgląd oczekujących żądań parowania i zatwierdzenie konkretnego kodu.

Telegram: najszybszy start ze wszystkich kanałów

Kanał Telegram stoi na frameworku grammY i wymaga tylko tokenu bota, który tworzysz komendą /newbot u @BotFather. Dokumentacja opisuje go wprost jako najszybszy w konfiguracji i gotowy do produkcyjnego użycia w DM-ach i grupach. Token trafia do klucza channels.telegram.botToken, a jako fallback działa zmienna środowiskowa TELEGRAM_BOT_TOKEN — ale wyłącznie dla konta domyślnego.

Transport domyślnie działa na long pollingu, więc nie potrzebujesz publicznego adresu ani certyfikatu. Watchdog restartuje połączenie po 120 sekundach bez aktywności. Jeśli wolisz webhooki, musisz ustawić webhookUrl i webhookSecret oraz wystawić endpoint na zewnątrz.

Limity są rozsądne: tekst dzielony na kawałki po 4000 znaków, upload mediów do 100 MB, kontekst historii grupy domyślnie 50 ostatnich wiadomości (historyLimit). Czego nie dostaniesz, to potwierdzeń odczytu — Bot API Telegrama ich po prostu nie udostępnia. W grupach pamiętaj o wyłączeniu trybu privacy bota albo nadaniu mu uprawnień administratora, bo inaczej nie zobaczy wiadomości, w których nie został wywołany.

# ~/.openclaw/.env
TELEGRAM_BOT_TOKEN=<token z @BotFather>
Zmienne środowiskowe OpenClaw czyta z .env w katalogu roboczym oraz z globalnego ~/.openclaw/.env.

WhatsApp: parowanie kodem QR i pułapki numeru osobistego

Kanał WhatsApp działa na bibliotece Baileys, czyli kliencie WhatsApp Web, i loguje się wyłącznie kodem QR. Dokumentacja ostrzega, żeby na hoście zdalnym albo bezgłowym mieć przygotowaną pewną drogę dostarczenia żywego kodu na telefon — QR renderowany w terminalu, zrzuty ekranu i załączniki w czacie potrafią wygasnąć po drodze.

Poświadczenia lądują w ~/.openclaw/credentials/whatsapp/<accountId>/creds.json, obok trzymana jest kopia creds.json.bak. Starsza lokalizacja ~/.openclaw/credentials/ jest migrowana automatycznie. Stan połączeń głosowych (MeowCaller) siedzi osobno, w ~/.openclaw/credentials/whatsapp-calls/<accountId>/wa-voip.db.

Limity: media do 50 MB (mediaMaxMb), tekst cięty co 4000 znaków (textChunkLimit). Rozmowy głosowe są eksperymentalne i domyślnie wyłączone — channels.whatsapp.actions.calls stoi na false, syntezowane audio w połączeniu jest ograniczone do 60 sekund, a sam proces MeowCaller do 115–175 sekund. Tryb self-chat na numerze osobistym nie może zadzwonić sam do siebie, więc dokumentacja zaleca dedykowany numer dla OpenClaw.

Dwie rzeczy psują się notorycznie. Pierwsza: wysyłka wychodząca kończy się natychmiastowym błędem, jeśli dla danego konta nie ma aktywnego listenera. Druga: pętla reconnectu, którą naprawia się kopią katalogu poświadczeń i ponownym logowaniem. Przy pracy przez proxy sprawdź jeszcze, czy NO_PROXY nie łapie domeny mmg.whatsapp.net.

openclaw plugins install clawhub:@openclaw/whatsapp
openclaw channels login --channel whatsapp

# naprawa pętli reconnectu
cp -a ~/.openclaw/credentials/whatsapp/<accountId> ~/.openclaw/credentials/whatsapp/<accountId>.bak
openclaw channels logout --channel whatsapp --account <accountId>
openclaw channels login --channel whatsapp --account <accountId>
Instalacja i logowanie QR, a niżej sekwencja z dokumentacji na zapętlone ponowne łączenie.

Slack i Discord: kanały firmowe, czyli scope'y i intenty

Slack ma trzy tryby transportu. Socket Mode jest domyślny i nie wymaga publicznego adresu — potrzebuje bot tokena, App-Level Tokena ze scope connections:write oraz wychodzącego WSS do wss-primary.slack.com. Tryb HTTP Request URLs wymaga publicznego endpointu HTTPS i Signing Secret. Trzeci tryb to relay.

Slack ma jedną pułapkę, która potrafi zjeść pół dnia: allowlisty kanałów muszą używać identyfikatorów Slacka w formacie C12345678, nie nazw. Klucze oparte na nazwie (#nazwa-kanalu) przy groupPolicy ustawionym na allowlist po prostu po cichu nie działają. Na Enterprise Grid dochodzą kolejne ograniczenia: przy instalacjach org-wide tryb relay nie jest wspierany, na kontach enterprise nie ma slash commands, interakcji ani App Home, a DM-y z takimi kontami wymagają dmPolicy ustawionego na open z allowFrom: ["*"]. Wielosobowe DM-y (MPIM) trzeba włączyć osobno kluczem channels.slack.dm.groupEnabled, opcjonalnie zawężając je listą channels.slack.dm.groupChannels. Sama polityka grup tu nie wystarczy.

Discord wymaga włączenia Message Content Intent — bez tego bot widzi wiadomości bez treści. Server Members Intent też jest rekomendowany, bo bez niego nie zadziała allowlista po rolach ani dopasowanie po nazwach; Presence Intent jest opcjonalny. Scope'y OAuth2 to bot i applications.commands, a uprawnienia minimalne to View Channels, Send Messages, Read Message History, Embed Links i Attach Files.

Po stronie limitów Discord tnie tekst co 2000 znaków, komponenty mają TTL 30 minut (maksymalnie 24 godziny), historia wątku nie kopiuje domyślnie transkryptu rodzica, a MEMORY.md nie ładuje się automatycznie w kontekście guildów. DM-y domyślnie dzielą główną sesję agenta. Token wskazuje się konfiguracją channels.discord.token = { source: "env", provider: "default", id: "DISCORD_BOT_TOKEN" }.

# ~/.openclaw/.env
SLACK_APP_TOKEN=xapp-...
SLACK_BOT_TOKEN=xoxb-...
DISCORD_BOT_TOKEN=...
Slack w Socket Mode potrzebuje obu tokenów naraz; Discord wystarcza jeden.
  • Slack, scope'y podstawowe: app_mentions:read, channels:history, channels:read, chat:write, commands, groups:history, groups:read, im:history, im:read, im:write, users:read
  • Slack, scope'y rozszerzone: assistant:write, emoji:read, files:read, files:write, mpim:history, mpim:read, mpim:write, pins:read, pins:write, reactions:read, reactions:write, usergroups:read
  • Discord, intenty: Message Content (wymagany), Server Members (zalecany), Presence (opcjonalny)

Signal i iMessage: kanały z wyższym kosztem wejścia

Signal nie łączy się bezpośrednio — potrzebuje signal-cli (build natywny GraalVM albo JVM) i osobnego numeru telefonu w formacie E.164. Najszybsze parowanie idzie przez QR: uruchamiasz signal-cli link i skanujesz kod w aplikacji Signal. Alternatywą jest pełna rejestracja numeru SMS-em komendą signal-cli -a +<NUMBER> register.

I tu jest ostrzeżenie, które trzeba przeczytać przed, a nie po: rejestracja numeru przez signal-cli może wylogować główną sesję aplikacji Signal na tym numerze. Dlatego dedykowany numer nie jest tu poradą kosmetyczną. Do wyboru są trzy tryby transportu — managed-native (OpenClaw sam uruchamia i nadzoruje demona, zalecane), external-native (podpięcie do już działającego demona) i container na obrazie bbernhard/signal-cli-rest-api z MODE=json-rpc. Limity: potwierdzenia odczytu tylko w DM-ach, tekst co 4000 znaków, załącznik domyślnie do 8 MB, kontekst grupy 50 ostatnich wiadomości.

iMessage działa wyłącznie na macOS, przez most CLI imsg instalowany z brew (brew install steipete/tap/imsg). Poza zalogowaną aplikacją Messages potrzebujesz Full Disk Access dla procesu OpenClaw/imsg oraz uprawnienia Automation do wysyłania przez Messages.app. Domyślne limity: textChunkLimit 4000, mediaMaxMb 16, includeAttachments wyłączone.

Zaawansowane akcje iMessage — tapbacki, edycje, unsend, wątki, efekty, ankiety, operacje grupowe — wymagają wyłączenia SIP. Dokumentacja nazywa to realnym kompromisem bezpieczeństwa: zdejmujesz systemową ochronę, a na Macach z Apple Silicon tracisz możliwość instalowania aplikacji iOS. Jeśli agent stoi na innej maszynie, cliPath można wskazać na skrypt-wrapper po SSH.

openclaw plugins install @openclaw/signal
signal-cli link -n "OpenClaw"
Instalacja pluginu i sparowanie przez QR — kod skanujesz w aplikacji Signal jak przy dodawaniu urządzenia.

Co się psuje najczęściej i jak to sprawdzić w minutę

Wygasłe tokeny objawiają się kodami 401, 403 albo komunikatem „Unauthorized” na operacjach kanału. Zacznij od openclaw channels status --probe i openclaw config get channels, potem uwierzytelnij kanał ponownie i porównaj scope'y z wymaganiami platformy. Jeśli 401 wraca mimo poprawnego logowania, dokumentacja podaje konkretną ścieżkę: openclaw status --all, openclaw doctor --fix (sprawdza i usuwa nieaktualne kopie OAuth per agent), openclaw gateway restart.

Milczący agent to zwykle routing albo kontrola dostępu, a nie awaria. Wpis „drop guild message (mention required” znaczy, że wiadomość grupowa jest ignorowana do czasu wzmianki — sterujesz tym ustawieniem requireMention. „pairing request” znaczy, że nadawca czeka na zatwierdzenie DM-a. „blocked” lub „allowlist” znaczy, że nadawca albo pokój są poza listą.

Cała reszta diagnostyki idzie tymi samymi komendami, niezależnie od kanału. Logi na żywo daje openclaw logs --follow, a pliki logów leżą domyślnie w /tmp/openclaw/ pod nazwą openclaw-YYYY-MM-DD.log. Do zgłoszenia wsparcia użyj openclaw status --all — to diagnoza tylko do odczytu z ogonem logów i wyciętymi tokenami.

Jeśli ta lista wymagań brzmi jak druga praca — QR-y, scope'y, intenty, signal-cli, SIP — to jest alternatywa. ClawLabs uruchamia gotową instancję OpenClaw w chmurze EU (Hetzner) w około 60 sekund, z 13 podpiętymi kanałami i własnymi kluczami do modeli (BYOK), od 399 zł miesięcznie. Sam OpenClaw jest darmowy i otwarty, więc wybór sprowadza się do tego, czy chcesz utrzymywać ten stos samodzielnie.

openclaw channels status --probe
openclaw pairing list --channel <channel>
openclaw config get channels
openclaw logs --follow
Czterokomendowa rutyna, od której warto zaczynać każde zgłoszenie „agent nie odpowiada”.

Częste pytania

Który komunikator podłączyć do OpenClaw jako pierwszy?+

Telegram. Dokumentacja opisuje go jako najszybszy w konfiguracji i gotowy do produkcyjnego użycia w DM-ach i grupach. Potrzebujesz tylko tokenu bota z /newbot u @BotFather, a domyślny long polling nie wymaga publicznego adresu ani certyfikatu. WhatsApp i Signal zostaw na później — oba potrzebują osobnego numeru telefonu.

Czy WhatsApp da się podłączyć bez skanowania kodu QR?+

Nie. Kanał stoi na bibliotece Baileys, czyli kliencie WhatsApp Web, a komenda openclaw channels login --channel whatsapp obsługuje wyłącznie parowanie QR. Na serwerze bezgłowym zaplanuj wcześniej, jak dostarczysz żywy kod na telefon — dokumentacja ostrzega, że QR w terminalu, zrzuty ekranu i załączniki w czacie potrafią wygasnąć po drodze.

Czy mogę użyć swojego prywatnego numeru do WhatsAppa i Signala?+

Technicznie tak, ale w obu przypadkach dokumentacja zaleca numer dedykowany. Przy WhatsAppie tryb self-chat na numerze osobistym nie może zadzwonić sam do siebie. Przy Signalu jest poważniejszy problem: rejestracja numeru przez signal-cli może wylogować główną sesję aplikacji Signal na tym numerze.

Dlaczego agent odpowiada w DM-ach, ale milczy w grupie?+

Prawie zawsze przez politykę grup. Sprawdź requireMention (agent czeka na wzmiankę), groupPolicy oraz rejestr groups. W logach zobaczysz wtedy wpis „drop guild message (mention required”. W Slacku dochodzi osobna pułapka: allowlisty muszą używać ID kanałów w formacie C12345678, bo klucze po nazwie (#nazwa-kanalu) po cichu nie zadziałają. W Telegramie sprawdź jeszcze, czy bot ma wyłączony tryb privacy.

Czy po przeniesieniu OpenClaw na inny serwer trzeba parować kanały od nowa?+

Nie, o ile przeniesiesz cały katalog stanu ~/.openclaw, a nie sam plik openclaw.json. Poświadczenia kanałów siedzą w ~/.openclaw/credentials/, więc po rozpakowaniu archiwum na nowej maszynie i uruchomieniu openclaw doctor oraz openclaw gateway restart kanały powinny zostać połączone bez ponownego parowania. Zwróć uwagę na właścicielstwo plików i zgodne ustawienia profilu.

Ile kanałów można podłączyć naraz i czy to obciąża serwer?+

Ograniczenia z góry nie ma — każdy kanał to osobny plugin, a Gateway ładuje go dopiero, gdy kanał jest aktywny. Praktyczny koszt to raczej utrzymanie: osobne tokeny, osobne scope'y i osobne procedury odnawiania logowania dla każdej platformy. Gotowy zestaw 13 kanałów bez tej roboty daje ClawLabs, z 5-dniowym trialem na planie Premium (wymagana karta) i DPA na żądanie.

Źródła

Nie chcesz tego robić ręcznie?

W ClawLabs OpenClaw stawia się sam w około minutę — konfiguracja, aktualizacje i hardening są po naszej stronie. Chmura EU, polska faktura VAT.

Porównaj self-host z chmurą