Grupy
OpenClaw traktuje czaty grupowe spójnie na różnych platformach: Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo.Wprowadzenie dla początkujących (2 minuty)
OpenClaw „działa” na Twoich własnych kontach komunikatorów. Nie ma osobnego użytkownika-bota WhatsApp. Jeśli jesteś w grupie, OpenClaw może widzieć tę grupę i tam odpowiadać. Domyślne zachowanie:- Grupy są ograniczone (
groupPolicy: "allowlist"). - Odpowiedzi wymagają wzmianki, chyba że jawnie wyłączysz bramkowanie wzmianek.
W skrócieSzybki przebieg (co dzieje się z wiadomością grupową):
- Dostęp do wiadomości prywatnych jest kontrolowany przez
*.allowFrom.- Dostęp do grup jest kontrolowany przez
*.groupPolicy+ listy dozwolonych (*.groups,*.groupAllowFrom).- Wyzwalanie odpowiedzi jest kontrolowane przez bramkowanie wzmianek (
requireMention,/activation).
Widoczność kontekstu i listy dozwolonych
W bezpieczeństwie grupowym biorą udział dwa różne mechanizmy:- Autoryzacja wyzwolenia: kto może wywołać agenta (
groupPolicy,groups,groupAllowFrom, listy dozwolonych specyficzne dla kanału). - Widoczność kontekstu: jaki kontekst uzupełniający jest wstrzykiwany do modelu (tekst odpowiedzi, cytaty, historia wątku, metadane przekazania).
- Niektóre kanały już stosują filtrowanie oparte na nadawcy dla kontekstu uzupełniającego w określonych ścieżkach (na przykład inicjalizacja wątków Slack, wyszukiwanie odpowiedzi/wątków Matrix).
- Inne kanały nadal przekazują kontekst cytatu/odpowiedzi/przekazania tak, jak został odebrany.
contextVisibility: "all"(domyślnie) zachowuje obecne zachowanie „jak odebrano”.contextVisibility: "allowlist"filtruje kontekst uzupełniający do nadawców z listy dozwolonych.contextVisibility: "allowlist_quote"toallowlistplus jeden jawny wyjątek dla cytatu/odpowiedzi.
| Cel | Co ustawić |
|---|---|
| Zezwolić na wszystkie grupy, ale odpowiadać tylko na @wzmianki | groups: { "*": { requireMention: true } } |
| Wyłączyć wszystkie odpowiedzi grupowe | groupPolicy: "disabled" |
| Tylko określone grupy | groups: { "<group-id>": { ... } } (bez klucza "*") |
| Tylko Ty możesz wywoływać w grupach | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
Klucze sesji
- Sesje grupowe używają kluczy sesji
agent:<agentId>:<channel>:group:<id>(pokoje/kanały używająagent:<agentId>:<channel>:channel:<id>). - Tematy forum Telegram dodają
:topic:<threadId>do identyfikatora grupy, dzięki czemu każdy temat ma własną sesję. - Czaty bezpośrednie używają głównej sesji (lub osobnej dla nadawcy, jeśli tak skonfigurowano).
- Heartbeaty są pomijane dla sesji grupowych.
Wzorzec: prywatne wiadomości + publiczne grupy (jeden agent)
Tak — to działa dobrze, jeśli Twój „prywatny” ruch to wiadomości prywatne, a „publiczny” ruch to grupy. Dlaczego: w trybie jednego agenta wiadomości prywatne zwykle trafiają do klucza sesji main (agent:main:main), podczas gdy grupy zawsze używają kluczy sesji non-main (agent:main:<channel>:group:<id>). Jeśli włączysz sandboxing z mode: "non-main", te sesje grupowe będą działać w Dockerze, a Twoja główna sesja wiadomości prywatnych pozostanie na hoście.
Daje to jeden „mózg” agenta (wspólna przestrzeń robocza + pamięć), ale dwie różne postawy wykonawcze:
- Wiadomości prywatne: pełne narzędzia (host)
- Grupy: sandbox + ograniczone narzędzia (Docker)
Jeśli potrzebujesz naprawdę oddzielnych przestrzeni roboczych/person („prywatne” i „publiczne” nigdy nie mogą się mieszać), użyj drugiego agenta + powiązań. Zobacz Multi-Agent Routing.Przykład (wiadomości prywatne na hoście, grupy w sandboxie + tylko narzędzia do komunikacji):
workspaceAccess: "none" i zamontuj do sandboxa tylko ścieżki z listy dozwolonych:
- Klucze konfiguracji i wartości domyślne: Gateway configuration
- Debugowanie, dlaczego narzędzie jest blokowane: Sandbox vs Tool Policy vs Elevated
- Szczegóły montowań bind: Sandboxing
Etykiety wyświetlania
- Etykiety UI używają
displayName, jeśli jest dostępne, w formacie<channel>:<token>. #roomjest zarezerwowane dla pokoi/kanałów; czaty grupowe używająg-<slug>(małe litery, spacje ->-, zachowaj#@+._-).
Zasada grup
Steruj sposobem obsługi wiadomości grupowych/pokojów dla każdego kanału:| Zasada | Zachowanie |
|---|---|
"open" | Grupy omijają listy dozwolonych; bramkowanie wzmianek nadal obowiązuje. |
"disabled" | Całkowicie blokuj wszystkie wiadomości grupowe. |
"allowlist" | Zezwalaj tylko na grupy/pokoje pasujące do skonfigurowanej listy dozwolonych. |
groupPolicyjest oddzielne od bramkowania wzmianek (które wymaga @wzmianek).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: używaj
groupAllowFrom(rezerwa: jawneallowFrom). - Zatwierdzenia parowania wiadomości prywatnych (wpisy w
*-allowFrom) dotyczą wyłącznie dostępu do wiadomości prywatnych; autoryzacja nadawcy grupowego pozostaje jawnie zależna od list dozwolonych grup. - Discord: lista dozwolonych używa
channels.discord.guilds.<id>.channels. - Slack: lista dozwolonych używa
channels.slack.channels. - Matrix: lista dozwolonych używa
channels.matrix.groups. Preferuj identyfikatory pokoi lub aliasy; wyszukiwanie nazw dołączonych pokoi działa na zasadzie best-effort, a nierozwiązane nazwy są ignorowane w czasie działania. Użyjchannels.matrix.groupAllowFrom, aby ograniczyć nadawców; obsługiwane są także listy dozwolonychusersdla poszczególnych pokoi. - Grupowe wiadomości prywatne są kontrolowane osobno (
channels.discord.dm.*,channels.slack.dm.*). - Lista dozwolonych Telegram może dopasowywać identyfikatory użytkowników (
"123456789","telegram:123456789","tg:123456789") lub nazwy użytkowników ("@alice"albo"alice"); prefiksy nie rozróżniają wielkości liter. - Domyślnie jest
groupPolicy: "allowlist"; jeśli Twoja lista dozwolonych grup jest pusta, wiadomości grupowe są blokowane. - Bezpieczeństwo w czasie działania: gdy cały blok dostawcy nie istnieje (
channels.<provider>nieobecne), zasada grup wraca do trybu fail-closed (zwykleallowlist) zamiast dziedziczyćchannels.defaults.groupPolicy.
groupPolicy(open/disabled/allowlist)- listy dozwolonych grup (
*.groups,*.groupAllowFrom, lista dozwolonych specyficzna dla kanału) - bramkowanie wzmianek (
requireMention,/activation)
Bramkowanie wzmianek (domyślnie)
Wiadomości grupowe wymagają wzmianki, chyba że zostanie to nadpisane dla danej grupy. Wartości domyślne znajdują się dla każdego podsystemu pod*.groups."*".
Odpowiedź na wiadomość bota liczy się jako niejawna wzmianka, gdy kanał
obsługuje metadane odpowiedzi. Cytowanie wiadomości bota także może liczyć się jako niejawna
wzmianka na kanałach, które udostępniają metadane cytatu. Obecnie wbudowane przypadki obejmują
Telegram, WhatsApp, Slack, Discord, Microsoft Teams i ZaloUser.
mentionPatternsto bezpieczne wzorce regex bez rozróżniania wielkości liter; nieprawidłowe wzorce i niebezpieczne formy zagnieżdżonych powtórzeń są ignorowane.- Platformy, które udostępniają jawne wzmianki, nadal je przekazują; wzorce są mechanizmem zapasowym.
- Nadpisanie dla agenta:
agents.list[].groupChat.mentionPatterns(przydatne, gdy wielu agentów współdzieli grupę). - Bramkowanie wzmianek jest egzekwowane tylko wtedy, gdy wykrywanie wzmianek jest możliwe (natywne wzmianki lub skonfigurowane
mentionPatterns). - Domyślne ustawienia Discord znajdują się w
channels.discord.guilds."*"(można je nadpisać dla poszczególnych serwerów/kanałów). - Kontekst historii grupy jest opakowany jednolicie we wszystkich kanałach i jest tylko oczekujący (wiadomości pominięte z powodu bramkowania wzmianek); użyj
messages.groupChat.historyLimitjako wartości domyślnej globalnej orazchannels.<channel>.historyLimit(lubchannels.<channel>.accounts.*.historyLimit) dla nadpisań. Ustaw0, aby wyłączyć.
Ograniczenia narzędzi dla grup/kanałów (opcjonalnie)
Niektóre konfiguracje kanałów obsługują ograniczanie, które narzędzia są dostępne wewnątrz określonej grupy/pokoju/kanału.tools: zezwalaj/blokuj narzędzia dla całej grupy.toolsBySender: nadpisania dla poszczególnych nadawców w obrębie grupy. Używaj jawnych prefiksów kluczy:id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>oraz wildcard"*". Starsze klucze bez prefiksu są nadal akceptowane i dopasowywane tylko jakoid:.
- dopasowanie
toolsBySendergrupy/kanału toolsgrupy/kanału- domyślne dopasowanie (
"*")toolsBySender - domyślne
tools("*")
- Ograniczenia narzędzi dla grup/kanałów są stosowane dodatkowo do globalnej/agentowej polityki narzędzi (blokada nadal wygrywa).
- Niektóre kanały używają innego zagnieżdżenia dla pokoi/kanałów (np. Discord
guilds.*.channels.*, Slackchannels.*, Microsoft Teamsteams.*.channels.*).
Listy dozwolonych grup
Gdy skonfigurowanochannels.whatsapp.groups, channels.telegram.groups lub channels.imessage.groups, klucze działają jako lista dozwolonych grup. Użyj "*", aby zezwolić na wszystkie grupy, jednocześnie ustawiając domyślne zachowanie dla wzmianek.
Częste nieporozumienie: zatwierdzenie parowania wiadomości prywatnych to nie to samo co autoryzacja grupy.
W kanałach obsługujących parowanie wiadomości prywatnych magazyn parowań odblokowuje tylko wiadomości prywatne. Polecenia grupowe nadal wymagają jawnej autoryzacji nadawcy grupowego z list dozwolonych w konfiguracji, takich jak groupAllowFrom, lub z udokumentowanego mechanizmu rezerwowego dla danego kanału.
Typowe intencje (kopiuj/wklej):
- Wyłącz wszystkie odpowiedzi grupowe
- Zezwalaj tylko na określone grupy (WhatsApp)
- Zezwalaj na wszystkie grupy, ale wymagaj wzmianki (jawnie)
- Tylko właściciel może wywoływać w grupach (WhatsApp)
Aktywacja (tylko właściciel)
Właściciele grup mogą przełączać aktywację dla każdej grupy:/activation mention/activation always
channels.whatsapp.allowFrom (lub własny E.164 bota, jeśli nie ustawiono). Wyślij polecenie jako samodzielną wiadomość. Inne platformy obecnie ignorują /activation.
Pola kontekstu
Przychodzące ładunki grupowe ustawiają:ChatType=groupGroupSubject(jeśli znane)GroupMembers(jeśli znane)WasMentioned(wynik bramkowania wzmianek)- Tematy forum Telegram zawierają także
MessageThreadIdiIsForum.
- BlueBubbles może opcjonalnie wzbogacać nienazwanych uczestników grup macOS z lokalnej bazy Contacts przed wypełnieniem
GroupMembers. Jest to domyślnie wyłączone i uruchamia się dopiero po przejściu standardowego bramkowania grup.
\n.
Szczegóły iMessage
- Przy routingu lub dodawaniu do listy dozwolonych preferuj
chat_id:<id>. - Wyświetl listę czatów:
imsg chats --limit 20. - Odpowiedzi grupowe zawsze wracają do tego samego
chat_id.