Grupper¶
OpenClaw behandlar gruppchattar konsekvent över ytor: WhatsApp, Telegram, Discord, Slack, Signal, iMessage, Microsoft Teams.
Nybörjarintro (2 minuter)¶
OpenClaw “lever” på dina egna meddelandekonton. Det finns ingen separat WhatsApp bot användare. Om du är i en grupp, kan OpenClaw se den gruppen och svara där.
Standardbeteende:
- Grupper är begränsade (
groupPolicy: "allowlist"). - Svar kräver en nämning om du inte uttryckligen inaktiverar nämningsstyrning.
Översättning: avsändare på tillåtelselistan kan trigga OpenClaw genom att nämna den.
TL;DR
- DM-åtkomst styrs av
*.allowFrom.- Gruppåtkomst styrs av
*.groupPolicy+ tillåtelselistor (*.groups,*.groupAllowFrom).- Utlösning av svar styrs av nämningsstyrning (
requireMention,/activation).
Snabbt flöde (vad som händer med ett gruppmeddelande):
groupPolicy? disabled -> drop
groupPolicy? allowlist -> group allowed? no -> drop
requireMention? yes -> mentioned? no -> store for context only
otherwise -> reply
Om du vill…
| Mål | Vad som ska ställas in |
|---|---|
| Tillåt alla grupper men svara bara på @-nämningar | groups: { "*": { requireMention: true } } |
| Inaktivera alla gruppsvar | groupPolicy: "disabled" |
| Endast specifika grupper | grupper: { "<group-id>": { ... } } (ingen "*" nyckel) |
| Endast du kan trigga i grupper | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
Sessionsnycklar¶
- Gruppsessioner använder sessionsnycklar
agent:<agentId>:<channel>:group:<id>(rum/kanaler använderagent:<agentId>:<channel>:channel:<id>). - Telegram-forumämnen lägger till
:topic:<threadId>till grupp-ID:t så att varje ämne får sin egen session. - Direktchattar använder huvudsessionen (eller per avsändare om konfigurerat).
- Heartbeats hoppas över för gruppsessioner.
Mönster: personliga DM + offentliga grupper (single agent)¶
Ja — detta fungerar bra om din ”personliga” trafik är DM och din ”offentliga” trafik är grupper.
Varför: I enagent-läge landar DMs vanligtvis i main sessionsnyckeln (agent:main:main), medan grupper alltid använder icke-main sessionsnycklar (agent:main:<channel>:group:<id>). Om du aktiverar sandboxning med mode: "non-main", dessa gruppsessioner körs i Docker medan din huvudsakliga DM-session förblir on-host.
Detta ger dig ett agent-”hjärna” (delad arbetsyta + minne), men två exekveringslägen:
- DM: fulla verktyg (värd)
- Grupper: sandbox + begränsade verktyg (Docker)
Om du verkligen behöver separata arbetsytor/personas ("personliga" och "offentliga" får aldrig blandas), använd en andra agent + bindningar. Se Multi-Agent Routing.
Exempel (DM på värd, grupper sandboxade + endast meddelandeverktyg):
{
agents: {
defaults: {
sandbox: {
mode: "non-main", // groups/channels are non-main -> sandboxed
scope: "session", // strongest isolation (one container per group/channel)
workspaceAccess: "none",
},
},
},
tools: {
sandbox: {
tools: {
// If allow is non-empty, everything else is blocked (deny still wins).
allow: ["group:messaging", "group:sessions"],
deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"],
},
},
},
}
Vill du ha “grupper kan bara se mapp X” istället för “ingen värdtillgång”? Behåll workspaceAccess: "none" och montera endast tillåtna sökvägar i sandlådan:
{
agents: {
defaults: {
sandbox: {
mode: "non-main",
scope: "session",
workspaceAccess: "none",
docker: {
binds: [
// hostPath:containerPath:mode
"~/FriendsShared:/data:ro",
],
},
},
},
},
}
Relaterat:
- Konfigurationsnycklar och standardvärden: Gateway-konfiguration
- Felsökning av varför ett verktyg blockeras: Sandbox vs Tool Policy vs Elevated
- Detaljer om bind-mounts: Sandboxing
Visningsetiketter¶
- UI-etiketter använder
displayNamenär tillgängligt, formaterat som<channel>:<token>. #roomär reserverad för rum/kanaler; gruppchattar använderg-<slug>(gemener, mellanslag ->-, behåll#@+._-).
Gruppolicy¶
Styr hur grupp-/rumsmeddelanden hanteras per kanal:
{
channels: {
whatsapp: {
groupPolicy: "disabled", // "open" | "disabled" | "allowlist"
groupAllowFrom: ["+15551234567"],
},
telegram: {
groupPolicy: "disabled",
groupAllowFrom: ["123456789", "@username"],
},
signal: {
groupPolicy: "disabled",
groupAllowFrom: ["+15551234567"],
},
imessage: {
groupPolicy: "disabled",
groupAllowFrom: ["chat_id:123"],
},
msteams: {
groupPolicy: "disabled",
groupAllowFrom: ["user@org.com"],
},
discord: {
groupPolicy: "allowlist",
guilds: {
GUILD_ID: { channels: { help: { allow: true } } },
},
},
slack: {
groupPolicy: "allowlist",
channels: { "#general": { allow: true } },
},
matrix: {
groupPolicy: "allowlist",
groupAllowFrom: ["@owner:example.org"],
groups: {
"!roomId:example.org": { allow: true },
"#alias:example.org": { allow: true },
},
},
},
}
| Policy | Beteende |
|---|---|
"open" |
Grupper kringgår tillåtelselistor; nämningsstyrning gäller fortfarande. |
"disabled" |
Blockera alla gruppmeddelanden helt. |
"allowlist" |
Tillåt endast grupper/rum som matchar den konfigurerade tillåtelselistan. |
Noteringar:
groupPolicyär separat från nämningsstyrning (som kräver @-nämningar).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams: använd
groupAllowFrom(fallback: explicitallowFrom). - Discord: allowlist använder
channels.discord.guilds.<id>.kanaler. - Slack: tillåtelselistan använder
channels.slack.channels. - Matrix: allowlist använder
channels.matrix.groups(rumsnummer, alias eller namn). Användchannels.matrix.groupAllowFromför att begränsa avsändare; per-rum-usersallowlists stöds också. - Grupp-DM styrs separat (
channels.discord.dm.*,channels.slack.dm.*). - Telegram-tillåtelselistan kan matcha användar-ID:n (
"123456789","telegram:123456789","tg:123456789") eller användarnamn ("@alice"eller"alice"); prefix är skiftlägesokänsliga. - Standard är
groupPolicy: "allowlist"; om din grupp-tillåtelselista är tom blockeras gruppmeddelanden.
Snabb mental modell (utvärderingsordning för gruppmeddelanden):
groupPolicy(öppen/inaktiverad/tillåtelselista)- grupp-tillåtelselistor (
*.groups,*.groupAllowFrom, kanalspecifik tillåtelselista) - nämningsstyrning (
requireMention,/activation)
Nämningsstyrning (standard)¶
Gruppmeddelanden kräver ett omnämnande om de inte åsidosätts per grupp. Standard live per delsystem under *.groups."*".
Svaret på en bot meddelande räknas som ett implicit omnämnande (när kanalen stöder svar metadata). Detta gäller Telegram, WhatsApp, Slack, Discord och Microsoft Teams.
{
channels: {
whatsapp: {
groups: {
"*": { requireMention: true },
"123@g.us": { requireMention: false },
},
},
telegram: {
groups: {
"*": { requireMention: true },
"123456789": { requireMention: false },
},
},
imessage: {
groups: {
"*": { requireMention: true },
"123": { requireMention: false },
},
},
},
agents: {
list: [
{
id: "main",
groupChat: {
mentionPatterns: ["@openclaw", "openclaw", "\\+15555550123"],
historyLimit: 50,
},
},
],
},
}
Noteringar:
mentionPatternsär skiftlägesokänsliga regexar.- Ytor som tillhandahåller explicita nämningar släpps igenom; mönster är en fallback.
- Per-agent-åsidosättning:
agents.list[].groupChat.mentionPatterns(användbart när flera agenter delar en grupp). - Nämningsstyrning tillämpas endast när nämningsdetektion är möjlig (inbyggda nämningar eller när
mentionPatternsär konfigurerade). - Discord-standarder finns i
channels.discord.guilds."*"(kan åsidosättas per guild/kanal). - Grupphistorikkontext är insvept jämnt över kanaler och är väntande (meddelanden överhoppade på grund av omnämnande gating); använd
meddelanden. roupChat.historyLimitför den globala standarden ochkanaler.<channel>.historyLimit(ellerkanaler.<channel>.accounts.*.historyLimit) för åsidosättningar. Sätt0till att inaktivera.
Verktygsbegränsningar för grupp/kanal (valfritt)¶
Vissa kanal-konfigurer stöder begränsning av vilka verktyg som är tillgängliga inom en specifik grupp/rum/kanal.
tools: tillåt/nekade verktyg för hela gruppen.toolsBySender: åsidosätter per avsändare inom gruppen (nycklar är avsändar-ID/användarnamn/e-post/telefonnummer beroende på kanal). Använd"*"som ett jokertecken.
Upplösningsordning (mest specifikt vinner):
- grupp/kanal
toolsBySender-match - grupp/kanal
tools - standard (
"*")toolsBySender-match - standard (
"*")tools
Exempel (Telegram):
{
channels: {
telegram: {
groups: {
"*": { tools: { deny: ["exec"] } },
"-1001234567890": {
tools: { deny: ["exec", "read", "write"] },
toolsBySender: {
"123456789": { alsoAllow: ["exec"] },
},
},
},
},
},
}
Noteringar:
- Verktygsbegränsningar för grupp/kanal tillämpas utöver global/agent-verktygspolicy (nekande vinner fortfarande).
- Vissa kanaler använder olika häckning för rum/kanaler (t.ex. Discord
guilds.*.channels.*, Slackchannels.*, MS Teamsteams.*.channels.*).
Grupp-tillåtelselistor¶
När channels.whatsapp.groups, channels.telegram.groups, eller channels.imessage.groups är konfigurerad, tangenterna fungerar som en grupptillåten lista. Använd "*" för att tillåta alla grupper medan du fortfarande anger standardbeteende.
Vanliga avsikter (kopiera/klistra in):
- Inaktivera alla gruppsvar
{
channels: { whatsapp: { groupPolicy: "disabled" } },
}
- Tillåt endast specifika grupper (WhatsApp)
{
channels: {
whatsapp: {
groups: {
"123@g.us": { requireMention: true },
"456@g.us": { requireMention: false },
},
},
},
}
- Tillåt alla grupper men kräv nämning (explicit)
{
channels: {
whatsapp: {
groups: { "*": { requireMention: true } },
},
},
}
- Endast ägaren kan trigga i grupper (WhatsApp)
{
channels: {
whatsapp: {
groupPolicy: "allowlist",
groupAllowFrom: ["+15551234567"],
groups: { "*": { requireMention: true } },
},
},
}
Aktivering (endast ägare)¶
Gruppägare kan växla per-grupp-aktivering:
/activation mention/activation always
Ägare bestäms av channels.whatsapp.allowFrom (eller botens själv E.164 när unset). Skicka kommandot som ett fristående meddelande. Andra ytor ignorerar för närvarande /activation.
Kontextfält¶
Inkommande grupppayloads sätter:
ChatType=groupGroupSubject(om känt)GroupMembers(om känt)WasMentioned(resultat av nämningsstyrning)- Telegram-forumämnen inkluderar även
MessageThreadIdochIsForum.
Agentsystemet prompten innehåller en grupp intro på den första vändningen av en ny grupp session. Den påminner modellen om att svara som en människa, undvika markdown tabeller och undvika att skriva bokstavliga \n sekvenser.
iMessage-specifikt¶
- Föredra
chat_id:<id>vid routing eller tillåtelselistor. - Lista chattar:
imsg chats --limit 20. - Gruppsvar går alltid tillbaka till samma
chat_id.
WhatsApp-specifikt¶
Se Gruppmeddelanden för WhatsApp-specifikt beteende (historikinjektion, detaljer om nämningshantering).