Configuration
Групи
OpenClaw застосовує однакові правила груп у всіх каналах із підтримкою груп, зокрема Discord, iMessage, Matrix, Microsoft Teams, QQBot, Signal, Slack, Telegram, WhatsApp і Zalo.
Для постійно активних кімнат, які мають надавати ненав’язливий контекст, якщо агент явно не надсилає видиме повідомлення, див. Фонові події кімнати.
Вступ для початківців (2 хвилини)
OpenClaw «живе» у ваших власних облікових записах служб обміну повідомленнями. Окремого користувача-бота WhatsApp немає: якщо ви перебуваєте в групі, OpenClaw може бачити цю групу й відповідати в ній.
Типова поведінка:
- Доступ до груп обмежено (
groupPolicy: "allowlist"); відправників у групах заблоковано, доки їх не додадуть до списку дозволених. - Для відповідей потрібна згадка, якщо ви не вимкнете перевірку згадок для групи.
- Остаточний текст відповіді автоматично публікується в кімнаті (
visibleReplies: "automatic").
Іншими словами: відправники зі списку дозволених можуть активувати OpenClaw, згадавши його.
Стислий опис процесу (що відбувається з груповим повідомленням):
groupPolicy? disabled -> dropgroupPolicy? allowlist -> group allowed? no -> droprequireMention? yes -> mentioned? no -> store for context onlymention/reply/command/DM -> user requestalways-on group chatter -> user request, or room event when configuredВидимі відповіді
Для звичайних запитів із груп або каналів 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", // groups/channels are non-main -> sandboxed scope: "session", // strongest isolation (one container per group/channel) workspaceAccess: "none", }, }, }, tools: { sandbox: { tools: { // If allow is non-empty, everything else is blocked (deny still wins). 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: [ // hostPath:containerPath:mode "/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 (відкрита/вимкнена/список дозволених).
Групові списки дозволених
Групові списки дозволених (*.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
Збіг toolsBySender групи/каналу.
Групові tools
tools групи/каналу.
Типові toolsBySender
Збіг типового ("*") toolsBySender.
Типові tools
Типове ("*") 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 (додавання історії, особливості обробки згадок), наведено в розділі Групові повідомлення.