Grupy
OpenClaw traktuje czaty grupowe sposojnie na wszystkich platformach: WhatsApp, Telegram, Discord, Slack, Signal, iMessage, Microsoft Teams, Zalo.
Wprowadzenie dla poczatkujacych (2 minuty)
OpenClaw “zyje” na twoich wlasnych kontach komunikacyjnych. Nie istnieje oddzielny uzytkownik bota WhatsApp. Jesli ty jestes w grupie, OpenClaw moze ja widziec i tam odpowiadac.
Domyslne zachowanie:
- Grupy sa ograniczone (
groupPolicy: "allowlist"). - Odpowiedzi wymagaja wzmianki, chyba ze jawnie wylaczysz bramkowanie wzmiankami.
Tlumaczenie: nadawcy z listy dozwolonych moga wyzwolic OpenClaw poprzez wspomnenie go.
TL;DR
- Dostep DM jest kontrolowany przez
*.allowFrom.- Dostep grupowy jest kontrolowany przez
*.groupPolicy+ listy dozwolonych (*.groups,*.groupAllowFrom).- Wyzwalanie odpowiedzi jest kontrolowane przez bramkowanie wzmiankami (
requireMention,/activation).
Szybki przepalyw (co sie dzieje z wiadomoscia grupowa):
groupPolicy? disabled -> odrzuc
groupPolicy? allowlist -> grupa dozwolona? nie -> odrzuc
requireMention? yes -> wspomniano? nie -> zapisz tylko jako kontekst
w przeciwnym razie -> odpowiedz
Jesli chcesz…
| Cel | Co ustawic |
|---|---|
| Zezwol na wszystkie grupy, ale odpowiadaj tylko na @wzmianki | groups: { "*": { requireMention: true } } |
| Wylacz wszystkie odpowiedzi grupowe | groupPolicy: "disabled" |
| Tylko konkretne grupy | groups: { "<group-id>": { ... } } (bez klucza "*") |
| Tylko ty mozesz wyzwalac w grupach | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
Klucze sesji
- Sesje grupowe uzywaja kluczy sesji
agent:<agentId>:<channel>:group:<id>(pokoje/kanaly uzywajaagent:<agentId>:<channel>:channel:<id>). - Tematy forum Telegram dodaja
:topic:<threadId>do ID grupy, wiec kazdy temat ma wlasna sesje. - Czaty bezposrednie uzywaja glownej sesji (lub per-nadawca jesli skonfigurowane).
- Heartbeaty sa pomijane dla sesji grupowych.
Wzorzec: osobiste DM + publiczne grupy (jeden agent)
Tak — dziala to dobrze, jesli twoj “osobisty” ruch to DM, a “publiczny” ruch to grupy.
Dlaczego: w trybie jednoagentowym DM zwykle trafiaja do glownego klucza sesji (agent:main:main), a grupy zawsze uzywaja nieglownych kluczy sesji (agent:main:<channel>:group:<id>). Jesli wlaczysz sandboxing z mode: "non-main", te sesje grupowe dzialaja w Dockerze, a twoja glowna sesja DM pozostaje na hoscie.
Daje ci to jeden “mozg” agenta (wspolna przestrzen robocza + pamiec), ale dwie postawy wykonawcze:
- DM: pelne narzedzia (host)
- Grupy: sandbox + ograniczone narzedzia (Docker)
Jesli potrzebujesz naprawde oddzielnych przestrzeni roboczych/person (“osobiste” i “publiczne” nigdy nie moga sie mieszac), uzyj drugiego agenta + bindingow. Zobacz Routing wieloagentowy.
Przyklad (DM na hoscie, grupy w sandboxie + narzedzia tylko do wiadomosci):
{
agents: {
defaults: {
sandbox: {
mode: "non-main", // grupy/kanaly sa non-main -> sandboxowane
scope: "session", // najsilniejsza izolacja (jeden kontener na grupe/kanal)
workspaceAccess: "none",
},
},
},
tools: {
sandbox: {
tools: {
// Jesli allow jest niepuste, wszystko inne jest blokowane (deny nadal wygrywa).
allow: ["group:messaging", "group:sessions"],
deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"],
},
},
},
}
Chcesz “grupy moga widziec tylko folder X” zamiast “brak dostepu do hosta”? Zachowaj workspaceAccess: "none" i zamontuj tylko dozwolone sciezki w sandboxie:
{
agents: {
defaults: {
sandbox: {
mode: "non-main",
scope: "session",
workspaceAccess: "none",
docker: {
binds: [
// hostPath:containerPath:mode
"/home/user/FriendsShared:/data:ro",
],
},
},
},
},
}
Powiazane:
- Klucze konfiguracji i wartosci domyslne: Konfiguracja Gateway
- Debugowanie dlaczego narzedzie jest zablokowane: Sandbox vs polityka narzedziowa vs elevated
- Szczegoly bind mounts: Sandboxing
Etykiety wyswietlania
- Etykiety UI uzywaja
displayNamegdy dostepne, formatowane jako<channel>:<token>. #roomjest zarezerwowane dla pokoi/kanalow; czaty grupowe uzywajag-<slug>(male litery, spacje ->-, zachowaj#@+._-).
Polityka grupowa
Kontroluj jak wiadomosci grupowe/pokojowe sa obslugiwane per kanal:
{
channels: {
whatsapp: {
groupPolicy: "disabled", // "open" | "disabled" | "allowlist"
groupAllowFrom: ["+15551234567"],
},
telegram: {
groupPolicy: "disabled",
groupAllowFrom: ["123456789"], // numeryczne ID uzytkownika Telegram (kreator moze rozwiazac @username)
},
signal: {
groupPolicy: "disabled",
groupAllowFrom: ["+15551234567"],
},
imessage: {
groupPolicy: "disabled",
groupAllowFrom: ["chat_id:123"],
},
msteams: {
groupPolicy: "disabled",
groupAllowFrom: ["[email protected]"],
},
discord: {
groupPolicy: "allowlist",
guilds: {
GUILD_ID: { channels: { help: { allow: true } } },
},
},
slack: {
groupPolicy: "allowlist",
channels: { "#general": { allow: true } },
},
matrix: {
groupPolicy: "allowlist",
groupAllowFrom: ["@owner:example.org"],
groups: {
"!roomId:example.org": { allow: true },
"#alias:example.org": { allow: true },
},
},
},
}
| Polityka | Zachowanie |
|---|---|
"open" | Grupy omijaja listy dozwolonych; bramkowanie wzmiankami nadal obowiazuje. |
"disabled" | Blokuj calkowicie wszystkie wiadomosci grupowe. |
"allowlist" | Dozwol tylko grupy/pokoje pasujace do skonfigurowanej listy dozwolonych. |
Uwagi:
groupPolicyjest oddzielone od bramkowania wzmiankami (ktore wymaga @wzmianek).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: uzyj
groupAllowFrom(zastepczym: jawneallowFrom). - Zatwierdzenia parowania DM (wpisy
*-allowFromw magazynie) dotycza tylko dostepu DM; autoryzacja nadawcow grupowych pozostaje jawna w listach dozwolonych grup. - Discord: lista dozwolonych uzywa
channels.discord.guilds.<id>.channels. - Slack: lista dozwolonych uzywa
channels.slack.channels. - Matrix: lista dozwolonych uzywa
channels.matrix.groups(ID pokoi, aliasy lub nazwy). Uzyjchannels.matrix.groupAllowFromaby ograniczyc nadawcow; listy dozwolonychusersper pokoj sa rowniez obslugiwane. - Grupowe DM sa kontrolowane oddzielnie (
channels.discord.dm.*,channels.slack.dm.*). - Lista dozwolonych Telegram moze dopasowywac ID uzytkownikow (
"123456789","telegram:123456789","tg:123456789") lub nazwy uzytkownikow ("@alice"lub"alice"); prefiksy nie rozrozniaja wielkosci liter. - Domyslna to
groupPolicy: "allowlist"; jesli twoja lista dozwolonych grup jest pusta, wiadomosci grupowe sa blokowane. - Bezpieczenstwo runtime: gdy blok dostawcy calkowicie brakuje (
channels.<provider>nieobecne), polityka grupowa stosuje zamkniety tryb zastepczym (zwykleallowlist) zamiast dziedziczycchannels.defaults.groupPolicy.
Szybki model mentalny (kolejnosc oceny wiadomosci grupowych):
groupPolicy(open/disabled/allowlist)- listy dozwolonych grup (
*.groups,*.groupAllowFrom, lista dozwolonych specyficzna dla kanalu) - bramkowanie wzmiankami (
requireMention,/activation)
Bramkowanie wzmiankami (domyslne)
Wiadomosci grupowe wymagaja wzmianki, chyba ze nadpisane per grupe. Domyslne znajduja sie per podsystem pod *.groups."*".
Odpowiedz na wiadomosc bota liczy sie jako niejawna wzmianka (gdy kanal obsluguje metadane odpowiedzi). Dotyczy to Telegram, WhatsApp, Slack, Discord i Microsoft Teams.
{
channels: {
whatsapp: {
groups: {
"*": { requireMention: true },
"[email protected]": { requireMention: false },
},
},
telegram: {
groups: {
"*": { requireMention: true },
"123456789": { requireMention: false },
},
},
imessage: {
groups: {
"*": { requireMention: true },
"123": { requireMention: false },
},
},
},
agents: {
list: [
{
id: "main",
groupChat: {
mentionPatterns: ["@openclaw", "openclaw", "\\+15555550123"],
historyLimit: 50,
},
},
],
},
}
Uwagi:
mentionPatternsto wyrazenia regularne niewrazliwe na wielkosc liter.- Platformy dostarczajace jawne wzmianki nadal przechodza; wzorce sa zastepczym.
- Nadpisanie per agenta:
agents.list[].groupChat.mentionPatterns(przydatne gdy wielu agentow wspoldzieli grupe). - Bramkowanie wzmiankami jest egzekwowane tylko gdy wykrywanie wzmianek jest mozliwe (natywne wzmianki lub
mentionPatternssa skonfigurowane). - Domyslne Discord znajduja sie w
channels.discord.guilds."*"(nadpisywalne per guild/kanal). - Kontekst historii grupy jest opakowywany jednolicie miedzy kanalami i obejmuje tylko oczekujace wiadomosci (pominiete z powodu bramkowania wzmiankami); uzyj
messages.groupChat.historyLimitdla globalnej wartosci domyslnej ichannels.<channel>.historyLimit(lubchannels.<channel>.accounts.*.historyLimit) dla nadpisan. Ustaw0aby wylaczyc.
Ograniczenia narzedziowe grup/kanalow (opcjonalne)
Niektore konfiguracje kanalow obsluguja ograniczanie dostepnych narzedzi wewnatrz konkretnej grupy/pokoju/kanalu.
tools: allow/deny narzedzi dla calej grupy.toolsBySender: nadpisania per nadawca wewnatrz grupy. Uzyj jawnych prefiksow kluczy:id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>i wildcard"*". Starsze klucze bez prefiksu sa nadal akceptowane i dopasowywane tylko jakoid:.
Kolejnosc rozwiazywania (najbardzej specyficzne wygrywa):
- dopasowanie
toolsBySendergrupy/kanalu toolsgrupy/kanalu- dopasowanie domyslnego (
"*")toolsBySender - domyslne (
"*")tools
Przyklad (Telegram):
{
channels: {
telegram: {
groups: {
"*": { tools: { deny: ["exec"] } },
"-1001234567890": {
tools: { deny: ["exec", "read", "write"] },
toolsBySender: {
"id:123456789": { alsoAllow: ["exec"] },
},
},
},
},
},
}
Uwagi:
- Ograniczenia narzedziowe grup/kanalow sa stosowane dodatkowo do globalnej/agentowej polityki narzedziowej (deny nadal wygrywa).
- Niektore kanaly uzywaja innego zagniezdenia dla pokoi/kanalow (np. Discord
guilds.*.channels.*, Slackchannels.*, MS Teamsteams.*.channels.*).
Listy dozwolonych grup
Gdy channels.whatsapp.groups, channels.telegram.groups lub channels.imessage.groups jest skonfigurowane, klucze dzialaja jako lista dozwolonych grup. Uzyj "*" aby zezwolic na wszystkie grupy, nadal ustawiajac domyslne zachowanie wzmianek.
Czeste intencje (kopiuj/wklej):
- Wylacz wszystkie odpowiedzi grupowe
{
channels: { whatsapp: { groupPolicy: "disabled" } },
}
- Zezwol tylko na konkretne grupy (WhatsApp)
{
channels: {
whatsapp: {
groups: {
"[email protected]": { requireMention: true },
"[email protected]": { requireMention: false },
},
},
},
}
- Zezwol na wszystkie grupy, ale wymagaj wzmianki (jawnie)
{
channels: {
whatsapp: {
groups: { "*": { requireMention: true } },
},
},
}
- Tylko wlasciciel moze wyzwalac w grupach (WhatsApp)
{
channels: {
whatsapp: {
groupPolicy: "allowlist",
groupAllowFrom: ["+15551234567"],
groups: { "*": { requireMention: true } },
},
},
}
Aktywacja (tylko wlasciciel)
Wlasciciele grup moga przelaczac aktywacje per grupe:
/activation mention/activation always
Wlasciciel jest okreslany przez channels.whatsapp.allowFrom (lub wlasny E.164 bota gdy nie ustawiony). Wyslij polecenie jako samodzielna wiadomosc. Inne platformy obecnie ignoruja /activation.
Pola kontekstu
Payloady przychodzace grup ustawiaja:
ChatType=groupGroupSubject(jesli znany)GroupMembers(jesli znani)WasMentioned(wynik bramkowania wzmiankami)- Tematy forum Telegram rowniez zawieraja
MessageThreadIdiIsForum.
Prompt systemowy agenta zawiera wprowadzenie grupowe na pierwszym kroku nowej sesji grupowej. Przypomina modelowi, aby odpowiadac jak czlowiek, unikac tabel Markdown i unikac wpisywania dosladnych sekwencji \n.
Specyfika iMessage
- Preferuj
chat_id:<id>przy routingu lub listach dozwolonych. - Lista czatow:
imsg chats --limit 20. - Odpowiedzi grupowe zawsze wracaja do tego samego
chat_id.
Specyfika WhatsApp
Zobacz Wiadomosci grupowe dla zachowan specyficznych dla WhatsApp (wstrzykiwanie historii, szczegoly obslugi wzmianek).