Skip to main content
Ключи конфигурации отдельных каналов в 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).

WhatsApp

WhatsApp работает через веб-канал Gateway (Baileys Web). Он запускается автоматически при наличии связанного сеанса.
  • 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.
  • Для исходящих команд по умолчанию используется аккаунт 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/voice Ready для /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 или HTTP message и 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 передают логические параметры Slack chat.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:
Перед фиксацией версии проверьте актуальные теги дистрибутива на странице npmjs.com/package/@openclaw/mattermost.
Режимы чата: 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: предпочтительный транспорт отправки RPC imsg для обычных исходящих ответов. 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.

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). Для клиентов Gateway chat.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 не задан.
  • Карта документации по командам:

Связанные разделы