channels.*. Охоплює доступ до DM і груп,
налаштування кількох облікових записів, фільтрацію за згадками та ключі за каналами для Slack, Discord,
Telegram, WhatsApp, Matrix, iMessage та інших вбудованих Plugin каналів.
Для агентів, інструментів, середовища виконання Gateway та інших ключів верхнього рівня див.
Довідник конфігурації.
Канали
Кожен канал запускається автоматично, коли існує його секція конфігурації (якщо не заданоenabled: false).
Доступ до DM і груп
Усі канали підтримують політики DM і політики груп:| Політика DM | Поведінка |
|---|---|
pairing (типово) | Невідомі відправники отримують одноразовий код сполучення; власник має схвалити |
allowlist | Лише відправники в allowFrom (або у сховищі дозволених сполучень) |
open | Дозволити всі вхідні DM (потребує allowFrom: ["*"]) |
disabled | Ігнорувати всі вхідні DM |
| Політика груп | Поведінка |
|---|---|
allowlist (типово) | Лише групи, що відповідають налаштованому списку дозволених |
open | Обійти списки дозволених груп (фільтрація за згадками все ще застосовується) |
disabled | Блокувати всі повідомлення груп/кімнат |
channels.defaults.groupPolicy задає типове значення, коли groupPolicy провайдера не встановлено.
Коди сполучення спливають через 1 годину. Очікувані запити на сполучення DM обмежені 3 на канал.
Якщо блок провайдера повністю відсутній (channels.<provider> відсутній), політика груп середовища виконання повертається до allowlist (закриття при збої) з попередженням під час запуску.Перевизначення моделі каналу
Використовуйтеchannels.modelByChannel, щоб закріпити певні ID каналів або співрозмовників у прямих повідомленнях за моделлю. Значення приймають provider/model або налаштовані псевдоніми моделей. Зіставлення каналів застосовується, коли сесія ще не має перевизначення моделі (наприклад, заданого через /model).
Для розмов у групах/тредах ключами є специфічні для каналу ID груп, ID тем або назви каналів. Для розмов у прямих повідомленнях (DM) ключами є ідентифікатори співрозмовників, отримані з ідентичності відправника каналу (nativeDirectUserId, origin.from, origin.to, OriginatingTo, From або SenderId). Точна форма ключа залежить від каналу:
| Канал | Форма ключа DM | Приклад |
|---|---|---|
| Slack | user:U... | user:U12345 |
| Telegram | сирий ID користувача | 123456789 |
| Discord | сирий ID користувача | 987654321 |
| номер телефону або JID | 15551234567 | |
| Matrix | ID користувача Matrix | @user:matrix.org |
| Feishu | feishu:ou_... | feishu:ou_a8b6cab7e945387de5f253775d9b4d85 |
Типові значення каналів і Heartbeat
Використовуйтеchannels.defaults для спільної поведінки політики груп і Heartbeat між провайдерами:
channels.defaults.groupPolicy: резервна політика груп, колиgroupPolicyна рівні провайдера не встановлено.channels.defaults.contextVisibility: типовий режим видимості додаткового контексту для всіх каналів. Значення:all(типово, включати весь контекст цитат/тредів/історії),allowlist(включати лише контекст від дозволених відправників),allowlist_quote(те саме, що allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення за каналом:channels.<channel>.contextVisibility.channels.defaults.heartbeat.showOk: включати справні статуси каналів у вивід Heartbeat.channels.defaults.heartbeat.showAlerts: включати погіршені/помилкові статуси у вивід Heartbeat.channels.defaults.heartbeat.useIndicator: відтворювати компактний вивід Heartbeat у стилі індикатора.
- Записи верхнього рівня
bindings[]зtype: "acp"налаштовують постійні прив’язки ACP для DM і груп WhatsApp. Використовуйте прямий номер E.164 або JID групи WhatsApp уmatch.peer.id. Семантика полів спільна в Агенти ACP.
Кілька облікових записів WhatsApp
Кілька облікових записів 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(лише звичайний файл; символічні посилання відхиляються), зTELEGRAM_BOT_TOKENяк резервним варіантом для типового облікового запису. apiRoot— це лише корінь Telegram Bot API. Використовуйтеhttps://api.telegram.orgабо власний розміщений/proxy-корінь, а неhttps://api.telegram.org/bot<TOKEN>;openclaw doctor --fixвидаляє випадковий кінцевий суфікс/bot<TOKEN>.- Необов’язковий
channels.telegram.defaultAccountперевизначає вибір типового облікового запису, коли він збігається з налаштованим ID облікового запису. - У налаштуваннях із кількома обліковими записами (2+ ID облікових записів) задайте явний типовий (
channels.telegram.defaultAccountабоchannels.telegram.accounts.default), щоб уникнути резервної маршрутизації;openclaw doctorпопереджає, коли він відсутній або недійсний. configWrites: falseблокує записи конфігурації, ініційовані Telegram (міграції ID супергруп,/config set|unset).- Записи верхнього рівня
bindings[]зtype: "acp"налаштовують постійні прив’язки ACP для тем форуму (використовуйте канонічнийchatId:topic:topicIdуmatch.peer.id). Семантика полів спільна в Агенти ACP. - Попередні перегляди потоків Telegram використовують
sendMessage+editMessageText(працює в прямих і групових чатах). - Політика повторних спроб: див. Політика повторних спроб.
Discord
- Токен:
channels.discord.token, ізDISCORD_BOT_TOKENяк резервним варіантом для стандартного облікового запису. - Прямі вихідні виклики, що надають явний Discord
token, використовують цей токен для виклику; параметри повторних спроб і політик облікового запису все одно беруться з вибраного облікового запису в активному знімку середовища виконання. - Необов’язковий
channels.discord.defaultAccountперевизначає вибір стандартного облікового запису, коли збігається з налаштованим ідентифікатором облікового запису. - Використовуйте
user:<id>(DM) абоchannel:<id>(канал гільдії) для цілей доставки; голі числові ідентифікатори відхиляються. - Слаги гільдій пишуться нижнім регістром із заміною пробілів на
-; ключі каналів використовують слаговану назву (без#). Віддавайте перевагу ідентифікаторам гільдій. - Повідомлення, створені ботами, стандартно ігноруються.
allowBots: trueвмикає їх; використовуйтеallowBots: "mentions", щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються). - Канали, що підтримують вхідні повідомлення, створені ботами, можуть використовувати спільний захист від циклів ботів. Задайте
channels.defaults.botLoopProtectionдля базових бюджетів пар, а потім перевизначайте канал або обліковий запис лише тоді, коли окрема поверхня потребує інших лімітів. channels.discord.guilds.<id>.ignoreOtherMentions(і перевизначення каналів) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (за винятком @everyone/@here).channels.discord.mentionAliasesзіставляє стабільний вихідний текст@handleз ідентифікаторами користувачів Discord перед надсиланням, щоб відомих учасників команди можна було згадувати детерміновано, навіть коли тимчасовий кеш каталогу порожній. Перевизначення для окремого облікового запису розміщуються вchannels.discord.accounts.<accountId>.mentionAliases.maxLinesPerMessage(стандартно 17) розділяє високі повідомлення, навіть якщо вони менші за 2000 символів.channels.discord.suppressEmbedsстандартно має значенняtrue, тому вихідні URL не розгортаються в попередні перегляди посилань Discord, якщо це не вимкнено. Явні корисні навантаженняembedsусе одно надсилаються звичайно; виклики інструментів для окремих повідомлень можуть перевизначити це черезsuppressEmbeds.channels.discord.threadBindingsкерує маршрутизацією, прив’язаною до потоків Discord:enabled: перевизначення Discord для функцій сесій, прив’язаних до потоків (/focus,/unfocus,/agents,/session idle,/session max-age, а також прив’язана доставка/маршрутизація)idleHours: перевизначення Discord для автоматичного зняття фокуса через неактивність у годинах (0вимикає)maxAgeHours: перевизначення Discord для жорсткого максимального віку в годинах (0вимикає)spawnSessions: перемикач дляsessions_spawn({ thread: true })і автоматичного створення/прив’язування потоків ACP thread-spawn (стандартно:true)defaultSpawnContext: нативний контекст субагента для породжень, прив’язаних до потоків (стандартно"fork")
- Записи верхнього рівня
bindings[]ізtype: "acp"налаштовують сталі прив’язки ACP для каналів і потоків (використовуйте ідентифікатор каналу/потоку вmatch.peer.id). Семантика полів спільна в агентах ACP. channels.discord.ui.components.accentColorзадає акцентний колір для контейнерів компонентів Discord v2.channels.discord.agentComponents.ttlMsкерує тим, як довго надіслані зворотні виклики компонентів Discord залишаються зареєстрованими. Стандартне значення —1800000(30 хвилин), максимальне —86400000(24 години), а перевизначення для окремого облікового запису розміщуються вchannels.discord.accounts.<accountId>.agentComponents.ttlMs. Довші значення довше зберігають придатність старих кнопок/виборів/форм, тому віддавайте перевагу найкоротшому TTL, що підходить для робочого процесу.channels.discord.voiceвмикає розмови в голосових каналах Discord і необов’язкове автоматичне приєднання + перевизначення LLM + TTS. Текстові конфігурації Discord стандартно залишають голос вимкненим; задайтеchannels.discord.voice.enabled=true, щоб увімкнути його.channels.discord.voice.modelнеобов’язково перевизначає модель LLM, що використовується для відповідей у голосовому каналі Discord.channels.discord.voice.daveEncryptionіchannels.discord.voice.decryptionFailureToleranceпередаються до параметрів DAVE@discordjs/voice(стандартноtrueі24).channels.discord.voice.connectTimeoutMsкерує початковим очікуванням Ready@discordjs/voiceдля/vc joinі спроб автоматичного приєднання (стандартно30000).channels.discord.voice.reconnectGraceMsкерує тим, скільки часу від’єднана голосова сесія може входити в сигналізацію повторного підключення, перш ніж OpenClaw її знищить (стандартно15000).- Відтворення голосу Discord не переривається подією початку мовлення іншого користувача. Щоб уникнути циклів зворотного зв’язку, OpenClaw ігнорує нове захоплення голосу, поки відтворюється TTS.
- OpenClaw додатково намагається відновити приймання голосу, виходячи з голосової сесії та повторно приєднуючись до неї після повторних збоїв дешифрування.
channels.discord.streamingє канонічним ключем режиму потоку. Discord стандартно використовуєstreaming.mode: "progress", щоб перебіг роботи інструментів/завдань з’являвся в одному редагованому повідомленні попереднього перегляду; задайтеstreaming.mode: "off", щоб вимкнути це. Застарілі значенняstreamModeі булеві значенняstreamingзалишаються псевдонімами середовища виконання; запустітьopenclaw doctor --fix, щоб переписати збережену конфігурацію.channels.discord.autoPresenceзіставляє доступність середовища виконання зі станом присутності бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу.channels.discord.dangerouslyAllowNameMatchingповторно вмикає зіставлення за змінюваним іменем/тегом (аварійний режим сумісності).channels.discord.execApprovals: нативна для Discord доставка затверджень exec і авторизація затверджувачів.enabled:true,falseабо"auto"(стандартно). В автоматичному режимі затвердження exec активуються, коли затверджувачів можна визначити зapproversабоcommands.ownerAllowFrom.approvers: ідентифікатори користувачів Discord, яким дозволено затверджувати запити exec. Якщо пропущено, використовується резервнеcommands.ownerAllowFrom.agentFilter: необов’язковий список дозволених ідентифікаторів агентів. Пропустіть, щоб пересилати затвердження для всіх агентів.sessionFilter: необов’язкові шаблони ключів сесій (підрядок або регулярний вираз).target: куди надсилати запити затвердження."dm"(стандартно) надсилає в DM затверджувачам,"channel"надсилає у вихідний канал,"both"надсилає в обидва місця. Коли ціль містить"channel", кнопками можуть користуватися лише визначені затверджувачі.cleanupAfterResolve: колиtrue, видаляє DM із затвердженням після затвердження, відмови або тайм-ауту.
off (немає), own (повідомлення бота, стандартно), all (усі повідомлення), allowlist (з guilds.<id>.users для всіх повідомлень).
Google Chat
- JSON облікового запису служби: вбудований (
serviceAccount) або файловий (serviceAccountFile). - SecretRef облікового запису служби також підтримується (
serviceAccountRef). - Резервні змінні середовища:
GOOGLE_CHAT_SERVICE_ACCOUNTабоGOOGLE_CHAT_SERVICE_ACCOUNT_FILE. - Використовуйте
spaces/<spaceId>абоusers/<userId>для цілей доставки. channels.googlechat.dangerouslyAllowNameMatchingповторно вмикає зіставлення за змінюваним email-принципалом (аварійний режим сумісності).
Slack
- Режим Socket потребує і
botToken, іappToken(SLACK_BOT_TOKEN+SLACK_APP_TOKENдля резервного використання env стандартного облікового запису). - Режим HTTP потребує
botTokenплюсsigningSecret(на кореневому рівні або для кожного облікового запису). socketModeпередає налаштування транспорту Slack SDK Socket Mode до публічного API приймача Bolt. Використовуйте це лише під час розслідування тайм-аутів ping/pong або застарілої поведінки websocket.clientPingTimeoutза замовчуванням має значення15000;serverPingTimeoutіpingPongLoggingEnabledпередаються лише коли налаштовані.botToken,appToken,signingSecretіuserTokenприймають відкриті рядки або об’єкти SecretRef.- Знімки облікових записів Slack показують поля джерела/статусу для кожних облікових даних, як-от
botTokenSource,botTokenStatus,appTokenStatus, а в режимі HTTP —signingSecretStatus.configured_unavailableозначає, що обліковий запис налаштований через SecretRef, але поточний шлях команди/runtime не зміг отримати значення секрету. configWrites: falseблокує записи конфігурації, ініційовані Slack.- Необов’язковий
channels.slack.defaultAccountперевизначає вибір стандартного облікового запису, коли він збігається з id налаштованого облікового запису. channels.slack.streaming.modeє канонічним ключем режиму потоку Slack.channels.slack.streaming.nativeTransportкерує нативним потоковим транспортом Slack. Застарілі значенняstreamMode, булевеstreamingіnativeStreamingзалишаються runtime-аліасами; виконайтеopenclaw doctor --fix, щоб переписати збережену конфігурацію.unfurlLinksіunfurlMediaпередають булеві параметри розгортання посилань і медіа Slackchat.postMessageдля відповідей бота.unfurlLinksза замовчуванням має значенняfalse, щоб вихідні посилання бота не розгорталися вбудовано, якщо це не ввімкнено;unfurlMediaпропускається, якщо не налаштовано. Встановіть будь-яке з цих значень уchannels.slack.accounts.<accountId>, щоб перевизначити значення верхнього рівня для одного облікового запису.- Використовуйте
user:<id>(DM) абоchannel:<id>для цілей доставки.
off, own (за замовчуванням), all, allowlist (з reactionAllowlist).
Ізоляція сесії потоку: thread.historyScope є окремою для кожного потоку (за замовчуванням) або спільною для каналу. thread.inheritParent копіює стенограму батьківського каналу до нових потоків.
- Нативне потокове передавання Slack разом зі статусом потоку в стилі асистента Slack “is typing…” потребують цільового потоку відповіді. DM верхнього рівня за замовчуванням лишаються поза потоком, тож вони все ще можуть передаватися через попередні перегляди чернетки Slack із публікацією та редагуванням замість показу нативного потокового/статусного попереднього перегляду в стилі потоку.
typingReactionдодає тимчасову реакцію до вхідного повідомлення Slack, доки виконується відповідь, а потім видаляє її після завершення. Використовуйте шорткод emoji Slack, наприклад"hourglass_flowing_sand".channels.slack.execApprovals: доставка через нативний клієнт затверджень Slack і авторизація затверджувача exec. Та сама схема, що й у Discord:enabled(true/false/"auto"),approvers(ID користувачів Slack),agentFilter,sessionFilterіtarget("dm","channel"або"both"). Затвердження Plugin можуть використовувати цей шлях нативного клієнта для запитів, що походять зі Slack, коли затверджувачі Plugin Slack визначаються; доставку затверджень Plugin нативно через Slack також можна ввімкнути черезapprovals.pluginдля сесій, що походять зі Slack, або цілей Slack. Затвердження Plugin використовують затверджувачів Plugin Slack ізallowFromі стандартну маршрутизацію, а не затверджувачів exec.
| Група дій | За замовчуванням | Примітки |
|---|---|---|
| reactions | enabled | Реагувати + перелічувати реакції |
| messages | enabled | Читати/надсилати/редагувати/видаляти |
| pins | enabled | Закріпити/відкріпити/перелічити |
| memberInfo | enabled | Інформація про учасника |
| emojiList | enabled | Список власних emoji |
Mattermost
Mattermost постачається як вбудований Plugin у поточних випусках OpenClaw. Старіші або кастомні збірки можуть установити поточний npm-пакет за допомогоюopenclaw plugins install @openclaw/mattermost. Перевірте
npmjs.com/package/@openclaw/mattermost
щодо поточних dist-tags перед фіксацією версії.
oncall (відповідати на @-згадку, за замовчуванням), onmessage (кожне повідомлення), onchar (повідомлення, що починаються з префікса-тригера).
Коли нативні команди Mattermost увімкнені:
commands.callbackPathмає бути шляхом (наприклад/api/channels/mattermost/command), а не повною URL-адресою.commands.callbackUrlмає вказувати на кінцеву точку OpenClaw gateway і бути доступним із сервера Mattermost.- Нативні callback-и slash автентифікуються токенами для кожної команди, які повертає
Mattermost під час реєстрації slash-команди. Якщо реєстрація не вдається або жодні
команди не активовані, OpenClaw відхиляє callback-и з
Unauthorized: invalid command token. - Для приватних/tailnet/внутрішніх хостів callback Mattermost може вимагати,
щоб
ServiceSettings.AllowedUntrustedInternalConnectionsмістив хост/домен callback. Використовуйте значення хоста/домену, а не повні 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: прив’язати запуск каналу до конкретної ідентичності облікового запису Signal.channels.signal.configWrites: дозволити або заборонити записи конфігурації, ініційовані Signal.- Необов’язковий
channels.signal.defaultAccountперевизначає вибір стандартного облікового запису, коли він збігається з id налаштованого облікового запису.
iMessage
OpenClaw запускаєimsg rpc (JSON-RPC через stdio). Демон або порт не потрібні. Це рекомендований шлях для нових налаштувань OpenClaw iMessage, коли хост може надати дозволи до бази даних Messages і Automation.
Підтримку BlueBubbles видалено. channels.bluebubbles не є підтримуваною поверхнею runtime-конфігурації в поточному OpenClaw. Перенесіть старі конфігурації до channels.imessage; дивіться Видалення BlueBubbles і шлях imsg iMessage для короткої версії та Перехід із BlueBubbles для повної таблиці перекладу.
Якщо Gateway не запущений на Mac, де виконано вхід у Messages, залиште channels.imessage.enabled=true і встановіть channels.imessage.cliPath на SSH-обгортку, яка запускає imsg "$@" на цьому Mac. Стандартний локальний шлях imsg працює лише на macOS.
Перш ніж покладатися на SSH-обгортку для виробничих надсилань, перевірте вихідний imsg send через саме цю обгортку. Деякі стани macOS TCC призначають Messages Automation для /usr/libexec/sshd-keygen-wrapper, через що читання й перевірки можуть працювати, а надсилання завершуватимуться помилкою AppleEvents -1743; дивіться Надсилання через SSH-обгортку завершується помилкою AppleEvents -1743.
-
Необов’язковий
channels.imessage.defaultAccountперевизначає вибір стандартного облікового запису, коли він збігається з id налаштованого облікового запису. - Потребує Full Disk Access до бази даних Messages.
-
Надавайте перевагу цілям
chat_id:<id>. Використовуйтеimsg chats --limit 20, щоб перелічити чати. -
cliPathможе вказувати на SSH-обгортку; встановітьremoteHost(hostабоuser@host) для отримання вкладень через SCP. -
attachmentRootsіremoteAttachmentRootsобмежують шляхи вхідних вкладень (за замовчуванням:/Users/*/Library/Messages/Attachments). -
SCP використовує сувору перевірку ключа хоста, тож переконайтеся, що ключ ретрансляційного хоста вже існує в
~/.ssh/known_hosts. -
channels.imessage.configWrites: дозволити або заборонити записи конфігурації, ініційовані iMessage. -
channels.imessage.sendTransport: бажаний транспорт надсилання RPCimsgдля звичайних вихідних відповідей.auto(за замовчуванням) використовує міст IMCore для наявних чатів, коли він запущений, а потім повертається до AppleScript;bridgeпотребує доставки через приватний API;applescriptпримусово використовує публічний шлях автоматизації Messages. -
channels.imessage.actions.*: увімкнути дії приватного API, які також обмежуютьсяimsg status/openclaw channels status --probe. -
channels.imessage.includeAttachmentsза замовчуванням вимкнено; встановіть його вtrue, перш ніж очікувати вхідні медіа в ходах агента. -
Вхідне відновлення після перезапуску bridge/gateway є автоматичним (дедуплікація GUID плюс вікова межа застарілого backlog). Наявні конфігурації
channels.imessage.catchup.enabled: trueдосі підтримуються як застарілий профіль сумісності. -
channels.imessage.groups: реєстр груп і налаштування для кожної групи. ЗgroupPolicy: "allowlist"налаштуйте або явні ключіchat_id, або запис із wildcard"*", щоб групові повідомлення могли пройти через шлюз реєстру. -
Записи верхнього рівня
bindings[]ізtype: "acp"можуть прив’язувати розмови iMessage до постійних сесій ACP. Використовуйте нормалізований handle або явну ціль чату (chat_id:*,chat_guid:*,chat_identifier:*) уmatch.peer.id. Семантика спільних полів: Агенти ACP.
Приклад SSH-обгортки iMessage
Приклад SSH-обгортки iMessage
Matrix
Matrix підтримується Plugin і налаштовується вchannels.matrix.
- Автентифікація токеном використовує
accessToken; автентифікація паролем використовуєuserId+password. channels.matrix.proxyмаршрутизує HTTP-трафік Matrix через явний HTTP(S)-проксі. Іменовані облікові записи можуть перевизначити це черезchannels.matrix.accounts.<id>.proxy.channels.matrix.network.dangerouslyAllowPrivateNetworkдозволяє приватні/внутрішні homeserver-и.proxyі це мережеве явне ввімкнення є незалежними засобами керування.channels.matrix.defaultAccountвибирає бажаний обліковий запис у налаштуваннях із кількома обліковими записами.channels.matrix.autoJoinза замовчуванням має значенняoff, тому запрошені кімнати та нові запрошення у стилі DM ігноруються, доки ви не задастеautoJoin: "allowlist"зautoJoinAllowlistабоautoJoin: "always".channels.matrix.execApprovals: доставлення підтверджень exec, нативне для Matrix, і авторизація схвалювачів.enabled:true,falseабо"auto"(за замовчуванням). В автоматичному режимі підтвердження exec активуються, коли схвалювачів можна визначити зapproversабоcommands.ownerAllowFrom.approvers: ID користувачів Matrix (наприклад,@owner:example.org), яким дозволено схвалювати запити exec.agentFilter: необов’язковий список дозволених ID агентів. Пропустіть, щоб пересилати підтвердження для всіх агентів.sessionFilter: необов’язкові шаблони ключів сесій (підрядок або регулярний вираз).target: куди надсилати запити на підтвердження."dm"(за замовчуванням),"channel"(початкова кімната) або"both".- Перевизначення для окремих облікових записів:
channels.matrix.accounts.<id>.execApprovals.
channels.matrix.dm.sessionScopeкерує тим, як DM Matrix групуються в сесії:per-user(за замовчуванням) спільно використовує сесію за маршрутизованим співрозмовником, тоді якper-roomізолює кожну DM-кімнату.- Перевірки стану Matrix і live-пошуки в каталозі використовують ту саму політику проксі, що й трафік runtime.
- Повну конфігурацію Matrix, правила таргетування та приклади налаштування задокументовано в 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/mention gating) задокументовано в IRC.
Кілька облікових записів (усі канали)
Запустіть кілька облікових записів на канал (кожен із власнимaccountId):
defaultвикористовується, колиaccountIdпропущено (CLI + маршрутизація).- Токени env застосовуються лише до типового облікового запису.
- Базові налаштування каналу застосовуються до всіх облікових записів, якщо їх не перевизначено для окремого облікового запису.
- Використовуйте
bindings[].match.accountId, щоб маршрутизувати кожен обліковий запис до іншого агента. - Якщо ви додаєте нетиповий обліковий запис через
openclaw channels add(або onboarding каналу), все ще маючи однорівневу конфігурацію каналу для одного облікового запису, OpenClaw спочатку переносить значення верхнього рівня, що належать до облікового запису, у мапу облікових записів каналу, щоб початковий обліковий запис продовжив працювати. Більшість каналів переносять їх уchannels.<channel>.accounts.default; Matrix натомість може зберегти наявну відповідну іменовану/типову ціль. - Наявні прив’язки лише до каналу (без
accountId) і далі відповідають типовому обліковому запису; прив’язки з областю облікового запису залишаються необов’язковими. openclaw doctor --fixтакож виправляє змішані форми, переміщуючи значення верхнього рівня для одного облікового запису, що належать до облікового запису, у підвищений обліковий запис, вибраний для цього каналу. Більшість каналів використовуютьaccounts.default; Matrix натомість може зберегти наявну відповідну іменовану/типову ціль.
Інші канали Plugin
Багато каналів Plugin налаштовуються якchannels.<id> і задокументовані на своїх окремих сторінках каналів (наприклад, Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch).
Дивіться повний індекс каналів: Канали.
Контроль згадок у групових чатах
Групові повідомлення за замовчуванням вимагають згадки (метадані згадки або безпечні шаблони регулярних виразів). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage. Видимі відповіді керуються окремо. Звичайні групові, канальні та внутрішні прямі запити WebChat за замовчуванням використовують автоматичну фінальну доставку: фінальний текст асистента публікується через застарілий шлях видимої відповіді. Увімкнітьmessages.visibleReplies: "message_tool" або messages.groupChat.visibleReplies: "message_tool", коли видимий вивід має публікуватися лише після того, як агент викличе message(action=send). Якщо модель повертає фінальний текст без виклику інструмента повідомлень у режимі лише для інструмента, де це ввімкнено, цей фінальний текст залишається приватним, а докладний журнал gateway записує метадані пригніченого payload.
Видимі відповіді лише через інструмент вимагають моделі/runtime, що надійно викликає інструменти, і рекомендовані для спільних фонових кімнат на моделях останнього покоління, таких як GPT 5.5. Деякі слабші моделі можуть відповідати фінальним текстом, але не розуміють, що видимий для джерела вивід потрібно надсилати через message(action=send). Для таких моделей використовуйте "automatic", щоб фінальний хід асистента був шляхом видимої відповіді. Якщо журнал сесії показує текст асистента з didSendViaMessagingTool: false, модель створила приватний фінальний текст замість виклику інструмента повідомлень. Перемкніться на сильнішу модель із викликом інструментів для цього каналу, перегляньте докладний журнал gateway для зведення пригніченого payload або задайте messages.groupChat.visibleReplies: "automatic", щоб використовувати видимі фінальні відповіді для кожного групового/канального запиту.
Якщо інструмент повідомлень недоступний за активною політикою інструментів, OpenClaw повертається до автоматичних видимих відповідей замість мовчазного пригнічення відповіді. openclaw doctor попереджає про цю невідповідність.
Це правило застосовується до звичайного фінального тексту агента. Прив’язки розмов, що належать Plugin, використовують відповідь, повернену Plugin-власником, як видиму відповідь для заявлених ходів прив’язаного потоку; Plugin не потрібно викликати message(action=send) для таких відповідей прив’язки.
Усунення несправностей: групова @згадка запускає індикацію набору, потім тиша (без помилки)
Симптом: групова/канальна @згадка показує індикатор набору, і журнал gateway повідомляє dispatch complete (queuedFinal=false, replies=0), але в кімнаті не з’являється жодне повідомлення. DM до того самого агента відповідають нормально.
Причина: режим видимої відповіді групи/каналу визначається як "message_tool", тому OpenClaw виконує хід, але пригнічує фінальний текст асистента, якщо агент не викликає message(action=send). У цьому режимі немає контракту NO_REPLY; відсутність виклику інструмента повідомлень означає відсутність відповіді в джерелі. Помилки немає, бо пригнічення є налаштованою поведінкою. Звичайні ходи груп і каналів за замовчуванням мають "automatic", тому цей симптом з’являється лише коли messages.groupChat.visibleReplies (або глобальний messages.visibleReplies) явно задано як "message_tool". Harness defaultVisibleReplies тут не застосовується — резолвер групи/каналу ігнорує його; він впливає лише на прямі/source-чати (Codex harness так пригнічує фінальні відповіді прямих чатів).
Виправлення: або виберіть сильнішу модель із викликом інструментів, або приберіть явне перевизначення "message_tool", щоб повернутися до типового "automatic", або задайте messages.groupChat.visibleReplies: "automatic", щоб примусово ввімкнути видимі відповіді для кожного групового/канального запиту. Gateway гаряче перезавантажує конфігурацію messages після збереження файла; перезапускайте gateway лише тоді, коли спостереження за файлами або перезавантаження конфігурації вимкнено в розгортанні.
Типи згадок:
- Згадки метаданих: нативні @згадки платформи. Ігноруються в режимі self-chat WhatsApp.
- Текстові шаблони: безпечні шаблони регулярних виразів у
agents.list[].groupChat.mentionPatterns. Недійсні шаблони та небезпечні вкладені повторення ігноруються. - Контроль згадок застосовується лише тоді, коли виявлення можливе (нативні згадки або принаймні один шаблон).
messages.groupChat.historyLimit задає глобальне значення за замовчуванням. Канали можуть перевизначати його через channels.<channel>.historyLimit (або для окремого облікового запису). Задайте 0, щоб вимкнути.
messages.groupChat.unmentionedInbound: "room_event" надсилає незгадані always-on групові/канальні повідомлення як тихий контекст кімнати на підтримуваних каналах. Згадані повідомлення, команди та прямі повідомлення залишаються запитами користувача. Повні приклади для Discord, Slack і Telegram дивіться в Фонові події кімнати.
messages.visibleReplies є глобальним типовим значенням для source-event; messages.groupChat.visibleReplies перевизначає його для групових/канальних source-event. Коли messages.visibleReplies не задано, direct/source-чати використовують вибране типове значення runtime або harness, але внутрішні прямі ходи WebChat використовують автоматичну фінальну доставку для паритету підказок Pi/Codex. Задайте messages.visibleReplies: "message_tool", щоб навмисно вимагати message(action=send) для видимого виводу. Списки дозволених каналів і контроль згадок і далі вирішують, чи обробляється подія.
Ліміти історії 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"). Для Discord значенняfalseпропускає реєстрацію та очищення нативних команд під час запуску. - Перевизначайте реєстрацію нативних Skills для кожного каналу за допомогою
channels.<provider>.commands.nativeSkills. channels.telegram.customCommandsдодає додаткові записи меню бота Telegram.bash: trueвмикає! <cmd>для оболонки хоста. Потребуєtools.elevated.enabledі відправника вtools.elevated.allowFrom.<channel>.config: trueвмикає/config(читає/записуєopenclaw.json). Для клієнтів Gatewaychat.sendпостійні записи/config set|unsetтакож потребуютьoperator.admin;/config showлише для читання залишається доступною звичайним клієнтам-операторам із правом запису.mcp: trueвмикає/mcpдля конфігурації MCP-сервера, керованого OpenClaw, уmcp.servers.plugins: trueвмикає/pluginsдля виявлення Plugin, установлення та елементів керування ввімкненням/вимкненням.channels.<provider>.configWritesобмежує мутації конфігурації для кожного каналу (типово: true).- Для каналів із кількома обліковими записами
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"хешує ідентифікатори власників у системному prompt. УстановітьownerDisplaySecret, щоб керувати хешуванням.allowFromзадається для кожного провайдера. Коли встановлено, це єдине джерело авторизації (allowlist каналів/сполучення таuseAccessGroupsігноруються).useAccessGroups: falseдозволяє командам обходити політики груп доступу, колиallowFromне встановлено.- Мапа документації команд:
Пов’язане
- Довідник конфігурації — ключі верхнього рівня
- Конфігурація — агенти
- Огляд каналів