channels.*. Охоплює доступ у DM і групах,
multi-account конфігурації, обмеження за згадуванням і ключі для кожного каналу для Slack, Discord,
Telegram, WhatsApp, Matrix, iMessage та інших вбудованих Plugin каналів.
Для агентів, інструментів, runtime Gateway та інших ключів верхнього рівня див.
Configuration reference.
Канали
Кожен канал запускається автоматично, коли існує його секція конфігурації (якщо не заданоenabled: false).
Доступ у DM і групах
Усі канали підтримують політики DM і групові політики:| DM policy | Behavior |
|---|---|
pairing (типово) | Невідомі відправники отримують одноразовий код pairing; власник має схвалити |
allowlist | Лише відправники з allowFrom (або зі сховища paired allow) |
open | Дозволити всі вхідні DM (потрібно allowFrom: ["*"]) |
disabled | Ігнорувати всі вхідні DM |
| Group policy | Behavior |
|---|---|
allowlist (типово) | Лише групи, що відповідають налаштованому allowlist |
open | Обійти group allowlist (обмеження за згадуванням усе ще застосовується) |
disabled | Блокувати всі повідомлення груп/кімнат |
channels.defaults.groupPolicy задає типове значення, коли groupPolicy провайдера не встановлено.
Коди pairing спливають через 1 годину. Кількість очікуваних запитів pairing для DM обмежена 3 на канал.
Якщо блок провайдера повністю відсутній (channels.<provider> відсутній), групова політика runtime резервно використовує allowlist (fail-closed) з попередженням під час запуску.Перевизначення моделі для каналів
Використовуйтеchannels.modelByChannel, щоб прив’язати певні ID каналів до моделі. Значення приймають provider/model або налаштовані псевдоніми моделей. Зіставлення каналу застосовується, коли сесія ще не має перевизначення моделі (наприклад, встановленого через /model).
Типові значення каналів і Heartbeat
Використовуйтеchannels.defaults для спільної групової політики та поведінки Heartbeat між провайдерами:
channels.defaults.groupPolicy: резервна групова політика, колиgroupPolicyна рівні провайдера не встановлено.channels.defaults.contextVisibility: типовий режим видимості додаткового контексту для всіх каналів. Значення:all(типово, включати весь контекст цитат/тредів/історії),allowlist(включати лише контекст від відправників з allowlist),allowlist_quote(так само, як allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення для каналу:channels.<channel>.contextVisibility.channels.defaults.heartbeat.showOk: включати статуси здорових каналів у вивід Heartbeat.channels.defaults.heartbeat.showAlerts: включати статуси degraded/error каналів у вивід Heartbeat.channels.defaults.heartbeat.useIndicator: рендерити компактний вивід Heartbeat у стилі індикатора.
Multi-account WhatsApp
Multi-account WhatsApp
- Вихідні команди типово використовують обліковий запис
default, якщо він є; інакше — перший налаштований ID облікового запису (після сортування). - Необов’язковий
channels.whatsapp.defaultAccountперевизначає цей резервний вибір типового облікового запису, якщо він збігається з налаштованим ID облікового запису. - Застарілий каталог автентифікації Baileys для одного облікового запису переноситься командою
openclaw doctorуwhatsapp/default. - Перевизначення для окремого облікового запису:
channels.whatsapp.accounts.<id>.sendReadReceipts,channels.whatsapp.accounts.<id>.dmPolicy,channels.whatsapp.accounts.<id>.allowFrom.
Telegram
- Токен бота:
channels.telegram.botTokenабоchannels.telegram.tokenFile(лише звичайний файл; symlink відхиляються), зTELEGRAM_BOT_TOKENяк резервним значенням для типового облікового запису. - Необов’язковий
channels.telegram.defaultAccountперевизначає вибір типового облікового запису, якщо він збігається з налаштованим ID облікового запису. - У multi-account конфігураціях (2+ ID облікових записів) задайте явний типовий обліковий запис (
channels.telegram.defaultAccountабоchannels.telegram.accounts.default), щоб уникнути резервної маршрутизації;openclaw doctorпопереджає, якщо цього немає або значення некоректне. configWrites: falseблокує записи конфігурації, ініційовані з Telegram (міграції ID supergroup,/config set|unset).- Записи верхнього рівня
bindings[]зtype: "acp"налаштовують постійні прив’язки ACP для тем форуму (використовуйте канонічнийchatId:topic:topicIdуmatch.peer.id). Семантика полів спільна з ACP Agents. - Preview потоків у Telegram використовують
sendMessage+editMessageText(працює в прямих і групових чатах). - Політика повторних спроб: див. Retry policy.
Discord
- Токен:
channels.discord.token, зDISCORD_BOT_TOKENяк резервним значенням для типового облікового запису. - Прямі вихідні виклики, які передають явний Discord
token, використовують цей токен для виклику; налаштування повторних спроб/політик облікового запису все одно беруться з вибраного облікового запису в активному snapshot runtime. - Необов’язковий
channels.discord.defaultAccountперевизначає вибір типового облікового запису, якщо він збігається з налаштованим ID облікового запису. - Використовуйте
user:<id>(DM) абоchannel:<id>(канал guild) як target доставки; числові ID без префікса відхиляються. - Slug для guild — у нижньому регістрі із заміною пробілів на
-; ключі каналів використовують slugified-ім’я (без#). Віддавайте перевагу ID guild. - Повідомлення, створені ботом, типово ігноруються.
allowBots: trueвмикає їх; використовуйтеallowBots: "mentions", щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються). channels.discord.guilds.<id>.ignoreOtherMentions(і перевизначення для каналів) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (за винятком @everyone/@here).maxLinesPerMessage(типово 17) розбиває високі повідомлення, навіть якщо вони коротші за 2000 символів.channels.discord.threadBindingsкерує маршрутизацією, прив’язаною до тредів Discord:enabled: перевизначення Discord для функцій сесій, прив’язаних до тредів (/focus,/unfocus,/agents,/session idle,/session max-age, а також прив’язана доставка/маршрутизація)idleHours: перевизначення Discord для авто-unfocusпісля неактивності, у годинах (0вимикає)maxAgeHours: перевизначення Discord для жорсткого максимального віку в годинах (0вимикає)spawnSubagentSessions: перемикач opt-in для автоматичного створення/прив’язки тредів черезsessions_spawn({ thread: true })
- Записи верхнього рівня
bindings[]зtype: "acp"налаштовують постійні прив’язки ACP для каналів і тредів (використовуйте ID каналу/треду вmatch.peer.id). Семантика полів спільна з ACP Agents. channels.discord.ui.components.accentColorзадає accent color для контейнерів Discord components v2.channels.discord.voiceвмикає розмови у voice-каналах Discord і необов’язкове auto-join + перевизначення TTS.channels.discord.voice.daveEncryptionіchannels.discord.voice.decryptionFailureToleranceнапряму передаються в параметри DAVE@discordjs/voice(типовоtrueі24).- OpenClaw також намагається відновити прийом voice, виходячи й повторно приєднуючись до voice-сесії після повторних збоїв дешифрування.
channels.discord.streaming— канонічний ключ режиму streaming. ЗастаріліstreamModeі булеві значенняstreamingмігруються автоматично.channels.discord.autoPresenceзіставляє доступність runtime з присутністю бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу.channels.discord.dangerouslyAllowNameMatchingповторно вмикає зіставлення за змінними іменами/тегами (режим сумісності break-glass).channels.discord.execApprovals: нативна доставка погоджень exec у Discord і авторизація тих, хто погоджує.enabled:true,falseабо"auto"(типово). У режимі auto погодження exec активуються, коли тих, хто погоджує, можна визначити зapproversабоcommands.ownerAllowFrom.approvers: ID користувачів Discord, яким дозволено погоджувати запити exec. Якщо не вказано, резервно використовуєтьсяcommands.ownerAllowFrom.agentFilter: необов’язковий allowlist ID агентів. Якщо опущено, погодження пересилаються для всіх агентів.sessionFilter: необов’язкові шаблони ключів сесій (підрядок або regex).target: куди надсилати запити на погодження."dm"(типово) надсилає в DM тих, хто погоджує,"channel"— у вихідний канал,"both"— в обидва місця. Коли target включає"channel", кнопками можуть користуватися лише визначеніapprovers.cleanupAfterResolve: колиtrue, видаляє DM з погодженням після схвалення, відхилення або тайм-ауту.
off (немає), own (повідомлення бота, типово), all (усі повідомлення), allowlist (від guilds.<id>.users для всіх повідомлень).
Google Chat
- JSON service account: inline (
serviceAccount) або через файл (serviceAccountFile). - Також підтримується SecretRef для service account (
serviceAccountRef). - Резервні env:
GOOGLE_CHAT_SERVICE_ACCOUNTабоGOOGLE_CHAT_SERVICE_ACCOUNT_FILE. - Використовуйте
spaces/<spaceId>абоusers/<userId>як target доставки. channels.googlechat.dangerouslyAllowNameMatchingповторно вмикає зіставлення за змінним email principal (режим сумісності break-glass).
Slack
- Socket mode потребує і
botToken, іappToken(SLACK_BOT_TOKEN+SLACK_APP_TOKENдля резервного env типового облікового запису). - HTTP mode потребує
botTokenплюсsigningSecret(у корені або для окремого облікового запису). botToken,appToken,signingSecretіuserTokenприймають plaintext рядки або об’єкти SecretRef.- Snapshot облікових записів Slack показують поля джерела/статусу для кожного облікового даного, такі як
botTokenSource,botTokenStatus,appTokenStatus, а в режимі HTTP —signingSecretStatus.configured_unavailableозначає, що обліковий запис налаштовано через SecretRef, але поточний шлях команди/runtime не зміг визначити значення секрету. configWrites: falseблокує записи конфігурації, ініційовані зі Slack.- Необов’язковий
channels.slack.defaultAccountперевизначає вибір типового облікового запису, якщо він збігається з налаштованим ID облікового запису. channels.slack.streaming.mode— канонічний ключ режиму streaming у Slack.channels.slack.streaming.nativeTransportкерує нативним transport streaming у Slack. ЗастаріліstreamMode, булевіstreamingіnativeStreamingмігруються автоматично.- Використовуйте
user:<id>(DM) абоchannel:<id>як target доставки.
off, own (типово), all, allowlist (з reactionAllowlist).
Ізоляція сесій тредів: thread.historyScope — на рівні треду (типово) або спільно на рівні каналу. thread.inheritParent копіює transcript батьківського каналу в нові треди.
- Нативний streaming Slack плюс статус треду Slack у стилі assistant “is typing…” потребують target треду для відповіді. DM верхнього рівня типово залишаються поза тредом, тому вони використовують
typingReactionабо звичайну доставку замість preview у стилі треду. typingReactionдодає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім видаляє її після завершення. Використовуйте shortcode emoji Slack, наприклад"hourglass_flowing_sand".channels.slack.execApprovals: нативна доставка погоджень exec у Slack і авторизація тих, хто погоджує. Та сама схема, що і в Discord:enabled(true/false/"auto"),approvers(ID користувачів Slack),agentFilter,sessionFilterіtarget("dm","channel"або"both").
| Action group | Default | Notes |
|---|---|---|
| reactions | увімкнено | Реакції + список реакцій |
| messages | увімкнено | Читання/надсилання/редагування/видалення |
| pins | увімкнено | Закріплення/відкріплення/список |
| memberInfo | увімкнено | Інформація про учасника |
| emojiList | увімкнено | Список кастомних emoji |
Mattermost
Mattermost постачається як Plugin:openclaw plugins install @openclaw/mattermost.
oncall (відповідати на @-згадування, типово), onmessage (кожне повідомлення), onchar (повідомлення, що починаються з trigger prefix).
Коли нативні команди Mattermost увімкнені:
commands.callbackPathмає бути шляхом (наприклад/api/channels/mattermost/command), а не повним URL.commands.callbackUrlмає вказувати на endpoint Gateway OpenClaw і бути досяжним із сервера Mattermost.- Нативні slash callback автентифікуються за допомогою per-command токенів, які
Mattermost повертає під час реєстрації slash command. Якщо реєстрація не
вдалася або не активовано жодної команди, OpenClaw відхиляє callback з
Unauthorized: invalid command token. - Для приватних/tailnet/internal host callback Mattermost може вимагати, щоб
ServiceSettings.AllowedUntrustedInternalConnectionsвключав host/domain callback. Використовуйте значення host/domain, а не повні URL. channels.mattermost.configWrites: дозволити або заборонити записи конфігурації, ініційовані з Mattermost.channels.mattermost.requireMention: вимагати@mentionперед відповіддю в каналах.channels.mattermost.groups.<channelId>.requireMention: перевизначення обмеження за згадуванням для окремого каналу ("*"для типового значення).- Необов’язковий
channels.mattermost.defaultAccountперевизначає вибір типового облікового запису, якщо він збігається з налаштованим ID облікового запису.
Signal
off, own (типово), all, allowlist (з reactionAllowlist).
channels.signal.account: прив’язати запуск каналу до конкретної identity облікового запису Signal.channels.signal.configWrites: дозволити або заборонити записи конфігурації, ініційовані із Signal.- Необов’язковий
channels.signal.defaultAccountперевизначає вибір типового облікового запису, якщо він збігається з налаштованим ID облікового запису.
BlueBubbles
BlueBubbles — рекомендований шлях для iMessage (на основі Plugin, налаштовується вchannels.bluebubbles).
- Ключові шляхи ядра, що описані тут:
channels.bluebubbles,channels.bluebubbles.dmPolicy. - Необов’язковий
channels.bluebubbles.defaultAccountперевизначає вибір типового облікового запису, якщо він збігається з налаштованим ID облікового запису. - Записи верхнього рівня
bindings[]зtype: "acp"можуть прив’язувати розмови BlueBubbles до постійних сесій ACP. Використовуйте handle BlueBubbles або рядок target (chat_id:*,chat_guid:*,chat_identifier:*) уmatch.peer.id. Спільна семантика полів: ACP Agents. - Повну конфігурацію каналу BlueBubbles задокументовано в BlueBubbles.
iMessage
OpenClaw запускаєimsg rpc (JSON-RPC через stdio). Daemon або port не потрібні.
-
Необов’язковий
channels.imessage.defaultAccountперевизначає вибір типового облікового запису, якщо він збігається з налаштованим ID облікового запису. - Потрібен Full Disk Access до DB Messages.
-
Віддавайте перевагу target
chat_id:<id>. Використовуйтеimsg chats --limit 20, щоб переглянути список чатів. -
cliPathможе вказувати на обгортку SSH; задайтеremoteHost(hostабоuser@host) для отримання вкладень через SCP. -
attachmentRootsіremoteAttachmentRootsобмежують шляхи вхідних вкладень (типово:/Users/*/Library/Messages/Attachments). -
SCP використовує сувору перевірку host key, тож переконайтеся, що ключ relay host уже є в
~/.ssh/known_hosts. -
channels.imessage.configWrites: дозволити або заборонити записи конфігурації, ініційовані з iMessage. -
Записи верхнього рівня
bindings[]зtype: "acp"можуть прив’язувати розмови iMessage до постійних сесій ACP. Використовуйте нормалізований handle або явний target чату (chat_id:*,chat_guid:*,chat_identifier:*) уmatch.peer.id. Спільна семантика полів: ACP Agents.
Приклад обгортки SSH для iMessage
Приклад обгортки SSH для iMessage
Matrix
Matrix використовує Plugin і налаштовується вchannels.matrix.
- Автентифікація токеном використовує
accessToken; автентифікація паролем —userId+password. channels.matrix.proxyмаршрутизує HTTP-трафік Matrix через явний HTTP(S) proxy. Іменовані облікові записи можуть перевизначати його черезchannels.matrix.accounts.<id>.proxy.channels.matrix.network.dangerouslyAllowPrivateNetworkдозволяє приватні/internal homeserver.proxyі цей мережевий opt-in — незалежні механізми керування.channels.matrix.defaultAccountвибирає пріоритетний обліковий запис у multi-account конфігураціях.channels.matrix.autoJoinтипово має значенняoff, тому запрошені кімнати й нові запрошення у стилі DM ігноруються, доки ви не задастеautoJoin: "allowlist"зautoJoinAllowlistабоautoJoin: "always".channels.matrix.execApprovals: нативна доставка погоджень exec у Matrix і авторизація тих, хто погоджує.enabled:true,falseабо"auto"(типово). У режимі auto погодження exec активуються, коли тих, хто погоджує, можна визначити зapproversабоcommands.ownerAllowFrom.approvers: ID користувачів Matrix (наприклад@owner:example.org), яким дозволено погоджувати запити exec.agentFilter: необов’язковий allowlist ID агентів. Якщо опущено, погодження пересилаються для всіх агентів.sessionFilter: необов’язкові шаблони ключів сесій (підрядок або regex).target: куди надсилати запити на погодження."dm"(типово),"channel"(початкова кімната) або"both".- Перевизначення для окремого облікового запису:
channels.matrix.accounts.<id>.execApprovals.
channels.matrix.dm.sessionScopeкерує тим, як DM Matrix групуються в сесії:per-user(типово) спільно використовує сесію за маршрутизованим peer, тоді якper-roomізолює кожну DM-кімнату.- Перевірки статусу Matrix і live-пошук у directory використовують ту саму політику proxy, що й runtime-трафік.
- Повну конфігурацію Matrix, правила target і приклади налаштування задокументовано в Matrix.
Microsoft Teams
Microsoft Teams використовує Plugin і налаштовується вchannels.msteams.
- Ключові шляхи ядра, що описані тут:
channels.msteams,channels.msteams.configWrites. - Повну конфігурацію Teams (облікові дані, Webhook, політика DM/груп, перевизначення для окремих команд/каналів) задокументовано в Microsoft Teams.
IRC
IRC використовує Plugin і налаштовується вchannels.irc.
- Ключові шляхи ядра, що описані тут:
channels.irc,channels.irc.dmPolicy,channels.irc.configWrites,channels.irc.nickserv.*. - Необов’язковий
channels.irc.defaultAccountперевизначає вибір типового облікового запису, якщо він збігається з налаштованим ID облікового запису. - Повну конфігурацію каналу IRC (host/port/TLS/channels/allowlists/обмеження за згадуванням) задокументовано в IRC.
Multi-account (усі канали)
Запускайте кілька облікових записів для одного каналу (кожен із власнимaccountId):
defaultвикористовується, колиaccountIdпропущено (CLI + маршрутизація).- Env-токени застосовуються лише до облікового запису default.
- Базові налаштування каналу застосовуються до всіх облікових записів, якщо їх не перевизначено для окремого облікового запису.
- Використовуйте
bindings[].match.accountId, щоб маршрутизувати кожен обліковий запис до іншого агента. - Якщо ви додаєте не-default обліковий запис через
openclaw channels add(або onboarding каналу), поки ще використовуєте топ-рівневу конфігурацію каналу для одного облікового запису, OpenClaw спочатку переносить значення верхнього рівня для одного облікового запису, прив’язані до account, у мапу облікових записів каналу, щоб початковий обліковий запис продовжив працювати. Більшість каналів переміщують їх уchannels.<channel>.accounts.default; Matrix натомість може зберегти наявний відповідний іменований/default target. - Наявні прив’язки лише каналу (без
accountId) і далі відповідають обліковому запису default; прив’язки з областю облікового запису залишаються необов’язковими. openclaw doctor --fixтакож виправляє змішані форми, переміщуючи верхньорівневі значення для одного облікового запису, прив’язані до account, у просунутий обліковий запис, вибраний для цього каналу. Більшість каналів використовуютьaccounts.default; Matrix натомість може зберегти наявний відповідний іменований/default target.
Інші канали Plugin
Багато каналів Plugin налаштовуються якchannels.<id> і задокументовані на окремих сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch).
Див. повний індекс каналів: Channels.
Обмеження за згадуванням у групових чатах
Для групових повідомлень типово потрібне згадування (згадування в metadata або безпечні regex-патерни). Це застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage. Типи згадувань:- Згадування в metadata: нативні @-згадування платформи. Ігноруються в режимі self-chat WhatsApp.
- Текстові патерни: безпечні regex-патерни в
agents.list[].groupChat.mentionPatterns. Некоректні патерни й небезпечні вкладені повторення ігноруються. - Обмеження за згадуванням застосовується лише тоді, коли виявлення можливе (нативні згадування або принаймні один патерн).
messages.groupChat.historyLimit задає глобальне типове значення. Канали можуть перевизначати його через channels.<channel>.historyLimit (або для окремого облікового запису). Задайте 0, щоб вимкнути.
Обмеження історії DM
telegram, whatsapp, discord, slack, signal, imessage, msteams.
Режим self-chat
Додайте власний номер доallowFrom, щоб увімкнути режим self-chat (ігнорує нативні @-згадування, відповідає лише на текстові патерни):
Команди (обробка команд чату)
Деталі команд
Деталі команд
- Цей блок налаштовує поверхні команд. Поточний каталог вбудованих + bundled команд див. у Slash Commands.
- Ця сторінка — довідник ключів конфігурації, а не повний каталог команд. Команди, що належать каналу/Plugin, як-от QQ Bot
/bot-ping/bot-help/bot-logs, LINE/card, device-pair/pair, memory/dreaming, phone-control/phoneі Talk/voice, задокументовані на сторінках відповідних каналів/Plugin, а також у Slash Commands. - Текстові команди мають бути окремими повідомленнями з початковим
/. native: "auto"вмикає нативні команди для Discord/Telegram, залишаючи Slack вимкненим.nativeSkills: "auto"вмикає нативні команди Skills для Discord/Telegram, залишаючи Slack вимкненим.- Перевизначення для окремого каналу:
channels.discord.commands.native(bool або"auto").falseочищає раніше зареєстровані команди. - Перевизначуйте реєстрацію нативних Skills для окремого каналу через
channels.<provider>.commands.nativeSkills. channels.telegram.customCommandsдодає додаткові записи меню бота Telegram.bash: trueвмикає! <cmd>для shell хоста. Потрібніtools.elevated.enabledі відправник уtools.elevated.allowFrom.<channel>.config: trueвмикає/config(читання/записopenclaw.json). Для клієнтів gatewaychat.sendпостійні записи/config set|unsetтакож потребуютьoperator.admin; доступний лише для читання/config showзалишається доступним для звичайних клієнтів operator з правами запису.mcp: trueвмикає/mcpдля конфігурації MCP-сервера під керуванням OpenClaw уmcp.servers.plugins: trueвмикає/pluginsдля виявлення Plugin, встановлення та керування ввімкненням/вимкненням.channels.<provider>.configWritesкерує змінами конфігурації для кожного каналу окремо (типово: true).- Для multi-account каналів
channels.<provider>.accounts.<id>.configWritesтакож керує записами, що націлені на цей обліковий запис (наприклад/allowlist --config --account <id>або/config set channels.<provider>.accounts.<id>...). restart: falseвимикає/restartі дії інструмента перезапуску gateway. Типове значення:true.ownerAllowFrom— це явний allowlist власника для команд/інструментів лише для власника. Він відокремлений відallowFrom.ownerDisplay: "hash"хешує ID власників у system prompt. ЗадайтеownerDisplaySecret, щоб керувати хешуванням.allowFromє окремим для кожного провайдера. Якщо його задано, це єдине джерело авторизації (allowlist/pairing каналу таuseAccessGroupsігноруються).useAccessGroups: falseдозволяє командам обходити політики access-group, колиallowFromне задано.- Мапа документації команд:
Пов’язане
- Configuration reference — ключі верхнього рівня
- Configuration — agents
- Channels overview