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

Przeplyw wiadomosci grupowej

Jesli chcesz…

CelCo ustawic
Zezwol na wszystkie grupy, ale odpowiadaj tylko na @wzmiankigroups: { "*": { requireMention: true } }
Wylacz wszystkie odpowiedzi grupowegroupPolicy: "disabled"
Tylko konkretne grupygroups: { "<group-id>": { ... } } (bez klucza "*")
Tylko ty mozesz wyzwalac w grupachgroupPolicy: "allowlist", groupAllowFrom: ["+1555..."]

Klucze sesji

  • Sesje grupowe uzywaja kluczy sesji agent:<agentId>:<channel>:group:<id> (pokoje/kanaly uzywaja agent:<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:

Etykiety wyswietlania

  • Etykiety UI uzywaja displayName gdy dostepne, formatowane jako <channel>:<token>.
  • #room jest zarezerwowane dla pokoi/kanalow; czaty grupowe uzywaja g-<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 },
      },
    },
  },
}
PolitykaZachowanie
"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:

  • groupPolicy jest oddzielone od bramkowania wzmiankami (ktore wymaga @wzmianek).
  • WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: uzyj groupAllowFrom (zastepczym: jawne allowFrom).
  • Zatwierdzenia parowania DM (wpisy *-allowFrom w 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). Uzyj channels.matrix.groupAllowFrom aby ograniczyc nadawcow; listy dozwolonych users per 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 (zwykle allowlist) zamiast dziedziczyc channels.defaults.groupPolicy.

Szybki model mentalny (kolejnosc oceny wiadomosci grupowych):

  1. groupPolicy (open/disabled/allowlist)
  2. listy dozwolonych grup (*.groups, *.groupAllowFrom, lista dozwolonych specyficzna dla kanalu)
  3. 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:

  • mentionPatterns to 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 mentionPatterns sa 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.historyLimit dla globalnej wartosci domyslnej i channels.<channel>.historyLimit (lub channels.<channel>.accounts.*.historyLimit) dla nadpisan. Ustaw 0 aby 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 jako id:.

Kolejnosc rozwiazywania (najbardzej specyficzne wygrywa):

  1. dopasowanie toolsBySender grupy/kanalu
  2. tools grupy/kanalu
  3. dopasowanie domyslnego ("*") toolsBySender
  4. 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.*, Slack channels.*, MS Teams teams.*.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):

  1. Wylacz wszystkie odpowiedzi grupowe
{
  channels: { whatsapp: { groupPolicy: "disabled" } },
}
  1. Zezwol tylko na konkretne grupy (WhatsApp)
{
  channels: {
    whatsapp: {
      groups: {
        "[email protected]": { requireMention: true },
        "[email protected]": { requireMention: false },
      },
    },
  },
}
  1. Zezwol na wszystkie grupy, ale wymagaj wzmianki (jawnie)
{
  channels: {
    whatsapp: {
      groups: { "*": { requireMention: true } },
    },
  },
}
  1. 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=group
  • GroupSubject (jesli znany)
  • GroupMembers (jesli znani)
  • WasMentioned (wynik bramkowania wzmiankami)
  • Tematy forum Telegram rowniez zawieraja MessageThreadId i IsForum.

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).