Configuration
Группы
OpenClaw применяет одинаковые правила для групп во всех каналах, поддерживающих группы, включая Discord, iMessage, Matrix, Microsoft Teams, QQBot, Signal, Slack, Telegram, WhatsApp и Zalo.
Для постоянно активных комнат, которые должны предоставлять фоновый контекст, не создавая лишнего шума, если агент явно не отправляет видимое сообщение, см. Фоновые события комнаты.
Введение для начинающих (2 минуты)
OpenClaw «живет» в ваших собственных учетных записях мессенджеров. Отдельного пользователя-бота WhatsApp нет: если вы состоите в группе, OpenClaw может видеть эту группу и отвечать в ней.
Поведение по умолчанию:
- Группы ограничены (
groupPolicy: "allowlist"); отправители в группах заблокированы, пока не будут добавлены в список разрешенных. - Для ответов требуется упоминание, если вы не отключили проверку упоминаний для группы.
- Итоговый текст ответа автоматически публикуется в комнате (
visibleReplies: "automatic").
Иными словами: отправители из списка разрешенных могут активировать OpenClaw, упомянув его.
Краткая схема (что происходит с сообщением группы):
groupPolicy? disabled -> отброситьgroupPolicy? allowlist -> группа разрешена? нет -> отброситьrequireMention? да -> агент упомянут? нет -> сохранить только для контекстаупоминание/ответ/команда/личное сообщение -> запрос пользователяобычная переписка постоянно активной группы -> запрос пользователя или событие комнаты, если оно настроеноВидимые ответы
Для обычных запросов в группах и каналах OpenClaw по умолчанию использует messages.groupChat.visibleReplies: "automatic": итоговый текст ассистента публикуется в комнате как видимый ответ.
Используйте messages.groupChat.visibleReplies: "message_tool", если в общей комнате агент должен самостоятельно решать, когда отвечать, вызывая message(action=send). Этот режим лучше всего работает с моделями, надежно использующими инструменты (например, GPT-5.6 Sol). Если модель не вызовет инструмент и вернет содержательный итоговый текст, OpenClaw сохранит этот текст приватным, а не опубликует его в комнате.
Используйте "automatic" для моделей или сред выполнения, которые недостаточно надежно соблюдают доставку только через инструменты: обычные итоговые текстовые ответы публикуются непосредственно в комнате, а агент по-прежнему может вызывать message(action=send) для файлов, изображений и других вложений, которые нельзя отправить вместе с итоговым текстом.
Если активная политика инструментов запрещает инструмент сообщений, OpenClaw вместо незаметного подавления ответа возвращается к автоматическим видимым ответам. openclaw doctor предупреждает об этом несоответствии.
Для личных чатов и любых других исходных событий messages.visibleReplies: "message_tool" применяет такое же поведение с доставкой только через инструменты глобально; messages.groupChat.visibleReplies остается более специфичным переопределением для групповых комнат и каналов. Для прямых запросов внутреннего WebChat по умолчанию используется автоматическая доставка итоговых ответов, чтобы Pi и Codex получали одинаковый контракт видимых ответов.
Режим доставки только через инструменты заменяет прежний подход, при котором модель принудительно отвечала NO_REPLY для большинства запросов в режиме наблюдения. В режиме доставки только через инструменты промпт не определяет контракт NO_REPLY; отсутствие видимых действий означает лишь то, что инструмент сообщений не был вызван.
Привязки бесед, принадлежащие плагинам, являются исключением. После того как плагин привязывает ветку и принимает входящий запрос, возвращенный плагином ответ становится видимым ответом привязки; для него не требуется message(action=send). Этот ответ является результатом работы среды выполнения плагина, а не приватным итоговым текстом модели.
Индикаторы набора текста по-прежнему отправляются для прямых запросов в группах. Фоновые события постоянно активных комнат, если они включены, остаются строго беззвучными, пока агент не вызовет инструмент сообщений.
По умолчанию в сеансах скрываются подробные сводки об инструментах и ходе выполнения. Используйте /verbose on (или /verbose full), чтобы отображать их в текущем сеансе во время отладки, и /verbose off, чтобы вернуться к режиму только итоговых ответов. Состояние подробного вывода задается отдельно для каждого сеанса и одинаково работает в личных чатах, группах, каналах и темах форумов.
Чтобы отправлять обычную переписку постоянно активной группы без упоминаний как ненавязчивый контекст комнаты, а не как запросы пользователя, используйте Фоновые события комнаты:
{ messages: { groupChat: { unmentionedInbound: "room_event", }, },}Значение по умолчанию — unmentionedInbound: "user_request". Сообщения с упоминаниями, команды, запросы на прерывание и личные сообщения остаются запросами пользователя.
Чтобы для запросов в группах и каналах видимые ответы обязательно отправлялись через инструмент сообщений:
{ messages: { groupChat: { visibleReplies: "message_tool", }, },}Чтобы требовать этого для каждого исходного чата:
{ messages: { visibleReplies: "message_tool", },}Gateway применяет изменения конфигурации messages без перезапуска после сохранения файла. Перезапуск требуется только при отключенной перезагрузке конфигурации (gateway.reload.mode: "off").
Запросы с командами обходят visibleReplies: "message_tool" и всегда отвечают видимо: как встроенные команды с косой чертой (в Discord, Telegram и других интерфейсах со встроенной поддержкой команд), так и авторизованные текстовые команды /... публикуют ответ в исходном чате. Неавторизованные текстовые запросы /... в группах остаются в режиме доставки только через инструмент сообщений; обычные запросы чата следуют настроенному режиму по умолчанию.
Видимость контекста и списки разрешенных
Для безопасности групп используются два разных механизма:
- Авторизация активации: кто может активировать агента (
groupPolicy,groups,groupAllowFrom, списки разрешенных для конкретных каналов). - Видимость контекста: какой дополнительный контекст передается модели (текст ответа или цитаты, история ветки, метаданные пересылки).
По умолчанию OpenClaw сохраняет контекст в полученном виде: списки разрешенных определяют, кто может инициировать действия, а не какие цитаты или фрагменты истории видит модель. Чтобы также фильтровать дополнительный контекст, задайте contextVisibility:
| Режим | Поведение |
|---|---|
"all" (по умолчанию) |
Сохранять дополнительный контекст в полученном виде. |
"allowlist" |
Передавать контекст истории, ветки, цитат и пересылок только от отправителей из списка разрешенных. |
"allowlist_quote" |
allowlist, а также сохранять явно процитированное сообщение или сообщение, на которое дан ответ, от любого отправителя. |
Задайте его для отдельного канала (channels.<channel>.contextVisibility), учетной записи (channels.<channel>.accounts.<accountId>.contextVisibility) или глобально (channels.defaults.contextVisibility). Каналы, получающие дополнительный контекст (Discord, Feishu, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp), применяют эту политику при формировании входящего контекста; неизвестные сочетания политик работают в закрытом режиме и исключают контекст.
Если вы хотите...
| Цель | Что настроить |
|---|---|
| Разрешить все группы, но отвечать только на @упоминания | groups: { "*": { requireMention: true } } |
| Отключить все ответы в группах | groupPolicy: "disabled" |
| Разрешить только определенные группы | groups: { "<group-id>": { ... } } (без ключа "*") |
| Разрешить активацию в группах только вам | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
| Использовать один набор доверенных отправителей во всех каналах | groupAllowFrom: ["accessGroup:operators"] |
О повторно используемых списках разрешенных отправителей см. Группы доступа.
Ключи сеансов
- Групповые сеансы используют ключи сеансов
agent:<agentId>:<channel>:group:<id>(комнаты и каналы используютagent:<agentId>:<channel>:channel:<id>). - Темы форумов Telegram добавляют
:topic:<threadId>к идентификатору группы, поэтому у каждой темы есть собственный сеанс. - Личные чаты используют основной сеанс (или отдельные сеансы для каждого отправителя, если настроен
session.dmScope). - Heartbeat выполняются в настроенном сеансе Heartbeat (по умолчанию — в основном сеансе агента); групповые сеансы не запускают собственные Heartbeat.
Сценарий: личные сообщения + публичные группы (один агент)
Да — этот вариант хорошо работает, если ваш «личный» трафик поступает через личные сообщения, а «публичный» — через группы.
Причина: в режиме одного агента личные сообщения обычно попадают в ключ основного сеанса (agent:main:main), а группы всегда используют ключи неосновных сеансов (agent:main:<channel>:group:<id>). Если включить изоляцию с помощью mode: "non-main", эти групповые сеансы будут выполняться в настроенной изолированной среде, а основной сеанс личных сообщений останется на хосте. Если среда не выбрана, по умолчанию используется Docker.
Так вы получаете один «мозг» агента (общее рабочее пространство и память), но два режима выполнения:
- Личные сообщения: полный набор инструментов (хост)
- Группы: изолированная среда и ограниченный набор инструментов
Личные сообщения на хосте, группы в изолированной среде
{ agents: { defaults: { sandbox: { mode: "non-main", // группы/каналы являются неосновными -> выполняются в изолированной среде scope: "session", // самая строгая изоляция (один контейнер на группу/канал) workspaceAccess: "none", }, }, }, tools: { sandbox: { tools: { // Если allow не пуст, все остальное блокируется (deny по-прежнему имеет приоритет). allow: ["group:messaging", "group:sessions"], deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"], }, }, },}Группы видят только папку из списка разрешенных
Хотите, чтобы «группы видели только папку X», а не «не имели доступа к хосту»? Сохраните workspaceAccess: "none" и подключите в изолированную среду только пути из списка разрешенных:
{ agents: { defaults: { sandbox: { mode: "non-main", scope: "session", workspaceAccess: "none", docker: { binds: [ // путьНаХосте:путьВКонтейнере:режим "/home/user/FriendsShared:/data:ro", ], }, }, }, },}Связанные материалы:
- Ключи конфигурации и значения по умолчанию: Конфигурация Gateway
- Отладка причин блокировки инструмента: Изолированная среда, политика инструментов и повышенные привилегии
- Подробнее о подключении каталогов: Изоляция
Отображаемые подписи
- Подписи в пользовательском интерфейсе используют
displayName, когда он доступен, в формате<channel>:<token>. #roomзарезервирован для комнат и каналов; групповые чаты используютg-<slug>(нижний регистр, пробелы ->-, сохранять#@+._-). Очень длинные непрозрачные идентификаторы сокращаются до стабильного токена, чтобы полные идентификаторы маршрутов не отображались в пользовательском интерфейсе.
Политика групп
Управляйте обработкой сообщений групп и комнат отдельно для каждого канала:
{ channels: { whatsapp: { groupPolicy: "disabled", // "open" | "disabled" | "allowlist" groupAllowFrom: ["+15551234567"], }, telegram: { groupPolicy: "disabled", groupAllowFrom: ["123456789"], // числовой идентификатор пользователя Telegram (при настройке @username преобразуется в идентификатор) }, signal: { groupPolicy: "disabled", groupAllowFrom: ["+15551234567"], }, imessage: { groupPolicy: "disabled", groupAllowFrom: ["chat_id:123"], }, msteams: { groupPolicy: "disabled", groupAllowFrom: ["user@org.com"], }, discord: { groupPolicy: "allowlist", guilds: { GUILD_ID: { channels: { help: { enabled: true } } }, }, }, slack: { groupPolicy: "allowlist", channels: { "#general": { enabled: true } }, }, matrix: { groupPolicy: "allowlist", groupAllowFrom: ["@owner:example.org"], groups: { "!roomId:example.org": { enabled: true }, "#alias:example.org": { enabled: true }, }, }, },}| Политика | Поведение |
|---|---|
"open" |
Группы обходят списки разрешённых; фильтрация по упоминаниям продолжает действовать. |
"disabled" |
Полностью блокирует все групповые сообщения. |
"allowlist" |
Разрешает только группы и комнаты, соответствующие настроенному списку разрешённых. |
Примечания для отдельных каналов
groupPolicyне зависит от фильтрации по упоминаниям (для которой требуются @упоминания).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: используйте
groupAllowFrom(резервный вариант: явно заданныйallowFrom). - Signal:
groupAllowFromможет соответствовать идентификатору входящей группы Signal либо номеру телефона/UUID отправителя. - Подтверждения сопряжения личных сообщений (записи хранилища
*-allowFrom) применяются только к доступу через личные сообщения; авторизация отправителей в группах по-прежнему явно определяется групповыми списками разрешённых. - Discord: список разрешённых использует
channels.discord.guilds.<id>.channels. - Slack: список разрешённых использует
channels.slack.channels. - Matrix: список разрешённых использует
channels.matrix.groups. Используйте идентификаторы комнат (!room:server) или псевдонимы (#alias:server); ключи с именами комнат сопоставляются только при наличииchannels.matrix.dangerouslyAllowNameMatching: true, а неразрешённые записи игнорируются во время выполнения. Используйтеchannels.matrix.groupAllowFrom, чтобы ограничить отправителей; также поддерживаются отдельные для каждой комнаты списки разрешённыхusers. - Групповые личные сообщения управляются отдельно (
channels.discord.dm.*,channels.slack.dm.*:groupEnabled,groupChannels). - Telegram: списки разрешённых отправителей принимают только числовые идентификаторы пользователей (
"123456789"; префиксыtelegram:/tg:удаляются без учёта регистра). Записи@usernameне сопоставляются во время выполнения и приводят к записи предупреждения в журнал; при настройке@usernameпреобразуется в идентификаторы. Отрицательные идентификаторы чатов следует указывать вchannels.telegram.groups, а не в списках разрешённых отправителей. - Значение по умолчанию —
groupPolicy: "allowlist"; если список разрешённых групп пуст, групповые сообщения блокируются. - Безопасность во время выполнения: если блок провайдера полностью отсутствует (нет
channels.<provider>), групповая политика в закрытом режиме переключается наallowlist, а не наследуетchannels.defaults.groupPolicy, и Gateway один раз для каждой учётной записи записывает в журнал сведения о применённом резервном варианте.
Упрощённая модель (порядок проверки групповых сообщений):
groupPolicy
groupPolicy (open/disabled/allowlist).
Групповые списки разрешённых
Групповые списки разрешённых (*.groups, *.groupAllowFrom, список разрешённых для конкретного канала).
Фильтрация по упоминаниям
Фильтрация по упоминаниям (requireMention, /activation).
Фильтрация по упоминаниям (по умолчанию)
Для групповых сообщений требуется упоминание, если это не переопределено для конкретной группы. Значения по умолчанию задаются отдельно для каждой подсистемы в *.groups."*".
Ответ на сообщение бота считается неявным упоминанием, если канал предоставляет метаданные ответа; цитирование сообщения бота также может считаться упоминанием в каналах, предоставляющих метаданные цитаты. Текущие встроенные варианты: Discord, Microsoft Teams, QQBot, Slack, Telegram, WhatsApp и личный Zalo.
{ channels: { whatsapp: { groups: { "*": { requireMention: true }, "123@g.us": { requireMention: false }, }, }, telegram: { groups: { "*": { requireMention: true }, "123456789": { requireMention: false }, }, }, imessage: { groups: { "*": { requireMention: true }, "123": { requireMention: false }, }, }, }, agents: { list: [ { id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw", "\\+15555550123"], historyLimit: 50, }, }, ], },}Ограничение области настроенных шаблонов упоминаний
Настроенные mentionPatterns — это резервные триггеры в виде регулярных выражений. Используйте их, если платформа не предоставляет собственные упоминания бота или если обычный текст, например openclaw:, должен считаться упоминанием. Собственные упоминания платформы обрабатываются отдельно: если Discord, Slack, Telegram, Matrix или другой канал может подтвердить, что сообщение явно упоминает бота, такое собственное упоминание по-прежнему срабатывает даже там, где настроенные шаблоны регулярных выражений запрещены.
По умолчанию настроенные шаблоны упоминаний применяются везде, где канал передаёт сведения о провайдере и беседе механизму обнаружения упоминаний. Чтобы широкие шаблоны не активировали агента в каждой группе, ограничьте их область для каждого канала с помощью channels.<channel>.mentionPatterns.
Используйте mode: "deny", если шаблоны упоминаний в виде регулярных выражений должны быть по умолчанию отключены для канала, а затем явно включите их для конкретных комнат с помощью allowIn:
{ messages: { groupChat: { mentionPatterns: ["\\bopenclaw\\b", "\\bops bot\\b"], }, }, channels: { slack: { mentionPatterns: { mode: "deny", allowIn: ["C0123OPS"], }, }, },}Используйте значение по умолчанию mode: "allow" (или не указывайте mode), если шаблоны упоминаний в виде регулярных выражений должны применяться широко, а затем отключите их в шумных комнатах с помощью denyIn:
{ messages: { groupChat: { mentionPatterns: ["\\bopenclaw\\b"], }, }, channels: { telegram: { mentionPatterns: { denyIn: ["-1001234567890", "-1001234567890:topic:42"], }, }, },}Разрешение политики:
| Поле | Результат |
|---|---|
mode: "allow" |
Шаблоны упоминаний в виде регулярных выражений включены, если идентификатор беседы отсутствует в denyIn. Это значение по умолчанию. |
mode: "deny" |
Шаблоны упоминаний в виде регулярных выражений отключены, если идентификатор беседы отсутствует в allowIn. |
allowIn |
Идентификаторы бесед, в которых шаблоны упоминаний в виде регулярных выражений включены в режиме запрета. |
denyIn |
Идентификаторы бесед, в которых шаблоны упоминаний в виде регулярных выражений отключены. Если один идентификатор присутствует в обоих списках, denyIn имеет приоритет над allowIn. |
Поддерживаемая сейчас политика ограничения области регулярных выражений:
| Канал | Идентификаторы, используемые в allowIn / denyIn |
|---|---|
| Discord | Идентификаторы каналов Discord. |
| Matrix | Идентификаторы комнат Matrix. |
| Slack | Идентификаторы каналов Slack. |
| Telegram | Идентификаторы групповых чатов или chatId:topic:threadId для тем форума. |
Идентификаторы бесед WhatsApp, например 123@g.us. |
В конфигурации канала на уровне учётной записи можно задать ту же политику в channels.<channel>.accounts.<accountId>.mentionPatterns, если канал поддерживает несколько учётных записей. Для этой учётной записи политика уровня учётной записи имеет приоритет над политикой канала верхнего уровня.
Примечания о фильтрации по упоминаниям
mentionPatterns— безопасные шаблоны регулярных выражений без учёта регистра; недопустимые шаблоны и небезопасные формы с вложенными повторениями игнорируются (с предупреждением).- Приоритет шаблонов:
agents.list[].groupChat.mentionPatterns(полезно, когда несколько агентов совместно используют группу) переопределяетmessages.groupChat.mentionPatterns; если ни один из них не задан, шаблоны формируются на основе имени/эмодзи идентичности агента. - Фильтрация по упоминаниям применяется только тогда, когда обнаружение упоминаний возможно (настроены собственные упоминания или
mentionPatterns). - Добавление группы или отправителя в список разрешённых не отключает фильтрацию по упоминаниям; установите для
requireMentionэтой группы значениеfalse, если срабатывать должны все сообщения. - Автоматический контекст запроса группового чата при каждом ходе содержит разрешённую инструкцию о безмолвном ответе; файлы рабочей области не должны дублировать механику
NO_REPLY. - В группах, где разрешены автоматические безмолвные ответы, чистые пустые ходы модели или ходы, содержащие только рассуждение, считаются безмолвными и эквивалентны
NO_REPLY. Личные чаты никогда не получают инструкциюNO_REPLY, а групповые ответы только через инструмент сообщений остаются безмолвными, поскольку не вызываютmessage(action=send). - Для постоянно активного фонового общения в группе по умолчанию используется семантика пользовательского запроса. Установите
messages.groupChat.unmentionedInbound: "room_event", чтобы вместо этого передавать его как тихий контекст. Примеры настройки см. в разделе Фоновые события комнаты. - События комнат не сохраняются как фиктивные пользовательские запросы, а закрытый текст ассистента из событий комнаты без использования инструмента сообщений не воспроизводится в истории чата.
- Значения Discord по умолчанию находятся в
channels.discord.guilds."*"(их можно переопределить для отдельного сервера/канала). - Контекст истории групп единообразно оборачивается во всех каналах. Группы с фильтрацией по упоминаниям сохраняют ожидающие пропущенные сообщения; постоянно активные группы также могут сохранять недавно обработанные сообщения комнаты, если канал это поддерживает. Используйте
messages.groupChat.historyLimitкак глобальное значение по умолчанию иchannels.<channel>.historyLimit(илиchannels.<channel>.accounts.*.historyLimit) для переопределений. Установите0, чтобы отключить эту функцию.
Ограничения инструментов для групп и каналов (необязательно)
Некоторые конфигурации каналов позволяют ограничить доступность инструментов внутри конкретной группы, комнаты или канала.
tools: разрешает или запрещает инструменты для всей группы (allow,alsoAllow,deny; запрет имеет приоритет).toolsBySender: переопределения для отдельных отправителей внутри группы. Используйте явные префиксы ключей:channel:<channelId>:<senderId>,id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>и подстановочный знак"*". Идентификаторы каналов используют канонические идентификаторы каналов OpenClaw; псевдонимы, напримерteams, нормализуются вmsteams. Устаревшие ключи без префикса по-прежнему принимаются, сопоставляются только какid:и приводят к записи предупреждения об устаревании в журнал.
Порядок разрешения (побеждает наиболее конкретное правило):
Инструменты группы по отправителю
Совпадение toolsBySender группы/канала.
Инструменты группы
tools группы/канала.
Инструменты по умолчанию по отправителю
Совпадение toolsBySender по умолчанию ("*").
Инструменты по умолчанию
tools по умолчанию ("*").
Пример (Telegram):
{ channels: { telegram: { groups: { "*": { tools: { deny: ["exec"] } }, "-1001234567890": { tools: { deny: ["exec", "read", "write"] }, toolsBySender: { "id:123456789": { alsoAllow: ["exec"] }, }, }, }, }, },}Списки разрешённых групп
Если настроен channels.whatsapp.groups, channels.telegram.groups или channels.imessage.groups, ключи действуют как список разрешённых групп. Используйте "*", чтобы разрешить все группы, сохранив при этом стандартное поведение упоминаний.
Типовые задачи (скопируйте и вставьте):
Отключить все ответы в группах
{ channels: { whatsapp: { groupPolicy: "disabled" } },}Разрешить только определённые группы (WhatsApp)
{ channels: { whatsapp: { groups: { "123@g.us": { requireMention: true }, "456@g.us": { requireMention: false }, }, }, },}Разрешить все группы, но требовать упоминание
{ channels: { whatsapp: { groups: { "*": { requireMention: true } }, }, },}Срабатывание только для владельца (WhatsApp)
{ channels: { whatsapp: { groupPolicy: "allowlist", groupAllowFrom: ["+15551234567"], groups: { "*": { requireMention: true } }, }, },}Активация (только для владельца)
Владельцы групп могут переключать активацию отдельно для каждой группы с помощью отдельного сообщения:
/activation mention/activation always
/activation — основная команда, доступная только владельцу и применимая исключительно в групповых чатах. Владельцем считается отправитель, соответствующий allowFrom / commands.ownerAllowFrom канала (если список разрешений не настроен, собственный идентификатор учётной записи считается идентификатором владельца). Сохранённый режим переопределяет requireMention этой группы в каналах, которые его учитывают (Google Chat, QQBot, Telegram, WhatsApp), а вводная часть системного промпта группы везде отражает активный режим.
Поля контекста
Во входящих данных группы задаются:
ChatType=groupGroupSubject(если известно)GroupMembers(если известно)WasMentioned(результат проверки требования упоминания)- Темы форумов Telegram также содержат
MessageThreadIdиIsForum.
Системный промпт агента содержит вводную информацию о группе на первом ходе нового группового сеанса (а также после изменения /activation). Она напоминает модели отвечать как человек, сводить к минимуму пустые строки, соблюдать обычные интервалы в чате и не вводить буквальные последовательности \n. В группах, отличных от Telegram, также не рекомендуется использовать таблицы Markdown; рекомендации по форматированному тексту Telegram поступают из промпта канала Telegram. Названия групп и обозначения участников, полученные от канала, отображаются как недоверенные метаданные в блоках кода, а не как встроенные системные инструкции.
Особенности iMessage
- При маршрутизации или настройке списка разрешений предпочтительно использовать
chat_id:<id>. - Получение списка чатов:
imsg chats --limit 20. - Ответы в группе всегда отправляются обратно в тот же
chat_id.
Системные промпты WhatsApp
Канонические правила системных промптов WhatsApp, включая выбор промптов для групп и личных сообщений, поведение подстановочного знака и семантику переопределения для учётной записи, см. в разделе WhatsApp.
Особенности WhatsApp
Поведение, относящееся только к WhatsApp (добавление истории, подробности обработки упоминаний), см. в разделе Групповые сообщения.