Gateway
Configurazione — canali
Chiavi di configurazione per canale sotto channels.*: accesso a messaggi diretti e gruppi, configurazioni multi-account, filtro basato sulle menzioni e chiavi specifiche per Slack, Discord, Telegram, WhatsApp, Matrix, iMessage e altri Plugin di canale.
Per agenti, strumenti, runtime del Gateway e altre chiavi di primo livello, consultare il riferimento della configurazione.
Canali
Ogni canale si avvia automaticamente quando esiste la relativa sezione di configurazione (a meno che enabled: false). Telegram e iMessage sono inclusi nel pacchetto principale openclaw. Gli altri canali ufficiali (Discord, Slack, WhatsApp, Matrix, Microsoft Teams, IRC, Google Chat, Signal, Mattermost e altri) si installano come Plugin separati con openclaw plugins install <spec>; consultare Canali per l'elenco completo e le specifiche di installazione.
Accesso a messaggi diretti e gruppi
Tutti i canali supportano criteri per i messaggi diretti e per i gruppi:
| Criterio per i messaggi diretti | Comportamento |
|---|---|
pairing (predefinito) |
I mittenti sconosciuti ricevono un codice di associazione monouso; il proprietario deve approvarlo |
allowlist |
Solo mittenti in allowFrom (o nell'archivio degli elementi consentiti associati) |
open |
Consente tutti i messaggi diretti in entrata (richiede allowFrom: ["*"]) |
disabled |
Ignora tutti i messaggi diretti in entrata |
| Criterio per i gruppi | Comportamento |
|---|---|
allowlist (predefinito) |
Solo i gruppi che corrispondono all'elenco degli elementi consentiti configurato |
open |
Ignora gli elenchi dei gruppi consentiti (il filtro basato sulle menzioni continua ad applicarsi) |
disabled |
Blocca tutti i messaggi di gruppi/stanze |
Sostituzioni del modello per canale
Utilizzare channels.modelByChannel per associare specifici ID canale o interlocutori dei messaggi diretti a un modello. I valori accettano provider/model o alias di modelli configurati. La mappatura del canale si applica solo quando una sessione non dispone già di una sostituzione attiva del modello (ad esempio, una impostata tramite /model).
Per le conversazioni di gruppo/thread, le chiavi sono ID gruppo specifici del canale, ID argomento o nomi di canale. Per le conversazioni con messaggi diretti (DM), le chiavi sono identificatori degli interlocutori derivati dall'identità del mittente del canale (nativeDirectUserId, origin.from, origin.to, OriginatingTo, From o SenderId). La forma esatta della chiave dipende dal canale:
| Canale | Forma della chiave DM | Esempio |
|---|---|---|
| Discord | ID utente non elaborato | 987654321 |
| Feishu | feishu:ou_... |
feishu:ou_a8b6cab7e945387de5f253775d9b4d85 |
| Matrix | ID utente Matrix | @user:matrix.org |
| Slack | user:U... |
user:U12345 |
| Telegram | ID utente non elaborato | 123456789 |
| numero di telefono o JID | 15551234567 |
{ channels: { modelByChannel: { discord: { "123456789012345678": "anthropic/claude-opus-4-6", }, slack: { C1234567890: "openai/gpt-5.6-sol", "user:U12345": "openai/gpt-5.4-mini", }, telegram: { "-1001234567890": "openai/gpt-5.4-mini", "-1001234567890:topic:99": "anthropic/claude-sonnet-4-6", "123456789": "openai/gpt-4.1", }, }, },}Le chiavi specifiche per i messaggi diretti corrispondono solo nelle conversazioni con messaggi diretti; non influiscono sull'instradamento di gruppi/thread.
Valori predefiniti dei canali e Heartbeat
Utilizzare channels.defaults per condividere tra i provider il comportamento del criterio per i gruppi e dell'Heartbeat:
{ channels: { defaults: { groupPolicy: "allowlist", // open | allowlist | disabled contextVisibility: "all", // all | allowlist | allowlist_quote heartbeat: { showOk: false, showAlerts: true, useIndicator: true, }, }, },}channels.defaults.groupPolicy: criterio di riserva per i gruppi quandogroupPolicya livello di provider non è impostato.channels.defaults.contextVisibility: modalità predefinita di visibilità del contesto supplementare per tutti i canali. Valori:all(predefinito, include tutto il contesto di citazioni/thread/cronologia),allowlist(include solo il contesto dei mittenti consentiti),allowlist_quote(come l'elenco degli elementi consentiti, ma mantiene il contesto esplicito di citazione/risposta). Sostituzione per canale:channels.<channel>.contextVisibility.channels.defaults.heartbeat.showOk: include gli stati integri dei canali nell'output dell'Heartbeat (valore predefinitofalse).channels.defaults.heartbeat.showAlerts: include gli stati degradati/di errore nell'output dell'Heartbeat (valore predefinitotrue).channels.defaults.heartbeat.useIndicator: visualizza un output compatto dell'Heartbeat in stile indicatore (valore predefinitotrue).
WhatsApp funziona tramite il canale web del Gateway (Baileys Web). Si avvia automaticamente quando esiste una sessione collegata.
{ web: { enabled: true, heartbeatSeconds: 60, whatsapp: { keepAliveIntervalMs: 25000, connectTimeoutMs: 60000, defaultQueryTimeoutMs: 60000, }, reconnect: { initialMs: 2000, maxMs: 30000, factor: 1.8, jitter: 0.25, maxAttempts: 12, // 0 = retry forever }, }, channels: { whatsapp: { dmPolicy: "pairing", // pairing | allowlist | open | disabled allowFrom: ["+15555550123", "+447700900123"], textChunkLimit: 4000, streaming: { chunkMode: "length" }, // length | newline mediaMaxMb: 50, sendReadReceipts: true, // blue ticks (false in self-chat mode) groups: { "*": { requireMention: true }, }, groupPolicy: "allowlist", groupAllowFrom: ["+15551234567"], }, },}web.whatsapp.keepAliveIntervalMs(valore predefinito25000),connectTimeoutMs(valore predefinito60000) edefaultQueryTimeoutMs(valore predefinito60000) regolano il socket Baileys.- Valori predefiniti di
web.reconnect:initialMs: 2000,maxMs: 30000,factor: 1.8,jitter: 0.25,maxAttempts: 12.maxAttempts: 0esegue nuovi tentativi all'infinito anziché rinunciare. - Le voci
bindings[]di primo livello contype: "acp"configurano associazioni ACP persistenti per i messaggi diretti e i gruppi di WhatsApp. Utilizzare un numero diretto E.164 o un JID di gruppo WhatsApp inmatch.peer.id. La semantica dei campi è condivisa in Agenti ACP.
WhatsApp multi-account
{channels: { whatsapp: { accounts: { default: {}, personal: {}, biz: { // authDir: "~/.openclaw/credentials/whatsapp/biz", }, }, },},}- I comandi in uscita utilizzano per impostazione predefinita l'account
default, se presente; altrimenti, il primo ID account configurato (in ordine). - Il valore facoltativo
channels.whatsapp.defaultAccountsostituisce la selezione predefinita dell'account di riserva quando corrisponde a un ID account configurato. - La directory di autenticazione Baileys legacy per account singolo viene migrata da
openclaw doctorinwhatsapp/default. - Sostituzioni per account:
channels.whatsapp.accounts.<id>.sendReadReceipts,channels.whatsapp.accounts.<id>.dmPolicy,channels.whatsapp.accounts.<id>.allowFrom.
Telegram
{ channels: { telegram: { enabled: true, botToken: "your-bot-token", dmPolicy: "pairing", allowFrom: ["tg:123456789"], groups: { "*": { requireMention: true }, "-1001234567890": { allowFrom: ["@admin"], systemPrompt: "Keep answers brief.", topics: { "99": { requireMention: false, skills: ["search"], systemPrompt: "Stay on topic.", }, }, }, }, customCommands: [ { command: "backup", description: "Git backup" }, { command: "generate", description: "Create an image" }, ], historyLimit: 50, replyToMode: "first", // off | first | all | batched linkPreview: true, streaming: { mode: "partial" }, // off | partial | block | progress (default: partial) actions: { reactions: true, sendMessage: true }, reactionNotifications: "own", // off | own | all mediaMaxMb: 100, retry: { attempts: 3, minDelayMs: 400, maxDelayMs: 30000, jitter: 0.1, }, network: { autoSelectFamily: true, dnsResultOrder: "ipv4first", }, apiRoot: "https://api.telegram.org", trustedLocalFileRoots: ["/srv/telegram-bot-api-data"], proxy: "socks5://localhost:9050", webhookUrl: "https://example.com/telegram-webhook", webhookSecret: "secret", webhookPath: "/telegram-webhook", }, },}- Token del bot:
channels.telegram.botTokenochannels.telegram.tokenFile(solo file normale; i collegamenti simbolici vengono rifiutati), conTELEGRAM_BOT_TOKENcome riserva per l'account predefinito. apiRootè esclusivamente la radice dell'API Bot di Telegram. Utilizzarehttps://api.telegram.orgo la propria radice self-hosted/proxy, nonhttps://api.telegram.org/bot<TOKEN>;openclaw doctor --fixrimuove un suffisso finale/bot<TOKEN>aggiunto accidentalmente.- Per un server API Bot self-hosted in modalità
--local,trustedLocalFileRootselenca i percorsi dell'host che OpenClaw può leggere. Montare il volume dati del server sull'host OpenClaw e configurarne la radice dei dati o la directory per token; i percorsi del contenitore sotto/var/lib/telegram-bot-apivengono mappati in tali radici. Gli altri percorsi assoluti continuano a essere rifiutati. - Il valore facoltativo
channels.telegram.defaultAccountsostituisce la selezione predefinita dell'account quando corrisponde a un ID account configurato. - Nelle configurazioni multi-account (2 o più ID account), impostare un valore predefinito esplicito (
channels.telegram.defaultAccountochannels.telegram.accounts.default) per evitare l'instradamento di riserva;openclaw doctorgenera un avviso quando manca o non è valido. configWrites: falseblocca le scritture della configurazione avviate da Telegram (migrazioni degli ID dei supergruppi,/config set|unset).- Le voci
bindings[]di primo livello contype: "acp"configurano associazioni ACP persistenti per gli argomenti dei forum (utilizzare il valore canonicochatId:topic:topicIdinmatch.peer.id). La semantica dei campi è condivisa in Agenti ACP. - Le anteprime dei flussi di Telegram utilizzano
sendMessage+editMessageText(funziona nelle chat dirette e di gruppo). network.dnsResultOrderusa come valore predefinito"ipv4first"per evitare i comuni errori di recupero IPv6.- Criterio per i nuovi tentativi: consultare Criterio per i nuovi tentativi.
Discord
{ channels: { discord: { enabled: true, token: "your-bot-token", mediaMaxMb: 100, allowBots: false, actions: { reactions: true, stickers: true, polls: true, permissions: true, messages: true, threads: true, pins: true, search: true, memberInfo: true, roleInfo: true, roles: false, channelInfo: true, voiceStatus: true, events: true, moderation: false, }, replyToMode: "off", // off | first | all | batched dmPolicy: "pairing", allowFrom: ["1234567890", "123456789012345678"], dm: { enabled: true, groupEnabled: false, groupChannels: ["openclaw-dm"] }, guilds: { "123456789012345678": { slug: "friends-of-openclaw", requireMention: false, ignoreOtherMentions: true, reactionNotifications: "own", users: ["987654321098765432"], channels: { general: { allow: true }, help: { allow: true, requireMention: true, users: ["987654321098765432"], skills: ["docs"], systemPrompt: "Solo risposte brevi.", }, }, }, }, historyLimit: 20, textChunkLimit: 2000, suppressEmbeds: true, streaming: { mode: "progress", // off | partial | block | progress (valore predefinito di Discord: progress) chunkMode: "length", // length | newline progress: { label: "auto", maxLines: 8, maxLineChars: 120, toolProgress: true, }, }, maxLinesPerMessage: 17, ui: { components: { accentColor: "#5865F2", }, }, threadBindings: { enabled: true, idleHours: 24, maxAgeHours: 0, spawnSessions: true, defaultSpawnContext: "fork", }, voice: { enabled: true, autoJoin: [ { guildId: "123456789012345678", channelId: "234567890123456789", }, ], daveEncryption: true, decryptionFailureTolerance: 24, connectTimeoutMs: 30000, reconnectGraceMs: 15000, tts: { provider: "openai", openai: { voice: "alloy" }, }, }, execApprovals: { enabled: "auto", // true | false | "auto" approvers: ["987654321098765432"], agentFilter: ["default"], sessionFilter: ["discord:"], target: "dm", // dm | channel | both cleanupAfterResolve: false, }, retry: { attempts: 3, minDelayMs: 500, maxDelayMs: 30000, jitter: 0.1, }, }, },}- Token:
channels.discord.token, conDISCORD_BOT_TOKENcome soluzione di riserva per l'account predefinito. - Le chiamate dirette in uscita che forniscono un
tokenDiscord esplicito utilizzano quel token per la chiamata; le impostazioni di tentativi e criteri dell'account continuano a provenire dall'account selezionato nell'istantanea di runtime attiva. - Il valore facoltativo
channels.discord.defaultAccountsostituisce la selezione dell'account predefinito quando corrisponde all'ID di un account configurato. - Utilizzare
user:<id>(DM) ochannel:<id>(canale della gilda) come destinazioni di consegna; gli ID numerici senza prefisso vengono rifiutati. - Gli slug delle gilde sono in minuscolo, con gli spazi sostituiti da
-; le chiavi dei canali utilizzano il nome convertito in slug (senza#). Preferire gli ID delle gilde. - I messaggi creati dai bot vengono ignorati per impostazione predefinita.
allowBots: trueli abilita; utilizzareallowBots: "mentions"per accettare solo i messaggi dei bot che menzionano il bot (i messaggi del bot stesso vengono comunque filtrati). - I canali che supportano i messaggi in entrata creati dai bot possono utilizzare la protezione condivisa dai cicli dei bot. Impostare
channels.defaults.botLoopProtectionper i budget di base delle coppie, quindi sostituire l'impostazione per il canale o l'account solo quando una superficie richiede limiti diversi. channels.discord.guilds.<id>.ignoreOtherMentions(e le sostituzioni a livello di canale) scarta i messaggi che menzionano un altro utente o ruolo ma non il bot (esclusi @everyone/@here).channels.discord.mentionAliasesassocia il testo stabile@handlein uscita agli ID utente Discord prima dell'invio, consentendo di menzionare in modo deterministico i membri noti del team anche quando la cache temporanea della directory è vuota. Le sostituzioni per account si trovano inchannels.discord.accounts.<accountId>.mentionAliases.maxLinesPerMessage(valore predefinito17) suddivide i messaggi con molte righe anche quando contengono meno di 2000 caratteri.channels.discord.suppressEmbedsha come valore predefinitotrue, pertanto gli URL in uscita non vengono espansi nelle anteprime dei link di Discord, a meno che l'opzione non venga disabilitata. I payloadembedsespliciti vengono comunque inviati normalmente; le chiamate agli strumenti per singolo messaggio possono sostituire il comportamento consuppressEmbeds.channels.discord.threadBindingscontrolla l'instradamento associato ai thread di Discord:enabled: sostituzione Discord per le funzionalità delle sessioni associate ai thread (/focus,/unfocus,/agents,/session idle,/session max-agee consegna/instradamento associati)idleHours: sostituzione Discord, in ore, per la rimozione automatica del focus dopo un periodo di inattività (0la disabilita)maxAgeHours: sostituzione Discord, in ore, per la durata massima assoluta (0la disabilita)spawnSessions: opzione per la creazione e l'associazione automatica dei thread da parte disessions_spawn({ thread: true })e della generazione di thread ACP (valore predefinito:true)defaultSpawnContext: contesto nativo del sottoagente per le generazioni associate ai thread ("fork"per impostazione predefinita)
- Le voci
bindings[]di primo livello contype: "acp"configurano associazioni ACP persistenti per canali e thread (utilizzare l'ID del canale/thread inmatch.peer.id). La semantica dei campi è condivisa in Agenti ACP. channels.discord.ui.components.accentColorimposta il colore principale per i contenitori dei componenti Discord v2.channels.discord.agentComponents.ttlMscontrolla per quanto tempo i callback dei componenti Discord inviati rimangono registrati. Valore predefinito1800000(30 minuti), massimo86400000(24 ore). Le sostituzioni per account si trovano inchannels.discord.accounts.<accountId>.agentComponents.ttlMs. Preferire il TTL più breve compatibile con il flusso di lavoro.channels.discord.voiceabilita le conversazioni nei canali vocali Discord e le sostituzioni facoltative per partecipazione automatica, LLM e TTS. Le configurazioni Discord esclusivamente testuali lasciano la voce disabilitata per impostazione predefinita; impostarechannels.discord.voice.enabled=trueper abilitarla.channels.discord.voice.modelsostituisce facoltativamente il modello LLM utilizzato per le risposte nei canali vocali Discord.channels.discord.voice.daveEncryption(valore predefinitotrue) echannels.discord.voice.decryptionFailureTolerance(valore predefinito24) vengono passati alle opzioni DAVE di@discordjs/voice.channels.discord.voice.connectTimeoutMscontrolla l'attesa iniziale dello stato Ready di@discordjs/voiceper/vc joine i tentativi di partecipazione automatica (valore predefinito30000).channels.discord.voice.reconnectGraceMscontrolla quanto tempo può impiegare una sessione vocale disconnessa per entrare nella segnalazione di riconnessione prima che OpenClaw la elimini (valore predefinito15000).- La riproduzione vocale di Discord non viene interrotta dall'evento di inizio conversazione di un altro utente. Per evitare cicli di feedback, OpenClaw ignora le nuove acquisizioni vocali durante la riproduzione TTS.
- OpenClaw tenta inoltre di ripristinare la ricezione vocale abbandonando e riunendosi a una sessione vocale dopo ripetuti errori di decifratura.
channels.discord.streamingè la chiave canonica della modalità di streaming. Il valore predefinito di Discord èstreaming.mode: "progress", così l'avanzamento degli strumenti e del lavoro viene visualizzato in un unico messaggio di anteprima modificato; impostarestreaming.mode: "off"per disabilitarlo. Le chiavi piatte precedenti (streamMode,chunkMode,blockStreaming,draftChunk,blockStreamingCoalesce) non vengono più lette durante il runtime; eseguireopenclaw doctor --fixper migrare la configurazione persistente.channels.discord.autoPresenceassocia la disponibilità del runtime alla presenza del bot (integro => online, degradato => inattivo, esaurito => non disturbare) e consente sostituzioni facoltative del testo di stato.channels.discord.guilds.<id>.presenceEventsinstrada gli arrivi di disponibilità delle persone in un canale Discord configurato come eventi di sistema dell'agente. I membri idonei devono poter visualizzarechannelId; i thread pubblici ereditano la visibilità del canale principale, mentre quelli privati richiedono inoltre l'appartenenza o Manage Threads.userspuò restringere ulteriormente il pubblico. Inizializza i membri attualmente online dalle istantanee complete diGUILD_CREATE, instrada le transizioni osservate da offline a online e considera un primo segnale online successivo per un membro mai visto come nuova disponibilità, senza affermare se sia passato online o si sia unito dopo l'istantanea. Per le gilde che superano il limite di 75,000 membri per istantanea di Discord è prima necessario un aggiornamento offline esplicito. Parametri di limitazione:reconnectSuppressSeconds(finestra di quiete dopo una nuova sessione Gateway mentre viene ricostruito lo stato di presenza della gilda, valore predefinito 300,0la disabilita) eburstLimit/burstWindowSeconds(limite per gilda alla frequenza degli eventi accodati correttamente, valore predefinito 8 eventi per finestra mobile di 60s). Le sessioni riprese non avviano la finestra di soppressione della riconnessione. Il periodo di attesa esistente per un nuovo saluto allo stesso utente rimane di otto ore. Richiedechannels.discord.intents.presence=true, il Presence Intent privilegiato nel Developer Portal di Discord e un Heartbeat dell'agente abilitato.channels.discord.dangerouslyAllowNameMatchingriabilita la corrispondenza modificabile di nomi/tag (modalità di compatibilità di emergenza).channels.discord.execApprovals: consegna nativa di Discord delle approvazioni di esecuzione e autorizzazione degli approvatori.enabled:true,falseo"auto"(valore predefinito). In modalità automatica, le approvazioni di esecuzione si attivano quando gli approvatori possono essere risolti daapproversocommands.ownerAllowFrom.approvers: ID utente Discord autorizzati ad approvare le richieste di esecuzione. Se omesso, utilizzacommands.ownerAllowFromcome soluzione di riserva.agentFilter: elenco facoltativo degli ID agente consentiti. Omettere per inoltrare le approvazioni per tutti gli agenti.sessionFilter: modelli facoltativi delle chiavi di sessione (sottostringa o espressione regolare).target: destinazione a cui inviare le richieste di approvazione."dm"(valore predefinito) le invia nei DM degli approvatori,"channel"le invia al canale di origine,"both"le invia a entrambi. Quando la destinazione include"channel", i pulsanti possono essere utilizzati solo dagli approvatori risolti.cleanupAfterResolve: quando ètrue, elimina i DM di approvazione dopo l'approvazione, il rifiuto o la scadenza.
Modalità di notifica delle reazioni: off (nessuna), own (messaggi del bot, valore predefinito), all (tutti i messaggi), allowlist (da guilds.<id>.users su tutti i messaggi).
Google Chat
{ channels: { googlechat: { enabled: true, serviceAccountFile: "/path/to/service-account.json", audienceType: "app-url", // app-url | project-number audience: "https://gateway.example.com/googlechat", webhookPath: "/googlechat", botUser: "users/1234567890", dm: { enabled: true, policy: "pairing", allowFrom: ["users/1234567890"], }, groupPolicy: "allowlist", groups: { "spaces/AAAA": { allow: true, requireMention: true }, }, actions: { reactions: true }, typingIndicator: "message", mediaMaxMb: 20, }, },}- JSON dell'account di servizio: incorporato (
serviceAccount) o basato su file (serviceAccountFile). - È supportato anche il SecretRef dell'account di servizio (
serviceAccountRef). - Variabili d'ambiente di riserva:
GOOGLE_CHAT_SERVICE_ACCOUNToGOOGLE_CHAT_SERVICE_ACCOUNT_FILE(solo account predefinito). - Utilizzare
spaces/<spaceId>ousers/<userId>come destinazioni di consegna. channels.googlechat.dangerouslyAllowNameMatchingriabilita la corrispondenza modificabile dell'identità principale basata sull'indirizzo email (modalità di compatibilità di emergenza).
Slack
{ channels: { slack: { enabled: true, botToken: "xoxb-...", appToken: "xapp-...", socketMode: { clientPingTimeout: 15000, serverPingTimeout: 30000, pingPongLoggingEnabled: false, }, dmPolicy: "pairing", allowFrom: ["U123", "U456", "*"], dm: { enabled: true, groupEnabled: false, groupChannels: ["G123"] }, channels: { C123: { enabled: true, requireMention: true, allowBots: false }, "#general": { enabled: true, requireMention: true, allowBots: false, users: ["U123"], skills: ["docs"], systemPrompt: "Solo risposte brevi.", }, }, historyLimit: 50, allowBots: false, reactionNotifications: "own", reactionAllowlist: ["U123"], replyToMode: "off", // disattivata | prima | tutte | in batch thread: { historyScope: "thread", // thread | canale inheritParent: false, initialHistoryLimit: 20, }, actions: { reactions: true, messages: true, pins: true, memberInfo: true, emojiList: true, }, slashCommand: { enabled: true, name: "openclaw", sessionPrefix: "slack:slash", ephemeral: true, }, typingReaction: "hourglass_flowing_sand", unfurlLinks: false, unfurlMedia: false, textChunkLimit: 4000, streaming: { mode: "partial", // disattivata | parziale | blocco | avanzamento chunkMode: "length", // lunghezza | nuova riga nativeTransport: true, // usa l'API di streaming nativa di Slack quando mode=partial }, mediaMaxMb: 20, execApprovals: { enabled: "auto", // true | false | "auto" approvers: ["U123"], agentFilter: ["default"], sessionFilter: ["slack:"], target: "dm", // dm | canale | entrambi }, }, },}- La modalità Socket richiede sia
botTokensiaappToken(SLACK_BOT_TOKEN+SLACK_APP_TOKENper il fallback alle variabili d'ambiente dell'account predefinito). - La modalità HTTP richiede
botTokenpiùsigningSecret(a livello radice o per account). enterpriseOrgInstall: trueabilita per un account il percorso degli eventi a livello di organizzazione di Slack Enterprise Grid. All'avvio, il token del bot viene verificato conauth.teste l'avvio non riesce quando la modalità configurata non corrisponde all'identità di installazione di Slack. I DM Enterprise devono essere disabilitati oppure usaredmPolicy: "open"con unallowFrom: ["*"]effettivo. Le policy per canali e utenti devono usare ID Slack stabili; i nomi modificabili e i prefissi di canale non supportati causano il fallimento dell'avvio. La V1 gestisce soltanto eventi diretti in modalità Socket o HTTPmessageeapp_mentioncon risposte immediate; relay, comandi, interazioni, App Home, listener degli eventi di reazione, elementi fissati, strumenti di azione, approvazioni native, binding, consegna differita e invii proattivi non sono disponibili. La conferma di ricezione, l'indicazione di digitazione e le reazioni di stato gestite dal listener restano disponibili conreactions:write; le notifiche delle reazioni in entrata e gli strumenti di azione per le reazioni non sono disponibili. Consultare Installazioni a livello di organizzazione di Enterprise Grid per il manifesto con privilegi minimi, il flusso di configurazione e tutte le limitazioni.socketModeinoltra l'ottimizzazione del trasporto in modalità Socket dell'SDK Slack all'API pubblica del ricevitore Bolt. Usarlo solo quando si analizzano timeout ping/pong o comportamenti di websocket obsoleti. Il valore predefinito diclientPingTimeoutè15000;serverPingTimeoutepingPongLoggingEnabledvengono inoltrati solo se configurati.botToken,appToken,signingSecreteuserTokenaccettano stringhe di testo normale oppure oggetti SecretRef.- Le istantanee degli account Slack espongono campi relativi a origine e stato per ciascuna credenziale, come
botTokenSource,botTokenStatus,appTokenStatuse, in modalità HTTP,signingSecretStatus.configured_unavailableindica che l'account è configurato tramite SecretRef, ma il percorso corrente del comando o del runtime non ha potuto risolvere il valore del segreto. configWrites: falseblocca le scritture della configurazione avviate da Slack.- Il valore facoltativo
channels.slack.defaultAccountsostituisce la selezione dell'account predefinito quando corrisponde all'ID di un account configurato. channels.slack.streaming.modeè la chiave canonica della modalità di streaming di Slack (valore predefinito"partial").channels.slack.streaming.nativeTransportcontrolla il trasporto di streaming nativo di Slack (valore predefinitotrue). I valori precedentistreamMode, il valore booleanostreaming,chunkMode,blockStreaming,blockStreamingCoalesceenativeStreamingnon vengono più letti durante l'esecuzione; eseguireopenclaw doctor --fixper migrare la configurazione persistente astreaming.{mode,chunkMode,block.enabled,block.coalesce,nativeTransport}.unfurlLinkseunfurlMediainoltrano i valori booleanichat.postMessagedi Slack per l'espansione di link e contenuti multimediali nelle risposte del bot. Il valore predefinito diunfurlLinksèfalse, affinché i link in uscita del bot non vengano espansi in linea se non abilitati;unfurlMediaviene omesso se non è configurato. Impostare uno dei due valori inchannels.slack.accounts.<accountId>per sostituire il valore di primo livello per un singolo account.- Usare
user:<id>(DM) ochannel:<id>per le destinazioni di consegna.
Modalità di notifica delle reazioni: off, own (predefinita), all, allowlist (da reactionAllowlist).
Isolamento della sessione per thread: thread.historyScope è specifico per thread (impostazione predefinita) oppure condiviso nell'intero canale. thread.inheritParent copia la trascrizione del canale padre nei nuovi thread. thread.initialHistoryLimit (valore predefinito 20) limita il numero di messaggi esistenti del thread recuperati all'avvio di una nuova sessione del thread; 0 disabilita il recupero della cronologia dei thread.
- Lo streaming nativo di Slack e lo stato del thread in stile assistente Slack "sta scrivendo..." richiedono come destinazione della risposta un thread. Per impostazione predefinita, i DM di primo livello restano fuori dai thread, quindi possono comunque essere trasmessi tramite le anteprime delle bozze di Slack con pubblicazione e modifica, anziché mostrare l'anteprima nativa di streaming/stato in stile thread.
typingReactionaggiunge una reazione temporanea al messaggio Slack in entrata mentre è in corso una risposta, quindi la rimuove al completamento. Usare uno shortcode emoji di Slack come"hourglass_flowing_sand".channels.slack.execApprovals: consegna nativa di Slack al client di approvazione e autorizzazione degli approvatori dell'esecuzione. Stesso schema di Discord:enabled(true/false/"auto"),approvers(ID utente Slack),agentFilter,sessionFilteretarget("dm","channel"oppure"both"). Le approvazioni dei Plugin possono usare questo percorso client nativo per le richieste provenienti da Slack quando gli approvatori del Plugin Slack vengono risolti; la consegna nativa Slack delle approvazioni dei Plugin può inoltre essere abilitata tramiteapprovals.pluginper le sessioni provenienti da Slack o le destinazioni Slack. Le approvazioni dei Plugin usano gli approvatori del Plugin Slack definiti inallowFrome l'instradamento predefinito, non gli approvatori dell'esecuzione.
| Gruppo di azioni | Impostazione predefinita | Note |
|---|---|---|
| reactions | abilitato | Reagire + elencare le reazioni |
| messages | abilitato | Leggere/inviare/modificare/eliminare |
| pins | abilitato | Fissare/rimuovere/elencare |
| memberInfo | abilitato | Informazioni sul membro |
| emojiList | abilitato | Elenco di emoji personalizzate |
Mattermost
Mattermost viene installato come Plugin separato, allo stesso modo di Discord, Slack e WhatsApp:
openclaw plugins install @openclaw/mattermostConsultare npmjs.com/package/@openclaw/mattermost per i dist-tag correnti prima di fissare una versione.
{ channels: { mattermost: { enabled: true, botToken: "mm-token", baseUrl: "https://chat.example.com", dmPolicy: "pairing", chatmode: "oncall", // oncall | onmessage | onchar oncharPrefixes: [">", "!"], groups: { "*": { requireMention: true }, "team-channel-id": { requireMention: false }, }, commands: { native: true, // attivazione esplicita nativeSkills: true, callbackPath: "/api/channels/mattermost/command", // URL esplicito facoltativo per distribuzioni con proxy inverso/pubbliche callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, textChunkLimit: 4000, streaming: { chunkMode: "length" }, }, },}Modalità di chat: oncall (risponde alla menzione con @, predefinita), onmessage (ogni messaggio), onchar (messaggi che iniziano con il prefisso di attivazione).
Quando i comandi nativi di Mattermost sono abilitati:
commands.callbackPathdeve essere un percorso (ad esempio/api/channels/mattermost/command), non un URL completo.commands.callbackUrldeve risolversi nell'endpoint del Gateway OpenClaw ed essere raggiungibile dal server Mattermost.- I callback slash nativi vengono autenticati con i token specifici per comando restituiti
da Mattermost durante la registrazione del comando slash. Se la registrazione non riesce o non viene
attivato alcun comando, OpenClaw rifiuta i callback con
Unauthorized: invalid command token. - Per gli host di callback privati, tailnet o interni, Mattermost potrebbe richiedere
che
ServiceSettings.AllowedUntrustedInternalConnectionsincluda l'host o il dominio del callback. Usare valori di host o dominio, non URL completi. channels.mattermost.configWrites: consente o nega le scritture della configurazione avviate da Mattermost.channels.mattermost.requireMention: richiede@mentionprima di rispondere nei canali.channels.mattermost.groups.<channelId>.requireMention: sostituzione per canale del requisito di menzione ("*"per l'impostazione predefinita).- Il valore facoltativo
channels.mattermost.defaultAccountsostituisce la selezione dell'account predefinito quando corrisponde all'ID di un account configurato.
Signal
{ channels: { signal: { enabled: true, account: "+15555550123", // associazione facoltativa dell'account dmPolicy: "pairing", allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], configWrites: true, reactionNotifications: "own", // off | own | all | allowlist reactionAllowlist: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], historyLimit: 50, }, },}Modalità di notifica delle reazioni: off, own (predefinita), all, allowlist (da reactionAllowlist).
channels.signal.account: vincola l'avvio del canale a una specifica identità dell'account Signal.channels.signal.configWrites: consente o nega le scritture della configurazione avviate da Signal.- Il valore facoltativo
channels.signal.defaultAccountsostituisce la selezione dell'account predefinito quando corrisponde all'ID di un account configurato.
iMessage
OpenClaw avvia imsg rpc (JSON-RPC tramite stdio). Non sono richiesti daemon né porte. Questo è il percorso preferito per le nuove configurazioni iMessage di OpenClaw quando l'host può concedere le autorizzazioni per il database di Messaggi e per Automazione.
Il supporto per BlueBubbles è stato rimosso. channels.bluebubbles non è una superficie di configurazione del runtime supportata nell'attuale OpenClaw. Migrare le vecchie configurazioni a channels.imessage; consultare Rimozione di BlueBubbles e percorso iMessage tramite imsg per la versione breve e Migrazione da BlueBubbles per la tabella di conversione completa.
Se il Gateway non è in esecuzione sul Mac con accesso effettuato a Messaggi, mantenere channels.imessage.enabled=true e impostare channels.imessage.cliPath su un wrapper SSH che esegua imsg "$@" su tale Mac. Il percorso locale predefinito imsg è disponibile solo su macOS.
Prima di affidarsi a un wrapper SSH per gli invii in produzione, verificare un imsg send in uscita tramite quello stesso wrapper. Alcuni stati TCC di macOS assegnano l'autorizzazione di Automazione di Messaggi a /usr/libexec/sshd-keygen-wrapper; ciò può consentire il funzionamento delle letture e delle verifiche mentre gli invii non riescono con AppleEvents -1743. Consultare la sezione sulla risoluzione dei problemi del wrapper SSH in iMessage.
{ channels: { imessage: { enabled: true, cliPath: "imsg", dbPath: "~/Library/Messages/chat.db", remoteHost: "user@gateway-host", dmPolicy: "pairing", allowFrom: ["+15555550123", "user@example.com", "chat_id:123"], historyLimit: 50, includeAttachments: false, attachmentRoots: ["/Users/*/Library/Messages/Attachments"], remoteAttachmentRoots: ["/Users/*/Library/Messages/Attachments"], mediaMaxMb: 16, service: "auto", sendTransport: "auto", region: "US", actions: { reactions: true, edit: true, unsend: true, reply: true, sendWithEffect: true, sendAttachment: true, }, }, },}- Il valore facoltativo
channels.imessage.defaultAccountsostituisce la selezione predefinita dell'account quando corrisponde all'ID di un account configurato. - Richiede l'accesso completo al disco per il database di Messaggi.
- Preferire le destinazioni
chat_id:<id>. Usareimsg chats --limit 20per elencare le chat. cliPathpuò puntare a un wrapper SSH; impostareremoteHost(hostouser@host) per recuperare gli allegati tramite SCP.attachmentRootseremoteAttachmentRootslimitano i percorsi degli allegati in ingresso (valore predefinito:/Users/*/Library/Messages/Attachments).- SCP usa la verifica rigorosa della chiave host, quindi assicurarsi che la chiave dell'host relay esista già in
~/.ssh/known_hosts. channels.imessage.configWrites: consente o nega le scritture della configurazione avviate da iMessage.channels.imessage.sendTransport: trasporto di invio RPCimsgpreferito per le normali risposte in uscita.auto(valore predefinito) usa il bridge IMCore per le chat esistenti quando è in esecuzione, quindi ricorre ad AppleScript;bridgerichiede la consegna tramite API privata;applescriptforza il percorso pubblico di automazione di Messaggi.channels.imessage.actions.*: abilita le azioni dell'API privata soggette anche ai controlli diimsg status/openclaw channels status --probe.channels.imessage.includeAttachmentsè disattivato per impostazione predefinita; impostarlo sutrueper ricevere contenuti multimediali in ingresso nei turni dell'agente.- Il recupero dei messaggi in ingresso dopo il riavvio di un bridge/Gateway è automatico (deduplicazione GUID più un limite di età per l'arretrato obsoleto). Le configurazioni
channels.imessage.catchup.enabled: trueesistenti continuano a essere rispettate come profilo di compatibilità deprecato;catchupè disabilitato per impostazione predefinita. channels.imessage.groups: registro dei gruppi e impostazioni per gruppo. CongroupPolicy: "allowlist", configurare chiavichat_idesplicite oppure una voce jolly"*"affinché i messaggi di gruppo possano superare il controllo del registro.- Le voci
bindings[]di primo livello contype: "acp"possono associare le conversazioni iMessage a sessioni ACP persistenti. Usare un handle normalizzato o una destinazione chat esplicita (chat_id:*,chat_guid:*,chat_identifier:*) inmatch.peer.id. Semantica dei campi condivisi: Agenti ACP.
Esempio di wrapper SSH per iMessage
#!/usr/bin/env bashexec ssh -T gateway-host imsg "$@"Matrix
Matrix è supportato da un Plugin e configurato in channels.matrix.
{ channels: { matrix: { enabled: true, homeserver: "https://matrix.example.org", accessToken: "syt_bot_xxx", proxy: "http://127.0.0.1:7890", encryption: true, initialSyncLimit: 20, defaultAccount: "ops", accounts: { ops: { name: "Ops", userId: "@ops:example.org", accessToken: "syt_ops_xxx", }, alerts: { userId: "@alerts:example.org", password: "secret", proxy: "http://127.0.0.1:7891", }, }, }, },}- L'autenticazione tramite token usa
accessToken; l'autenticazione tramite password usauserId+password. channels.matrix.proxyinstrada il traffico HTTP di Matrix attraverso un proxy HTTP(S) esplicito. Gli account denominati possono sostituirlo conchannels.matrix.accounts.<id>.proxy.channels.matrix.network.dangerouslyAllowPrivateNetworkconsente homeserver privati/interni.proxye questa abilitazione esplicita della rete sono controlli indipendenti.channels.matrix.defaultAccountseleziona l'account preferito nelle configurazioni con più account.channels.matrix.autoJoinusa come valore predefinito"off", pertanto le stanze alle quali si è invitati e i nuovi inviti simili a messaggi diretti vengono ignorati finché non si impostaautoJoin: "allowlist"conautoJoinAllowlistoautoJoin: "always".channels.matrix.execApprovals: consegna nativa di Matrix delle approvazioni di esecuzione e autorizzazione degli approvatori.enabled:true,falseo"auto"(valore predefinito). In modalità automatica, le approvazioni di esecuzione si attivano quando è possibile determinare gli approvatori daapproversocommands.ownerAllowFrom.approvers: ID utente Matrix (ad esempio@owner:example.org) autorizzati ad approvare le richieste di esecuzione.agentFilter: elenco facoltativo degli ID agente consentiti. Ometterlo per inoltrare le approvazioni per tutti gli agenti.sessionFilter: modelli facoltativi delle chiavi di sessione (sottostringa o espressione regolare).target: destinazione a cui inviare le richieste di approvazione."dm"(valore predefinito),"channel"(stanza di origine) o"both".- Sostituzioni per account:
channels.matrix.accounts.<id>.execApprovals.
channels.matrix.dm.sessionScopecontrolla il raggruppamento dei messaggi diretti di Matrix in sessioni:per-user(valore predefinito) li condivide in base all'interlocutore instradato, mentreper-roomisola ogni stanza di messaggi diretti.- I controlli di stato di Matrix e le ricerche in tempo reale nella directory usano la stessa politica proxy del traffico di runtime.
- La configurazione completa di Matrix, le regole di destinazione e gli esempi di configurazione sono documentati in Matrix.
Microsoft Teams
Microsoft Teams è supportato da un Plugin e configurato in channels.msteams.
{ channels: { msteams: { enabled: true, configWrites: true, // appId, appPassword, tenantId, webhook, criteri per team/canale: // consultare /channels/msteams }, },}- Percorsi delle chiavi principali trattati qui:
channels.msteams,channels.msteams.configWrites. - La configurazione completa di Teams (credenziali, Webhook, politica per messaggi diretti/gruppi, sostituzioni per team/canale) è documentata in Microsoft Teams.
IRC
IRC è supportato da un Plugin e configurato in channels.irc.
{ channels: { irc: { enabled: true, dmPolicy: "pairing", configWrites: true, nickserv: { enabled: true, service: "NickServ", password: "${IRC_NICKSERV_PASSWORD}", register: false, registerEmail: "bot@example.com", }, }, },}- Percorsi delle chiavi principali trattati qui:
channels.irc,channels.irc.dmPolicy,channels.irc.configWrites,channels.irc.nickserv.*. - Il valore facoltativo
channels.irc.defaultAccountsostituisce la selezione predefinita dell'account quando corrisponde all'ID di un account configurato. - La configurazione completa del canale IRC (host/porta/TLS/canali/elenchi di elementi consentiti/controllo delle menzioni) è documentata in IRC.
Più account (tutti i canali)
È possibile eseguire più account per canale (ciascuno con il proprio accountId):
{ channels: { telegram: { accounts: { default: { name: "Bot principale", botToken: "123456:ABC...", }, alerts: { name: "Bot degli avvisi", botToken: "987654:XYZ...", }, }, }, },}defaultviene usato quandoaccountIdè omesso (CLI + instradamento).- I token di ambiente si applicano solo all'account predefinito.
- Le impostazioni di base del canale si applicano a tutti gli account, salvo sostituzioni specifiche per account.
- Usare
bindings[].match.accountIdper instradare ciascun account verso un agente diverso. - Se si aggiunge un account non predefinito tramite
openclaw channels add(o durante l'onboarding del canale) mentre si usa ancora una configurazione del canale di primo livello con un singolo account, OpenClaw sposta prima i valori di primo livello relativi all'account singolo nella mappa degli account del canale, affinché l'account originale continui a funzionare. La maggior parte dei canali li sposta inchannels.<channel>.accounts.default; Matrix può invece conservare una destinazione denominata/predefinita esistente corrispondente. - Le associazioni esistenti relative al solo canale (senza
accountId) continuano a corrispondere all'account predefinito; le associazioni specifiche per account restano facoltative. openclaw doctor --fixcorregge anche le strutture miste spostando i valori di primo livello relativi all'account singolo nell'account promosso scelto per quel canale. La maggior parte dei canali usaaccounts.default; Matrix può invece conservare una destinazione denominata/predefinita esistente corrispondente.
Altri canali Plugin
Molti canali Plugin sono configurati come channels.<id> e documentati nelle rispettive pagine dedicate (ad esempio Feishu, LINE, Nextcloud Talk, Nostr, QQ Bot, Synology Chat, Twitch e Zalo).
Consultare l'indice completo dei canali: Canali.
Controllo delle menzioni nelle chat di gruppo
Per impostazione predefinita, i messaggi di gruppo richiedono una menzione (menzione nei metadati o modelli di espressioni regolari sicuri). Si applica alle chat di gruppo di WhatsApp, Telegram, Discord, Google Chat e iMessage.
Le risposte visibili sono controllate separatamente. Per impostazione predefinita, le normali richieste dirette di gruppo, di canale e del WebChat interno prevedono la consegna finale automatica: il testo finale dell'assistente viene pubblicato tramite il percorso legacy delle risposte visibili. Abilitare messages.visibleReplies: "message_tool" o messages.groupChat.visibleReplies: "message_tool" quando l'output visibile deve essere pubblicato solo dopo che l'agente ha chiamato message(action=send). Se il modello restituisce una risposta finale sostanziale senza chiamare lo strumento di messaggistica in una modalità abilitata per il solo strumento, tale testo finale rimane privato, il log dettagliato del Gateway registra i metadati del payload soppresso e OpenClaw accoda un singolo nuovo tentativo di recupero chiedendo al modello di consegnare la stessa risposta tramite message(action=send).
Le risposte visibili tramite il solo strumento richiedono un modello/runtime che chiami gli strumenti in modo affidabile e sono consigliate per le stanze ambientali condivise con modelli di ultima generazione come GPT-5.6 Sol. Alcuni modelli meno capaci possono restituire il testo finale, ma non comprendere che l'output visibile nell'origine deve essere inviato con message(action=send). Per impostazione predefinita, OpenClaw recupera il caso comune di una risposta finale non consegnata solo quando il contenuto finale è sostanziale, il turno di origine non era un evento della stanza, la politica di invio non ha negato la consegna e non è già stata inviata alcuna risposta all'origine. Il recupero è limitato a un solo nuovo tentativo; disabilita la persistenza per il prompt sintetico del nuovo tentativo e lo esclude dal raggruppamento della raccolta, impedendone l'unione con prompt accodati non correlati. Se anche il nuovo tentativo resta non consegnato o non può essere accodato, OpenClaw consegna soltanto un messaggio diagnostico sanificato, ad esempio "Ho generato una risposta, ma non è stato possibile consegnarla a questa chat. Riprovare." Il testo finale privato originale non viene mai contrassegnato per la consegna automatica all'origine. Per i modelli che lasciano ripetutamente risposte non consegnate, usare "automatic" affinché il turno finale dell'assistente costituisca il percorso della risposta visibile, passare a un modello più capace nelle chiamate agli strumenti, esaminare il log dettagliato del Gateway per il riepilogo del payload soppresso oppure impostare messages.groupChat.visibleReplies: "automatic" per usare risposte finali visibili per ogni richiesta di gruppo/canale.
Se lo strumento di messaggistica non è disponibile secondo la politica degli strumenti attiva, OpenClaw ricorre alle risposte visibili automatiche anziché sopprimere silenziosamente la risposta. openclaw doctor segnala questa mancata corrispondenza.
Questa regola si applica al normale testo finale dell'agente. Le associazioni delle conversazioni gestite da un Plugin usano la risposta restituita dal Plugin proprietario come risposta visibile per i turni rivendicati del thread associato; il Plugin non deve chiamare message(action=send) per tali risposte delle associazioni.
Risoluzione dei problemi: la @menzione di gruppo attiva l'indicatore di digitazione, poi non accade nulla (nessun errore)
Sintomo: una @menzione in un gruppo/canale mostra l'indicatore di digitazione e il log del Gateway riporta dispatch complete (queuedFinal=false, replies=0), ma nella stanza non viene recapitato alcun messaggio. I messaggi diretti allo stesso agente ricevono normalmente una risposta.
Causa: la modalità di risposta visibile per gruppi/canali viene risolta in "message_tool", quindi OpenClaw esegue il turno ma sopprime il testo finale dell'assistente, a meno che l'agente non chiami message(action=send). In questa modalità non esiste alcun contratto NO_REPLY; se non viene chiamato lo strumento per i messaggi, il testo finale originale rimane privato. Per i turni sorgente sostanziali, OpenClaw ora tenta un singolo nuovo tentativo di recupero protetto; le note brevi, il silenzio esplicito, gli eventi della stanza, i turni rifiutati dalla politica di invio e quelli già recapitati non vengono ritentati. Per impostazione predefinita, i normali turni di gruppo e canale usano "automatic", quindi questo sintomo si presenta solo quando messages.groupChat.visibleReplies (o l'impostazione globale messages.visibleReplies) è impostato esplicitamente su "message_tool". L'impostazione dell'harness defaultVisibleReplies non si applica in questo caso: il resolver per gruppi/canali la ignora; influisce solo sulle chat dirette/sorgente (l'harness Codex sopprime in questo modo i messaggi finali delle chat dirette).
Soluzione: scegliere un modello con maggiore capacità di chiamare strumenti, rimuovere l'override esplicito "message_tool" per ripristinare il valore predefinito "automatic", oppure impostare messages.groupChat.visibleReplies: "automatic" per forzare risposte visibili per ogni richiesta di gruppo/canale. Un messaggio finale sostanziale rimasto bloccato non dovrebbe più concludersi con un successo silenzioso; dovrebbe recuperare tramite un singolo nuovo tentativo message(action=send) oppure mostrare la diagnostica sanitizzata dell'errore di recapito. Il Gateway ricarica automaticamente la configurazione messages dopo il salvataggio del file; riavviare il Gateway solo quando il monitoraggio dei file o il ricaricamento della configurazione è disabilitato nella distribuzione.
Tipi di menzione:
- Menzioni nei metadati: @-menzioni native della piattaforma. Ignorate nella modalità di chat con sé stessi di WhatsApp.
- Pattern testuali: pattern regex sicuri in
agents.list[].groupChat.mentionPatterns. I pattern non validi e le ripetizioni annidate non sicure vengono ignorati. - Il filtro delle menzioni viene applicato solo quando il rilevamento è possibile (menzioni native o almeno un pattern).
{ messages: { visibleReplies: "automatic", // forza le precedenti risposte finali automatiche per le chat dirette/sorgente groupChat: { historyLimit: 50, unmentionedInbound: "room_event", // le conversazioni della stanza sempre attive e senza menzioni diventano contesto silenzioso visibleReplies: "message_tool", // adesione esplicita; richiede message(action=send) per risposte visibili nella stanza }, }, agents: { list: [{ id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"] } }], },}messages.groupChat.historyLimit imposta il valore predefinito globale. I canali possono eseguire l'override con channels.<channel>.historyLimit (anche per singolo account). Impostare 0 per disabilitare.
messages.groupChat.unmentionedInbound: "room_event" invia i messaggi di gruppo/canale sempre attivi e senza menzioni come contesto silenzioso della stanza sui canali supportati. I messaggi con menzioni, i comandi e i messaggi diretti restano richieste dell'utente. Consultare Eventi ambientali della stanza per esempi completi relativi a Discord, Slack e Telegram.
messages.visibleReplies è il valore predefinito globale per gli eventi sorgente; messages.groupChat.visibleReplies ne esegue l'override per gli eventi sorgente di gruppo/canale. Quando messages.visibleReplies non è impostato, le chat dirette/sorgente usano il valore predefinito del runtime o dell'harness selezionato, ma i turni diretti interni di WebChat usano il recapito finale automatico per garantire la parità dei prompt di Pi/Codex. Impostare messages.visibleReplies: "message_tool" per richiedere intenzionalmente message(action=send) per un output visibile. Le liste di elementi consentiti dei canali e il filtro delle menzioni continuano a determinare se un evento viene elaborato.
Limiti della cronologia dei messaggi diretti
{ channels: { telegram: { dmHistoryLimit: 30, dms: { "123456789": { historyLimit: 50 }, }, }, },}Risoluzione: override per messaggio diretto → valore predefinito del provider → nessun limite (tutti conservati).
Questo resolver legge channels.<provider>.dmHistoryLimit e channels.<provider>.dms.<id>.historyLimit per qualsiasi canale la cui chiave di sessione segua il formato standard provider:direct:<id> (o quello precedente provider:dm:<id>), quindi funziona sia con i canali inclusi sia con i canali Plugin, non soltanto con un elenco fisso.
Modalità di chat con sé stessi
Includere il proprio numero in allowFrom per abilitare la modalità di chat con sé stessi (ignora le @-menzioni native e risponde solo ai pattern testuali):
{ channels: { whatsapp: { allowFrom: ["+15555550123"], groups: { "*": { requireMention: true } }, }, }, agents: { list: [ { id: "main", groupChat: { mentionPatterns: ["reisponde", "@openclaw"] }, }, ], },}Comandi (gestione dei comandi di chat)
{ commands: { native: "auto", // registra i comandi nativi quando supportati nativeSkills: "auto", // registra i comandi Skills nativi quando supportati text: true, // analizza i /comandi nei messaggi di chat bash: false, // consente ! (alias: /bash) bashForegroundMs: 2000, config: false, // consente /config mcp: false, // consente /mcp plugins: false, // consente /plugins debug: false, // consente /debug restart: true, // consente /restart e le richieste esterne di riavvio SIGUSR1 ownerAllowFrom: ["discord:123456789012345678"], ownerDisplay: "raw", // raw | hash ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}", allowFrom: { "*": ["user1"], discord: ["user:123"], }, useAccessGroups: true, },}Dettagli dei comandi
- Questo blocco configura le superfici dei comandi. Per il catalogo corrente dei comandi integrati e inclusi, consultare Comandi slash.
- Questa pagina è un riferimento per le chiavi di configurazione, non il catalogo completo dei comandi. I comandi gestiti da canali/Plugin, come QQ Bot
/bot-ping/bot-help/bot-logs, LINE/card, associazione dispositivi/pair, memoria/dreaming, controllo telefonico/phonee Talk/voice, sono documentati nelle rispettive pagine dei canali/Plugin e in Comandi slash. - I comandi testuali devono essere messaggi autonomi preceduti da
/. native: "auto"abilita i comandi nativi per Discord/Telegram e li lascia disabilitati per Slack.nativeSkills: "auto"abilita i comandi Skills nativi per Discord/Telegram e li lascia disabilitati per Slack.- Override per canale:
channels.discord.commands.native(booleano o"auto"). Per Discord,falseevita la registrazione e la pulizia dei comandi nativi durante l'avvio. - È possibile eseguire l'override della registrazione delle Skills native per canale con
channels.<provider>.commands.nativeSkills. channels.telegram.customCommandsaggiunge ulteriori voci al menu del bot Telegram.bash: trueabilita! <cmd>per la shell dell'host. Richiedetools.elevated.enablede che il mittente sia presente intools.elevated.allowFrom.<channel>.config: trueabilita/config(legge/scriveopenclaw.json). Per i clientchat.senddel Gateway, le scritture persistenti/config set|unsetrichiedono ancheoperator.admin; il comando di sola lettura/config showresta disponibile ai normali client operatore con ambito di scrittura.mcp: trueabilita/mcpper la configurazione dei server MCP gestiti da OpenClaw inmcp.servers.plugins: trueabilita/pluginsper l'individuazione, l'installazione e i controlli di abilitazione/disabilitazione dei Plugin.channels.<provider>.configWritescontrolla le modifiche alla configurazione per canale (valore predefinito: true).- Per i canali con più account,
channels.<provider>.accounts.<id>.configWritescontrolla anche le scritture destinate a tale account (ad esempio/allowlist --config --account <id>o/config set channels.<provider>.accounts.<id>...). restart: falsedisabilita/restarte le richieste esterne di riavvioSIGUSR1. Valore predefinito:true.ownerAllowFromè la lista esplicita degli elementi consentiti per i comandi riservati al proprietario e le azioni dei canali soggette all'autorizzazione del proprietario. È distinta daallowFrom.ownerDisplay: "hash"applica un hash agli ID dei proprietari nel prompt di sistema. ImpostareownerDisplaySecretper controllare l'hashing.allowFromè specifico per provider. Quando è impostato, costituisce l'unica fonte di autorizzazione (le liste di elementi consentiti/l'associazione dei canali euseAccessGroupsvengono ignorati).useAccessGroups: falseconsente ai comandi di ignorare le politiche dei gruppi di accesso quandoallowFromnon è impostato.- Mappa della documentazione dei comandi:
- catalogo integrato e incluso: Comandi slash
- superfici dei comandi specifiche dei canali: Canali
- comandi QQ Bot: QQ Bot
- comandi di associazione: Associazione
- comando per le schede LINE: LINE
- Dreaming della memoria: Dreaming
Contenuti correlati
- Riferimento della configurazione — chiavi di primo livello
- Configurazione — agenti
- Panoramica dei canali