channels.*: доступ к личным сообщениям и группам, конфигурации с несколькими аккаунтами, фильтрация по упоминаниям и отдельные ключи для Slack, Discord, Telegram, WhatsApp, Matrix, iMessage и других канальных плагинов.
Сведения об агентах, инструментах, среде выполнения Gateway и других ключах верхнего уровня см. в справочнике по конфигурации.
Каналы
Каждый канал запускается автоматически при наличии соответствующего раздела конфигурации (если только не заданоenabled: false). Telegram и iMessage входят в основной пакет openclaw. Другие официальные каналы (Discord, Slack, WhatsApp, Matrix, Microsoft Teams, IRC, Google Chat, Signal, Mattermost и другие) устанавливаются как отдельные плагины с помощью openclaw plugins install <spec>; полный список и инструкции по установке см. в разделе Каналы.
Доступ к личным сообщениям и группам
Все каналы поддерживают политики личных сообщений и групп:channels.defaults.groupPolicy задаёт значение по умолчанию, если у провайдера не задано groupPolicy.
Срок действия кодов сопряжения истекает через 1 час. Число ожидающих запросов на сопряжение ограничено 3 на аккаунт (в пределах канала и идентификатора аккаунта).
Если блок провайдера полностью отсутствует (нет channels.<provider>), политика групп среды выполнения переключается на allowlist (запрет по умолчанию), а при запуске выводится предупреждение.Переопределение моделей для каналов
Используйтеchannels.modelByChannel, чтобы закрепить модель за конкретными идентификаторами каналов или собеседниками в личных сообщениях. В качестве значений принимаются provider/model или настроенные псевдонимы моделей. Сопоставление каналов применяется только тогда, когда для сеанса ещё не задано активное переопределение модели (например, через /model).
Для бесед в группах и ветках ключами служат зависящие от канала идентификаторы групп, идентификаторы тем или имена каналов. Для бесед в личных сообщениях ключами служат идентификаторы собеседников, полученные из идентификатора отправителя канала (nativeDirectUserId, origin.from, origin.to, OriginatingTo, From или SenderId). Точный формат ключа зависит от канала:
Параметры каналов по умолчанию и Heartbeat
Используйтеchannels.defaults, чтобы задать общие для провайдеров настройки политики групп и Heartbeat:
channels.defaults.groupPolicy: резервная политика групп, если на уровне провайдера не заданоgroupPolicy.channels.defaults.contextVisibility: режим видимости дополнительного контекста по умолчанию для всех каналов. Значения:all(по умолчанию, включать весь контекст цитат, веток и истории),allowlist(включать только контекст от отправителей из списка разрешений),allowlist_quote(как список разрешений, но с сохранением явного контекста цитат и ответов). Переопределение для отдельного канала:channels.<channel>.contextVisibility.channels.defaults.heartbeat.showOk: включать состояния исправных каналов в вывод Heartbeat (по умолчаниюfalse).channels.defaults.heartbeat.showAlerts: включать состояния деградации и ошибок в вывод Heartbeat (по умолчаниюtrue).channels.defaults.heartbeat.useIndicator: отображать компактный вывод Heartbeat в виде индикатора (по умолчаниюtrue).
web.whatsapp.keepAliveIntervalMs(по умолчанию25000),connectTimeoutMs(по умолчанию60000) иdefaultQueryTimeoutMs(по умолчанию60000) настраивают сокет Baileys.- Значения
web.reconnectпо умолчанию:initialMs: 2000,maxMs: 30000,factor: 1.8,jitter: 0.25,maxAttempts: 12. ПриmaxAttempts: 0повторные попытки продолжаются бесконечно вместо прекращения. - Записи верхнего уровня
bindings[]сtype: "acp"настраивают постоянные привязки ACP для личных сообщений и групп WhatsApp. Вmatch.peer.idукажите прямой номер в формате E.164 или JID группы WhatsApp. Семантика полей описана в разделе Агенты ACP.
Несколько аккаунтов WhatsApp
Несколько аккаунтов WhatsApp
- Для исходящих команд по умолчанию используется аккаунт
default, если он существует; в противном случае — первый настроенный идентификатор аккаунта в порядке сортировки. - Необязательный параметр
channels.whatsapp.defaultAccountпереопределяет этот резервный выбор аккаунта по умолчанию, если совпадает с идентификатором настроенного аккаунта. - Устаревший каталог аутентификации 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или корневой адрес собственного сервера либо прокси, но неhttps://api.telegram.org/bot<TOKEN>;openclaw doctor --fixудаляет случайно добавленный конечный суффикс/bot<TOKEN>.- Для собственного сервера Bot API в режиме
--localпараметрtrustedLocalFileRootsперечисляет пути на хосте, которые OpenClaw может читать. Подключите том данных сервера на хосте OpenClaw и настройте корневой каталог данных или каталог отдельного токена; пути контейнера в/var/lib/telegram-bot-apiсопоставляются с этими корневыми каталогами. Другие абсолютные пути по-прежнему отклоняются. - Необязательный параметр
channels.telegram.defaultAccountпереопределяет выбор аккаунта по умолчанию, если совпадает с идентификатором настроенного аккаунта. - В конфигурациях с несколькими аккаунтами (2+ идентификатора аккаунтов) задайте явный аккаунт по умолчанию (
channels.telegram.defaultAccountилиchannels.telegram.accounts.default), чтобы избежать резервной маршрутизации;openclaw doctorвыводит предупреждение, если он отсутствует или недействителен. configWrites: falseблокирует инициированную Telegram запись конфигурации (миграции идентификаторов супергрупп,/config set|unset).- Записи верхнего уровня
bindings[]сtype: "acp"настраивают постоянные привязки ACP для тем форума (используйте каноническийchatId:topic:topicIdвmatch.peer.id). Семантика полей описана в разделе Агенты ACP. - Предварительный просмотр потоковой передачи в Telegram использует
sendMessage+editMessageText(работает в личных и групповых чатах). - По умолчанию
network.dnsResultOrderимеет значение"ipv4first", чтобы избежать распространённых сбоев получения данных через IPv6. - Политика повторных попыток: см. Политика повторных попыток.
Discord
- Токен:
channels.discord.token, сDISCORD_BOT_TOKENв качестве резервного варианта для учётной записи по умолчанию. - Прямые исходящие вызовы, в которых явно указан Discord
token, используют этот токен для вызова; настройки повторных попыток и политик учётной записи по-прежнему берутся из выбранной учётной записи в активном снимке среды выполнения. - Необязательный параметр
channels.discord.defaultAccountпереопределяет выбор учётной записи по умолчанию, если он совпадает с идентификатором настроенной учётной записи. - Для целей доставки используйте
user:<id>(личные сообщения) или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 (по умолчанию: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(по умолчаниюtrue) иchannels.discord.voice.decryptionFailureTolerance(по умолчанию24) передаются в параметры DAVE@discordjs/voice.channels.discord.voice.connectTimeoutMsуправляет начальным ожиданием состояния@discordjs/voiceReady для/vc joinи попыток автоматического подключения (по умолчанию30000).channels.discord.voice.reconnectGraceMsопределяет, сколько времени отключённый голосовой сеанс может потратить на переход к сигнализации повторного подключения, прежде чем OpenClaw уничтожит его (по умолчанию15000).- Воспроизведение голоса в Discord не прерывается событием начала речи другого пользователя. Чтобы избежать циклов обратной связи, OpenClaw игнорирует новый захват голоса во время воспроизведения TTS.
- Кроме того, OpenClaw пытается восстановить приём голоса, выходя из голосового сеанса и повторно подключаясь к нему после нескольких сбоев расшифровки.
channels.discord.streaming— канонический ключ режима потоковой передачи. По умолчанию Discord используетstreaming.mode: "progress", поэтому ход работы инструментов и выполнения отображается в одном редактируемом сообщении предварительного просмотра; задайтеstreaming.mode: "off", чтобы отключить это. Устаревшие плоские ключи (streamMode,chunkMode,blockStreaming,draftChunk,blockStreamingCoalesce) больше не считываются во время выполнения; запуститеopenclaw doctor --fix, чтобы перенести сохранённую конфигурацию.channels.discord.autoPresenceсопоставляет доступность среды выполнения со статусом присутствия бота (healthy => в сети, degraded => неактивен, exhausted => не беспокоить) и позволяет при необходимости переопределить текст статуса.channels.discord.guilds.<id>.presenceEventsнаправляет события появления доступных пользователей в один настроенный канал Discord как системные события агента. Подходящие участники должны иметь возможность просматриватьchannelId; публичные ветки наследуют видимость родительского канала, а для приватных веток дополнительно требуется участие или разрешение Manage Threads.usersможет дополнительно сузить эту аудиторию. Текущий список участников в сети заполняется из полных снимковGUILD_CREATE, отслеживаются наблюдаемые переходы из состояния не в сети в состояние в сети, а первый более поздний сигнал о появлении в сети для ранее не замеченного участника считается новой доступностью без утверждения о том, появился ли он в сети или присоединился после создания снимка. Для серверов, превышающих ограничение Discord на снимок в 75 000 участников, сначала требуется явное обновление состояния не в сети. Параметры регулирования:reconnectSuppressSeconds(период бездействия после нового сеанса Gateway, пока восстанавливается состояние присутствия на сервере; по умолчанию 300,0отключает) иburstLimit/burstWindowSeconds(ограничение частоты успешно поставленных в очередь событий для каждого сервера; по умолчанию 8 событий за скользящее окно 60s). Возобновлённые сеансы не запускают окно подавления повторного подключения. Существующий период ожидания повторного приветствия для каждого пользователя остаётся равным восьми часам. Для этого требуютсяchannels.discord.intents.presence=true, привилегированное разрешение Presence Intent в Developer Portal Discord и включённый Heartbeat агента.channels.discord.dangerouslyAllowNameMatchingповторно включает сопоставление изменяемых имён и тегов (аварийный режим совместимости).channels.discord.execApprovals: встроенная в Discord доставка запросов на одобрение выполнения и авторизация утверждающих пользователей.enabled:true,falseили"auto"(по умолчанию). В автоматическом режиме одобрение выполнения активируется, когда утверждающих пользователей можно определить изapproversилиcommands.ownerAllowFrom.approvers: идентификаторы пользователей Discord, которым разрешено одобрять запросы на выполнение. Если параметр не указан, используетсяcommands.ownerAllowFrom.agentFilter: необязательный список разрешённых идентификаторов агентов. Не указывайте его, чтобы пересылать запросы на одобрение для всех агентов.sessionFilter: необязательные шаблоны ключей сеансов (подстрока или регулярное выражение).target: куда отправлять запросы на одобрение."dm"(по умолчанию) отправляет их в личные сообщения утверждающим пользователям,"channel"— в исходный канал,"both"— в оба места. Когда цель включает"channel", кнопки могут использовать только определённые утверждающие пользователи.cleanupAfterResolve: при значенииtrueудаляет личные сообщения с запросами на одобрение после одобрения, отказа или истечения времени ожидания.
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повторно включает сопоставление изменяемого основного адреса электронной почты (аварийный режим совместимости).
Slack
- Режим Socket требует как
botToken, так иappToken(SLACK_BOT_TOKEN+SLACK_APP_TOKENдля резервного использования переменных окружения учётной записи по умолчанию). - Режим HTTP требует
botTokenвместе сsigningSecret(в корне или для отдельной учётной записи). enterpriseOrgInstall: trueподключает учётную запись к общекорпоративному пути событий Slack Enterprise Grid. При запуске токен бота проверяется с помощьюauth.test, и запуск завершается ошибкой, если настроенный режим не соответствует идентификатору установки Slack. Личные сообщения Enterprise должны быть отключены либо использоватьdmPolicy: "open"с действующимallowFrom: ["*"]. Политики каналов и пользователей должны использовать стабильные идентификаторы Slack; изменяемые имена и неподдерживаемые префиксы каналов приводят к ошибке запуска. V1 обрабатывает только прямые события Socket Mode или HTTPmessageиapp_mentionс немедленными ответами; ретрансляция, команды, взаимодействия, App Home, обработчики событий реакций, закрепления, инструменты действий, нативные подтверждения, привязки, отложенная доставка и проактивные отправки недоступны. Подтверждение получения, индикация набора текста и реакции состояния, которыми управляет обработчик, остаются доступны сreactions:write; входящие уведомления о реакциях и инструменты действий с реакциями недоступны. Сведения о манифесте с минимальными привилегиями, процессе настройки и полном списке ограничений см. в разделе Общекорпоративные установки Enterprise Grid.socketModeпередаёт параметры настройки транспорта Socket Mode SDK Slack в публичный API приёмника Bolt. Используйте его только при исследовании тайм-аутов ping/pong или поведения устаревшего WebSocket-соединения. ЗначениеclientPingTimeoutпо умолчанию —15000;serverPingTimeoutиpingPongLoggingEnabledпередаются только при явной настройке.botToken,appToken,signingSecretиuserTokenпринимают строки с открытым текстом или объекты SecretRef.- Снимки учётных записей Slack предоставляют поля источника и состояния для каждого набора учётных данных, например
botTokenSource,botTokenStatus,appTokenStatus, а в режиме HTTP —signingSecretStatus.configured_unavailableозначает, что учётная запись настроена через SecretRef, но текущему пути команды или среды выполнения не удалось получить значение секрета. configWrites: falseблокирует инициированные Slack изменения конфигурации.- Необязательный
channels.slack.defaultAccountпереопределяет выбор учётной записи по умолчанию, если совпадает с идентификатором настроенной учётной записи. channels.slack.streaming.mode— канонический ключ режима потоковой передачи Slack (по умолчанию"partial").channels.slack.streaming.nativeTransportуправляет нативным транспортом потоковой передачи Slack (по умолчаниюtrue). Устаревшие значенияstreamMode, логическоеstreaming,chunkMode,blockStreaming,blockStreamingCoalesceиnativeStreamingбольше не считываются во время выполнения; запуститеopenclaw doctor --fix, чтобы перенести сохранённую конфигурацию вstreaming.{mode,chunkMode,block.enabled,block.coalesce,nativeTransport}.unfurlLinksиunfurlMediaпередают логические параметры Slackchat.postMessageдля разворачивания ссылок и медиафайлов в ответах бота. ЗначениеunfurlLinksпо умолчанию —false, поэтому исходящие ссылки бота не разворачиваются в тексте, если это не включено;unfurlMediaне передаётся, если не настроен. Задайте любое из значений вchannels.slack.accounts.<accountId>, чтобы переопределить значение верхнего уровня для одной учётной записи.- Для целей доставки используйте
user:<id>(личное сообщение) илиchannel:<id>.
off, own (по умолчанию), all, allowlist (из reactionAllowlist).
Изоляция сеансов веток: thread.historyScope задаёт отдельный сеанс для каждой ветки (по умолчанию) или общий сеанс для всего канала. thread.inheritParent копирует историю родительского канала в новые ветки. thread.initialHistoryLimit (по умолчанию 20) ограничивает количество существующих сообщений ветки, загружаемых при запуске нового сеанса ветки; 0 отключает загрузку истории веток.
- Нативная потоковая передача Slack и состояние ветки «is typing…» в стиле ассистента Slack требуют, чтобы целью ответа была ветка. Личные сообщения верхнего уровня по умолчанию остаются вне веток, поэтому они всё равно могут передаваться потоком через предварительный просмотр Slack с публикацией и редактированием черновика, а не отображать нативный предварительный просмотр потока и состояния в стиле ветки.
typingReactionдобавляет временную реакцию к входящему сообщению Slack на время формирования ответа, а затем удаляет её после завершения. Используйте короткий код эмодзи Slack, например"hourglass_flowing_sand".channels.slack.execApprovals: нативная доставка клиенту подтверждений Slack и авторизация подтверждающего выполнение. Схема совпадает с Discord:enabled(true/false/"auto"),approvers(идентификаторы пользователей Slack),agentFilter,sessionFilterиtarget("dm","channel"или"both"). Подтверждения плагинов могут использовать этот нативный клиентский путь для запросов из Slack, когда удаётся определить подтверждающих плагина Slack; нативную доставку подтверждений плагинов в Slack также можно включить черезapprovals.pluginдля сеансов из Slack или целей Slack. Для подтверждений плагинов используются подтверждающие плагина Slack изallowFromи маршрутизация по умолчанию, а не подтверждающие выполнение.
Mattermost
Mattermost устанавливается как отдельный плагин — так же, как Discord, Slack и WhatsApp:oncall (отвечать при @-упоминании, по умолчанию), onmessage (на каждое сообщение), onchar (на сообщения, начинающиеся с префикса-триггера).
Когда нативные команды Mattermost включены:
commands.callbackPathдолжен быть путём (например,/api/channels/mattermost/command), а не полным URL.commands.callbackUrlдолжен разрешаться в конечную точку Gateway OpenClaw и быть доступен с сервера Mattermost.- Нативные обратные вызовы команд с косой чертой аутентифицируются с помощью токенов отдельных команд, возвращаемых
Mattermost при регистрации команд с косой чертой. Если регистрация завершается
ошибкой или ни одна команда не активирована, OpenClaw отклоняет обратные вызовы с
Unauthorized: invalid command token. - Для частных, внутренних или доступных только через tailnet узлов обратного вызова Mattermost может потребовать,
чтобы
ServiceSettings.AllowedUntrustedInternalConnectionsвключал узел или домен обратного вызова. Используйте значения узла или домена, а не полные URL. channels.mattermost.configWrites: разрешить или запретить инициированные Mattermost изменения конфигурации.channels.mattermost.requireMention: требовать@mentionперед ответом в каналах.channels.mattermost.groups.<channelId>.requireMention: переопределение требования упоминания для отдельного канала ("*"для значения по умолчанию).- Необязательный
channels.mattermost.defaultAccountпереопределяет выбор учётной записи по умолчанию, если совпадает с идентификатором настроенной учётной записи.
Signal
off, own (по умолчанию), all, allowlist (из reactionAllowlist).
channels.signal.account: привязать запуск канала к идентификатору определённой учётной записи Signal.channels.signal.configWrites: разрешить или запретить инициированные Signal изменения конфигурации.- Необязательный
channels.signal.defaultAccountпереопределяет выбор учётной записи по умолчанию, если совпадает с идентификатором настроенной учётной записи.
iMessage
OpenClaw запускаетimsg rpc (JSON-RPC через стандартные потоки ввода-вывода). Демон или порт не требуются. Это предпочтительный путь для новых конфигураций OpenClaw iMessage, если узлу можно предоставить разрешения на доступ к базе данных Messages и автоматизацию.
Поддержка BlueBubbles удалена. channels.bluebubbles не является поддерживаемой поверхностью конфигурации среды выполнения в текущей версии 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 через эту конкретную обёртку. В некоторых состояниях TCC macOS разрешение на автоматизацию Messages назначается /usr/libexec/sshd-keygen-wrapper, из-за чего чтение и проверки могут работать, а отправка — завершаться ошибкой AppleEvents -1743; см. раздел устранения неполадок SSH-обёртки в iMessage.
- Необязательный параметр
channels.imessage.defaultAccountпереопределяет выбор учётной записи по умолчанию, если он совпадает с идентификатором настроенной учётной записи. - Требуется полный доступ к диску для базы данных 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, прежде чем ожидать появления входящих медиафайлов в ходе работы агента.- Восстановление входящих сообщений после перезапуска моста/Gateway выполняется автоматически (дедупликация по GUID и ограничение возраста устаревшей очереди). Существующие конфигурации
channels.imessage.catchup.enabled: trueпо-прежнему поддерживаются как устаревший профиль совместимости;catchupпо умолчанию отключён. channels.imessage.groups: реестр групп и настройки отдельных групп. При использованииgroupPolicy: "allowlist"настройте либо явные ключиchat_id, либо запись с подстановочным знаком"*", чтобы групповые сообщения могли пройти проверку реестра.- Записи верхнего уровня
bindings[]сtype: "acp"могут привязывать разговоры iMessage к постоянным сеансам ACP. Вmatch.peer.idиспользуйте нормализованный дескриптор или явную цель чата (chat_id:*,chat_guid:*,chat_identifier:*). Общая семантика полей: Агенты ACP.
Пример SSH-обёртки iMessage
Пример SSH-обёртки iMessage
Matrix
Matrix работает через плагин и настраивается вchannels.matrix.
- Аутентификация по токену использует
accessToken; аутентификация по паролю используетuserId+password. channels.matrix.proxyнаправляет HTTP-трафик Matrix через явно заданный HTTP(S)-прокси. Именованные учётные записи могут переопределять его с помощьюchannels.matrix.accounts.<id>.proxy.channels.matrix.network.dangerouslyAllowPrivateNetworkразрешает частные/внутренние домашние серверы.proxyи это разрешение сетевого доступа являются независимыми средствами управления.channels.matrix.defaultAccountвыбирает предпочтительную учётную запись в конфигурациях с несколькими учётными записями.- По умолчанию
channels.matrix.autoJoinимеет значение"off", поэтому приглашения в комнаты и новые приглашения в стиле личных сообщений игнорируются, пока не будет заданautoJoin: "allowlist"сautoJoinAllowlistилиautoJoin: "always". channels.matrix.execApprovals: встроенная в Matrix доставка запросов на подтверждение выполнения и авторизация подтверждающих пользователей.enabled:true,falseили"auto"(по умолчанию). В автоматическом режиме подтверждения выполнения активируются, когда подтверждающих пользователей удаётся определить изapproversилиcommands.ownerAllowFrom.approvers: идентификаторы пользователей Matrix (например,@owner:example.org), которым разрешено подтверждать запросы на выполнение.agentFilter: необязательный список разрешённых идентификаторов агентов. Не указывайте его, чтобы пересылать подтверждения для всех агентов.sessionFilter: необязательные шаблоны ключей сеансов (подстрока или регулярное выражение).target: куда отправлять запросы на подтверждение."dm"(по умолчанию),"channel"(исходная комната) или"both".- Переопределения для отдельных учётных записей:
channels.matrix.accounts.<id>.execApprovals.
channels.matrix.dm.sessionScopeопределяет, как личные сообщения Matrix группируются в сеансы:per-user(по умолчанию) использует общий сеанс для маршрутизированного собеседника, аper-roomизолирует каждую комнату личных сообщений.- Проверки состояния Matrix и оперативные запросы к каталогу используют ту же политику прокси, что и трафик среды выполнения.
- Полная конфигурация Matrix, правила выбора целей и примеры настройки описаны в Matrix.
Microsoft Teams
Microsoft Teams работает через плагин и настраивается вchannels.msteams.
- Рассматриваемые здесь основные пути ключей:
channels.msteams,channels.msteams.configWrites. - Полная конфигурация Teams (учётные данные, webhook, политика личных сообщений/групп, переопределения для отдельных команд/каналов) описана в Microsoft Teams.
IRC
IRC работает через плагин и настраивается вchannels.irc.
- Рассматриваемые здесь основные пути ключей:
channels.irc,channels.irc.dmPolicy,channels.irc.configWrites,channels.irc.nickserv.*. - Необязательный параметр
channels.irc.defaultAccountпереопределяет выбор учётной записи по умолчанию, если он совпадает с идентификатором настроенной учётной записи. - Полная конфигурация канала IRC (хост/порт/TLS/каналы/списки разрешённых пользователей/проверка упоминаний) описана в разделе IRC.
Несколько учётных записей (все каналы)
Используйте несколько учётных записей для каждого канала (каждая со своимaccountId):
defaultиспользуется, когдаaccountIdне указан (CLI + маршрутизация).- Токены из переменных среды применяются только к учётной записи по умолчанию.
- Базовые настройки канала применяются ко всем учётным записям, если не переопределены для конкретной учётной записи.
- Используйте
bindings[].match.accountId, чтобы направить каждую учётную запись отдельному агенту. - Если добавить учётную запись не по умолчанию через
openclaw channels add(или первоначальную настройку канала), продолжая использовать конфигурацию канала верхнего уровня с одной учётной записью, OpenClaw сначала переносит относящиеся к учётной записи значения верхнего уровня из конфигурации одной учётной записи в карту учётных записей канала, чтобы исходная учётная запись продолжила работать. Большинство каналов перемещают их вchannels.<channel>.accounts.default; Matrix вместо этого может сохранить существующую совпадающую именованную цель или цель по умолчанию. - Существующие привязки только к каналу (без
accountId) продолжают соответствовать учётной записи по умолчанию; привязки к конкретным учётным записям остаются необязательными. openclaw doctor --fixтакже исправляет смешанные структуры, перемещая относящиеся к учётной записи значения верхнего уровня из конфигурации одной учётной записи в назначенную для этого канала учётную запись. Большинство каналов используютaccounts.default; Matrix вместо этого может сохранить существующую совпадающую именованную цель или цель по умолчанию.
Другие каналы-плагины
Многие каналы-плагины настраиваются какchannels.<id> и описаны на посвящённых им страницах каналов (например, Feishu, LINE, Nextcloud Talk, Nostr, QQ Bot, Synology Chat, Twitch и Zalo).
Полный указатель каналов: Каналы.
Проверка упоминаний в групповых чатах
Для групповых сообщений по умолчанию требуется упоминание (упоминание в метаданных или безопасные шаблоны регулярных выражений). Это относится к групповым чатам WhatsApp, Telegram, Discord, Google Chat и iMessage. Видимые ответы управляются отдельно. Для обычных прямых запросов в группах, каналах и внутреннем WebChat по умолчанию выполняется автоматическая доставка итогового ответа: итоговый текст ассистента публикуется через прежний путь видимого ответа. Включитеmessages.visibleReplies: "message_tool" или messages.groupChat.visibleReplies: "message_tool", если видимый вывод должен публиковаться только после вызова агентом message(action=send). Если в режиме только с инструментами модель возвращает содержательный итоговый ответ без вызова инструмента сообщений, этот итоговый текст остаётся закрытым, подробный журнал Gateway фиксирует метаданные подавленной полезной нагрузки, а OpenClaw ставит в очередь одну повторную попытку восстановления с просьбой к модели доставить тот же ответ через message(action=send).
Для видимых ответов только через инструменты требуется модель/среда выполнения, которая надёжно вызывает инструменты; этот режим рекомендуется для общих фоновых комнат при использовании моделей последнего поколения, таких как GPT-5.6 Sol. Некоторые более слабые модели могут выдавать итоговый текст, но не понимают, что видимый в исходном канале вывод необходимо отправлять с помощью message(action=send). По умолчанию OpenClaw восстанавливает распространённый случай недоставленного итогового ответа, только если ответ содержателен, исходный ход не был событием комнаты, политика отправки не запрещала доставку и ответ в исходный канал ещё не был отправлен. Восстановление ограничено одной повторной попыткой; для синтетического запроса повторной попытки отключается сохранение, а сам запрос исключается из пакетного сбора, чтобы он не мог объединиться с не связанными с ним запросами в очереди. Если повторная попытка также не доставляет ответ или её невозможно поставить в очередь, OpenClaw доставляет только очищенное диагностическое сообщение, например «Ответ был создан, но доставить его в этот чат не удалось. Повторите попытку». Исходный закрытый итоговый текст никогда не помечается для автоматической доставки в исходный канал. Для моделей, которые неоднократно не доставляют ответы, используйте "automatic", чтобы итоговый ход ассистента служил путём видимого ответа, перейдите на более мощную модель с поддержкой вызова инструментов, изучите сводку подавленной полезной нагрузки в подробном журнале Gateway или задайте messages.groupChat.visibleReplies: "automatic", чтобы использовать видимые итоговые ответы для каждого запроса из группы/канала.
Если инструмент сообщений недоступен при активной политике инструментов, OpenClaw вместо скрытого подавления ответа возвращается к автоматическим видимым ответам. openclaw doctor предупреждает об этом несоответствии.
Это правило применяется к обычному итоговому тексту агента. Для ходов в заявленных привязанных ветках привязки разговоров, принадлежащие плагинам, используют возвращённый соответствующим плагином ответ как видимый; для таких ответов привязки плагину не требуется вызывать message(action=send).
Устранение неполадок: после @упоминания в группе появляется индикатор набора текста, а затем ничего не происходит (ошибок нет)
Симптом: после @упоминания в группе/канале отображается индикатор набора текста, а журнал Gateway сообщает dispatch complete (queuedFinal=false, replies=0), но сообщение в комнате не появляется. Личные сообщения тому же агенту получают ответы как обычно.
Причина: режим видимых ответов для группы/канала разрешается в "message_tool", поэтому OpenClaw выполняет ход, но подавляет итоговый текст ассистента, если агент не вызывает message(action=send). В этом режиме контракт NO_REPLY отсутствует; если инструмент сообщений не вызван, исходный итоговый текст остаётся приватным. Для содержательных исходных ходов OpenClaw теперь предпринимает одну защищённую повторную попытку восстановления; короткие заметки, явное молчание, события комнаты, ходы, отклонённые политикой отправки, и уже доставленные ходы повторно не выполняются. Для обычных ходов в группах и каналах по умолчанию используется "automatic", поэтому этот симптом возникает только тогда, когда для messages.groupChat.visibleReplies (или глобального messages.visibleReplies) явно задано значение "message_tool". Параметр среды выполнения defaultVisibleReplies здесь не применяется — распознаватель группы/канала его игнорирует; он влияет только на прямые/исходные чаты (среда выполнения Codex таким образом подавляет итоговые сообщения в прямых чатах).
Исправление: выберите модель с более надёжным вызовом инструментов, удалите явное переопределение "message_tool", чтобы вернуться к значению по умолчанию "automatic", либо задайте messages.groupChat.visibleReplies: "automatic", чтобы принудительно включить видимые ответы для каждого запроса группы/канала. Содержательный недоставленный итоговый ответ больше не должен завершаться молчаливым успехом: он либо должен восстановиться за одну повторную попытку message(action=send), либо показать очищенное диагностическое сообщение об ошибке доставки. Gateway перезагружает конфигурацию messages без перезапуска после сохранения файла; перезапускайте Gateway только в том случае, если в развёртывании отключено наблюдение за файлами или перезагрузка конфигурации.
Типы упоминаний:
- Упоминания в метаданных: нативные @-упоминания платформы. Игнорируются в режиме чата с самим собой в WhatsApp.
- Текстовые шаблоны: безопасные регулярные выражения в
agents.list[].groupChat.mentionPatterns. Недопустимые шаблоны и небезопасные вложенные повторения игнорируются. - Фильтрация по упоминаниям применяется только тогда, когда их можно обнаружить (нативные упоминания или хотя бы один шаблон).
messages.groupChat.historyLimit задаёт глобальное значение по умолчанию. Каналы могут переопределить его с помощью channels.<channel>.historyLimit (в том числе отдельно для каждой учётной записи). Чтобы отключить, задайте 0.
messages.groupChat.unmentionedInbound: "room_event" передаёт всегда активные сообщения групп/каналов без упоминания как ненавязчивый контекст комнаты в поддерживаемых каналах. Сообщения с упоминаниями, команды и прямые сообщения остаются пользовательскими запросами. Полные примеры для Discord, Slack и Telegram см. в разделе Фоновые события комнаты.
messages.visibleReplies — глобальное значение по умолчанию для исходных событий; messages.groupChat.visibleReplies переопределяет его для исходных событий групп/каналов. Если messages.visibleReplies не задан, прямые/исходные чаты используют значение по умолчанию выбранной среды выполнения или испытательной среды, но внутренние прямые ходы WebChat используют автоматическую доставку итогового ответа для согласованности запросов Pi/Codex. Задайте messages.visibleReplies: "message_tool", чтобы намеренно требовать message(action=send) для видимого вывода. Списки разрешённых каналов и фильтрация по упоминаниям по-прежнему определяют, будет ли обработано событие.
Ограничения истории личных сообщений
channels.<provider>.dmHistoryLimit и channels.<provider>.dms.<id>.historyLimit для любого канала, ключ сеанса которого соответствует стандартному формату provider:direct:<id> (или устаревшему provider:dm:<id>), поэтому он работает как со встроенными каналами, так и с каналами-плагинами, а не только с фиксированным списком.
Режим чата с самим собой
Добавьте собственный номер вallowFrom, чтобы включить режим чата с самим собой (нативные @-упоминания игнорируются, ответы отправляются только при совпадении с текстовыми шаблонами):
Команды (обработка команд чата)
Сведения о командах
Сведения о командах
- Этот блок настраивает интерфейсы команд. Текущий каталог встроенных и поставляемых в комплекте команд см. в разделе Команды с косой чертой.
- Эта страница представляет собой справочник ключей конфигурации, а не полный каталог команд. Команды, принадлежащие каналам/плагинам, такие как QQ Bot
/bot-ping/bot-help/bot-logs, LINE/card, сопряжение устройств/pair, память/dreaming, управление телефоном/phoneи Talk/voice, описаны на страницах соответствующих каналов/плагинов и в разделе Команды с косой чертой. - Текстовые команды должны быть отдельными сообщениями с начальным
/. native: "auto"включает нативные команды для Discord/Telegram и оставляет их отключёнными для Slack.nativeSkills: "auto"включает нативные команды Skills для Discord/Telegram и оставляет их отключёнными для Slack.- Переопределение для отдельных каналов:
channels.discord.commands.native(логическое значение или"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для конфигурации управляемого OpenClaw сервера MCP вmcp.servers.plugins: trueвключает/pluginsдля обнаружения, установки, включения и отключения плагинов.channels.<provider>.configWritesуправляет разрешением на изменение конфигурации отдельно для каждого канала (по умолчанию: true).- Для каналов с несколькими учётными записями
channels.<provider>.accounts.<id>.configWritesтакже управляет записью, направленной на эту учётную запись (например,/allowlist --config --account <id>или/config set channels.<provider>.accounts.<id>...). restart: falseотключает/restartи внешние запросы перезапускаSIGUSR1. Значение по умолчанию:true.ownerAllowFrom— явный список разрешённых владельцев для команд только для владельцев и действий канала, доступных только владельцам. Он не связан сallowFrom.ownerDisplay: "hash"хеширует идентификаторы владельцев в системном запросе. Для управления хешированием задайтеownerDisplaySecret.allowFromзадаётся отдельно для каждого поставщика. Если он задан, то является единственным источником авторизации (списки разрешённых каналов, сопряжение иuseAccessGroupsигнорируются).useAccessGroups: falseпозволяет командам обходить политики групп доступа, еслиallowFromне задан.- Карта документации по командам:
- каталог встроенных и поставляемых в комплекте команд: Команды с косой чертой
- интерфейсы команд для отдельных каналов: Каналы
- команды QQ Bot: QQ Bot
- команды сопряжения: Сопряжение
- команда карточки LINE: LINE
- Dreaming памяти: Dreaming
Связанные разделы
- Справочник по конфигурации — ключи верхнего уровня
- Конфигурация — агенты
- Обзор каналов