Gateway
Configuratie — kanalen
Configuratiesleutels per kanaal onder channels.*: toegang tot privéberichten en groepen, configuraties met meerdere accounts, vermeldingsfiltering en kanaalspecifieke sleutels voor Slack, Discord, Telegram, WhatsApp, Matrix, iMessage en andere kanaalplugins.
Zie Configuratiereferentie voor agents, tools, Gateway-runtime en andere sleutels op het hoogste niveau.
Kanalen
Elk kanaal start automatisch wanneer de bijbehorende configuratiesectie bestaat (tenzij enabled: false). Telegram en iMessage worden meegeleverd in het kernpakket openclaw. Andere officiële kanalen (Discord, Slack, WhatsApp, Matrix, Microsoft Teams, IRC, Google Chat, Signal, Mattermost en meer) worden als afzonderlijke plugins geïnstalleerd met openclaw plugins install <spec>; zie Kanalen voor de volledige lijst en installatiespecificaties.
Toegang tot privéberichten en groepen
Alle kanalen ondersteunen beleid voor privéberichten en groepen:
| Beleid voor privéberichten | Gedrag |
|---|---|
pairing (standaard) |
Onbekende afzenders krijgen een eenmalige koppelingscode; de eigenaar moet deze goedkeuren |
allowlist |
Alleen afzenders in allowFrom (of de opslag met gekoppelde toegestane afzenders) |
open |
Alle inkomende privéberichten toestaan (vereist allowFrom: ["*"]) |
disabled |
Alle inkomende privéberichten negeren |
| Groepsbeleid | Gedrag |
|---|---|
allowlist (standaard) |
Alleen groepen die overeenkomen met de geconfigureerde toelatingslijst |
open |
Toelatingslijsten voor groepen omzeilen (vermeldingsfiltering blijft van toepassing) |
disabled |
Alle groeps-/kamerberichten blokkeren |
Modeloverschrijvingen per kanaal
Gebruik channels.modelByChannel om specifieke kanaal-id's of peers voor privéberichten aan een model te koppelen. Waarden accepteren provider/model of geconfigureerde modelaliassen. De kanaaltoewijzing is alleen van toepassing wanneer een sessie nog geen actieve modeloverschrijving heeft (bijvoorbeeld een die via /model is ingesteld).
Voor groeps-/threadgesprekken zijn de sleutels kanaalspecifieke groeps-id's, onderwerp-id's of kanaalnamen. Voor gesprekken via privéberichten zijn de sleutels peer-id's die zijn afgeleid van de afzenderidentiteit van het kanaal (nativeDirectUserId, origin.from, origin.to, OriginatingTo, From of SenderId). De exacte sleutelvorm hangt af van het kanaal:
| Kanaal | Sleutelvorm voor privéberichten | Voorbeeld |
|---|---|---|
| Discord | onbewerkte gebruikers-id | 987654321 |
| Feishu | feishu:ou_... |
feishu:ou_a8b6cab7e945387de5f253775d9b4d85 |
| Matrix | Matrix-gebruikers-id | @user:matrix.org |
| Slack | user:U... |
user:U12345 |
| Telegram | onbewerkte gebruikers-id | 123456789 |
| telefoonnummer of 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", }, }, },}Sleutels die specifiek zijn voor privéberichten komen alleen overeen in gesprekken via privéberichten; ze hebben geen invloed op routering van groepen/threads.
Kanaalstandaarden en Heartbeat
Gebruik channels.defaults voor gedeeld groepsbeleid, impliciete vermeldingen en Heartbeat-gedrag voor alle providers:
{ channels: { defaults: { groupPolicy: "allowlist", // open | allowlist | disabled contextVisibility: "all", // all | allowlist | allowlist_quote implicitMentions: { replyToBot: true, quotedBot: true, threadParticipation: true, }, heartbeat: { showOk: false, showAlerts: true, useIndicator: true, }, }, },}channels.defaults.groupPolicy: terugvalbeleid voor groepen wanneergroupPolicyop providerniveau niet is ingesteld.channels.defaults.contextVisibility: standaardmodus voor de zichtbaarheid van aanvullende context voor alle kanalen. Waarden:all(standaard, alle aangehaalde/thread-/geschiedeniscontext opnemen),allowlist(alleen context van afzenders op de toelatingslijst opnemen),allowlist_quote(hetzelfde als de toelatingslijst, maar expliciete citaat-/antwoordcontext behouden). Overschrijving per kanaal:channels.<channel>.contextVisibility.channels.defaults.implicitMentions: bepaalt welke ondersteunde inkomende feiten als vermeldingen gelden.replyToBot,quotedBotenthreadParticipationhebben elk standaard de waardetrue, waardoor het huidige gedrag behouden blijft. Overschrijf dit per kanaal metchannels.<channel>.implicitMentionsof per account metchannels.<channel>.accounts.<id>.implicitMentions; elke vlag wordt onafhankelijk opgelost in de volgorde account -> kanaal -> standaardwaarden. De namen zijn positief geformuleerd: stel een vlag in opfalseom te voorkomen dat dit feit de vermeldingsfiltering omzeilt. Expliciete systeemeigen vermeldingen zijn altijd toegestaan en een vlag heeft geen effect wanneer het kanaal dat feit niet produceert. Zie Vermeldingsfiltering voor de huidige producentenmatrix. Deze instellingen wijzigen de uitgaande antwoord-/threadmodi of de afhandeling van geautoriseerde opdrachten niet.channels.defaults.heartbeat.showOk: gezonde kanaalstatussen opnemen in de Heartbeat-uitvoer (standaardfalse).channels.defaults.heartbeat.showAlerts: verslechterde/foutstatussen opnemen in de Heartbeat-uitvoer (standaardtrue).channels.defaults.heartbeat.useIndicator: compacte Heartbeat-uitvoer in indicatorstijl weergeven (standaardtrue).
WhatsApp werkt via het webkanaal van de Gateway (Baileys Web). Het start automatisch wanneer er een gekoppelde sessie bestaat.
{ web: { enabled: true, }, 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"], }, },}- Vermeldingen van
bindings[]op het hoogste niveau mettype: "acp"configureren permanente ACP-koppelingen voor WhatsApp-privéberichten en -groepen. Gebruik een rechtstreeks E.164-nummer of een WhatsApp-groeps-JID inmatch.peer.id. De veldsemantiek wordt gedeeld in ACP-agents.
WhatsApp met meerdere accounts
{channels: { whatsapp: { accounts: { default: {}, personal: {}, biz: { // authDir: "~/.openclaw/credentials/whatsapp/biz", }, }, },},}- Uitgaande opdrachten gebruiken standaard account
defaultals dat aanwezig is; anders de eerste geconfigureerde account-id (gesorteerd). - De optionele instelling
channels.whatsapp.defaultAccountoverschrijft die terugvalselectie van het standaardaccount wanneer deze overeenkomt met een geconfigureerde account-id. - De verouderde Baileys-authenticatiemap voor één account wordt door
openclaw doctorgemigreerd naarwhatsapp/default. - Overschrijvingen 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", }, },}- Bottoken:
channels.telegram.botTokenofchannels.telegram.tokenFile(alleen een normaal bestand; symbolische koppelingen worden geweigerd), metTELEGRAM_BOT_TOKENals terugvaloptie voor het standaardaccount. apiRootis uitsluitend de hoofd-URL van de Telegram Bot API. Gebruikhttps://api.telegram.orgof je zelfgehoste/proxyhoofd-URL, niethttps://api.telegram.org/bot<TOKEN>;openclaw doctor --fixverwijdert een onbedoeld achtervoegsel/bot<TOKEN>aan het einde.- Voor een zelfgehoste Bot API-server in de modus
--localvermeldttrustedLocalFileRootsde hostpaden die OpenClaw mag lezen. Koppel het gegevensvolume van de server aan de OpenClaw-host en configureer de hoofdmap met gegevens of de map per token; containerpaden onder/var/lib/telegram-bot-apiworden aan die hoofdmappen toegewezen. Andere absolute paden blijven geweigerd. - De optionele instelling
channels.telegram.defaultAccountoverschrijft de selectie van het standaardaccount wanneer deze overeenkomt met een geconfigureerde account-id. - Stel in configuraties met meerdere accounts (2+ account-id's) een expliciete standaardwaarde in (
channels.telegram.defaultAccountofchannels.telegram.accounts.default) om terugvalroutering te vermijden;openclaw doctorwaarschuwt wanneer deze ontbreekt of ongeldig is. configWrites: falseblokkeert door Telegram geïnitieerde configuratieschrijfacties (migraties van supergroep-id's,/config set|unset).- Vermeldingen van
bindings[]op het hoogste niveau mettype: "acp"configureren permanente ACP-koppelingen voor forumonderwerpen (gebruik de canoniekechatId:topic:topicIdinmatch.peer.id). De veldsemantiek wordt gedeeld in ACP-agents. - Telegram-streamvoorbeelden gebruiken
sendMessage+editMessageText(werkt in privé- en groepschats). network.dnsResultOrderheeft standaard de waarde"ipv4first"om veelvoorkomende IPv6-ophaalfouten te voorkomen.- Beleid voor nieuwe pogingen: zie Beleid voor nieuwe pogingen.
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: "Alleen korte antwoorden.", }, }, }, }, historyLimit: 20, textChunkLimit: 2000, suppressEmbeds: true, streaming: { mode: "progress", // off | partial | block | progress (standaard voor 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, metDISCORD_BOT_TOKENals terugvaloptie voor het standaardaccount. - Directe uitgaande aanroepen die een expliciete Discord-
tokenopgeven, gebruiken die token voor de aanroep; instellingen voor nieuwe pogingen en beleid van het account zijn nog steeds afkomstig van het geselecteerde account in de actieve runtimesnapshot. - Optioneel overschrijft
channels.discord.defaultAccountde selectie van het standaardaccount wanneer deze overeenkomt met een geconfigureerde account-id. - Gebruik
user:<id>(DM) ofchannel:<id>(guild-kanaal) voor afleveringsdoelen; losse numerieke id's worden geweigerd. - Guild-slugs bestaan uit kleine letters, waarbij spaties zijn vervangen door
-; kanaalsleutels gebruiken de naam als slug (zonder#). Geef de voorkeur aan guild-id's. - Berichten die door bots zijn opgesteld, worden standaard genegeerd.
allowBots: trueschakelt ze in; gebruikallowBots: "mentions"om alleen botberichten te accepteren waarin de bot wordt vermeld (eigen berichten worden nog steeds gefilterd). - Kanalen die inkomende, door bots opgestelde berichten ondersteunen, kunnen gedeelde bescherming tegen botlussen gebruiken. Stel
channels.defaults.botLoopProtectionin voor basisbudgetten per paar en overschrijf daarna alleen het kanaal of account wanneer één oppervlak andere limieten nodig heeft. 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 vóór verzending stabiele uitgaande@handle-tekst aan Discord-gebruikers-id's, zodat bekende teamgenoten deterministisch kunnen worden vermeld, zelfs wanneer de tijdelijke directorycache leeg is. Overschrijvingen per account staan onderchannels.discord.accounts.<accountId>.mentionAliases.maxLinesPerMessage(standaard17) splitst lange berichten, zelfs wanneer ze minder dan 2000 tekens bevatten.channels.discord.suppressEmbedsis standaardtrue, zodat uitgaande URL's niet worden uitgevouwen tot Discord-linkvoorbeelden, tenzij dit wordt uitgeschakeld. Explicieteembeds-payloads worden nog steeds normaal verzonden; toolaanroepen per bericht kunnen dit overschrijven metsuppressEmbeds.channels.discord.threadBindingsregelt routering die aan Discord-threads is gekoppeld:enabled: Discord-overschrijving voor functies van aan threads gekoppelde sessies (/focus,/unfocus,/agents,/session idle,/session max-ageen gekoppelde aflevering/routering)idleHours: Discord-overschrijving voor automatisch verlies van focus na inactiviteit, in uren (0schakelt dit uit)maxAgeHours: Discord-overschrijving voor de harde maximale leeftijd in uren (0schakelt dit uit)spawnSessions: schakelaar voorsessions_spawn({ thread: true })en het automatisch maken/koppelen van threads bij het starten van ACP-threads (standaard:true)defaultSpawnContext: systeemeigen subagentcontext voor aan threads gekoppelde starts (standaard"fork")
- Items op het hoogste niveau in
bindings[]mettype: "acp"configureren persistente ACP-koppelingen voor kanalen en threads (gebruik de kanaal-/thread-id inmatch.peer.id). De semantiek van de velden wordt gedeeld in ACP-agenten. channels.discord.ui.components.accentColorstelt de accentkleur in voor containers met Discord-componenten v2.channels.discord.agentComponents.ttlMsbepaalt hoelang callbacks van verzonden Discord-componenten geregistreerd blijven. Standaard1800000(30 minuten), maximaal86400000(24 uur). Overschrijvingen per account staan onderchannels.discord.accounts.<accountId>.agentComponents.ttlMs. Geef de voorkeur aan de kortste TTL die bij de workflow past.channels.discord.voiceschakelt gesprekken in Discord-spraakkanalen en optioneel automatisch deelnemen + LLM- + TTS-overschrijvingen in. Discord-configuraties met alleen tekst laten spraak standaard uitgeschakeld; stelchannels.discord.voice.enabled=truein om dit in te schakelen.channels.discord.voice.modeloverschrijft optioneel het LLM-model dat wordt gebruikt voor antwoorden in Discord-spraakkanalen.channels.discord.voice.daveEncryption(standaardtrue) enchannels.discord.voice.decryptionFailureTolerance(standaard24) worden doorgegeven aan de DAVE-opties van@discordjs/voice.channels.discord.voice.connectTimeoutMsregelt de initiële wachttijd op@discordjs/voiceReady voor/vc joinen pogingen om automatisch deel te nemen (standaard30000).channels.discord.voice.reconnectGraceMsbepaalt hoelang een verbroken spraaksessie erover mag doen om signalering voor opnieuw verbinden te starten voordat OpenClaw de sessie vernietigt (standaard15000).- Het afspelen van Discord-spraak wordt niet onderbroken door een gebeurtenis waarbij een andere gebruiker begint te spreken. Om feedbacklussen te voorkomen, negeert OpenClaw nieuwe spraakopname terwijl TTS wordt afgespeeld.
- OpenClaw probeert daarnaast de ontvangst van spraak te herstellen door een spraaksessie te verlaten en opnieuw deel te nemen na herhaalde ontsleutelingsfouten.
channels.discord.streamingis de canonieke sleutel voor de streammodus. Discord gebruikt standaardstreaming.mode: "progress", zodat de voortgang van tools/werk in één bewerkt voorbeeldbericht verschijnt; stelstreaming.mode: "off"in om dit uit te schakelen. Verouderde platte sleutels (streamMode,chunkMode,blockStreaming,draftChunk,blockStreamingCoalesce) worden tijdens runtime niet meer gelezen; voeropenclaw doctor --fixuit om persistente configuratie te migreren.channels.discord.autoPresencekoppelt runtimebeschikbaarheid aan de aanwezigheid van de bot (gezond => online, verminderd => idle, uitgeput => dnd) en staat optionele overschrijvingen van statustekst toe.channels.discord.guilds.<id>.presenceEventsrouteert aankomsten van beschikbare personen als agentsysteemgebeurtenissen naar één geconfigureerd Discord-kanaal. In aanmerking komende leden moetenchannelIdkunnen bekijken; openbare threads nemen de zichtbaarheid van hun bovenliggende kanaal over, terwijl voor privéthreads daarnaast lidmaatschap of Manage Threads vereist is.userskan die doelgroep verder beperken. Dit initialiseert de momenteel online leden vanuit volledigeGUILD_CREATE-snapshots, routeert waargenomen overgangen van offline naar online en behandelt een eerste later onlinesignaal voor een nog niet waargenomen lid als nieuw beschikbaar, zonder te stellen of die persoon online kwam of pas na de snapshot deelnam. Guilds boven Discords snapshotlimiet van 75,000 leden vereisen eerst een expliciete offline-update. Instellingen voor beperking:reconnectSuppressSeconds(stilteperiode na een nieuwe Gateway-sessie terwijl de aanwezigheidsstatus van de guild opnieuw wordt opgebouwd, standaard 300,0schakelt dit uit) enburstLimit/burstWindowSeconds(limiet per guild voor de frequentie van succesvol in de wachtrij geplaatste gebeurtenissen, standaard 8 gebeurtenissen per voortschrijdend venster van 60s). Hervatte sessies starten de onderdrukkingsperiode voor opnieuw verbinden niet. De bestaande afkoelperiode van acht uur voor hernieuwde begroeting per gebruiker blijft gelden. Dit vereistchannels.discord.intents.presence=true, de bevoorrechte Presence Intent in Discords Developer Portal en een ingeschakelde Heartbeat voor de agent.channels.discord.dangerouslyAllowNameMatchingschakelt overeenkomsten op basis van veranderlijke namen/tags opnieuw in (compatibiliteitsmodus voor noodgevallen).channels.discord.execApprovals: systeemeigen Discord-aflevering van uitvoeringsgoedkeuringen en autorisatie van goedkeurders.enabled:true,falseof"auto"(standaard). In de automatische modus worden uitvoeringsgoedkeuringen geactiveerd wanneer goedkeurders kunnen worden herleid uitapproversofcommands.ownerAllowFrom.approvers: Discord-gebruikers-id's die uitvoeringsverzoeken mogen goedkeuren. Valt terug opcommands.ownerAllowFromwanneer dit wordt weggelaten.agentFilter: optionele acceptatielijst voor agent-id's. Laat dit weg om goedkeuringen voor alle agenten door te sturen.sessionFilter: optionele patronen voor sessiesleutels (subtekenreeks of reguliere expressie).target: waar goedkeuringsverzoeken naartoe worden verzonden."dm"(standaard) verzendt ze naar DM's van goedkeurders,"channel"verzendt ze naar het oorspronkelijke kanaal en"both"verzendt ze naar beide. Wanneer het doel"channel"bevat, kunnen de knoppen alleen worden gebruikt door herleide goedkeurders.cleanupAfterResolve: wanneertrue, worden goedkeurings-DM's verwijderd na goedkeuring, afwijzing of time-out.
Modi voor reactiemeldingen: off (geen), own (berichten van de bot, standaard), all (alle berichten), allowlist (van 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", dmPolicy: "pairing", allowFrom: ["users/1234567890"], groupPolicy: "allowlist", groups: { "spaces/AAAA": { allow: true, requireMention: true }, }, actions: { reactions: true }, typingIndicator: "message", mediaMaxMb: 20, }, },}- JSON van serviceaccount: inline (
serviceAccount) of op basis van een bestand (serviceAccountFile). serviceAccountaccepteert rechtstreeks een SecretRef.- Terugvalopties via omgevingsvariabelen:
GOOGLE_CHAT_SERVICE_ACCOUNTofGOOGLE_CHAT_SERVICE_ACCOUNT_FILE(alleen het standaardaccount). - Gebruik
spaces/<spaceId>ofusers/<userId>voor afleveringsdoelen. channels.googlechat.dangerouslyAllowNameMatchingschakelt overeenkomsten op basis van veranderlijke e-mailprincipals opnieuw in (compatibiliteitsmodus voor noodgevallen).
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: "Alleen korte antwoorden.", }, }, historyLimit: 50, allowBots: false, reactionNotifications: "own", reactionAllowlist: ["U123"], replyToMode: "off", // uit | eerste | alle | gebundeld thread: { historyScope: "thread", // thread | kanaal 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", // uit | gedeeltelijk | blok | voortgang chunkMode: "length", // lengte | nieuwe regel nativeTransport: true, // gebruik de native streaming-API van Slack wanneer mode=partial }, mediaMaxMb: 20, execApprovals: { enabled: "auto", // true | false | "auto" approvers: ["U123"], agentFilter: ["default"], sessionFilter: ["slack:"], target: "dm", // dm | kanaal | beide }, }, },}- Socket-modus vereist zowel
botTokenalsappToken(SLACK_BOT_TOKEN+SLACK_APP_TOKENvoor de terugval naar omgevingsvariabelen van het standaardaccount). - HTTP-modus vereist
botTokenplussigningSecret(op rootniveau of per account). - Gebruikersidentiteit (
identity: "user") plaatst en leest berichten als de autoriserende persoon. Hiervoor zijnuserTokenplusappTokenin Socket-modus vereist, ofuserTokenplussigningSecretin HTTP-modus. Er is geen bottoken of botgebruiker vereist. Zie Gebruikersidentiteit voor gebruikersbereiken en gebeurtenisabonnementen. enterpriseOrgInstall: truemeldt een account aan voor het organisatiebrede gebeurtenispad van Slack Enterprise Grid. Bij het opstarten wordt het bottoken geverifieerd metauth.testen mislukt het proces wanneer de geconfigureerde modus niet overeenkomt met de installatie-identiteit van Slack. Enterprise-DM's moeten zijn uitgeschakeld ofdmPolicy: "open"gebruiken met een geldigeallowFrom: ["*"]. Kanaal- en gebruikersbeleid moeten stabiele Slack-ID's gebruiken; veranderlijke namen en niet-ondersteunde kanaalvoorvoegsels laten het opstarten mislukken. V1 verwerkt alleen rechtstreekse Socket-modus- of HTTP-gebeurtenissenmessageenapp_mentionmet onmiddellijke antwoorden; relay, opdrachten, interacties, App Home, listeners voor reactiegebeurtenissen, pins, actietools, native goedkeuringen, bindings, uitgestelde bezorging en proactieve verzendingen zijn niet beschikbaar. Door de listener beheerde bevestigingen, typindicatoren en statusreacties blijven beschikbaar metreactions:write; meldingen voor inkomende reacties en reactie-actietools zijn niet beschikbaar. Zie Organisatiebrede installaties van Enterprise Grid voor het manifest met minimale bevoegdheden, de instelworkflow en alle beperkingen.socketModegeeft afstemmingsinstellingen voor het Socket-modus-transport van de Slack SDK door aan de openbare Bolt-receiver-API. Gebruik dit alleen bij onderzoek naar time-outs voor ping/pong of verouderd websocketgedrag.clientPingTimeoutis standaard15000;serverPingTimeoutenpingPongLoggingEnabledworden alleen doorgegeven wanneer ze zijn geconfigureerd.botToken,appToken,signingSecretenuserTokenaccepteren plattetekstreekswaarden of SecretRef-objecten.- Momentopnamen van Slack-accounts tonen per referentie bron-/statusvelden zoals
botTokenSource,botTokenStatus,userTokenSource,userTokenStatus,appTokenStatusen, in HTTP-modus,signingSecretStatus.configured_unavailablebetekent dat het account via SecretRef is geconfigureerd, maar dat het huidige opdracht-/runtimepad de geheime waarde niet kon oplossen. configWrites: falseblokkeert door Slack geïnitieerde configuratieschrijfbewerkingen.- De optionele
channels.slack.defaultAccountoverschrijft de selectie van het standaardaccount wanneer deze overeenkomt met een geconfigureerd account-ID. channels.slack.streaming.modeis de canonieke sleutel voor de Slack-streammodus (standaard"partial").channels.slack.streaming.nativeTransportbeheert het native streamingtransport van Slack (standaardtrue). Verouderde waarden voorstreamMode, de booleaansestreaming,chunkMode,blockStreaming,blockStreamingCoalesceennativeStreamingworden tijdens runtime niet meer gelezen; voeropenclaw doctor --fixuit om opgeslagen configuratie naarstreaming.{mode,chunkMode,block.enabled,block.coalesce,nativeTransport}te migreren.unfurlLinksenunfurlMediageven de booleaanse instellingen van Slack voor het uitvouwen vanchat.postMessage-links en media door voor botantwoorden.unfurlLinksis standaardfalse, zodat uitgaande botlinks niet inline worden uitgevouwen tenzij dit is ingeschakeld;unfurlMediawordt weggelaten tenzij het is geconfigureerd. Stel een van beide waarden in bijchannels.slack.accounts.<accountId>om de waarde op het hoogste niveau voor één account te overschrijven.- Gebruik
user:<id>(DM) ofchannel:<id>voor bezorgingsdoelen.
Modi voor reactiemeldingen: off, own (standaard), all, allowlist (van reactionAllowlist).
Isolatie van threadsessies: thread.historyScope is per thread (standaard) of wordt gedeeld binnen het kanaal. thread.inheritParent kopieert het transcript van het bovenliggende kanaal naar nieuwe threads. thread.initialHistoryLimit (standaard 20) beperkt hoeveel bestaande threadberichten worden opgehaald wanneer een nieuwe threadsessie begint; 0 schakelt het ophalen van threadgeschiedenis uit.
- Voor native streaming van Slack en de Slack-assistentstatus "is typing..." in threads is een doelthread voor het antwoord vereist. DM's op het hoogste niveau blijven standaard buiten threads, zodat ze nog steeds kunnen streamen via Slack-conceptvoorbeelden die worden geplaatst en bewerkt, in plaats van het native stream-/statusvoorbeeld in threadstijl weer te geven.
typingReactionvoegt tijdelijk een reactie toe aan het inkomende Slack-bericht terwijl een antwoord wordt uitgevoerd en verwijdert deze na voltooiing. Gebruik een Slack-emoji-shortcode zoals"hourglass_flowing_sand".channels.slack.execApprovals: Slack-native bezorging aan de goedkeuringsclient en autorisatie van uitvoeringsgoedkeurders. Hetzelfde schema als Discord:enabled(true/false/"auto"),approvers(Slack-gebruikers-ID's),agentFilter,sessionFilterentarget("dm","channel"of"both"). Plugin-goedkeuringen kunnen dit native clientpad gebruiken voor verzoeken die vanuit Slack afkomstig zijn wanneer Slack Plugin-goedkeurders kunnen worden bepaald; Slack-native bezorging van Plugin-goedkeuringen kan ook worden ingeschakeld viaapprovals.pluginvoor sessies die vanuit Slack afkomstig zijn of voor Slack-doelen. Plugin-goedkeuringen gebruiken Slack Plugin-goedkeurders uitallowFromen standaardroutering, niet uitvoeringsgoedkeurders.
| Actiegroep | Standaard | Opmerkingen |
|---|---|---|
| reactions | ingeschakeld | Reageren + reacties weergeven |
| messages | ingeschakeld | Lezen/verzenden/bewerken/verwijderen |
| pins | ingeschakeld | Vastzetten/losmaken/weergeven |
| memberInfo | ingeschakeld | Lidgegevens |
| emojiList | ingeschakeld | Lijst met aangepaste emoji's |
Mattermost
Mattermost wordt als afzonderlijke Plugin geïnstalleerd, op dezelfde manier als Discord, Slack en WhatsApp:
openclaw plugins install @openclaw/mattermostControleer npmjs.com/package/@openclaw/mattermost voor de huidige dist-tags voordat je een versie vastzet.
{ channels: { mattermost: { enabled: true, botToken: "mm-token", baseUrl: "https://chat.example.com", dmPolicy: "pairing", chatmode: "oncall", // bij aanroep | bij bericht | bij teken oncharPrefixes: [">", "!"], groups: { "*": { requireMention: true }, "team-channel-id": { requireMention: false }, }, commands: { native: true, // expliciet inschakelen nativeSkills: true, callbackPath: "/api/channels/mattermost/command", // Optionele expliciete URL voor implementaties met een reverse proxy/openbare toegang callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, textChunkLimit: 4000, streaming: { chunkMode: "length" }, }, },}Chatmodi: oncall (antwoorden bij een @-vermelding, standaard), onmessage (elk bericht), onchar (berichten die met het activeringsvoorvoegsel beginnen).
Wanneer native opdrachten van Mattermost zijn ingeschakeld:
commands.callbackPathmoet een pad zijn (bijvoorbeeld/api/channels/mattermost/command), geen volledige URL.commands.callbackUrlmoet worden omgezet naar het Gateway-eindpunt van OpenClaw en bereikbaar zijn vanaf de Mattermost-server.- Native slash-callbacks worden geverifieerd met de tokens per opdracht die
Mattermost tijdens de registratie van slash-opdrachten retourneert. Als de registratie mislukt of er geen
opdrachten zijn geactiveerd, wijst OpenClaw callbacks af met
Unauthorized: invalid command token. - Voor privé-, tailnet- of interne callbackhosts kan Mattermost vereisen
dat
ServiceSettings.AllowedUntrustedInternalConnectionsde callbackhost of het callbackdomein bevat. Gebruik host-/domeinwaarden, geen volledige URL's. channels.mattermost.configWrites: door Mattermost geïnitieerde configuratieschrijfbewerkingen toestaan of weigeren.channels.mattermost.requireMention:@mentionvereisen voordat in kanalen wordt geantwoord.channels.mattermost.groups.<channelId>.requireMention: overschrijving per kanaal van de vermeldingsvereiste ("*"voor standaard).- De optionele
channels.mattermost.defaultAccountoverschrijft de selectie van het standaardaccount wanneer deze overeenkomt met een geconfigureerd account-ID.
Signal
{ channels: { signal: { enabled: true, account: "+15555550123", // optionele accountbinding dmPolicy: "pairing", allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], configWrites: true, reactionNotifications: "own", // uit | eigen | alle | toelatingslijst reactionAllowlist: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], historyLimit: 50, }, },}Modi voor reactiemeldingen: off, own (standaard), all, allowlist (van reactionAllowlist).
channels.signal.account: het opstarten van het kanaal vastzetten op de identiteit van een specifiek Signal-account.channels.signal.configWrites: door Signal geïnitieerde configuratieschrijfbewerkingen toestaan of weigeren.- De optionele
channels.signal.defaultAccountoverschrijft de selectie van het standaardaccount wanneer deze overeenkomt met een geconfigureerd account-ID.
iMessage
OpenClaw start imsg rpc (JSON-RPC via stdio). Er is geen daemon of poort vereist. Dit is het voorkeurspad voor nieuwe OpenClaw iMessage-configuraties wanneer de host toegang tot de Berichten-database en automatiseringsmachtigingen kan verlenen.
Ondersteuning voor BlueBubbles is verwijderd. channels.bluebubbles is geen ondersteund runtimeconfiguratieoppervlak in de huidige OpenClaw-versie. Migreer oude configuraties naar channels.imessage; gebruik Verwijdering van BlueBubbles en het imsg-pad voor iMessage voor de korte versie en Overstappen vanaf BlueBubbles voor de volledige vertaaltabel.
Als de Gateway niet wordt uitgevoerd op de Mac waarop bij Berichten is ingelogd, behoud je channels.imessage.enabled=true en stel je channels.imessage.cliPath in op een SSH-wrapper die imsg "$@" op die Mac uitvoert. Het lokale standaardpad imsg is alleen voor macOS.
Voordat je voor productieverzendingen op een SSH-wrapper vertrouwt, moet je een uitgaande imsg send via precies die wrapper verifiëren. In sommige macOS TCC-statussen wordt Messages Automation toegewezen aan /usr/libexec/sshd-keygen-wrapper, waardoor leesbewerkingen en controles kunnen werken terwijl verzendingen mislukken met AppleEvents -1743; zie het gedeelte over probleemoplossing voor de SSH-wrapper op 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, }, }, },}- Optionele
channels.imessage.defaultAccountoverschrijft de standaardaccountselectie wanneer deze overeenkomt met een geconfigureerde account-id. - Vereist volledige schijftoegang tot de Messages-database.
- Geef de voorkeur aan
chat_id:<id>-doelen. Gebruikimsg chats --limit 20om chats weer te geven. cliPathkan naar een SSH-wrapper verwijzen; stelremoteHost(hostofuser@host) in om bijlagen via SCP op te halen.attachmentRootsenremoteAttachmentRootsbeperken paden voor inkomende bijlagen (standaard:/Users/*/Library/Messages/Attachments).- SCP gebruikt strikte controle van hostsleutels; zorg er daarom voor dat de hostsleutel van de relayhost al in
~/.ssh/known_hostsstaat. channels.imessage.configWrites: schrijfwijzigingen aan de configuratie die vanuit iMessage worden gestart, toestaan of weigeren.channels.imessage.sendTransport: gewenstimsg-RPC-verzendtransport voor normale uitgaande antwoorden.auto(standaard) gebruikt de IMCore-bridge voor bestaande chats wanneer deze actief is en valt daarna terug op AppleScript;bridgevereist bezorging via de privé-API;applescriptdwingt het openbare automatiseringspad van Messages af.channels.imessage.actions.*: privé-API-acties inschakelen die ook doorimsg status/openclaw channels status --probeworden begrensd.channels.imessage.includeAttachmentsis standaard uitgeschakeld; stel dit in optruevoordat je inkomende media in agentbeurten verwacht.- Inkomend herstel na een herstart van de bridge/Gateway verloopt automatisch (GUID-deduplicatie plus een leeftijdsgrens voor verouderde achterstanden). Bestaande
channels.imessage.catchup.enabled: true-configuraties worden nog steeds gerespecteerd als een verouderd compatibiliteitsprofiel;catchupis standaard uitgeschakeld. channels.imessage.groups: groepsregister en instellingen per groep. Configureer metgroupPolicy: "allowlist"explicietechat_id-sleutels of een jokertekenvermelding"*", zodat groepsberichten de registerpoort kunnen passeren.- Vermeldingen op het hoogste niveau in
bindings[]mettype: "acp"kunnen iMessage-gesprekken aan permanente ACP-sessies koppelen. Gebruik een genormaliseerde handle of een expliciet chatdoel (chat_id:*,chat_guid:*,chat_identifier:*) inmatch.peer.id. Semantiek van gedeelde velden: ACP-agents.
Voorbeeld van een iMessage SSH-wrapper
#!/usr/bin/env bashexec ssh -T gateway-host imsg "$@"Matrix
Matrix wordt door een 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.proxyleidt Matrix-HTTP-verkeer via een expliciete HTTP(S)-proxy. Benoemde accounts kunnen dit overschrijven metchannels.matrix.accounts.<id>.proxy.channels.matrix.network.dangerouslyAllowPrivateNetworkstaat privé-/interne homeservers toe.proxyen deze netwerkopt-in zijn onafhankelijke instellingen.channels.matrix.defaultAccountselecteert het voorkeursaccount in configuraties met meerdere accounts.channels.matrix.autoJoinis standaard"off", waardoor uitnodigingen voor ruimten en nieuwe DM-achtige uitnodigingen worden genegeerd totdat jeautoJoin: "allowlist"instelt metautoJoinAllowlistofautoJoin: "always".channels.matrix.execApprovals: Matrix-eigen levering van uitvoeringsgoedkeuringen en autorisatie van goedkeurders.enabled:true,falseof"auto"(standaard). In de automatische modus worden uitvoeringsgoedkeuringen geactiveerd wanneer goedkeurders viaapproversofcommands.ownerAllowFromkunnen worden bepaald.approvers: Matrix-gebruikers-id's (bijvoorbeeld@owner:example.org) die uitvoeringsverzoeken mogen goedkeuren.agentFilter: optionele toestaanlijst met agent-id's. Laat dit weg om goedkeuringen voor alle agents door te sturen.sessionFilter: optionele patronen voor sessiesleutels (subtekenreeks of reguliere expressie).target: waar goedkeuringsprompts naartoe worden gestuurd."dm"(standaard),"channel"(de ruimte van herkomst) of"both".- Overschrijvingen per account:
channels.matrix.accounts.<id>.execApprovals.
channels.matrix.dm.sessionScopebepaalt hoe Matrix-DM's in sessies worden gegroepeerd:per-user(standaard) deelt per gerouteerde peer, terwijlper-roomelke DM-ruimte isoleert.- Matrix-statuscontroles en live-directoryzoekopdrachten gebruiken hetzelfde proxybeleid als runtimeverkeer.
- De volledige Matrix-configuratie, doelregels en installatievoorbeelden zijn gedocumenteerd in Matrix.
Microsoft Teams
Microsoft Teams wordt door een Plugin ondersteund en geconfigureerd onder channels.msteams.
{ channels: { msteams: { enabled: true, configWrites: true, // appId, appPassword, tenantId, webhook, team/channel policies: // zie /channels/msteams }, },}- Belangrijkste sleutelpaden die hier worden behandeld:
channels.msteams,channels.msteams.configWrites. - De volledige Teams-configuratie (inloggegevens, Webhook, DM-/groepsbeleid, overschrijvingen per team/per kanaal) is gedocumenteerd in Microsoft Teams.
IRC
IRC wordt door een 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: "bot@example.com", }, }, },}- Belangrijkste sleutelpaden die hier worden behandeld:
channels.irc,channels.irc.dmPolicy,channels.irc.configWrites,channels.irc.nickserv.*. - Optionele
channels.irc.defaultAccountoverschrijft de standaardaccountselectie wanneer deze overeenkomt met een geconfigureerde account-id. - De volledige IRC-kanaalconfiguratie (host/poort/TLS/kanalen/toestaanlijsten/vermeldingspoort) is gedocumenteerd in IRC.
Meerdere accounts (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).- Omgevingstokens zijn alleen van toepassing op het standaardaccount.
- Basisinstellingen voor kanalen 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 via
openclaw channels add(of kanaalonboarding) een niet-standaardaccount toevoegt terwijl je nog een configuratie met één account op het hoogste kanaalniveau gebruikt, promoveert OpenClaw eerst de accountgebonden waarden voor één account op het hoogste niveau naar de accountmap van het kanaal, zodat het oorspronkelijke account blijft werken. De meeste kanalen verplaatsen deze naarchannels.<channel>.accounts.default; Matrix kan in plaats daarvan een bestaand overeenkomend benoemd/standaarddoel behouden. - Bestaande bindingen die alleen het kanaal bevatten (geen
accountId) blijven overeenkomen met het standaardaccount; accountgebonden bindingen blijven optioneel. openclaw doctor --fixherstelt ook gemengde structuren door accountgebonden waarden voor één account op het hoogste niveau 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 zijn gedocumenteerd op hun eigen kanaalpagina's (bijvoorbeeld Feishu, LINE, Nextcloud Talk, Nostr, QQ Bot, Synology Chat, Twitch en Zalo).
Bekijk de volledige kanaalindex: Kanalen.
Vermeldingspoort voor groepschats
Voor groepsberichten geldt standaard dat een vermelding vereist is (metadatavermelding of veilige regex-patronen). Dit geldt voor groepschats in WhatsApp, Telegram, Discord, Google Chat en iMessage.
Zichtbare antwoorden worden afzonderlijk beheerd. Normale directe verzoeken in groepen, kanalen en interne WebChat worden standaard automatisch definitief bezorgd: de definitieve assistenttekst wordt via het verouderde pad voor zichtbare antwoorden geplaatst. Kies voor messages.visibleReplies: "message_tool" of messages.groupChat.visibleReplies: "message_tool" wanneer door het model opgestelde bronantwoorden pas mogen worden geplaatst nadat de agent message(action=send) heeft aangeroepen. Als het model een inhoudelijk definitief antwoord retourneert zonder de berichtentool aan te roepen in een ingeschakelde modus die uitsluitend tools gebruikt, blijft die definitieve tekst privé, registreert het uitgebreide Gateway-logboek metadata van de onderdrukte payload en plaatst OpenClaw één herstelpoging in de wachtrij waarin het model wordt gevraagd hetzelfde antwoord via message(action=send) te bezorgen.
Het beleid dat uitsluitend tools gebruikt, regelt bronantwoorden van de assistent en generieke toolmedia. Het onderdrukt geen runtime-eigen terminaluitvoer, zoals geautoriseerde opdrachtantwoorden, permanente voltooiingsmeldingen of provider-eigen artefacten die door de beherende harness expliciet als host-eigendom zijn geclassificeerd. Artefacten die eigendom van de host zijn, worden via het normale kanaalverzendpad bezorgd en respecteren nog steeds de uitgaande weigering van sendPolicy. Omgevingsbeurten van room_event blijven stil tenzij het expliciete opdrachten zijn, zelfs wanneer runtime-uitvoer als host-eigendom is gemarkeerd.
Zichtbare antwoorden die uitsluitend tools gebruiken, vereisen een model/runtime dat betrouwbaar tools aanroept en worden aanbevolen voor gedeelde omgevingsruimten op modellen van de nieuwste generatie, zoals GPT-5.6 Sol. Sommige zwakkere modellen kunnen definitieve tekst als antwoord geven, maar begrijpen niet dat voor de bron zichtbare uitvoer met message(action=send) moet worden verzonden. OpenClaw herstelt het veelvoorkomende geval van een gestrand definitief antwoord standaard alleen wanneer het definitieve antwoord inhoudelijk is, de bronbeurt geen ruimtegebeurtenis was, het verzendbeleid de bezorging niet weigerde en er nog geen bronantwoord was verzonden. Herstel is beperkt tot één nieuwe poging; de synthetische prompt voor de nieuwe poging wordt niet opgeslagen en die poging wordt buiten collect-batching gehouden, zodat deze niet kan worden samengevoegd met niet-gerelateerde prompts in de wachtrij. Als de nieuwe poging eveneens strandt of niet in de wachtrij kan worden geplaatst, bezorgt OpenClaw alleen een opgeschoonde diagnose, zoals "Ik heb een antwoord gegenereerd, maar kon het niet in deze chat bezorgen. Probeer het opnieuw." De oorspronkelijke definitieve privétekst wordt nooit gemarkeerd voor automatische bezorging aan de bron. Gebruik voor modellen die herhaaldelijk antwoorden laten stranden "automatic", zodat de definitieve assistentbeurt het zichtbare antwoordpad vormt, schakel over naar een sterker model dat tools kan aanroepen, inspecteer het uitgebreide Gateway-logboek op het overzicht van de onderdrukte payload of stel messages.groupChat.visibleReplies: "automatic" in om zichtbare definitieve antwoorden te gebruiken voor elk groeps-/kanaalverzoek.
Als de berichtentool niet beschikbaar is onder het actieve toolbeleid, valt OpenClaw terug op automatische zichtbare antwoorden in plaats van het antwoord stilzwijgend te onderdrukken. openclaw doctor waarschuwt voor deze inconsistentie.
Deze regel is van toepassing op normale definitieve agenttekst. Gespreksbindingen die eigendom zijn van een Plugin, gebruiken het door de eigenaar-Plugin geretourneerde antwoord als het zichtbare antwoord voor geclaimde beurten in gebonden threads; de Plugin hoeft voor die bindingsantwoorden message(action=send) niet aan te roepen.
Probleemoplossing: @vermelding in groep activeert typen en daarna stilte (geen fout)
Symptoom: een @vermelding in een groep/kanaal toont de typindicator en het Gateway-log meldt dispatch complete (queuedFinal=false, replies=0), maar er verschijnt geen bericht in de ruimte. Privéberichten aan dezelfde agent krijgen normaal antwoord.
Oorzaak: de modus voor zichtbare antwoorden in de groep/het kanaal wordt omgezet naar "message_tool", waardoor OpenClaw de beurt uitvoert maar de definitieve assistenttekst onderdrukt, tenzij de agent message(action=send) aanroept. In deze modus is er geen NO_REPLY-contract; zonder aanroep van de berichtentool is de oorspronkelijke definitieve tekst privé. Voor inhoudelijke bronbeurten probeert OpenClaw nu één beveiligde herstelpoging; korte notities, expliciete stilte, ruimtegebeurtenissen, beurten die door het verzendbeleid zijn geweigerd en reeds afgeleverde beurten worden niet opnieuw geprobeerd. Normale groeps- en kanaalbeurten gebruiken standaard "automatic", dus dit symptoom treedt alleen op wanneer messages.groupChat.visibleReplies (of globaal messages.visibleReplies) expliciet is ingesteld op "message_tool". Harness-defaultVisibleReplies is hier niet van toepassing — de resolver voor groepen/kanalen negeert dit; het is alleen van invloed op directe/brongesprekken (de Codex-harness onderdrukt op die manier definitieve antwoorden in directe gesprekken).
Oplossing: kies een model dat betrouwbaarder tools aanroept, verwijder de expliciete "message_tool"-overschrijving om terug te vallen op de standaardwaarde "automatic", of stel messages.groupChat.visibleReplies: "automatic" in om zichtbare antwoorden voor elk groeps-/kanaalverzoek af te dwingen. Een inhoudelijk definitief antwoord dat niet kon worden afgeleverd, hoort niet langer als stilzwijgend succes te eindigen; het hoort te herstellen via één message(action=send)-poging of de opgeschoonde diagnostische melding voor een afleveringsfout te tonen. De Gateway laadt de messages-configuratie direct opnieuw nadat het bestand is opgeslagen; start de Gateway alleen opnieuw wanneer bestandsbewaking of het opnieuw laden van de configuratie in de implementatie is uitgeschakeld.
Typen vermeldingen:
- Metadatavermeldingen: systeemeigen @-vermeldingen van het platform. Genegeerd in de zelfchatmodus van WhatsApp.
- Tekstpatronen: veilige regexpatronen in
agents.entries.*.groupChat.mentionPatterns. Ongeldige patronen en onveilige geneste herhaling worden genegeerd. - Vermeldingscontrole wordt alleen afgedwongen wanneer detectie mogelijk is (systeemeigen vermeldingen of ten minste één patroon).
{ messages: { visibleReplies: "automatic", // dwing oude automatische definitieve antwoorden af voor directe/brongesprekken groupChat: { historyLimit: 50, unmentionedInbound: "room_event", // altijd actieve niet-vermelde gesprekken in de ruimte worden stille context visibleReplies: "message_tool", // opt-in; vereist message(action=send) voor zichtbare antwoorden in de ruimte }, }, agents: { list: [{ id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"] } }], },}messages.groupChat.historyLimit stelt de globale standaardwaarde in. Kanalen kunnen dit overschrijven met channels.<channel>.historyLimit (of per account). Stel 0 in om dit uit te schakelen.
messages.groupChat.unmentionedInbound: "room_event" dient niet-vermelde, altijd actieve groeps-/kanaalberichten op ondersteunde kanalen in als stille ruimtecontext. Vermelde berichten, opdrachten en directe berichten blijven gebruikersverzoeken. Zie Omgevingsgebeurtenissen in ruimten voor volledige voorbeelden voor Discord, Slack en Telegram.
messages.visibleReplies is de globale standaardwaarde voor brongebeurtenissen; messages.groupChat.visibleReplies overschrijft deze voor groeps-/kanaalbrongebeurtenissen. Wanneer messages.visibleReplies niet is ingesteld, gebruiken directe/brongesprekken de geselecteerde standaardwaarde van de runtime of harness, maar interne directe WebChat-beurten gebruiken automatische definitieve aflevering voor overeenstemming tussen Pi- en Codex-prompts. Stel messages.visibleReplies: "message_tool" in om bewust message(action=send) te vereisen voor zichtbare uitvoer. Toegestane lijsten voor kanalen en vermeldingscontrole bepalen nog steeds of een gebeurtenis wordt verwerkt.
Limieten voor de geschiedenis van privéberichten
{ channels: { telegram: { dmHistoryLimit: 30, dms: { "123456789": { historyLimit: 50 }, }, }, },}Resolutie: overschrijving per privégesprek → standaardwaarde van provider → geen limiet (alles blijft behouden).
Deze resolver leest channels.<provider>.dmHistoryLimit en channels.<provider>.dms.<id>.historyLimit voor elk kanaal waarvan de sessiesleutel de standaardvorm provider:direct:<id> (of de verouderde vorm provider:dm:<id>) volgt. Daardoor werkt deze voor zowel gebundelde als Plugin-kanalen, niet alleen voor een vaste lijst.
Zelfchatmodus
Neem je eigen nummer op in allowFrom om de zelfchatmodus in te schakelen (negeert systeemeigen @-vermeldingen en reageert alleen op tekstpatronen):
{ channels: { whatsapp: { allowFrom: ["+15555550123"], groups: { "*": { requireMention: true } }, }, }, agents: { list: [ { id: "main", groupChat: { mentionPatterns: ["reisponde", "@openclaw"] }, }, ], },}Opdrachten (verwerking van chatopdrachten)
{ commands: { native: "auto", // registreer systeemeigen opdrachten wanneer ondersteund nativeSkills: "auto", // registreer systeemeigen Skills-opdrachten wanneer ondersteund text: true, // parseer /opdrachten in chatberichten bash: false, // sta ! toe (alias: /bash) bashForegroundMs: 2000, config: false, // sta /config toe mcp: false, // sta /mcp toe plugins: false, // sta /plugins toe debug: false, // sta /debug toe restart: true, // sta /restart + externe SIGUSR1-herstartverzoeken toe ownerAllowFrom: ["discord:123456789012345678"], ownerDisplay: "raw", // raw | hash ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}", allowFrom: { "*": ["user1"], discord: ["user:123"], }, useAccessGroups: true, },}Opdrachtdetails
- Dit blok configureert opdrachtinterfaces. Zie Slash-opdrachten voor de huidige ingebouwde en gebundelde opdrachtencatalogus.
- Deze pagina is een naslagwerk voor configuratiesleutels, niet de volledige opdrachtencatalogus. Opdrachten die eigendom zijn van kanalen/Plugins, zoals QQ Bot
/bot-ping/bot-help/bot-logs, LINE/card, apparaatkoppeling/pair, geheugen/dreaming, telefoonbediening/phoneen Talk/voice, worden beschreven op hun kanaal-/Plugin-pagina's en in Slash-opdrachten. - Tekstopdrachten moeten zelfstandige berichten zijn die beginnen met
/. native: "auto"schakelt systeemeigen opdrachten in voor Discord/Telegram en laat ze uitgeschakeld voor Slack.nativeSkills: "auto"schakelt systeemeigen Skills-opdrachten in voor Discord/Telegram en laat ze uitgeschakeld voor Slack.- Overschrijf dit per kanaal met
channels.discord.commands.native(booleaanse waarde of"auto"). Voor Discord slaatfalsetijdens het opstarten de registratie en opschoning van systeemeigen opdrachten over. - Overschrijf de registratie van systeemeigen Skills per kanaal met
channels.<provider>.commands.nativeSkills. channels.telegram.customCommandsvoegt extra menu-items voor Telegram-bots toe.bash: trueschakelt! <cmd>in voor de shell van de host. Vereisttools.elevated.enableden dat de afzender intools.elevated.allowFrom.<channel>staat.config: trueschakelt/configin (leest/schrijftopenclaw.json). Voor Gateway-chat.send-clients vereisen persistente schrijfbewerkingen met/config set|unsetookoperator.admin; alleen-lezen/config showblijft beschikbaar voor normale operatorclients met schrijfrechten.mcp: trueschakelt/mcpin voor door OpenClaw beheerde MCP-serverconfiguratie ondermcp.servers.plugins: trueschakelt/pluginsin voor het ontdekken, installeren en in-/uitschakelen van Plugins.channels.<provider>.configWritesbeheert configuratiewijzigingen per kanaal (standaard: true).- Voor kanalen met meerdere accounts beheert
channels.<provider>.accounts.<id>.configWritesook schrijfbewerkingen die op dat account zijn gericht (bijvoorbeeld/allowlist --config --account <id>of/config set channels.<provider>.accounts.<id>...). restart: falseschakelt/restarten externeSIGUSR1-herstartverzoeken uit. Standaard:true.ownerAllowFromis de expliciete lijst met toegestane eigenaars voor opdrachten die alleen voor eigenaars beschikbaar zijn en kanaalacties die door eigenaars worden beheerd. Deze staat los vanallowFrom.ownerDisplay: "hash"hasht eigenaar-id's in de systeemprompt. StelownerDisplaySecretin om het hashen te beheren.allowFromgeldt per provider. Wanneer dit is ingesteld, is het de enige autorisatiebron (toegestane lijsten/koppelingen voor kanalen enuseAccessGroupsworden genegeerd).useAccessGroups: falsestaat toe dat opdrachten het beleid voor toegangsgroepen omzeilen wanneerallowFromniet is ingesteld.- Overzicht van documentatie over opdrachten:
- ingebouwde en gebundelde catalogus: Slash-opdrachten
- kanaalspecifieke opdrachtinterfaces: Kanalen
- QQ Bot-opdrachten: QQ Bot
- koppelingsopdrachten: Koppeling
- LINE-kaartopdracht: LINE
- geheugendromen: Dreaming
Gerelateerd
- Configuratienaslag — sleutels op het hoogste niveau
- Configuratie — agents
- Overzicht van kanalen