Gruppen
OpenClaw behandelt Gruppenchats plattformübergreifend konsistent: Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo.Einführung für Einsteiger (2 Minuten)
OpenClaw „lebt“ auf deinen eigenen Messaging-Konten. Es gibt keinen separaten WhatsApp-Bot-Benutzer. Wenn du in einer Gruppe bist, kann OpenClaw diese Gruppe sehen und dort antworten. Standardverhalten:- Gruppen sind eingeschränkt (
groupPolicy: "allowlist"). - Antworten erfordern eine Erwähnung, es sei denn, du deaktivierst die Erwähnungs-Gating-Regeln ausdrücklich.
KurzfassungSchneller Ablauf (was mit einer Gruppennachricht passiert):
- DM-Zugriff wird durch
*.allowFromgesteuert.- Gruppenzugriff wird durch
*.groupPolicy+ Allowlists (*.groups,*.groupAllowFrom) gesteuert.- Antwortauslösung wird durch Erwähnungs-Gating (
requireMention,/activation) gesteuert.
Kontextsichtigkeit und Allowlists
Bei der Sicherheit von Gruppen greifen zwei verschiedene Steuerungen:- Trigger-Autorisierung: wer den Agenten auslösen kann (
groupPolicy,groups,groupAllowFrom, kanalspezifische Allowlists). - Kontextsichtigkeit: welcher ergänzende Kontext in das Modell eingespeist wird (Antworttext, Zitate, Thread-Verlauf, Weiterleitungs-Metadaten).
- Einige Kanäle wenden in bestimmten Pfaden bereits senderbasierte Filterung für ergänzenden Kontext an (zum Beispiel Slack-Thread-Seeding, Matrix-Antwort-/Thread-Lookups).
- Andere Kanäle reichen Zitat-/Antwort-/Weiterleitungs-Kontext weiterhin unverändert so durch, wie er empfangen wurde.
contextVisibility: "all"(Standard) behält das aktuelle Verhalten „wie empfangen“ bei.contextVisibility: "allowlist"filtert ergänzenden Kontext auf Sender auf der Allowlist.contextVisibility: "allowlist_quote"istallowlistplus eine explizite Zitat-/Antwort-Ausnahme.
| Ziel | Was du setzen musst |
|---|---|
| Alle Gruppen erlauben, aber nur auf @Erwähnungen antworten | groups: { "*": { requireMention: true } } |
| Alle Gruppenantworten deaktivieren | groupPolicy: "disabled" |
| Nur bestimmte Gruppen | groups: { "<group-id>": { ... } } (kein "*"-Schlüssel) |
| Nur du kannst 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-Forum-Themen fügen
:topic:<threadId>zur Gruppen-ID hinzu, sodass jedes Thema eine eigene Sitzung hat. - Direktchats verwenden die Hauptsitzung (oder bei entsprechender Konfiguration pro Absender eine eigene).
- Heartbeats werden für Gruppensitzungen übersprungen.
Muster: persönliche DMs + öffentliche Gruppen (einzelner Agent)
Ja — das funktioniert gut, wenn dein „persönlicher“ Verkehr DMs sind und dein „öffentlicher“ Verkehr Gruppen. Warum: Im Einzelagentenmodus landen DMs typischerweise im Haupt-Sitzungsschlüssel (agent:main:main), während Gruppen immer Nicht-Haupt-Sitzungsschlüssel verwenden (agent:main:<channel>:group:<id>). Wenn du Sandboxing mit mode: "non-main" aktivierst, laufen diese Gruppensitzungen im konfigurierten Sandbox-Backend, während deine Haupt-DM-Sitzung auf dem Host bleibt. Docker ist das Standard-Backend, wenn du keines auswählst.
Das gibt dir ein Agent-„Gehirn“ (gemeinsamer Workspace + gemeinsamer Speicher), aber zwei Ausführungsmodi:
- DMs: volle Tools (Host)
- Gruppen: Sandbox + eingeschränkte Tools
Wenn du wirklich getrennte Workspaces/Personas brauchst („persönlich“ und „öffentlich“ dürfen sich nie vermischen), verwende einen zweiten Agenten + Bindings. Siehe Multi-Agent-Routing.Beispiel (DMs auf dem Host, Gruppen in der Sandbox + nur Messaging-Tools):
workspaceAccess: "none" bei und mounte nur Pfade auf 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
Anzeigebezeichnungen
- UI-Bezeichnungen verwenden
displayName, wenn verfügbar, formatiert als<channel>:<token>. #roomist für Räume/Kanäle reserviert; Gruppenchats verwendeng-<slug>(Kleinbuchstaben, Leerzeichen ->-,#@+._-beibehalten).
Gruppenrichtlinie
Steuere, wie Gruppen-/Raumnachrichten pro Kanal verarbeitet werden:| Richtlinie | Verhalten |
|---|---|
"open" | Gruppen umgehen Allowlists; Erwähnungs-Gating gilt weiterhin. |
"disabled" | Alle Gruppennachrichten vollständig blockieren. |
"allowlist" | Nur Gruppen/Räume zulassen, die zur konfigurierten Allowlist passen. |
groupPolicyist von Erwähnungs-Gating getrennt (das @Erwähnungen erfordert).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: verwende
groupAllowFrom(Fallback: explizitesallowFrom). - DM-Pairing-Freigaben (
*-allowFrom-Store-Einträge) gelten nur für DM-Zugriff; die Autorisierung von Gruppensendern bleibt explizit an Gruppen-Allowslisten gebunden. - Discord: Die Allowlist verwendet
channels.discord.guilds.<id>.channels. - Slack: Die Allowlist verwendet
channels.slack.channels. - Matrix: Die Allowlist verwendet
channels.matrix.groups. Bevorzuge Raum-IDs oder Aliasse; die Namensauflösung beigetretener Räume erfolgt best effort, und nicht aufgelöste Namen werden zur Laufzeit ignoriert. Verwendechannels.matrix.groupAllowFrom, um Absender einzuschränken; pro Raum werden auchusers-Allowlists 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 sind nicht case-sensitiv. - Standard ist
groupPolicy: "allowlist"; wenn deine 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 erben.
groupPolicy(open/disabled/allowlist)- Gruppen-Allowlists (
*.groups,*.groupAllowFrom, kanalspezifische Allowlist) - Erwähnungs-Gating (
requireMention,/activation)
Erwähnungs-Gating (Standard)
Gruppennachrichten erfordern eine Erwähnung, sofern dies nicht pro Gruppe überschrieben wird. Standardwerte liegen pro Subsystem unter*.groups."*".
Das Antworten auf eine Bot-Nachricht zählt als implizite Erwähnung, wenn der Kanal Antwort-Metadaten unterstützt. Das Zitieren einer Bot-Nachricht kann auf Kanälen, die Zitat-Metadaten bereitstellen, ebenfalls als implizite Erwähnung zählen. Zu den aktuell eingebauten Fällen gehören Telegram, WhatsApp, Slack, Discord, Microsoft Teams und ZaloUser.
mentionPatternssind nicht case-sensitive sichere Regex-Muster; ungültige Muster und unsichere Formen mit verschachtelten Wiederholungen werden ignoriert.- Oberflächen, die explizite Erwähnungen bereitstellen, funktionieren weiterhin; Muster sind ein Fallback.
- Überschreibung pro Agent:
agents.list[].groupChat.mentionPatterns(nützlich, wenn mehrere Agenten sich eine Gruppe teilen). - Erwähnungs-Gating wird nur erzwungen, wenn Erwähnungserkennung möglich ist (native Erwähnungen oder konfigurierte
mentionPatterns). - Discord-Standardwerte liegen unter
channels.discord.guilds."*"(pro Guild/Kanal überschreibbar). - Der Gruppenverlaufs-Kontext wird kanalübergreifend einheitlich umschlossen und ist nur ausstehend (Nachrichten, die wegen Erwähnungs-Gating übersprungen wurden); verwende
messages.groupChat.historyLimitfür den globalen Standard undchannels.<channel>.historyLimit(oderchannels.<channel>.accounts.*.historyLimit) für Überschreibungen. Setze0, um ihn zu deaktivieren.
Tool-Einschränkungen für Gruppen/Kanäle (optional)
Einige Kanalkonfigurationen unterstützen die Einschränkung, 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 Absender innerhalb der Gruppe. Verwende explizite Schlüsselpräfixe:id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>und den"*"-Wildcard. Veraltete 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 hat weiterhin Vorrang).
- Einige Kanäle verwenden eine andere Verschachtelung 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. Verwende "*" , um alle Gruppen zuzulassen und trotzdem 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 Autorisierung des Gruppensenders durch Konfigurations-Allowlists wie groupAllowFrom oder den dokumentierten Konfigurations-Fallback für diesen Kanal.
Häufige Absichten (Copy/Paste):
- Alle Gruppenantworten deaktivieren
- Nur bestimmte Gruppen zulassen (WhatsApp)
- Alle Gruppen zulassen, 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, wenn nicht gesetzt). Sende den Befehl als eigenständige Nachricht. Andere Oberflächen ignorieren /activation derzeit.
Kontextfelder
Eingehende Gruppen-Payloads setzen:ChatType=groupGroupSubject(falls bekannt)GroupMembers(falls bekannt)WasMentioned(Ergebnis des Erwähnungs-Gating)- Telegram-Forum-Themen enthalten zusätzlich
MessageThreadIdundIsForum.
- BlueBubbles kann unbenannte macOS-Gruppenteilnehmer optional aus der lokalen Kontakte-Datenbank anreichern, bevor
GroupMembersbefüllt wird. Dies ist standardmäßig deaktiviert und läuft nur, nachdem normales Gruppen-Gating erfolgreich durchlaufen wurde.
\n-Sequenzen zu tippen.
iMessage-spezifische Details
- Bevorzuge
chat_id:<id>beim Routing oder bei der Allowlist. - Chats auflisten:
imsg chats --limit 20. - Gruppenantworten gehen immer an dieselbe
chat_idzurück.