OpenClaw behandelt groepschats consistent op alle oppervlakken: Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo.Documentation Index
Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Introductie voor beginners (2 minuten)
OpenClaw “leeft” op je eigen messaging-accounts. Er is geen aparte WhatsApp-botgebruiker. Als jij in een groep zit, kan OpenClaw die groep zien en daar reageren. Standaardgedrag:- Groepen zijn beperkt (
groupPolicy: "allowlist"). - Antwoorden vereisen een vermelding, tenzij je mention gating expliciet uitschakelt.
- Normale eindantwoorden in groepen/kanalen zijn standaard privé. Zichtbare uitvoer in de ruimte gebruikt de
message-tool.
TL;DR
- DM-toegang wordt beheerd door
*.allowFrom. - Groepstoegang wordt beheerd door
*.groupPolicy+ allowlists (*.groups,*.groupAllowFrom). - Antwoordactivering wordt beheerd door mention gating (
requireMention,/activation).
Zichtbare antwoorden
Voor groeps-/kanaalruimtes gebruikt OpenClaw standaardmessages.groupChat.visibleReplies: "message_tool".
openclaw doctor --fix schrijft deze standaardwaarde naar geconfigureerde kanaalconfiguraties waarin deze ontbreekt.
Dat betekent dat de agent de beurt nog steeds verwerkt en geheugen-/sessiestatus kan bijwerken, maar dat het normale eindantwoord niet automatisch terug in de ruimte wordt geplaatst. Om zichtbaar te spreken, gebruikt de agent message(action=send).
Deze standaard hangt af van een model/runtime die tools betrouwbaar aanroept. Als logs
assistant-tekst tonen maar didSendViaMessagingTool: false, heeft het model
privé geantwoord in plaats van de berichtentool aan te roepen. Dat is geen
verzendfout van Discord/Slack/Telegram. Gebruik een model dat betrouwbaar tools aanroept voor
groeps-/kanaalsessies, of stel
messages.groupChat.visibleReplies: "automatic" in om verouderde zichtbare
eindantwoorden te herstellen.
Als de berichtentool niet beschikbaar is onder het actieve toolbeleid, valt OpenClaw
terug op automatische zichtbare antwoorden in plaats van de reactie stilzwijgend te onderdrukken.
openclaw doctor waarschuwt voor deze mismatch.
Voor directe chats en elke andere bronbeurt gebruik je messages.visibleReplies: "message_tool" om hetzelfde tool-only zichtbare-antwoordgedrag globaal toe te passen. Harnesses kunnen dit ook kiezen als hun niet-ingestelde standaard; de Codex-harness doet dit voor directe chats in Codex-modus. messages.groupChat.visibleReplies blijft de specifiekere override voor groeps-/kanaalruimtes.
Dit vervangt het oude patroon waarbij het model werd gedwongen om NO_REPLY te antwoorden voor de meeste lurk-modusbeurten. In tool-only modus betekent niets zichtbaar doen simpelweg dat de berichtentool niet wordt aangeroepen.
Typing-indicatoren worden nog steeds verzonden terwijl de agent in tool-only modus werkt. De standaard groeps-typingmodus wordt voor deze beurten opgewaardeerd van “message” naar “instant”, omdat er mogelijk nooit normale assistant-berichttekst is voordat de agent beslist of hij de berichtentool aanroept. Expliciete typingmodusconfiguratie blijft voorrang hebben.
Om verouderde automatische eindantwoorden voor groeps-/kanaalruimtes te herstellen:
messages-configuratie hot-reload nadat het bestand is opgeslagen. Herstart alleen
wanneer file watching of config reload in de deployment is uitgeschakeld.
Om zichtbare uitvoer voor elke bronchat via de berichtentool te verplichten:
visibleReplies: "message_tool" en antwoorden altijd zichtbaar, zodat de kanaal-native commando-UI de reactie krijgt die deze verwacht. Dit geldt alleen voor gevalideerde native commandobeurten; als tekst getypte /...-commando’s en gewone chatbeurten volgen nog steeds de geconfigureerde groepsstandaard.
Contextzichtbaarheid en allowlists
Bij groepsveiligheid zijn twee verschillende controles betrokken:- Triggerautorisatie: wie de agent kan activeren (
groupPolicy,groups,groupAllowFrom, kanaalspecifieke allowlists). - Contextzichtbaarheid: welke aanvullende context in het model wordt geïnjecteerd (antwoordtekst, citaten, threadgeschiedenis, doorgestuurde metadata).
Current behavior is channel-specific
Current behavior is channel-specific
- Sommige kanalen passen al afzendergebaseerde filtering toe voor aanvullende context in specifieke paden (bijvoorbeeld Slack-thread seeding, Matrix-antwoord-/threadlookups).
- Andere kanalen geven citaat-/antwoord-/doorstuurcontext nog steeds door zoals ontvangen.
Hardening direction (planned)
Hardening direction (planned)
contextVisibility: "all"(standaard) behoudt het huidige gedrag zoals ontvangen.contextVisibility: "allowlist"filtert aanvullende context tot toegestane afzenders.contextVisibility: "allowlist_quote"isallowlistplus één expliciete citaat-/antwoorduitzondering.
| Doel | Wat je moet instellen |
|---|---|
| Alle groepen toestaan maar alleen antwoorden op @vermeldingen | groups: { "*": { requireMention: true } } |
| Alle groepsantwoorden uitschakelen | groupPolicy: "disabled" |
| Alleen specifieke groepen | groups: { "<group-id>": { ... } } (geen "*"-sleutel) |
| Alleen jij kunt in groepen activeren | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
| Eén vertrouwde afzenderset hergebruiken over kanalen | groupAllowFrom: ["accessGroup:operators"] |
Sessiesleutels
- Groepssessies gebruiken
agent:<agentId>:<channel>:group:<id>-sessiesleutels (ruimtes/kanalen gebruikenagent:<agentId>:<channel>:channel:<id>). - Telegram-forumonderwerpen voegen
:topic:<threadId>toe aan de groeps-id, zodat elk onderwerp een eigen sessie heeft. - Directe chats gebruiken de hoofdsessie (of per afzender indien geconfigureerd).
- Heartbeats worden overgeslagen voor groepssessies.
Patroon: persoonlijke DM’s + openbare groepen (één agent)
Ja — dit werkt goed als je “persoonlijke” verkeer DM’s is en je “openbare” verkeer groepen is. Waarom: in single-agentmodus komen DM’s meestal terecht in de hoofdsessiesleutel (agent:main:main), terwijl groepen altijd niet-hoofdsessiesleutels gebruiken (agent:main:<channel>:group:<id>). Als je sandboxing inschakelt met mode: "non-main", draaien die groepssessies in de geconfigureerde sandboxbackend terwijl je hoofd-DM-sessie op de host blijft. Docker is de standaardbackend als je er geen kiest.
Dit geeft je één agent-”brein” (gedeelde workspace + geheugen), maar twee uitvoeringshoudingen:
- DM’s: volledige tools (host)
- Groepen: sandbox + beperkte tools
Als je echt gescheiden workspaces/persona’s nodig hebt (“persoonlijk” en “openbaar” mogen nooit mengen), gebruik dan een tweede agent + bindings. Zie Multi-Agent Routing.
- DMs on host, groups sandboxed
- Groups see only an allowlisted folder
- Configuratiesleutels en standaardwaarden: Gateway-configuratie
- Debuggen waarom een tool wordt geblokkeerd: Sandbox vs Toolbeleid vs Elevated
- Details over bind mounts: Sandboxing
Weergavelabels
- UI-labels gebruiken
displayNamewanneer beschikbaar, geformatteerd als<channel>:<token>. #roomis gereserveerd voor ruimtes/kanalen; groepschats gebruikeng-<slug>(kleine letters, spaties ->-, behoud#@+._-).
Groepsbeleid
Bepaal hoe groeps-/ruimteberichten per kanaal worden verwerkt:| Beleid | Gedrag |
|---|---|
"open" | Groepen omzeilen allowlists; mention gating blijft van toepassing. |
"disabled" | Blokkeer alle groepsberichten volledig. |
"allowlist" | Sta alleen groepen/ruimtes toe die overeenkomen met de geconfigureerde allowlist. |
Opmerkingen per kanaal
Opmerkingen per kanaal
groupPolicystaat los van vermeldingstoegang (waarvoor @mentions vereist zijn).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: gebruik
groupAllowFrom(terugval: explicieteallowFrom). - Signal:
groupAllowFromkan overeenkomen met de inkomende Signal-groeps-id of met het telefoonnummer/de UUID van de afzender. - DM-koppelingsgoedkeuringen (
*-allowFrom-opslagitems) gelden alleen voor DM-toegang; autorisatie van groepsafzenders blijft expliciet via groepstoestaanlijsten. - Discord: de toestaanlijst gebruikt
channels.discord.guilds.<id>.channels. - Slack: de toestaanlijst gebruikt
channels.slack.channels. - Matrix: de toestaanlijst gebruikt
channels.matrix.groups. Geef de voorkeur aan kamer-ID’s of aliassen; zoeken op naam van een joined room gebeurt naar beste vermogen, en onopgeloste namen worden tijdens runtime genegeerd. Gebruikchannels.matrix.groupAllowFromom afzenders te beperken; per-roomusers-toestaanlijsten worden ook ondersteund. - Groeps-DM’s worden afzonderlijk beheerd (
channels.discord.dm.*,channels.slack.dm.*). - De Telegram-toestaanlijst kan overeenkomen met gebruikers-ID’s (
"123456789","telegram:123456789","tg:123456789") of gebruikersnamen ("@alice"of"alice"); prefixen zijn hoofdletterongevoelig. - De standaard is
groupPolicy: "allowlist"; als je groepstoestaanlijst leeg is, worden groepsberichten geblokkeerd. - Runtime-veiligheid: wanneer een providerblok volledig ontbreekt (
channels.<provider>afwezig), valt groepsbeleid terug op een fail-closed-modus (meestalallowlist) in plaats vanchannels.defaults.groupPolicyte erven.
Groepstoestaanlijsten
Groepstoestaanlijsten (
*.groups, *.groupAllowFrom, kanaalspecifieke toestaanlijst).Vermeldingstoegang (standaard)
Groepsberichten vereisen een vermelding, tenzij dit per groep wordt overschreven. Standaarden staan per subsysteem onder*.groups."*".
Antwoorden op een botbericht telt als een impliciete vermelding wanneer het kanaal antwoordmetadata ondersteunt. Een botbericht citeren kan ook tellen als een impliciete vermelding op kanalen die citaatmetadata beschikbaar maken. Huidige ingebouwde gevallen zijn Telegram, WhatsApp, Slack, Discord, Microsoft Teams en ZaloUser.
Opmerkingen over vermeldingstoegang
Opmerkingen over vermeldingstoegang
mentionPatternszijn hoofdletterongevoelige veilige regex-patronen; ongeldige patronen en onveilige vormen met geneste herhaling worden genegeerd.- Oppervlakken die expliciete vermeldingen leveren, blijven slagen; patronen zijn een terugval.
- Overschrijving per agent:
agents.list[].groupChat.mentionPatterns(handig wanneer meerdere agents een groep delen). - Vermeldingstoegang wordt alleen afgedwongen wanneer detectie van vermeldingen mogelijk is (native vermeldingen of
mentionPatternszijn geconfigureerd). - Een groep of afzender opnemen in de toestaanlijst schakelt vermeldingstoegang niet uit; stel de
requireMentionvan die groep in opfalsewanneer alle berichten moeten activeren. - De promptcontext voor groepschats bevat bij elke beurt de opgeloste instructie voor stil antwoorden; werkruimtebestanden mogen
NO_REPLY-mechanismen niet dupliceren. - Groepen waar stille antwoorden zijn toegestaan behandelen schone lege of alleen-redenering modelbeurten als stil, gelijkwaardig aan
NO_REPLY. Directe chats doen hetzelfde alleen wanneer directe stille antwoorden expliciet zijn toegestaan; anders blijven lege antwoorden mislukte agentbeurten. - Discord-standaarden staan in
channels.discord.guilds."*"(overschrijfbaar per guild/kanaal). - Groepsgeschiedeniscontext wordt uniform over kanalen heen verpakt. Groepen met vermeldingstoegang bewaren overgeslagen berichten die nog wachten; groepen die altijd aan staan kunnen ook recente verwerkte kamerberichten bewaren wanneer het kanaal dit ondersteunt. Gebruik
messages.groupChat.historyLimitvoor de globale standaard enchannels.<channel>.historyLimit(ofchannels.<channel>.accounts.*.historyLimit) voor overschrijvingen. Stel0in om uit te schakelen.
Beperkingen voor groeps-/kanaaltools (optioneel)
Sommige kanaalconfiguraties ondersteunen het beperken welke tools beschikbaar zijn binnen een specifieke groep/kamer/kanaal.tools: tools toestaan/weigeren voor de hele groep.toolsBySender: overschrijvingen per afzender binnen de groep. Gebruik expliciete sleutelprefixen:channel:<channelId>:<senderId>,id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>en"*"-wildcard. Kanaal-id’s gebruiken canonieke OpenClaw-kanaal-id’s; aliassen zoalsteamsnormaliseren naarmsteams. Verouderde sleutels zonder prefix worden nog steeds geaccepteerd en alleen alsid:gematcht.
Voorbeeld (Telegram):
Beperkingen voor groeps-/kanaaltools worden toegepast naast globaal/agent-toolbeleid (weigeren wint nog steeds). Sommige kanalen gebruiken andere nesting voor kamers/kanalen (bijv. Discord
guilds.*.channels.*, Slack channels.*, Microsoft Teams teams.*.channels.*).Groepstoestaanlijsten
Wanneerchannels.whatsapp.groups, channels.telegram.groups of channels.imessage.groups is geconfigureerd, fungeren de sleutels als groepstoestaanlijst. Gebruik "*" om alle groepen toe te staan terwijl je nog steeds standaard vermeldingsgedrag instelt.
Veelvoorkomende intenties (kopiëren/plakken):
- Alle groepsantwoorden uitschakelen
- Alleen specifieke groepen toestaan (WhatsApp)
- Alle groepen toestaan maar vermelding vereisen
- Alleen eigenaarstriggers (WhatsApp)
Activering (alleen eigenaar)
Groepseigenaren kunnen activering per groep omschakelen:/activation mention/activation always
channels.whatsapp.allowFrom (of de eigen E.164 van de bot wanneer niet ingesteld). Verstuur het commando als een zelfstandig bericht. Andere oppervlakken negeren /activation momenteel.
Contextvelden
Inkomende groepspayloads stellen in:ChatType=groupGroupSubject(indien bekend)GroupMembers(indien bekend)WasMentioned(resultaat van vermeldingstoegang)- Telegram-forumtopics bevatten ook
MessageThreadIdenIsForum.
\n-reeksen te typen. Groepsnamen en deelnemerslabels afkomstig van kanalen worden weergegeven als fenced niet-vertrouwde metadata, niet als inline systeeminstructies.
iMessage-specifiek
- Geef de voorkeur aan
chat_id:<id>bij routeren of opnemen in een toestaanlijst. - Chats weergeven:
imsg chats --limit 20. - Groepsantwoorden gaan altijd terug naar dezelfde
chat_id.