Gateway
Конфигурация — каналы
Параметры конфигурации отдельных каналов в 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>; полный список и инструкции по установке см. в разделе Каналы.
Доступ к личным сообщениям и группам
Все каналы поддерживают политики личных сообщений и групп:
| Политика личных сообщений | Поведение |
|---|---|
pairing (по умолчанию) |
Неизвестные отправители получают одноразовый код сопряжения; владелец должен подтвердить |
allowlist |
Только отправители из allowFrom (или хранилища разрешений сопряжённых отправителей) |
open |
Разрешить все входящие личные сообщения (требуется allowFrom: ["*"]) |
disabled |
Игнорировать все входящие личные сообщения |
| Политика групп | Поведение |
|---|---|
allowlist (по умолчанию) |
Только группы, соответствующие настроенному списку разрешений |
open |
Не применять списки разрешений групп (фильтрация по упоминаниям продолжает действовать) |
disabled |
Блокировать все сообщения групп и комнат |
Переопределение моделей для каналов
Используйте channels.modelByChannel, чтобы закрепить модель за конкретными идентификаторами каналов или собеседниками в личных сообщениях. В качестве значений принимаются provider/model или настроенные псевдонимы моделей. Сопоставление каналов применяется только тогда, когда для сеанса ещё не действует переопределение модели (например, заданное через /model).
Для групповых обсуждений и веток ключами служат зависящие от канала идентификаторы групп, идентификаторы тем или названия каналов. Для личных сообщений ключами служат идентификаторы собеседников, полученные из данных отправителя канала (nativeDirectUserId, origin.from, origin.to, OriginatingTo, From или SenderId). Точный формат ключа зависит от канала:
| Канал | Формат ключа личных сообщений | Пример |
|---|---|---|
| Discord | исходный идентификатор пользователя | 987654321 |
| Feishu | feishu:ou_... |
feishu:ou_a8b6cab7e945387de5f253775d9b4d85 |
| Matrix | идентификатор пользователя Matrix | @user:matrix.org |
| Slack | user:U... |
user:U12345 |
| Telegram | исходный идентификатор пользователя | 123456789 |
| номер телефона или JID | 15551234567 |
{ channels: { modelByChannel: { discord: { "123456789012345678": "anthropic/claude-opus-4-6", }, slack: { C1234567890: "openai/gpt-5.6-sol", "user:U12345": "openai/gpt-5.4-mini", }, telegram: { "-1001234567890": "openai/gpt-5.4-mini", "-1001234567890:topic:99": "anthropic/claude-sonnet-4-6", "123456789": "openai/gpt-4.1", }, }, },}Ключи для личных сообщений совпадают только в беседах с личными сообщениями; они не влияют на маршрутизацию групп и веток.
Настройки каналов по умолчанию и Heartbeat
Используйте channels.defaults для общих настроек политики групп и поведения Heartbeat у разных провайдеров:
{ channels: { defaults: { groupPolicy: "allowlist", // open | allowlist | disabled contextVisibility: "all", // all | allowlist | allowlist_quote heartbeat: { showOk: false, showAlerts: true, useIndicator: true, }, }, },}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 работает через веб-канал Gateway (Baileys Web). Он запускается автоматически при наличии связанного сеанса.
{ web: { enabled: true, heartbeatSeconds: 60, whatsapp: { keepAliveIntervalMs: 25000, connectTimeoutMs: 60000, defaultQueryTimeoutMs: 60000, }, reconnect: { initialMs: 2000, maxMs: 30000, factor: 1.8, jitter: 0.25, maxAttempts: 12, // 0 = retry forever }, }, channels: { whatsapp: { dmPolicy: "pairing", // pairing | allowlist | open | disabled allowFrom: ["+15555550123", "+447700900123"], textChunkLimit: 4000, streaming: { chunkMode: "length" }, // length | newline mediaMaxMb: 50, sendReadReceipts: true, // blue ticks (false in self-chat mode) groups: { "*": { requireMention: true }, }, groupPolicy: "allowlist", groupAllowFrom: ["+15551234567"], }, },}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
{channels: { whatsapp: { accounts: { default: {}, personal: {}, biz: { // authDir: "~/.openclaw/credentials/whatsapp/biz", }, }, },},}- Исходящие команды по умолчанию используют учётную запись
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: { enabled: true, botToken: "your-bot-token", dmPolicy: "pairing", allowFrom: ["tg:123456789"], groups: { "*": { requireMention: true }, "-1001234567890": { allowFrom: ["@admin"], systemPrompt: "Keep answers brief.", topics: { "99": { requireMention: false, skills: ["search"], systemPrompt: "Stay on topic.", }, }, }, }, customCommands: [ { command: "backup", description: "Git backup" }, { command: "generate", description: "Create an image" }, ], historyLimit: 50, replyToMode: "first", // off | first | all | batched linkPreview: true, streaming: { mode: "partial" }, // off | partial | block | progress (default: partial) actions: { reactions: true, sendMessage: true }, reactionNotifications: "own", // off | own | all mediaMaxMb: 100, retry: { attempts: 3, minDelayMs: 400, maxDelayMs: 30000, jitter: 0.1, }, network: { autoSelectFamily: true, dnsResultOrder: "ipv4first", }, apiRoot: "https://api.telegram.org", trustedLocalFileRoots: ["/srv/telegram-bot-api-data"], proxy: "socks5://localhost:9050", webhookUrl: "https://example.com/telegram-webhook", webhookSecret: "secret", webhookPath: "/telegram-webhook", }, },}- Токен бота:
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: { enabled: true, token: "your-bot-token", mediaMaxMb: 100, allowBots: false, actions: { reactions: true, stickers: true, polls: true, permissions: true, messages: true, threads: true, pins: true, search: true, memberInfo: true, roleInfo: true, roles: false, channelInfo: true, voiceStatus: true, events: true, moderation: false, }, replyToMode: "off", // off | first | all | batched dmPolicy: "pairing", allowFrom: ["1234567890", "123456789012345678"], dm: { enabled: true, groupEnabled: false, groupChannels: ["openclaw-dm"] }, guilds: { "123456789012345678": { slug: "friends-of-openclaw", requireMention: false, ignoreOtherMentions: true, reactionNotifications: "own", users: ["987654321098765432"], channels: { general: { allow: true }, help: { allow: true, requireMention: true, users: ["987654321098765432"], skills: ["docs"], systemPrompt: "Только краткие ответы.", }, }, }, }, historyLimit: 20, textChunkLimit: 2000, suppressEmbeds: true, streaming: { mode: "progress", // off | partial | block | progress (по умолчанию для Discord: progress) chunkMode: "length", // length | newline progress: { label: "auto", maxLines: 8, maxLineChars: 120, toolProgress: true, }, }, maxLinesPerMessage: 17, ui: { components: { accentColor: "#5865F2", }, }, threadBindings: { enabled: true, idleHours: 24, maxAgeHours: 0, spawnSessions: true, defaultSpawnContext: "fork", }, voice: { enabled: true, autoJoin: [ { guildId: "123456789012345678", channelId: "234567890123456789", }, ], daveEncryption: true, decryptionFailureTolerance: 24, connectTimeoutMs: 30000, reconnectGraceMs: 15000, tts: { provider: "openai", openai: { voice: "alloy" }, }, }, execApprovals: { enabled: "auto", // true | false | "auto" approvers: ["987654321098765432"], agentFilter: ["default"], sessionFilter: ["discord:"], target: "dm", // dm | channel | both cleanupAfterResolve: false, }, retry: { attempts: 3, minDelayMs: 500, maxDelayMs: 30000, jitter: 0.1, }, }, },}- Токен:
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управляет начальным ожиданием состояния 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,chunkMode,blockStreaming,draftChunk,blockStreamingCoalesce) больше не считываются во время выполнения; запуститеopenclaw doctor --fix, чтобы перенести сохраненную конфигурацию.channels.discord.autoPresenceсопоставляет доступность среды выполнения со статусом присутствия бота (исправное состояние => в сети, ухудшенное => неактивен, ресурсы исчерпаны => не беспокоить) и позволяет при необходимости переопределять текст статуса.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
{ channels: { googlechat: { enabled: true, serviceAccountFile: "/path/to/service-account.json", audienceType: "app-url", // app-url | project-number audience: "https://gateway.example.com/googlechat", webhookPath: "/googlechat", botUser: "users/1234567890", dm: { enabled: true, policy: "pairing", allowFrom: ["users/1234567890"], }, groupPolicy: "allowlist", groups: { "spaces/AAAA": { allow: true, requireMention: true }, }, actions: { reactions: true }, typingIndicator: "message", mediaMaxMb: 20, }, },}- JSON учетной записи службы: встроенный (
serviceAccount) или из файла (serviceAccountFile). - Также поддерживается SecretRef учетной записи службы (
serviceAccountRef). - Резервные переменные окружения:
GOOGLE_CHAT_SERVICE_ACCOUNTилиGOOGLE_CHAT_SERVICE_ACCOUNT_FILE(только для учетной записи по умолчанию). - Используйте
spaces/<spaceId>илиusers/<userId>для целей доставки. channels.googlechat.dangerouslyAllowNameMatchingповторно включает сопоставление по изменяемому субъекту электронной почты (аварийный режим совместимости).
Slack
{ channels: { slack: { enabled: true, botToken: "xoxb-...", appToken: "xapp-...", socketMode: { clientPingTimeout: 15000, serverPingTimeout: 30000, pingPongLoggingEnabled: false, }, dmPolicy: "pairing", allowFrom: ["U123", "U456", "*"], dm: { enabled: true, groupEnabled: false, groupChannels: ["G123"] }, channels: { C123: { enabled: true, requireMention: true, allowBots: false }, "#general": { enabled: true, requireMention: true, allowBots: false, users: ["U123"], skills: ["docs"], systemPrompt: "Short answers only.", }, }, historyLimit: 50, allowBots: false, reactionNotifications: "own", reactionAllowlist: ["U123"], replyToMode: "off", // off | first | all | batched thread: { historyScope: "thread", // thread | channel inheritParent: false, initialHistoryLimit: 20, }, actions: { reactions: true, messages: true, pins: true, memberInfo: true, emojiList: true, }, slashCommand: { enabled: true, name: "openclaw", sessionPrefix: "slack:slash", ephemeral: true, }, typingReaction: "hourglass_flowing_sand", unfurlLinks: false, unfurlMedia: false, textChunkLimit: 4000, streaming: { mode: "partial", // off | partial | block | progress chunkMode: "length", // length | newline nativeTransport: true, // use Slack native streaming API when mode=partial }, mediaMaxMb: 20, execApprovals: { enabled: "auto", // true | false | "auto" approvers: ["U123"], agentFilter: ["default"], sessionFilter: ["slack:"], target: "dm", // dm | channel | both }, }, },}- Для режима 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 из Slack SDK в общедоступный 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 и отображаемого в стиле ассистента 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и маршрутизацию по умолчанию, а не подтверждающих выполнение.
| Группа действий | По умолчанию | Примечания |
|---|---|---|
| reactions | включено | Добавление и список реакций |
| messages | включено | Чтение, отправка, правка, удаление |
| pins | включено | Закрепление, открепление, список |
| memberInfo | включено | Сведения об участнике |
| emojiList | включено | Список пользовательских эмодзи |
Mattermost
Mattermost устанавливается как отдельный плагин — так же, как Discord, Slack и WhatsApp:
openclaw plugins install @openclaw/mattermostПеред закреплением версии проверьте актуальные теги дистрибутива на странице npmjs.com/package/@openclaw/mattermost.
{ channels: { mattermost: { enabled: true, botToken: "mm-token", baseUrl: "https://chat.example.com", dmPolicy: "pairing", chatmode: "oncall", // oncall | onmessage | onchar oncharPrefixes: [">", "!"], groups: { "*": { requireMention: true }, "team-channel-id": { requireMention: false }, }, commands: { native: true, // opt-in nativeSkills: true, callbackPath: "/api/channels/mattermost/command", // Optional explicit URL for reverse-proxy/public deployments callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, textChunkLimit: 4000, streaming: { chunkMode: "length" }, }, },}Режимы чата: 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
{ channels: { signal: { enabled: true, account: "+15555550123", // optional account binding dmPolicy: "pairing", allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], configWrites: true, reactionNotifications: "own", // off | own | all | allowlist reactionAllowlist: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], historyLimit: 50, }, },}Режимы уведомлений о реакциях: off, own (по умолчанию), all, allowlist (из reactionAllowlist).
channels.signal.account: закрепляет запуск канала за определенным идентификатором учетной записи Signal.channels.signal.configWrites: разрешает или запрещает запись конфигурации, инициированную Signal.- Необязательный параметр
channels.signal.defaultAccountпереопределяет выбор учетной записи по умолчанию, если совпадает с идентификатором настроенной учетной записи.
iMessage
OpenClaw запускает imsg rpc (JSON-RPC через стандартный ввод-вывод). Демон и порт не требуются. Это предпочтительный путь для новых настроек iMessage в OpenClaw, если на узле можно предоставить разрешения на доступ к базе данных 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: { enabled: true, cliPath: "imsg", dbPath: "~/Library/Messages/chat.db", remoteHost: "user@gateway-host", dmPolicy: "pairing", allowFrom: ["+15555550123", "user@example.com", "chat_id:123"], historyLimit: 50, includeAttachments: false, attachmentRoots: ["/Users/*/Library/Messages/Attachments"], remoteAttachmentRoots: ["/Users/*/Library/Messages/Attachments"], mediaMaxMb: 16, service: "auto", sendTransport: "auto", region: "US", actions: { reactions: true, edit: true, unsend: true, reply: true, sendWithEffect: true, sendAttachment: true, }, }, },}- Необязательный параметр
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. Используйте нормализованный адрес или явную цель чата (chat_id:*,chat_guid:*,chat_identifier:*) вmatch.peer.id. Общая семантика полей: Агенты ACP.
Пример SSH-обёртки iMessage
#!/usr/bin/env bashexec ssh -T gateway-host imsg "$@"Matrix
Matrix работает на основе плагина и настраивается в channels.matrix.
{ channels: { matrix: { enabled: true, homeserver: "https://matrix.example.org", accessToken: "syt_bot_xxx", proxy: "http://127.0.0.1:7890", encryption: true, initialSyncLimit: 20, defaultAccount: "ops", accounts: { ops: { name: "Ops", userId: "@ops:example.org", accessToken: "syt_ops_xxx", }, alerts: { userId: "@alerts:example.org", password: "secret", proxy: "http://127.0.0.1:7891", }, }, }, },}- Аутентификация по токену использует
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: { enabled: true, configWrites: true, // appId, appPassword, tenantId, webhook, политики команды/канала: // см. /channels/msteams }, },}- Рассматриваемые здесь основные пути ключей:
channels.msteams,channels.msteams.configWrites. - Полная конфигурация Teams (учётные данные, webhook, политика личных сообщений/групп, переопределения для отдельных команд/каналов) описана в разделе Microsoft Teams.
IRC
IRC работает на основе плагина и настраивается в channels.irc.
{ channels: { irc: { enabled: true, dmPolicy: "pairing", configWrites: true, nickserv: { enabled: true, service: "NickServ", password: "${IRC_NICKSERV_PASSWORD}", register: false, registerEmail: "bot@example.com", }, }, },}- Рассматриваемые здесь основные пути ключей:
channels.irc,channels.irc.dmPolicy,channels.irc.configWrites,channels.irc.nickserv.*. - Необязательный параметр
channels.irc.defaultAccountпереопределяет выбор учётной записи по умолчанию, если совпадает с идентификатором настроенной учётной записи. - Полная конфигурация канала IRC (хост/порт/TLS/каналы/списки разрешений/проверка упоминаний) описана в разделе IRC.
Несколько учётных записей (все каналы)
Используйте несколько учётных записей для одного канала (каждая со своим accountId):
{ channels: { telegram: { accounts: { default: { name: "Primary bot", botToken: "123456:ABC...", }, alerts: { name: "Alerts bot", botToken: "987654:XYZ...", }, }, }, },}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 восстанавливает распространённый случай недоставленного итогового ответа, только если он содержателен, исходный ход не являлся событием комнаты, политика отправки не запретила доставку и ответ в исходный канал ещё не был отправлен. Восстановление ограничено одной повторной попыткой; для синтетического запроса повторной попытки отключается сохранение, а сам запрос исключается из пакетной обработки collect, чтобы он не мог объединиться с посторонними запросами в очереди. Если повторная попытка также не приводит к доставке или её невозможно поставить в очередь, OpenClaw отправляет только очищенное диагностическое сообщение, например «Я сформировал ответ, но не смог доставить его в этот чат. Повторите попытку». Исходный приватный итоговый текст никогда не помечается для автоматической доставки в исходный канал. Для моделей, которые регулярно не доставляют ответы, используйте "automatic", чтобы итоговый ход ассистента служил путём видимого ответа, переключитесь на более мощную модель с вызовом инструментов, проверьте сводку подавленной полезной нагрузки в подробном журнале Gateway или задайте messages.groupChat.visibleReplies: "automatic", чтобы использовать видимые итоговые ответы для каждого группового/канального запроса.
Если инструмент сообщений недоступен в рамках активной политики инструментов, OpenClaw переключается на автоматические видимые ответы вместо скрытого подавления ответа. openclaw doctor предупреждает об этом несоответствии.
Это правило применяется к обычному итоговому тексту агента. Для привязок бесед, принадлежащих плагинам, возвращённый соответствующим плагином ответ используется как видимый ответ для ходов заявленной привязанной ветки; плагину не требуется вызывать message(action=send) для таких ответов привязки.
Устранение неполадок: упоминание @mention в группе запускает индикатор набора, после чего ничего не происходит (без ошибки)
Признак: при упоминании @mention в группе/канале отображается индикатор набора, а журнал 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: { visibleReplies: "automatic", // принудительно использовать прежние автоматические итоговые ответы для прямых/исходных чатов groupChat: { historyLimit: 50, unmentionedInbound: "room_event", // постоянно поступающие сообщения комнаты без упоминаний становятся тихим контекстом visibleReplies: "message_tool", // включается явно; для видимых ответов в комнате требуется message(action=send) }, }, agents: { list: [{ id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"] } }], },}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: { telegram: { dmHistoryLimit: 30, dms: { "123456789": { historyLimit: 50 }, }, }, },}Порядок разрешения: переопределение для конкретного личного чата → значение провайдера по умолчанию → без ограничения (сохраняется всё).
Этот обработчик считывает channels.<provider>.dmHistoryLimit и channels.<provider>.dms.<id>.historyLimit для любого канала, ключ сеанса которого соответствует стандартному формату provider:direct:<id> (или устаревшему provider:dm:<id>), поэтому он работает как со встроенными каналами, так и с каналами плагинов, а не только с фиксированным списком.
Режим чата с самим собой
Добавьте собственный номер в allowFrom, чтобы включить режим чата с самим собой (нативные @-упоминания игнорируются, ответы отправляются только при совпадении с текстовыми шаблонами):
{ channels: { whatsapp: { allowFrom: ["+15555550123"], groups: { "*": { requireMention: true } }, }, }, agents: { list: [ { id: "main", groupChat: { mentionPatterns: ["reisponde", "@openclaw"] }, }, ], },}Команды (обработка команд чата)
{ commands: { native: "auto", // регистрировать нативные команды, когда они поддерживаются nativeSkills: "auto", // регистрировать нативные команды навыков, когда они поддерживаются text: true, // разбирать /commands в сообщениях чата bash: false, // разрешить ! (псевдоним: /bash) bashForegroundMs: 2000, config: false, // разрешить /config mcp: false, // разрешить /mcp plugins: false, // разрешить /plugins debug: false, // разрешить /debug restart: true, // разрешить /restart и инструмент перезапуска Gateway ownerAllowFrom: ["discord:123456789012345678"], ownerDisplay: "raw", // raw | hash ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}", allowFrom: { "*": ["user1"], discord: ["user:123"], }, useAccessGroups: true, },}Сведения о командах
- Этот блок настраивает интерфейсы команд. Текущий каталог встроенных и поставляемых в комплекте команд см. в разделе Команды с косой чертой.
- Эта страница представляет собой справочник ключей конфигурации, а не полный каталог команд. Команды, принадлежащие каналам/плагинам, такие как QQ Bot
/bot-ping/bot-help/bot-logs, LINE/card, сопряжение устройств/pair, память/dreaming, управление телефоном/phoneи Talk/voice, документированы на страницах соответствующих каналов/плагинов, а также в разделе Команды с косой чертой. - Текстовые команды должны быть отдельными сообщениями, начинающимися с
/. native: "auto"включает нативные команды для Discord/Telegram и оставляет их выключенными для Slack.nativeSkills: "auto"включает нативные команды навыков для Discord/Telegram и оставляет их выключенными для Slack.- Переопределение для отдельного канала:
channels.discord.commands.native(логическое значение или"auto"). Для Discord параметрfalseпропускает регистрацию и очистку нативных команд при запуске. - Переопределите регистрацию нативных команд навыков для отдельного канала с помощью
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для обнаружения и установки плагинов, а также управления их включением и отключением.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— явный список разрешений владельцев для команд, доступных только владельцам, и действий канала, ограниченных владельцами. Он отделён отallowFrom.ownerDisplay: "hash"хеширует идентификаторы владельцев в системном запросе. ЗадайтеownerDisplaySecret, чтобы управлять хешированием.allowFromзадаётся отдельно для каждого провайдера. Если он задан, то становится единственным источником авторизации (списки разрешений/сопряжение канала иuseAccessGroupsигнорируются).useAccessGroups: falseпозволяет командам обходить политики групп доступа, еслиallowFromне задан.- Карта документации по командам:
- каталог встроенных и поставляемых в комплекте команд: Команды с косой чертой
- интерфейсы команд отдельных каналов: Каналы
- команды QQ Bot: QQ Bot
- команды сопряжения: Сопряжение
- карточная команда LINE: LINE
- Dreaming памяти: Dreaming
Связанные материалы
- Справочник по конфигурации — ключи верхнего уровня
- Конфигурация — агенты
- Обзор каналов