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 Ty 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 wymuszanie wzmianek.
TL;DRSzybki przepływ (co dzieje się z wiadomością grupową):
- Dostęp do DM jest kontrolowany przez
*.allowFrom.- Dostęp do grup jest kontrolowany przez
*.groupPolicy+ listy dozwolonych (*.groups,*.groupAllowFrom).- Wyzwalanie odpowiedzi jest kontrolowane przez wymuszanie wzmianek (
requireMention,/activation).
Widoczność kontekstu i listy dozwolonych
W bezpieczeństwie grupowym biorą udział dwa różne mechanizmy kontroli:- Autoryzacja wyzwolenia: kto może wyzwolić agenta (
groupPolicy,groups,groupAllowFrom, listy dozwolonych specyficzne dla kanału). - Widoczność kontekstu: jaki dodatkowy kontekst jest wstrzykiwany do modelu (tekst odpowiedzi, cytaty, historia wątku, metadane przekazania).
- Niektóre kanały już stosują filtrowanie kontekstu dodatkowego oparte na nadawcy 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 w odebranej postaci.
contextVisibility: "all"(domyślnie) zachowuje obecne zachowanie „tak jak odebrano”.contextVisibility: "allowlist"filtruje dodatkowy kontekst 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 wyzwalać 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ą sesji głównej (lub sesji per nadawca, jeśli tak skonfigurowano).
- Heartbeat jest pomijany dla sesji grupowych.
Wzorzec: osobiste DM + publiczne grupy (jeden agent)
Tak — to działa dobrze, jeśli Twój ruch „osobisty” to DM, a ruch „publiczny” to grupy. Dlaczego: w trybie pojedynczego agenta wiadomości DM zwykle trafiają do głównego klucza sesji (agent:main:main), podczas gdy grupy zawsze używają kluczy sesji innych niż główna (agent:main:<channel>:group:<id>). Jeśli włączysz sandboxing z mode: "non-main", te sesje grupowe będą działać w Dockerze, podczas gdy Twoja główna sesja DM pozostanie na hoście.
Daje to jeden „mózg” agenta (wspólny obszar roboczy + pamięć), ale dwa tryby wykonywania:
- DM: pełne narzędzia (host)
- Grupy: sandbox + narzędzia ograniczone do komunikacji
Jeśli potrzebujesz naprawdę oddzielnych obszarów roboczych/person („osobisty” i „publiczny” nigdy nie mogą się mieszać), użyj drugiego agenta + powiązań. Zobacz Routing wielu agentów.Przykład (DM na hoście, grupy w sandboxie + tylko narzędzia komunikacyjne):
workspaceAccess: "none" i zamontuj w sandboxie tylko ścieżki z listy dozwolonych:
- Klucze konfiguracji i wartości domyślne: Konfiguracja gateway
- Debugowanie, dlaczego narzędzie jest blokowane: Sandbox vs Tool Policy vs Elevated
- Szczegóły montowań bind: Sandboxing
Etykiety wyświetlane
- Etykiety interfejsu używają
displayName, gdy jest dostępne, w formacie<channel>:<token>. #roomjest zarezerwowane dla pokojów/kanałów; czaty grupowe używająg-<slug>(małe litery, spacje ->-, zachowaj#@+._-).
Polityka grup
Kontroluj sposób obsługi wiadomości grupowych/pokojów dla każdego kanału:| Polityka | Zachowanie |
|---|---|
"open" | Grupy omijają listy dozwolonych; wymuszanie wzmianek nadal obowiązuje. |
"disabled" | Całkowicie blokuje wszystkie wiadomości grupowe. |
"allowlist" | Zezwala tylko na grupy/pokoje pasujące do skonfigurowanej listy dozwolonych. |
groupPolicyjest oddzielne od wymuszania wzmianek (które wymaga @wzmianek).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: użyj
groupAllowFrom(awaryjnie: jawneallowFrom). - Zatwierdzenia parowania DM (wpisy
*-allowFromw magazynie) dotyczą tylko dostępu do DM; autoryzacja nadawców w grupach pozostaje jawnie kontrolowana przez grupowe listy dozwolonych. - 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 pokojów lub aliasy; wyszukiwanie nazw dołączonych pokojów działa w trybie best-effort, a nierozwiązane nazwy są ignorowane w czasie działania. Użyjchannels.matrix.groupAllowFrom, aby ograniczyć nadawców; obsługiwane są też listy dozwolonychusersper pokój. - Grupowe DM są kontrolowane oddzielnie (
channels.discord.dm.*,channels.slack.dm.*). - Lista dozwolonych Telegram może dopasowywać identyfikatory użytkowników (
"123456789","telegram:123456789","tg:123456789") albo nazwy użytkowników ("@alice"lub"alice"); prefiksy nie rozróżniają wielkości liter. - Domyślnie ustawione jest
groupPolicy: "allowlist"; jeśli grupowa lista dozwolonych jest pusta, wiadomości grupowe są blokowane. - Bezpieczeństwo w czasie działania: gdy całkowicie brakuje bloku dostawcy (
channels.<provider>nie istnieje), polityka grup przechodzi do trybu fail-closed (zwykleallowlist) zamiast dziedziczyćchannels.defaults.groupPolicy.
groupPolicy(open/disabled/allowlist)- grupowe listy dozwolonych (
*.groups,*.groupAllowFrom, lista dozwolonych specyficzna dla kanału) - wymuszanie wzmianek (
requireMention,/activation)
Wymuszanie wzmianek (domyślnie)
Wiadomości grupowe wymagają wzmianki, chyba że zostanie to zastąpione dla konkretnej grupy. Wartości domyślne znajdują się dla każdego podsystemu w*.groups."*".
Odpowiedź na wiadomość bota liczy się jako niejawna wzmianka (gdy kanał obsługuje metadane odpowiedzi). Dotyczy to Telegram, WhatsApp, Slack, Discord i Microsoft Teams.
mentionPatternsto bezpieczne wzorce regex niewrażliwe na wielkość liter; nieprawidłowe wzorce i niebezpieczne formy zagnieżdżonych powtórzeń są ignorowane.- Platformy, które dostarczają jawne wzmianki, nadal je przekazują; wzorce są rozwiązaniem awaryjnym.
- Zastąpienie per agent:
agents.list[].groupChat.mentionPatterns(przydatne, gdy wiele agentów współdzieli grupę). - Wymuszanie wzmianek jest egzekwowane tylko wtedy, gdy wykrywanie wzmianek jest możliwe (skonfigurowano natywne wzmianki lub
mentionPatterns). - Wartości domyślne Discord znajdują się w
channels.discord.guilds."*"(można je nadpisać per serwer/kanał). - Kontekst historii grupy jest opakowany jednolicie we wszystkich kanałach i obejmuje tylko oczekujące wiadomości (wiadomości pominięte z powodu wymuszania wzmianek); użyj
messages.groupChat.historyLimitdla globalnej wartości domyślnej orazchannels.<channel>.historyLimit(lubchannels.<channel>.accounts.*.historyLimit) dla nadpisań. Ustaw0, aby wyłączyć.
Ograniczenia narzędzi dla grup/kanałów (opcjonalne)
Niektóre konfiguracje kanałów obsługują ograniczanie narzędzi dostępnych wewnątrz określonej grupy/pokoju/kanału.tools: zezwala/zabrania narzędzi dla całej grupy.toolsBySender: nadpisania per nadawca 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 wyłącznie jakoid:.
- dopasowanie
toolsBySenderdla grupy/kanału toolsdla grupy/kanału- dopasowanie domyślnego (
"*")toolsBySender - domyślne (
"*")tools
- Ograniczenia narzędzi dla grup/kanałów są stosowane dodatkowo do globalnej/polityki narzędzi agenta (
denynadal wygrywa). - Niektóre kanały używają innego zagnieżdżenia dla pokojów/kanałów (np. Discord
guilds.*.channels.*, Slackchannels.*, Microsoft Teamsteams.*.channels.*).
Grupowe listy dozwolonych
Gdy skonfigurowanochannels.whatsapp.groups, channels.telegram.groups lub channels.imessage.groups, klucze działają jako grupowa lista dozwolonych. Użyj "*", aby zezwolić na wszystkie grupy, a jednocześnie ustawić domyślne zachowanie dotyczące wzmianek.
Częste nieporozumienie: zatwierdzenie parowania DM to nie to samo co autoryzacja grupy.
W kanałach obsługujących parowanie DM magazyn parowania odblokowuje tylko DM. Polecenia grupowe nadal wymagają jawnej autoryzacji nadawcy grupy z list dozwolonych w konfiguracji, takich jak groupAllowFrom lub opisane awaryjne ustawienie konfiguracji dla danego kanału.
Typowe intencje (kopiuj/wklej):
- Wyłącz wszystkie odpowiedzi grupowe
- Zezwól tylko na określone grupy (WhatsApp)
- Zezwól na wszystkie grupy, ale wymagaj wzmianki (jawnie)
- Tylko właściciel może wyzwalać w grupach (WhatsApp)
Aktywacja (tylko właściciel)
Właściciele grup mogą przełączać aktywację per grupa:/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 wymuszania wzmianki)- Tematy forum Telegram zawierają też
MessageThreadIdiIsForum.
- BlueBubbles może opcjonalnie wzbogacać nienazwanych uczestników grup macOS z lokalnej bazy kontaktów przed wypełnieniem
GroupMembers. Jest to domyślnie wyłączone i działa dopiero po przejściu zwykłych reguł kontroli grup.
\n.
Szczegóły iMessage
- Preferuj
chat_id:<id>podczas routingu lub dodawania do listy dozwolonych. - Wyświetl listę czatów:
imsg chats --limit 20. - Odpowiedzi grupowe zawsze wracają do tego samego
chat_id.