Gruppen
OpenClaw behandelt Gruppenchats über alle Oberflächen hinweg konsistent: Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo.Einführung für Einsteiger (2 Minuten)
OpenClaw „lebt“ auf Ihren eigenen Messaging-Konten. Es gibt keinen separaten WhatsApp-Bot-Benutzer. Wenn Sie in einer Gruppe sind, kann OpenClaw diese Gruppe sehen und dort antworten. Standardverhalten:- Gruppen sind eingeschränkt (
groupPolicy: "allowlist"). - Antworten erfordern eine Erwähnung, sofern Sie Mention-Gating nicht ausdrücklich deaktivieren.
Kurz gesagtSchneller Ablauf (was bei einer Gruppennachricht passiert):
- DM-Zugriff wird über
*.allowFromgesteuert.- Gruppenzugriff wird über
*.groupPolicy+ Allowlists (*.groups,*.groupAllowFrom) gesteuert.- Auslösen von Antworten wird über Mention-Gating (
requireMention,/activation) gesteuert.
Kontextsichtbarkeit und Allowlists
An der Sicherheit von Gruppen sind zwei verschiedene Steuerungen beteiligt:- Trigger-Autorisierung: Wer den Agenten auslösen kann (
groupPolicy,groups,groupAllowFrom, kanalspezifische Allowlists). - Kontextsichtbarkeit: Welcher ergänzende Kontext in das Modell eingespeist wird (Antworttext, Zitate, Thread-Verlauf, weitergeleitete Metadaten).
- Einige Kanäle wenden bereits senderbasierte Filterung für ergänzenden Kontext in bestimmten Pfaden an (zum Beispiel Slack-Thread-Seeding, Matrix-Antwort-/Thread-Lookups).
- Andere Kanäle reichen Zitat-/Antwort-/Weiterleitungskontext weiterhin so weiter, wie er empfangen wurde.
contextVisibility: "all"(Standard) behält das aktuelle Verhalten bei, wie empfangen.contextVisibility: "allowlist"filtert ergänzenden Kontext auf Sender in der Allowlist.contextVisibility: "allowlist_quote"istallowlistplus eine explizite Ausnahme für Zitat/Antwort.
| Ziel | Was festgelegt werden muss |
|---|---|
| Alle Gruppen erlauben, aber nur auf @mentions antworten | groups: { "*": { requireMention: true } } |
| Alle Gruppenantworten deaktivieren | groupPolicy: "disabled" |
| Nur bestimmte Gruppen | groups: { "<group-id>": { ... } } (kein "*"-Schlüssel) |
| Nur Sie können in Gruppen auslösen | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
Sitzungsschlüssel
- Gruppensitzungen verwenden Sitzungsschlüssel im Format
agent:<agentId>:<channel>:group:<id>(Räume/Kanäle verwendenagent:<agentId>:<channel>:channel:<id>). - Telegram-Forenthemen fügen
:topic:<threadId>an die Gruppen-ID an, sodass jedes Thema seine eigene Sitzung hat. - Direktchats verwenden die Hauptsitzung (oder pro Sender, falls konfiguriert).
- Heartbeats werden für Gruppensitzungen übersprungen.
Muster: persönliche DMs + öffentliche Gruppen (einzelner Agent)
Ja — das funktioniert gut, wenn Ihr „persönlicher“ Datenverkehr DMs und Ihr „öffentlicher“ Datenverkehr Gruppen sind. Warum: Im Einzelagentenmodus landen DMs typischerweise im Sitzungsschlüssel main (agent:main:main), während Gruppen immer Nicht-Main-Sitzungsschlüssel verwenden (agent:main:<channel>:group:<id>). Wenn Sie Sandboxing mit mode: "non-main" aktivieren, laufen diese Gruppensitzungen in Docker, während Ihre Haupt-DM-Sitzung auf dem Host bleibt.
Dadurch erhalten Sie ein Agent-„Gehirn“ (gemeinsamer Workspace + gemeinsamer Speicher), aber zwei Ausführungsmodi:
- DMs: volle Tools (Host)
- Gruppen: Sandbox + eingeschränkte Tools (Docker)
Wenn Sie wirklich getrennte Workspaces/Personas benötigen („persönlich“ und „öffentlich“ dürfen sich niemals vermischen), verwenden Sie einen zweiten Agenten + Bindings. Siehe Multi-Agent-Routing.Beispiel (DMs auf dem Host, Gruppen in der Sandbox + nur Messaging-Tools):
workspaceAccess: "none" bei und mounten Sie nur Pfade aus der Allowlist in die Sandbox:
- Konfigurationsschlüssel und Standardwerte: Gateway-Konfiguration
- Debugging, warum ein Tool blockiert ist: Sandbox vs Tool Policy vs Elevated
- Details zu Bind-Mounts: Sandboxing
Anzeigenamen
- UI-Beschriftungen verwenden
displayName, wenn verfügbar, formatiert als<channel>:<token>. #roomist für Räume/Kanäle reserviert; Gruppenchats verwendeng-<slug>(Kleinbuchstaben, Leerzeichen ->-,#@+._-beibehalten).
Gruppenrichtlinie
Steuern Sie pro Kanal, wie Gruppen-/Raumnachrichten behandelt werden:| Richtlinie | Verhalten |
|---|---|
"open" | Gruppen umgehen Allowlists; Mention-Gating gilt weiterhin. |
"disabled" | Alle Gruppennachrichten vollständig blockieren. |
"allowlist" | Nur Gruppen/Räume erlauben, die der konfigurierten Allowlist entsprechen. |
groupPolicyist getrennt von Mention-Gating (das @mentions erfordert).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: verwenden
groupAllowFrom(Fallback: explizitesallowFrom). - DM-Pairing-Freigaben (Store-Einträge
*-allowFrom) gelten nur für DM-Zugriff; Gruppen-Senderautorisierung bleibt explizit auf Gruppen-Allowlists beschränkt. - Discord: Die Allowlist verwendet
channels.discord.guilds.<id>.channels. - Slack: Die Allowlist verwendet
channels.slack.channels. - Matrix: Die Allowlist verwendet
channels.matrix.groups. Bevorzugen Sie Raum-IDs oder Aliasse; die Namensauflösung beigetretener Räume erfolgt nach bestem Bemühen, und nicht aufgelöste Namen werden zur Laufzeit ignoriert. Verwenden Siechannels.matrix.groupAllowFrom, um Sender einzuschränken; Allowlists pro Raum überuserswerden ebenfalls unterstützt. - Gruppen-DMs werden separat gesteuert (
channels.discord.dm.*,channels.slack.dm.*). - Die Telegram-Allowlist kann Benutzer-IDs (
"123456789","telegram:123456789","tg:123456789") oder Benutzernamen ("@alice"oder"alice") abgleichen; Präfixe unterscheiden nicht zwischen Groß- und Kleinschreibung. - Standard ist
groupPolicy: "allowlist"; wenn Ihre Gruppen-Allowlist leer ist, werden Gruppennachrichten blockiert. - Laufzeitsicherheit: Wenn ein Provider-Block vollständig fehlt (
channels.<provider>nicht vorhanden), fällt die Gruppenrichtlinie auf einen Fail-Closed-Modus zurück (typischerweiseallowlist), stattchannels.defaults.groupPolicyzu übernehmen.
groupPolicy(open/disabled/allowlist)- Gruppen-Allowlists (
*.groups,*.groupAllowFrom, kanalspezifische Allowlist) - Mention-Gating (
requireMention,/activation)
Mention-Gating (Standard)
Gruppennachrichten erfordern eine Erwähnung, sofern dies nicht pro Gruppe überschrieben wird. Standardwerte befinden sich pro Subsystem unter*.groups."*".
Auf eine Bot-Nachricht zu antworten zählt als implizite Erwähnung (wenn der Kanal Antwort-Metadaten unterstützt). Das gilt für Telegram, WhatsApp, Slack, Discord und Microsoft Teams.
mentionPatternssind sichere Regex-Muster ohne Beachtung der Groß-/Kleinschreibung; ungültige Muster und unsichere verschachtelte Wiederholungsformen werden ignoriert.- Oberflächen, die explizite Erwähnungen bereitstellen, werden weiterhin durchgelassen; Muster sind ein Fallback.
- Überschreibung pro Agent:
agents.list[].groupChat.mentionPatterns(nützlich, wenn mehrere Agenten eine Gruppe teilen). - Mention-Gating wird nur erzwungen, wenn Erwähnungserkennung möglich ist (native Erwähnungen oder konfigurierte
mentionPatterns). - Discord-Standardwerte befinden sich unter
channels.discord.guilds."*"(pro Guild/Kanal überschreibbar). - Der Verlaufskontext für Gruppen wird kanalübergreifend einheitlich umhüllt und ist nur für ausstehende Nachrichten (Nachrichten, die wegen Mention-Gating übersprungen wurden); verwenden Sie
messages.groupChat.historyLimitfür den globalen Standard undchannels.<channel>.historyLimit(oderchannels.<channel>.accounts.*.historyLimit) für Überschreibungen. Setzen Sie0, um dies zu deaktivieren.
Tool-Einschränkungen für Gruppen/Kanäle (optional)
Einige Kanalkonfigurationen unterstützen das Einschränken, welche Tools innerhalb einer bestimmten Gruppe/eines bestimmten Raums/Kanals verfügbar sind.tools: Tools für die gesamte Gruppe erlauben/verbieten.toolsBySender: Überschreibungen pro Sender innerhalb der Gruppe. Verwenden Sie explizite Schlüsselpräfixe:id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>und den Platzhalter"*". Ältere Schlüssel ohne Präfix werden weiterhin akzeptiert und nur alsid:abgeglichen.
- Treffer in
toolsBySenderder Gruppe/des Kanals toolsder Gruppe/des Kanals- Treffer in
toolsBySenderdes Standards ("*") toolsdes Standards ("*")
- Tool-Einschränkungen für Gruppen/Kanäle werden zusätzlich zur globalen/agentenspezifischen Tool-Richtlinie angewendet (deny gewinnt weiterhin).
- Einige Kanäle verwenden unterschiedliche Verschachtelungen für Räume/Kanäle (z. B. Discord
guilds.*.channels.*, Slackchannels.*, Microsoft Teamsteams.*.channels.*).
Gruppen-Allowlists
Wennchannels.whatsapp.groups, channels.telegram.groups oder channels.imessage.groups konfiguriert ist, fungieren die Schlüssel als Gruppen-Allowlist. Verwenden Sie "*", um alle Gruppen zu erlauben und dennoch das Standardverhalten für Erwähnungen festzulegen.
Häufiges Missverständnis: DM-Pairing-Freigabe ist nicht dasselbe wie Gruppenautorisierung.
Bei Kanälen, die DM-Pairing unterstützen, schaltet der Pairing-Store nur DMs frei. Gruppenbefehle erfordern weiterhin eine explizite Senderautorisierung für Gruppen aus Konfigurations-Allowlists wie groupAllowFrom oder dem dokumentierten Konfigurations-Fallback für diesen Kanal.
Häufige Absichten (kopieren/einfügen):
- Alle Gruppenantworten deaktivieren
- Nur bestimmte Gruppen erlauben (WhatsApp)
- Alle Gruppen erlauben, aber Erwähnung verlangen (explizit)
- Nur der Eigentümer kann in Gruppen auslösen (WhatsApp)
Aktivierung (nur Eigentümer)
Gruppeneigentümer können die Aktivierung pro Gruppe umschalten:/activation mention/activation always
channels.whatsapp.allowFrom bestimmt (oder durch die eigene E.164 des Bots, falls nicht gesetzt). Senden Sie den Befehl als eigenständige Nachricht. Andere Oberflächen ignorieren /activation derzeit.
Kontextfelder
Eingehende Payloads aus Gruppen setzen:ChatType=groupGroupSubject(falls bekannt)GroupMembers(falls bekannt)WasMentioned(Ergebnis des Mention-Gating)- Telegram-Forenthemen enthalten außerdem
MessageThreadIdundIsForum.
- BlueBubbles kann unbenannte Teilnehmer macOS-Gruppen optional aus der lokalen Kontakte-Datenbank anreichern, bevor
GroupMembersgesetzt wird. Dies ist standardmäßig deaktiviert und läuft nur, nachdem normales Gruppen-Gating erfolgreich war.
\n-Sequenzen zu tippen.
iMessage-spezifisch
- Verwenden Sie beim Routing oder in Allowlists bevorzugt
chat_id:<id>. - Chats auflisten:
imsg chats --limit 20. - Gruppenantworten gehen immer an dieselbe
chat_idzurück.