Gruppi
OpenClaw gestisce le chat di gruppo in modo coerente tra le varie superfici: Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo.Introduzione per principianti (2 minuti)
OpenClaw “vive” sui tuoi account di messaggistica. Non esiste un utente bot WhatsApp separato. Se tu sei in un gruppo, OpenClaw può vedere quel gruppo e rispondere lì. Comportamento predefinito:- I gruppi sono limitati (
groupPolicy: "allowlist"). - Le risposte richiedono una menzione, a meno che tu non disabiliti esplicitamente il controllo tramite menzione.
In breveFlusso rapido (cosa succede a un messaggio di gruppo):
- L’accesso ai DM è controllato da
*.allowFrom.- L’accesso ai gruppi è controllato da
*.groupPolicy+ allowlist (*.groups,*.groupAllowFrom).- L’attivazione delle risposte è controllata dal controllo tramite menzione (
requireMention,/activation).
Visibilità del contesto e allowlist
Nella sicurezza dei gruppi sono coinvolti due controlli diversi:- Autorizzazione all’attivazione: chi può attivare l’agente (
groupPolicy,groups,groupAllowFrom, allowlist specifiche del canale). - Visibilità del contesto: quale contesto supplementare viene inserito nel modello (testo della risposta, citazioni, cronologia del thread, metadati inoltrati).
- Alcuni canali applicano già il filtraggio basato sul mittente per il contesto supplementare in percorsi specifici (ad esempio inizializzazione dei thread Slack, ricerche reply/thread di Matrix).
- Altri canali continuano a inoltrare il contesto di citazione/risposta/inoltro così come viene ricevuto.
contextVisibility: "all"(predefinito) mantiene l’attuale comportamento così come ricevuto.contextVisibility: "allowlist"filtra il contesto supplementare sui mittenti presenti nella allowlist.contextVisibility: "allowlist_quote"equivale aallowlistpiù una singola eccezione esplicita per citazione/risposta.
| Obiettivo | Cosa impostare |
|---|---|
| Consentire tutti i gruppi ma rispondere solo alle @menzioni | groups: { "*": { requireMention: true } } |
| Disabilitare tutte le risposte nei gruppi | groupPolicy: "disabled" |
| Solo gruppi specifici | groups: { "<group-id>": { ... } } (senza chiave "*") |
| Solo tu puoi attivare nei gruppi | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
Chiavi di sessione
- Le sessioni di gruppo usano chiavi di sessione
agent:<agentId>:<channel>:group:<id>(stanze/canali usanoagent:<agentId>:<channel>:channel:<id>). - I topic del forum Telegram aggiungono
:topic:<threadId>all’id del gruppo, così ogni topic ha la propria sessione. - Le chat dirette usano la sessione main (o una per mittente, se configurato).
- Gli heartbeat vengono saltati per le sessioni di gruppo.
Pattern: DM personali + gruppi pubblici (agente singolo)
Sì — funziona bene se il tuo traffico “personale” è nei DM e quello “pubblico” è nei gruppi. Perché: in modalità agente singolo, i DM di solito arrivano nella chiave di sessione main (agent:main:main), mentre i gruppi usano sempre chiavi di sessione non-main (agent:main:<channel>:group:<id>). Se abiliti il sandboxing con mode: "non-main", quelle sessioni di gruppo vengono eseguite in Docker mentre la tua sessione DM principale rimane sull’host.
Questo ti offre un unico “cervello” agente (workspace + memoria condivisi), ma con due posture di esecuzione:
- DM: strumenti completi (host)
- Gruppi: sandbox + strumenti limitati (Docker)
Se hai bisogno di workspace/persona davvero separati (“personale” e “pubblico” non devono mai mescolarsi), usa un secondo agente + binding. Vedi Instradamento multi-agente.Esempio (DM sull’host, gruppi in sandbox + solo strumenti di messaggistica):
workspaceAccess: "none" e monta nel sandbox solo i percorsi presenti nella allowlist:
- Chiavi di configurazione e valori predefiniti: Configurazione del Gateway
- Debug del motivo per cui uno strumento è bloccato: Sandbox vs Tool Policy vs Elevated
- Dettagli sui bind mount: Sandboxing
Etichette di visualizzazione
- Le etichette UI usano
displayNamequando disponibile, nel formato<channel>:<token>. #roomè riservato alle stanze/canali; le chat di gruppo usanog-<slug>(minuscolo, spazi ->-, mantieni#@+._-).
Criterio dei gruppi
Controlla come vengono gestiti i messaggi di gruppo/stanza per canale:| Criterio | Comportamento |
|---|---|
"open" | I gruppi bypassano le allowlist; il controllo tramite menzione continua ad applicarsi. |
"disabled" | Blocca completamente tutti i messaggi di gruppo. |
"allowlist" | Consente solo gruppi/stanze che corrispondono alla allowlist configurata. |
groupPolicyè separato dal controllo tramite menzione (che richiede @menzioni).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: usa
groupAllowFrom(fallback:allowFromesplicito). - Le approvazioni di abbinamento DM (voci memorizzate in
*-allowFrom) si applicano solo all’accesso DM; l’autorizzazione del mittente nei gruppi resta esplicita nelle allowlist di gruppo. - Discord: la allowlist usa
channels.discord.guilds.<id>.channels. - Slack: la allowlist usa
channels.slack.channels. - Matrix: la allowlist usa
channels.matrix.groups. Preferisci gli id stanza o gli alias; la risoluzione del nome delle stanze a cui si partecipa è best-effort e i nomi non risolti vengono ignorati a runtime. Usachannels.matrix.groupAllowFromper limitare i mittenti; sono supportate anche allowlistusersper singola stanza. - I DM di gruppo sono controllati separatamente (
channels.discord.dm.*,channels.slack.dm.*). - La allowlist Telegram può corrispondere a id utente (
"123456789","telegram:123456789","tg:123456789") o nomi utente ("@alice"o"alice"); i prefissi non distinguono tra maiuscole e minuscole. - Il valore predefinito è
groupPolicy: "allowlist"; se la tua allowlist dei gruppi è vuota, i messaggi di gruppo vengono bloccati. - Sicurezza runtime: quando un blocco provider manca completamente (
channels.<provider>assente), il criterio dei gruppi torna a una modalità fail-closed (di solitoallowlist) invece di ereditarechannels.defaults.groupPolicy.
groupPolicy(open/disabled/allowlist)- allowlist di gruppo (
*.groups,*.groupAllowFrom, allowlist specifica del canale) - controllo tramite menzione (
requireMention,/activation)
Controllo tramite menzione (predefinito)
I messaggi di gruppo richiedono una menzione, salvo override per singolo gruppo. I valori predefiniti si trovano per sottosistema in*.groups."*".
Rispondere a un messaggio del bot conta come menzione implicita (quando il canale supporta i metadati di risposta). Questo vale per Telegram, WhatsApp, Slack, Discord e Microsoft Teams.
mentionPatternssono pattern regex sicuri e case-insensitive; i pattern non validi e le forme annidate non sicure di ripetizione vengono ignorati.- Le superfici che forniscono menzioni esplicite continuano a passare; i pattern sono un fallback.
- Override per agente:
agents.list[].groupChat.mentionPatterns(utile quando più agenti condividono un gruppo). - Il controllo tramite menzione viene applicato solo quando è possibile rilevare la menzione (menzioni native o
mentionPatternsconfigurati). - I valori predefiniti di Discord si trovano in
channels.discord.guilds."*"(sovrascrivibili per singola guild/canale). - Il contesto della cronologia di gruppo è racchiuso in modo uniforme tra i canali ed è solo pending (messaggi saltati a causa del controllo tramite menzione); usa
messages.groupChat.historyLimitper il valore predefinito globale echannels.<channel>.historyLimit(ochannels.<channel>.accounts.*.historyLimit) per gli override. Imposta0per disabilitare.
Restrizioni degli strumenti per gruppo/canale (opzionale)
Alcune configurazioni dei canali supportano la limitazione degli strumenti disponibili all’interno di uno specifico gruppo/stanza/canale.tools: consenti/nega strumenti per l’intero gruppo.toolsBySender: override per mittente all’interno del gruppo. Usa prefissi di chiave espliciti:id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>e wildcard"*". Le chiavi legacy senza prefisso sono ancora accettate e vengono abbinate solo comeid:.
- corrispondenza
toolsBySenderdel gruppo/canale toolsdel gruppo/canale- corrispondenza
toolsBySenderpredefinita ("*") toolspredefinito ("*")
- Le restrizioni degli strumenti per gruppo/canale vengono applicate in aggiunta al criterio globale/dell’agente sugli strumenti (deny ha comunque la precedenza).
- Alcuni canali usano una nidificazione diversa per stanze/canali (ad esempio Discord
guilds.*.channels.*, Slackchannels.*, Microsoft Teamsteams.*.channels.*).
Allowlist di gruppo
Quandochannels.whatsapp.groups, channels.telegram.groups o channels.imessage.groups è configurato, le chiavi agiscono come allowlist di gruppo. Usa "*" per consentire tutti i gruppi mantenendo comunque il comportamento predefinito della menzione.
Confusione comune: l’approvazione dell’abbinamento DM non è la stessa cosa dell’autorizzazione del gruppo.
Per i canali che supportano l’abbinamento DM, l’archivio di pairing sblocca solo i DM. I comandi nei gruppi richiedono comunque l’autorizzazione esplicita del mittente del gruppo dalle allowlist di configurazione come groupAllowFrom o dal fallback di configurazione documentato per quel canale.
Intenti comuni (copia/incolla):
- Disabilitare tutte le risposte nei gruppi
- Consentire solo gruppi specifici (WhatsApp)
- Consentire tutti i gruppi ma richiedere la menzione (esplicito)
- Solo il proprietario può attivare nei gruppi (WhatsApp)
Attivazione (solo proprietario)
I proprietari del gruppo possono attivare o disattivare l’attivazione per singolo gruppo:/activation mention/activation always
channels.whatsapp.allowFrom (o dall’E.164 del bot stesso se non impostato). Invia il comando come messaggio autonomo. Le altre superfici al momento ignorano /activation.
Campi di contesto
I payload in ingresso dei gruppi impostano:ChatType=groupGroupSubject(se noto)GroupMembers(se noto)WasMentioned(risultato del controllo tramite menzione)- I topic del forum Telegram includono anche
MessageThreadIdeIsForum.
- BlueBubbles può opzionalmente arricchire i partecipanti senza nome dei gruppi macOS dal database locale dei Contatti prima di popolare
GroupMembers. Questa funzione è disattivata per impostazione predefinita e viene eseguita solo dopo che il normale controllo del gruppo è stato superato.
\n.
Specifiche di iMessage
- Preferisci
chat_id:<id>durante l’instradamento o l’uso nella allowlist. - Elenca le chat:
imsg chats --limit 20. - Le risposte nei gruppi tornano sempre allo stesso
chat_id.