Gateway
Configuratie — kanalen
Per-kanaalconfiguratiesleutels onder channels.*. Behandelt DM- en groepstoegang,
multi-accountconfiguraties, mention-gating en per-kanaalsleutels voor Slack, Discord,
Telegram, WhatsApp, Matrix, iMessage en de andere meegeleverde kanaalplugins.
Voor agents, tools, Gateway-runtime en andere topniveausleutels, zie Configuratiereferentie.
Kanalen
Elk kanaal start automatisch wanneer de configuratiesectie bestaat (tenzij enabled: false).
DM- en groepstoegang
Alle kanalen ondersteunen DM-beleid en groepsbeleid:
| DM-beleid | Gedrag |
|---|---|
pairing (standaard) |
Onbekende afzenders krijgen een eenmalige koppelingscode; de eigenaar moet goedkeuren |
allowlist |
Alleen afzenders in allowFrom (of gekoppelde toestemmingsopslag) |
open |
Alle inkomende DM's toestaan (vereist allowFrom: ["*"]) |
disabled |
Alle inkomende DM's negeren |
| Groepsbeleid | Gedrag |
|---|---|
allowlist (standaard) |
Alleen groepen die overeenkomen met de geconfigureerde allowlist |
open |
Groeps-allowlists omzeilen (mention-gating blijft van toepassing) |
disabled |
Alle groeps-/ruimteberichten blokkeren |
Kanaalmodel-overschrijvingen
Gebruik channels.modelByChannel om specifieke kanaal-ID's aan een model vast te pinnen. Waarden accepteren provider/model of geconfigureerde modelaliassen. De kanaaltoewijzing wordt toegepast wanneer een sessie nog geen model-overschrijving heeft (bijvoorbeeld ingesteld via /model).
{
channels: {
modelByChannel: {
discord: {
"123456789012345678": "anthropic/claude-opus-4-6",
},
slack: {
C1234567890: "openai/gpt-4.1",
},
telegram: {
"-1001234567890": "openai/gpt-4.1-mini",
"-1001234567890:topic:99": "anthropic/claude-sonnet-4-6",
},
},
},
}
Kanaalstandaarden en Heartbeat
Gebruik channels.defaults voor gedeeld groepsbeleid en Heartbeat-gedrag voor providers:
{
channels: {
defaults: {
groupPolicy: "allowlist", // open | allowlist | disabled
contextVisibility: "all", // all | allowlist | allowlist_quote
heartbeat: {
showOk: false,
showAlerts: true,
useIndicator: true,
},
},
},
}
channels.defaults.groupPolicy: fallback-groepsbeleid wanneer een providerniveau-groupPolicyniet is ingesteld.channels.defaults.contextVisibility: standaard zichtbaarheidsmodus voor aanvullende context voor alle kanalen. Waarden:all(standaard, alle geciteerde/thread-/geschiedeniscontext opnemen),allowlist(alleen context opnemen van afzenders op de allowlist),allowlist_quote(hetzelfde als allowlist, maar expliciete citaat-/antwoordcontext behouden). Per-kanaaloverschrijving:channels.<channel>.contextVisibility.channels.defaults.heartbeat.showOk: gezonde kanaalstatussen opnemen in Heartbeat-uitvoer.channels.defaults.heartbeat.showAlerts: gedegradeerde/foutstatussen opnemen in Heartbeat-uitvoer.channels.defaults.heartbeat.useIndicator: compacte indicatorstijl-Heartbeat-uitvoer renderen.
WhatsApp draait via het webkanaal van de Gateway (Baileys Web). Het start automatisch wanneer er een gekoppelde sessie bestaat.
{
web: {
enabled: true,
heartbeatSeconds: 60,
whatsapp: {
keepAliveIntervalMs: 25000,
connectTimeoutMs: 60000,
defaultQueryTimeoutMs: 60000,
},
reconnect: {
initialMs: 2000,
maxMs: 120000,
factor: 1.4,
jitter: 0.2,
maxAttempts: 0,
},
},
channels: {
whatsapp: {
dmPolicy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["+15555550123", "+447700900123"],
textChunkLimit: 4000,
chunkMode: "length", // length | newline
mediaMaxMb: 50,
sendReadReceipts: true, // blue ticks (false in self-chat mode)
groups: {
"*": { requireMention: true },
},
groupPolicy: "allowlist",
groupAllowFrom: ["+15551234567"],
},
},
}
Multi-account WhatsApp
{
channels: {
whatsapp: {
accounts: {
default: {},
personal: {},
biz: {
// authDir: "~/.openclaw/credentials/whatsapp/biz",
},
},
},
},
}
- Uitgaande opdrachten gebruiken standaard account
defaultals dat aanwezig is; anders het eerste geconfigureerde account-ID (gesorteerd). - Optioneel
channels.whatsapp.defaultAccountoverschrijft die fallbackselectie van het standaardaccount wanneer het overeenkomt met een geconfigureerd account-ID. - De verouderde Baileys-authenticatiemap voor één account wordt door
openclaw doctorgemigreerd naarwhatsapp/default. - Per-accountoverschrijvingen:
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: "partial", // off | partial | block | progress (default: off; opt in explicitly to avoid preview-edit rate limits)
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",
proxy: "socks5://localhost:9050",
webhookUrl: "https://example.com/telegram-webhook",
webhookSecret: "secret",
webhookPath: "/telegram-webhook",
},
},
}
- Bottoken:
channels.telegram.botTokenofchannels.telegram.tokenFile(alleen regulier bestand; symlinks geweigerd), metTELEGRAM_BOT_TOKENals fallback voor het standaardaccount. apiRootis alleen de root van de Telegram Bot API. Gebruikhttps://api.telegram.orgof je zelfgehoste/proxy-root, niethttps://api.telegram.org/bot<TOKEN>;openclaw doctor --fixverwijdert een per ongeluk toegevoegde afsluitende/bot<TOKEN>-suffix.- Optioneel
channels.telegram.defaultAccountoverschrijft de standaardaccountselectie wanneer het overeenkomt met een geconfigureerd account-ID. - Stel in multi-accountconfiguraties (2+ account-ID's) een expliciete standaard in (
channels.telegram.defaultAccountofchannels.telegram.accounts.default) om fallback-routering te voorkomen;openclaw doctorwaarschuwt wanneer dit ontbreekt of ongeldig is. configWrites: falseblokkeert door Telegram geïnitieerde configuratieschrijfacties (supergroep-ID-migraties,/config set|unset).- Topniveau-
bindings[]-items mettype: "acp"configureren persistente ACP-bindingen voor forumtopics (gebruik canoniekchatId:topic:topicIdinmatch.peer.id). Veldsemantiek wordt gedeeld in ACP-agents. - Telegram-streamvoorbeelden gebruiken
sendMessage+editMessageText(werkt in directe en groepschats). - Herhaalbeleid: zie Herhaalbeleid.
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: "Short answers only.",
},
},
},
},
historyLimit: 20,
textChunkLimit: 2000,
chunkMode: "length", // length | newline
streaming: {
mode: "progress", // off | partial | block | progress (Discord default: progress)
progress: {
label: "auto",
maxLines: 8,
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, metDISCORD_BOT_TOKENals fallback voor het standaardaccount. - Directe uitgaande calls die een expliciete Discord-
tokenopgeven, gebruiken die token voor de call; instellingen voor accountretry/beleid komen nog steeds uit het geselecteerde account in de actieve runtime-snapshot. - Optionele
channels.discord.defaultAccountoverschrijft de standaardaccountselectie wanneer deze overeenkomt met een geconfigureerde account-id. - Gebruik
user:<id>(DM) ofchannel:<id>(guild-kanaal) voor bezorgdoelen; losse numerieke id's worden geweigerd. - Guild-slugs zijn kleine letters waarbij spaties zijn vervangen door
-; kanaalsleutels gebruiken de geslugde naam (zonder#). Geef de voorkeur aan guild-id's. - Berichten die door bots zijn geschreven, worden standaard genegeerd.
allowBots: trueschakelt ze in; gebruikallowBots: "mentions"om alleen botberichten te accepteren die de bot vermelden (eigen berichten blijven gefilterd). channels.discord.guilds.<id>.ignoreOtherMentions(en kanaaloverschrijvingen) verwijdert berichten die een andere gebruiker of rol vermelden maar niet de bot (met uitzondering van @everyone/@here).channels.discord.mentionAliaseskoppelt stabiele uitgaande@handle-tekst aan Discord-gebruikers-id's voordat wordt verzonden, zodat bekende teamgenoten deterministisch kunnen worden vermeld, zelfs wanneer de tijdelijke directory-cache leeg is. Per-accountoverschrijvingen staan onderchannels.discord.accounts.<accountId>.mentionAliases.maxLinesPerMessage(standaard 17) splitst hoge berichten, zelfs wanneer ze onder 2000 tekens blijven.channels.discord.threadBindingsbeheert Discord thread-gebonden routering:enabled: Discord-overschrijving voor thread-gebonden sessiefuncties (/focus,/unfocus,/agents,/session idle,/session max-age, en gebonden bezorging/routering)idleHours: Discord-overschrijving voor automatische unfocus bij inactiviteit in uren (0schakelt uit)maxAgeHours: Discord-overschrijving voor harde maximale leeftijd in uren (0schakelt uit)spawnSessions: schakelaar voorsessions_spawn({ thread: true })en automatische thread-aanmaak/-binding door ACP thread-spawn (standaard:true)defaultSpawnContext: native subagent-context voor thread-gebonden spawns (standaard"fork")
- Top-level
bindings[]-items mettype: "acp"configureren persistente ACP-bindingen voor kanalen en threads (gebruik kanaal-/thread-id inmatch.peer.id). Veldsemantiek wordt gedeeld in ACP Agents. channels.discord.ui.components.accentColorstelt de accentkleur in voor Discord components v2-containers.channels.discord.voiceschakelt Discord-spraakkanaalgesprekken en optionele auto-join + LLM + TTS-overschrijvingen in. Tekst-only Discord-configuraties laten spraak standaard uit; stelchannels.discord.voice.enabled=truein om je aan te melden.channels.discord.voice.modeloverschrijft optioneel het LLM-model dat wordt gebruikt voor Discord-spraakkanaalantwoorden.channels.discord.voice.daveEncryptionenchannels.discord.voice.decryptionFailureToleranceworden doorgegeven aan@discordjs/voiceDAVE-opties (standaardtrueen24).channels.discord.voice.connectTimeoutMsbeheert de initiële@discordjs/voiceReady-wachttijd voor/vc joinen auto-join-pogingen (standaard30000).channels.discord.voice.reconnectGraceMsbeheert hoelang een verbroken spraaksessie mag duren om reconnect-signalering te bereiken voordat OpenClaw deze vernietigt (standaard15000).- Discord-spraakweergave wordt niet onderbroken door een speaking-start-event van een andere gebruiker. Om feedbackloops te vermijden, negeert OpenClaw nieuwe spraakopname terwijl TTS afspeelt.
- OpenClaw probeert daarnaast spraakontvangst te herstellen door een spraaksessie te verlaten en opnieuw te joinen na herhaalde decryptiefouten.
channels.discord.streamingis de canonieke streammodussleutel. Discord gebruikt standaardstreaming.mode: "progress", zodat tool-/werkvoortgang verschijnt in één bewerkt previewbericht; stelstreaming.mode: "off"in om dit uit te schakelen. LegacystreamMode- en booleaansestreaming-waarden blijven runtime-aliassen; voeropenclaw doctor --fixuit om persistente configuratie te herschrijven.channels.discord.autoPresencekoppelt runtime-beschikbaarheid aan botpresence (healthy => online, degraded => idle, exhausted => dnd) en staat optionele overschrijvingen van statustekst toe.channels.discord.dangerouslyAllowNameMatchingschakelt veranderlijke naam-/tagmatching opnieuw in (break-glass-compatibiliteitsmodus).channels.discord.execApprovals: Discord-native levering van exec-goedkeuringen en autorisatie van goedkeurders.enabled:true,falseof"auto"(standaard). In auto-modus worden exec-goedkeuringen geactiveerd wanneer goedkeurders kunnen worden opgelost uitapproversofcommands.ownerAllowFrom.approvers: Discord-gebruikers-id's die exec-aanvragen mogen goedkeuren. Valt terug opcommands.ownerAllowFromwanneer weggelaten.agentFilter: optionele allowlist met agent-id's. Laat weg om goedkeuringen voor alle agents door te sturen.sessionFilter: optionele sessiesleutelpatronen (substring of regex).target: waar goedkeuringsprompts naartoe moeten worden gestuurd."dm"(standaard) stuurt naar goedkeurders-DM's,"channel"stuurt naar het oorsprongskanaal,"both"stuurt naar beide. Wanneer target"channel"bevat, zijn knoppen alleen bruikbaar door opgeloste goedkeurders.cleanupAfterResolve: wanneertrue, verwijdert goedkeurings-DM's na goedkeuring, weigering of timeout.
Reactiemeldingsmodi: off (geen), own (berichten van de bot, standaard), all (alle berichten), allowlist (uit guilds.<id>.users op alle berichten).
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,
},
},
}
- Serviceaccount-JSON: inline (
serviceAccount) of bestandgebaseerd (serviceAccountFile). - Serviceaccount-SecretRef wordt ook ondersteund (
serviceAccountRef). - Env-fallbacks:
GOOGLE_CHAT_SERVICE_ACCOUNTofGOOGLE_CHAT_SERVICE_ACCOUNT_FILE. - Gebruik
spaces/<spaceId>ofusers/<userId>voor bezorgdoelen. channels.googlechat.dangerouslyAllowNameMatchingschakelt veranderlijke e-mailprincipalmatching opnieuw in (break-glass-compatibiliteitsmodus).
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: { allow: true, requireMention: true, allowBots: false },
"#general": {
allow: true,
requireMention: true,
allowBots: false,
users: ["U123"],
skills: ["docs"],
systemPrompt: "Short answers only.",
},
},
historyLimit: 50,
allowBots: false,
reactionNotifications: "own",
reactionAllowlist: ["U123"],
replyToMode: "off", // off | first | all | batched
thread: {
historyScope: "thread", // thread | channel
inheritParent: false,
},
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",
textChunkLimit: 4000,
chunkMode: "length",
streaming: {
mode: "partial", // off | partial | block | progress
nativeTransport: true, // use Slack native streaming API when mode=partial
},
mediaMaxMb: 20,
execApprovals: {
enabled: "auto", // true | false | "auto"
approvers: ["U123"],
agentFilter: ["default"],
sessionFilter: ["slack:"],
target: "dm", // dm | channel | both
},
},
},
}
- Socketmodus vereist zowel
botTokenalsappToken(SLACK_BOT_TOKEN+SLACK_APP_TOKENvoor de env-fallback van het standaardaccount). - HTTP-modus vereist
botTokenplussigningSecret(op rootniveau of per account). socketModegeeft Slack SDK Socket Mode-transporttuning door aan de publieke Bolt receiver-API. Gebruik dit alleen bij onderzoek naar ping/pong-timeouts of verouderd websocketgedrag.botToken,appToken,signingSecretenuserTokenaccepteren platte-tekststrings of SecretRef-objecten.- Slack-accountsnapshots tonen per-credential bron-/statusvelden zoals
botTokenSource,botTokenStatus,appTokenStatusen, in HTTP-modus,signingSecretStatus.configured_unavailablebetekent dat het account is geconfigureerd via SecretRef, maar dat het huidige command-/runtimepad de geheime waarde niet kon oplossen. configWrites: falseblokkeert door Slack geïnitieerde configuratieschrijfacties.- Optionele
channels.slack.defaultAccountoverschrijft de standaardaccountselectie wanneer deze overeenkomt met een geconfigureerde account-id. channels.slack.streaming.modeis de canonieke Slack-streammodussleutel.channels.slack.streaming.nativeTransportbeheert Slacks native streamingtransport. LegacystreamMode-, booleaansestreaming- ennativeStreaming-waarden blijven runtime-aliassen; voeropenclaw doctor --fixuit om persistente configuratie te herschrijven.- Gebruik
user:<id>(DM) ofchannel:<id>voor bezorgdoelen.
Reactiemeldingsmodi: off, own (standaard), all, allowlist (uit reactionAllowlist).
Threadsessie-isolatie: thread.historyScope is per thread (standaard) of gedeeld over het kanaal. thread.inheritParent kopieert het transcript van het bovenliggende kanaal naar nieuwe threads.
- Slack-native streaming plus de Slack assistant-stijl "is typing..."-threadstatus vereisen een antwoordthreadtarget. Top-level DM's blijven standaard buiten threads, zodat ze nog steeds kunnen streamen via Slack-conceptberichten met plaatsing en bewerking in plaats van de thread-stijl native stream-/statuspreview te tonen.
typingReactionvoegt een tijdelijke reactie toe aan het inkomende Slack-bericht terwijl een antwoord loopt, en verwijdert deze daarna bij voltooiing. Gebruik een Slack-emoji-shortcode zoals"hourglass_flowing_sand".channels.slack.execApprovals: Slack-native levering van exec-goedkeuringen en autorisatie van goedkeurders. Zelfde schema als Discord:enabled(true/false/"auto"),approvers(Slack-gebruikers-id's),agentFilter,sessionFilterentarget("dm","channel"of"both").
| Actiegroep | Standaard | Opmerkingen |
|---|---|---|
| reactions | ingeschakeld | Reageer + lijst reacties |
| messages | ingeschakeld | Lezen/verzenden/bewerken/verwijderen |
| pins | ingeschakeld | Vastzetten/losmaken/lijst |
| memberInfo | ingeschakeld | Lidgegevens |
| emojiList | ingeschakeld | Aangepaste emojilijst |
Mattermost
Mattermost wordt geleverd als gebundelde Plugin in huidige OpenClaw-releases. Oudere of
aangepaste builds kunnen een huidig npm-pakket installeren met
openclaw plugins install @openclaw/mattermost. Controleer
npmjs.com/package/@openclaw/mattermost
voor de huidige dist-tags voordat je een versie vastpint.
{
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, // opt-in
nativeSkills: true,
callbackPath: "/api/channels/mattermost/command",
// Optional explicit URL for reverse-proxy/public deployments
callbackUrl: "https://gateway.example.com/api/channels/mattermost/command",
},
textChunkLimit: 4000,
chunkMode: "length",
},
},
}
Chatmodi: oncall (reageer op @-vermelding, standaard), onmessage (elk bericht), onchar (berichten die beginnen met triggerprefix).
Wanneer native Mattermost-opdrachten zijn ingeschakeld:
commands.callbackPathmoet een pad zijn (bijvoorbeeld/api/channels/mattermost/command), geen volledige URL.commands.callbackUrlmoet worden omgezet naar het OpenClaw Gateway-eindpunt en bereikbaar zijn vanaf de Mattermost-server.- Native slash-callbacks worden geverifieerd met de per-opdracht-tokens die door Mattermost worden geretourneerd tijdens de registratie van slash-opdrachten. Als registratie mislukt of er geen opdrachten zijn geactiveerd, weigert OpenClaw callbacks met
Unauthorized: invalid command token. - Voor private/tailnet/interne callbackhosts kan Mattermost vereisen dat
ServiceSettings.AllowedUntrustedInternalConnectionsde callbackhost/het callbackdomein bevat. Gebruik host-/domeinwaarden, geen volledige URL's. channels.mattermost.configWrites: sta door Mattermost geïnitieerde configuratieschrijfacties toe of weiger ze.channels.mattermost.requireMention: vereis@mentionvoordat in kanalen wordt gereageerd.channels.mattermost.groups.<channelId>.requireMention: kanaalspecifieke override voor vermeldingsgating ("*"voor standaard).- Optioneel
channels.mattermost.defaultAccountoverschrijft de standaardaccountselectie wanneer dit overeenkomt met een geconfigureerde account-id.
Signal
{
channels: {
signal: {
enabled: true,
account: "+15555550123", // optional account binding
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,
},
},
}
Modi voor reactiemeldingen: off, own (standaard), all, allowlist (uit reactionAllowlist).
channels.signal.account: pin het opstarten van het kanaal aan een specifieke Signal-accountidentiteit.channels.signal.configWrites: sta door Signal geïnitieerde configuratieschrijfacties toe of weiger ze.- Optioneel
channels.signal.defaultAccountoverschrijft de standaardaccountselectie wanneer dit overeenkomt met een geconfigureerde account-id.
BlueBubbles
BlueBubbles is de legacy iMessage-bridge (Plugin-ondersteund, geconfigureerd onder channels.bluebubbles). Bestaande setups blijven ondersteund, maar nieuwe OpenClaw iMessage-implementaties moeten bij voorkeur channels.imessage gebruiken wanneer imsg op de Messages-host kan draaien.
{
channels: {
bluebubbles: {
enabled: true,
dmPolicy: "pairing",
// serverUrl, password, webhookPath, group controls, and advanced actions:
// see /channels/bluebubbles
},
},
}
- Belangrijkste kernpaden die hier worden behandeld:
channels.bluebubbles,channels.bluebubbles.dmPolicy. - Optioneel
channels.bluebubbles.defaultAccountoverschrijft de standaardaccountselectie wanneer dit overeenkomt met een geconfigureerde account-id. - Top-level
bindings[]-items mettype: "acp"kunnen BlueBubbles-gesprekken binden aan persistente ACP-sessies. Gebruik een BlueBubbles-handle of doelstring (chat_id:*,chat_guid:*,chat_identifier:*) inmatch.peer.id. Gedeelde veldsemantiek: ACP Agents. - De volledige BlueBubbles-kanaalconfiguratie en de rationale voor deprecation zijn gedocumenteerd in BlueBubbles.
iMessage
OpenClaw start imsg rpc (JSON-RPC via stdio). Geen daemon of poort vereist. Dit is het voorkeursPad voor nieuwe OpenClaw iMessage-setups wanneer de host toegang tot de Messages-database en Automation-machtigingen kan verlenen.
{
channels: {
imessage: {
enabled: true,
cliPath: "imsg",
dbPath: "~/Library/Messages/chat.db",
remoteHost: "user@gateway-host",
dmPolicy: "pairing",
allowFrom: ["+15555550123", "[email protected]", "chat_id:123"],
historyLimit: 50,
includeAttachments: false,
attachmentRoots: ["/Users/*/Library/Messages/Attachments"],
remoteAttachmentRoots: ["/Users/*/Library/Messages/Attachments"],
mediaMaxMb: 16,
service: "auto",
region: "US",
},
},
}
-
Optioneel
channels.imessage.defaultAccountoverschrijft de standaardaccountselectie wanneer dit overeenkomt met een geconfigureerde account-id. -
Vereist Full Disk Access tot de Messages-DB.
-
Geef de voorkeur aan
chat_id:<id>-doelen. Gebruikimsg chats --limit 20om chats weer te geven. -
cliPathkan naar een SSH-wrapper wijzen; stelremoteHost(hostofuser@host) in voor het ophalen van SCP-bijlagen. -
attachmentRootsenremoteAttachmentRootsbeperken inkomende bijlagepaden (standaard:/Users/*/Library/Messages/Attachments). -
SCP gebruikt strikte host-key-controle, dus zorg dat de relay-hostkey al bestaat in
~/.ssh/known_hosts. -
channels.imessage.configWrites: sta door iMessage geïnitieerde configuratieschrijfacties toe of weiger ze. -
Top-level
bindings[]-items mettype: "acp"kunnen iMessage-gesprekken binden aan persistente ACP-sessies. Gebruik een genormaliseerde handle of expliciet chatdoel (chat_id:*,chat_guid:*,chat_identifier:*) inmatch.peer.id. Gedeelde veldsemantiek: ACP Agents.
Voorbeeld van iMessage SSH-wrapper
#!/usr/bin/env bash
exec ssh -T gateway-host imsg "$@"
Matrix
Matrix is Plugin-ondersteund en geconfigureerd onder 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",
},
},
},
},
}
- Tokenauthenticatie gebruikt
accessToken; wachtwoordauthenticatie gebruiktuserId+password. channels.matrix.proxyrouteert Matrix-HTTP-verkeer via een expliciete HTTP(S)-proxy. Benoemde accounts kunnen dit overschrijven metchannels.matrix.accounts.<id>.proxy.channels.matrix.network.dangerouslyAllowPrivateNetworkstaat private/interne homeservers toe.proxyen deze netwerk-opt-in zijn onafhankelijke instellingen.channels.matrix.defaultAccountselecteert het voorkeursaccount in multi-accountsetups.channels.matrix.autoJoinis standaardoff, dus uitgenodigde rooms en nieuwe DM-achtige uitnodigingen worden genegeerd totdat jeautoJoin: "allowlist"metautoJoinAllowlistofautoJoin: "always"instelt.channels.matrix.execApprovals: Matrix-native levering van exec-goedkeuringen en autorisatie van goedkeurders.enabled:true,false, of"auto"(standaard). In automatische modus worden exec-goedkeuringen geactiveerd wanneer goedkeurders kunnen worden opgelost uitapproversofcommands.ownerAllowFrom.approvers: Matrix-gebruikers-ID's (bijv.@owner:example.org) die exec-verzoeken mogen goedkeuren.agentFilter: optionele allowlist met agent-ID's. Laat weg om goedkeuringen voor alle agents door te sturen.sessionFilter: optionele sessiesleutelpatronen (substring of regex).target: waar goedkeuringsprompts naartoe worden gestuurd."dm"(standaard),"channel"(oorspronkelijke room), of"both".- Per-account-overrides:
channels.matrix.accounts.<id>.execApprovals.
channels.matrix.dm.sessionScopebepaalt hoe Matrix-DM's in sessies worden gegroepeerd:per-user(standaard) deelt op basis van gerouteerde peer, terwijlper-roomelke DM-room isoleert.- Matrix-statusprobes en live directory-lookups gebruiken hetzelfde proxybeleid als runtimeverkeer.
- Volledige Matrix-configuratie, targetregels en setupvoorbeelden zijn gedocumenteerd in Matrix.
Microsoft Teams
Microsoft Teams is Plugin-ondersteund en geconfigureerd onder channels.msteams.
{
channels: {
msteams: {
enabled: true,
configWrites: true,
// appId, appPassword, tenantId, webhook, team/channel policies:
// see /channels/msteams
},
},
}
- Belangrijkste kernpaden die hier worden behandeld:
channels.msteams,channels.msteams.configWrites. - Volledige Teams-configuratie (referenties, Webhook, DM-/groepsbeleid, per-team-/per-channel-overrides) is gedocumenteerd in Microsoft Teams.
IRC
IRC is Plugin-ondersteund en geconfigureerd onder channels.irc.
{
channels: {
irc: {
enabled: true,
dmPolicy: "pairing",
configWrites: true,
nickserv: {
enabled: true,
service: "NickServ",
password: "${IRC_NICKSERV_PASSWORD}",
register: false,
registerEmail: "[email protected]",
},
},
},
}
- Belangrijkste kernpaden die hier worden behandeld:
channels.irc,channels.irc.dmPolicy,channels.irc.configWrites,channels.irc.nickserv.*. - Optioneel
channels.irc.defaultAccountoverschrijft de standaardaccountselectie wanneer dit overeenkomt met een geconfigureerde account-id. - Volledige IRC-kanaalconfiguratie (host/poort/TLS/kanalen/allowlists/vermeldingsgating) is gedocumenteerd in IRC.
Multi-account (alle kanalen)
Voer meerdere accounts per kanaal uit (elk met een eigen accountId):
{
channels: {
telegram: {
accounts: {
default: {
name: "Primary bot",
botToken: "123456:ABC...",
},
alerts: {
name: "Alerts bot",
botToken: "987654:XYZ...",
},
},
},
},
}
defaultwordt gebruikt wanneeraccountIdis weggelaten (CLI + routering).- Env-tokens zijn alleen van toepassing op het standaard account.
- Basiskanaalinstellingen zijn van toepassing op alle accounts, tenzij ze per account worden overschreven.
- Gebruik
bindings[].match.accountIdom elk account naar een andere agent te routeren. - Als je een niet-standaardaccount toevoegt via
openclaw channels add(of kanaalonboarding) terwijl je nog een single-account top-level kanaalconfiguratie gebruikt, promoveert OpenClaw eerst account-scoped top-level single-accountwaarden naar de kanaalaccountmap zodat het oorspronkelijke account blijft werken. De meeste kanalen verplaatsen ze naarchannels.<channel>.accounts.default; Matrix kan in plaats daarvan een bestaand overeenkomend benoemd/standaarddoel behouden. - Bestaande kanaal-only bindings (geen
accountId) blijven overeenkomen met het standaardaccount; account-scoped bindings blijven optioneel. openclaw doctor --fixrepareert ook gemengde vormen door account-scoped top-level single-accountwaarden te verplaatsen naar het gepromoveerde account dat voor dat kanaal is gekozen. De meeste kanalen gebruikenaccounts.default; Matrix kan in plaats daarvan een bestaand overeenkomend benoemd/standaarddoel behouden.
Andere Plugin-kanalen
Veel Plugin-kanalen worden geconfigureerd als channels.<id> en gedocumenteerd op hun eigen kanaalpagina's (bijvoorbeeld Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat en Twitch).
Zie de volledige kanaalindex: Kanalen.
Vermeldingsgating voor groepschats
Groepsberichten vereisen standaard een vermelding (metadatavermelding of veilige regexpatronen). Van toepassing op groepschats in WhatsApp, Telegram, Discord, Google Chat en iMessage.
Zichtbare antwoorden worden afzonderlijk geregeld. Groeps-/kanaalruimten gebruiken standaard messages.groupChat.visibleReplies: "message_tool": OpenClaw verwerkt de beurt nog steeds, maar normale definitieve antwoorden blijven privé en zichtbare uitvoer in de ruimte vereist message(action=send). Stel "automatic" alleen in wanneer je het verouderde gedrag wilt waarbij normale antwoorden terug naar de ruimte worden geplaatst. Stel messages.visibleReplies: "message_tool" in om hetzelfde gedrag voor zichtbare antwoorden alleen via tools ook op directe chats toe te passen; de Codex-harness gebruikt dat gedrag alleen via tools ook als standaard voor niet-ingestelde directe chats.
Zichtbare antwoorden alleen via tools vereisen een model/runtime die betrouwbaar tools aanroept. Als
het sessielog assistenttekst toont met didSendViaMessagingTool: false, heeft het
model een privé definitief antwoord geproduceerd in plaats van de berichtentool aan te roepen.
Schakel over naar een sterker model voor toolaanroepen voor dat kanaal, of stel
messages.groupChat.visibleReplies: "automatic" in om verouderde zichtbare definitieve
antwoorden te herstellen.
Als de berichtentool onder het actieve toolbeleid niet beschikbaar is, valt OpenClaw terug op automatische zichtbare antwoorden in plaats van het antwoord stilzwijgend te onderdrukken. openclaw doctor waarschuwt voor deze mismatch.
De Gateway herlaadt messages-configuratie hot nadat het bestand is opgeslagen. Herstart alleen wanneer bestandsbewaking of configuratieherladen in de deployment is uitgeschakeld.
Vermeldingstypen:
- Metadatavermeldingen: Platform-native @-vermeldingen. Genegeerd in WhatsApp-zelfchatmodus.
- Tekstpatronen: Veilige regex-patronen in
agents.list[].groupChat.mentionPatterns. Ongeldige patronen en onveilige geneste herhaling worden genegeerd. - Vermeldingsgating wordt alleen afgedwongen wanneer detectie mogelijk is (native vermeldingen of ten minste één patroon).
{
messages: {
visibleReplies: "automatic", // global default for direct/source chats; Codex harness defaults unset direct chats to message_tool
groupChat: {
historyLimit: 50,
visibleReplies: "message_tool", // default; use "automatic" for legacy final replies
},
},
agents: {
list: [{ id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"] } }],
},
}
messages.groupChat.historyLimit stelt de globale standaard in. Kanalen kunnen dit overschrijven met channels.<channel>.historyLimit (of per account). Stel 0 in om uit te schakelen.
messages.visibleReplies is de globale standaard voor bronbeurten; messages.groupChat.visibleReplies overschrijft die voor groeps-/kanaalbronbeurten. Wanneer messages.visibleReplies niet is ingesteld, kan een harness een eigen standaard voor directe/bronbeurten leveren; de Codex-harness gebruikt standaard message_tool. Kanaal-allowlists en vermeldingsgating bepalen nog steeds of een beurt wordt verwerkt.
Geschiedenislimieten voor DM's
{
channels: {
telegram: {
dmHistoryLimit: 30,
dms: {
"123456789": { historyLimit: 50 },
},
},
},
}
Resolutie: per-DM-overschrijving → providerstandaard → geen limiet (alles behouden).
Ondersteund: telegram, whatsapp, discord, slack, signal, imessage, msteams.
Zelfchatmodus
Neem je eigen nummer op in allowFrom om zelfchatmodus in te schakelen (negeert native @-vermeldingen, reageert alleen op tekstpatronen):
{
channels: {
whatsapp: {
allowFrom: ["+15555550123"],
groups: { "*": { requireMention: true } },
},
},
agents: {
list: [
{
id: "main",
groupChat: { mentionPatterns: ["reisponde", "@openclaw"] },
},
],
},
}
Opdrachten (afhandeling van chatopdrachten)
{
commands: {
native: "auto", // register native commands when supported
nativeSkills: "auto", // register native skill commands when supported
text: true, // parse /commands in chat messages
bash: false, // allow ! (alias: /bash)
bashForegroundMs: 2000,
config: false, // allow /config
mcp: false, // allow /mcp
plugins: false, // allow /plugins
debug: false, // allow /debug
restart: true, // allow /restart + gateway restart tool
ownerAllowFrom: ["discord:123456789012345678"],
ownerDisplay: "raw", // raw | hash
ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}",
allowFrom: {
"*": ["user1"],
discord: ["user:123"],
},
useAccessGroups: true,
},
}
Opdrachtdetails
- Dit blok configureert opdrachtoppervlakken. Zie Slash-opdrachten voor de huidige ingebouwde + gebundelde opdrachtcatalogus.
- Deze pagina is een configuratiesleutelreferentie, niet de volledige opdrachtcatalogus. Kanaal-/Plugin-eigen opdrachten zoals QQ Bot
/bot-ping/bot-help/bot-logs, LINE/card, apparaatkoppeling/pair, geheugen/dreaming, telefoonbediening/phoneen Talk/voiceworden gedocumenteerd op hun kanaal-/Plugin-pagina's plus Slash-opdrachten. - Tekstopdrachten moeten zelfstandige berichten zijn met een voorafgaande
/. native: "auto"schakelt native opdrachten in voor Discord/Telegram, en laat Slack uit.nativeSkills: "auto"schakelt native Skills-opdrachten in voor Discord/Telegram, en laat Slack uit.- Overschrijf per kanaal:
channels.discord.commands.native(bool of"auto"). Voor Discord slaatfalsenative opdrachtregistratie en opschoning tijdens het opstarten over. - Overschrijf native Skills-registratie per kanaal met
channels.<provider>.commands.nativeSkills. channels.telegram.customCommandsvoegt extra Telegram-botmenu-items toe.bash: trueschakelt! <cmd>in voor de hostshell. Vereisttools.elevated.enableden afzender intools.elevated.allowFrom.<channel>.config: trueschakelt/configin (leest/schrijftopenclaw.json). Voor Gateway-chat.send-clients vereisen persistente/config set|unset-schrijfacties ookoperator.admin; alleen-lezen/config showblijft beschikbaar voor normale operatorclients met schrijfbereik.mcp: trueschakelt/mcpin voor door OpenClaw beheerde MCP-serverconfiguratie ondermcp.servers.plugins: trueschakelt/pluginsin voor Plugin-detectie, installatie en in-/uitschakelbediening.channels.<provider>.configWritesgate configuratiemutaties per kanaal (standaard: true).- Voor multi-accountkanalen gate
channels.<provider>.accounts.<id>.configWritesook schrijfacties die op dat account zijn gericht (bijvoorbeeld/allowlist --config --account <id>of/config set channels.<provider>.accounts.<id>...). restart: falseschakelt/restarten Gateway-herstarttoolacties uit. Standaard:true.ownerAllowFromis de expliciete eigenaar-allowlist voor opdrachten/tools die alleen voor eigenaren zijn. Deze staat los vanallowFrom.ownerDisplay: "hash"hasht eigenaar-id's in de systeemprompt. StelownerDisplaySecretin om hashing te regelen.allowFromis per provider. Wanneer ingesteld, is dit de enige autorisatiebron (kanaal-allowlists/koppeling enuseAccessGroupsworden genegeerd).useAccessGroups: falsestaat toe dat opdrachten toegangs-groepbeleid omzeilen wanneerallowFromniet is ingesteld.- Opdrachtdocumentatiekaart:
- ingebouwde + gebundelde catalogus: Slash-opdrachten
- kanaalspecifieke opdrachtoppervlakken: Kanalen
- QQ Bot-opdrachten: QQ Bot
- koppelingsopdrachten: Koppeling
- LINE-kaartopdracht: LINE
- geheugen-Dreaming: Dreaming
Gerelateerd
- Configuratiereferentie — sleutels op topniveau
- Configuratie — agents
- Kanalenoverzicht