Вступ для початківців (2 хвилини)
OpenClaw «живе» у ваших власних облікових записах служб обміну повідомленнями. Окремого користувача-бота WhatsApp немає: якщо ви перебуваєте в групі, OpenClaw може бачити цю групу й відповідати в ній. Типова поведінка:- Групи обмежені (
groupPolicy: "allowlist"); відправників у групах заблоковано, доки їх не додано до списку дозволених. - Для відповідей потрібна згадка, якщо для групи не вимкнено обмеження за згадкою.
- Остаточний текст відповіді автоматично публікується в кімнаті (
visibleReplies: "automatic").
Коротко
- Доступ до особистих повідомлень контролюється параметром
*.allowFrom. - Доступ до груп контролюється параметром
*.groupPolicyі списками дозволених (*.groups,*.groupAllowFrom). - Активація відповіді контролюється обмеженням за згадкою (
requireMention,/activation).
Видимі відповіді
Для звичайних запитів у групах і каналах 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, щоб повернутися до поведінки лише з остаточною відповіддю. Стан докладного виведення визначається окремо для кожного сеансу й однаково працює в прямих чатах, групах, каналах і темах форуму.
Щоб надсилати незгадані повідомлення з постійно активних груп як фоновий контекст кімнати замість запитів користувача, використовуйте Фонові події кімнати:
unmentionedInbound: "user_request". Повідомлення зі згадками, команди, запити на переривання та особисті повідомлення залишаються запитами користувача.
Щоб вимагати надсилання видимого виведення через інструмент повідомлень для запитів у групах і каналах:
messages без перезапуску після збереження файлу. Перезапуск потрібен лише тоді, коли перезавантаження конфігурації вимкнено (gateway.reload.mode: "off").
Звернення з командами обходять visibleReplies: "message_tool" і завжди відповідають видимо: як вбудовані команди з косою рискою (Discord, Telegram та інші середовища з вбудованою підтримкою команд), так і авторизовані текстові команди /... публікують відповідь у вихідному чаті. Неавторизовані текстові звернення /... у групах залишаються доступними лише через інструмент повідомлень; звичайні звернення в чаті дотримуються налаштованого типового значення.
Видимість контексту та списки дозволених
За безпеку груп відповідають два різні механізми:- Авторизація активації: хто може активувати агента (
groupPolicy,groups,groupAllowFrom, списки дозволених для окремих каналів). - Видимість контексту: який додатковий контекст передається моделі (текст відповіді або цитати, історія гілки, метадані пересилання).
contextVisibility:
Налаштуйте це для окремого каналу (
channels.<channel>.contextVisibility), облікового запису (channels.<channel>.accounts.<accountId>.contextVisibility) або глобально (channels.defaults.contextVisibility). Канали, що отримують додатковий контекст (Discord, Feishu, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp), застосовують політику під час формування вхідного контексту; невідомі комбінації політик закривають доступ і вилучають контекст.
Про повторно використовувані списки дозволених відправників див. Групи доступу.
Ключі сеансів
- Групові сеанси використовують ключі сеансів
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.
Це забезпечує один «мозок» агента (спільний робочий простір і пам’ять), але два режими виконання:
- Особисті повідомлення: усі інструменти (хост)
- Групи: ізольоване середовище й обмежені інструменти
Якщо потрібні справді окремі робочі простори або персони («особисте» й «публічне» ніколи не мають перетинатися), використовуйте другого агента та прив’язки. Див. Маршрутизація між кількома агентами.
- Особисті повідомлення на хості, групи в ізольованому середовищі
- Групи бачать лише папку зі списку дозволених
- Ключі конфігурації та типові значення: Конфігурація Gateway
- Налагодження причин блокування інструмента: Ізольоване середовище, політика інструментів і підвищені привілеї
- Докладніше про підключення каталогів: Ізоляція
Відображувані мітки
- Мітки інтерфейсу використовують
displayName, коли він доступний, у форматі<channel>:<token>. #roomзарезервовано для кімнат і каналів; групові чати використовуютьg-<slug>(нижній регістр, пробіли ->-, зберігати#@+._-). Дуже довгі непрозорі ідентифікатори скорочуються до стабільного токена, щоб повні ідентифікатори маршрутів не потрапляли до інтерфейсу.
Політика груп
Керуйте обробкою повідомлень груп і кімнат окремо для кожного каналу:Примітки для окремих каналів
Примітки для окремих каналів
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 одноразово записує цей резервний перехід до журналу для кожного облікового запису.
1
groupPolicy
groupPolicy (open/disabled/allowlist).2
Списки дозволених для груп
Списки дозволених для груп (
*.groups, *.groupAllowFrom, список дозволених для певного каналу).3
Вимога згадки
Вимога згадки (
requireMention, /activation).Вимога згадки (за замовчуванням)
Групові повідомлення потребують згадки, якщо це не перевизначено для окремої групи. Значення за замовчуванням розташовані для кожної підсистеми в*.groups."*".
Відповідь на повідомлення бота вважається неявною згадкою, коли канал надає метадані відповіді; цитування повідомлення бота також може вважатися згадкою в каналах, що надають метадані цитування. Поточні вбудовані випадки: Discord, Microsoft Teams, QQBot, Slack, Telegram, WhatsApp і персональний Zalo.
Обмеження області налаштованих шаблонів згадок
НалаштованіmentionPatterns — це резервні тригери на основі регулярних виразів. Використовуйте їх, коли
платформа не надає нативної згадки бота або коли потрібно, щоб звичайний текст,
наприклад openclaw:, вважався згадкою. Нативні згадки платформи обробляються окремо:
коли Discord, Slack, Telegram, Matrix, Signal або інший канал може підтвердити, що повідомлення
явно згадує бота, ця нативна згадка все одно спрацьовує, навіть якщо
налаштовані шаблони регулярних виразів заборонено.
За замовчуванням налаштовані шаблони згадок застосовуються всюди, де канал передає дані про провайдера та розмову до механізму виявлення згадок. Щоб широкі шаблони не активували агента в кожній групі, обмежте їхню область для кожного каналу за допомогою channels.<channel>.mentionPatterns.
Використовуйте mode: "deny", коли шаблони згадок на основі регулярних виразів мають бути за замовчуванням вимкнені для каналу, а потім увімкніть їх у певних кімнатах за допомогою allowIn:
mode: "allow" (або не вказуйте mode), коли шаблони згадок на основі регулярних виразів мають застосовуватися широко, а потім вимкніть їх у галасливих кімнатах за допомогою denyIn:
Підтримувана нині політика обмеження області регулярних виразів:
У конфігураціях каналів на рівні облікового запису можна налаштувати таку саму політику в
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:і спричиняють запис попередження про застарілість до журналу.
1
Груповий toolsBySender
Збіг
toolsBySender групи/каналу.2
Групові tools
tools групи/каналу.3
Стандартний toolsBySender
Збіг
toolsBySender за замовчуванням ("*").4
Стандартні tools
tools за замовчуванням ("*").Обмеження інструментів для груп/каналів застосовуються на додачу до глобальної політики та політики інструментів агента (заборона все одно має перевагу). Деякі канали використовують різну вкладеність для кімнат/каналів (наприклад, Discord
guilds.*.channels.*, Slack channels.*, Microsoft Teams teams.*.channels.*).Списки дозволених груп
Коли налаштованоchannels.whatsapp.groups, channels.telegram.groups або channels.imessage.groups, ключі діють як список дозволених груп. Використовуйте "*", щоб дозволити всі групи, водночас задавши типову поведінку щодо згадок.
Поширені сценарії (скопіюйте та вставте):
- Вимкнути всі відповіді в групах
- Дозволити лише певні групи (WhatsApp)
- Дозволити всі групи, але вимагати згадку
- Активація лише власником (WhatsApp)
Активація (лише власником)
Власники груп можуть перемикати активацію окремо для кожної групи за допомогою окремого повідомлення:/activation mention/activation always
/activation — це основна команда з доступом лише для власника, яка застосовується тільки в групових чатах. Власником вважається відправник, який відповідає commands.ownerAllowFrom; списки allowFrom каналу керують лише звичайним доступом до каналу та команд. Збережений режим перевизначає requireMention цієї групи в каналах, які його враховують (Google Chat, QQBot, Telegram, WhatsApp), а вступ системного запиту для групи всюди відображає активний режим.
Поля контексту
Вхідні корисні навантаження груп задають:ChatType=groupGroupSubject(якщо відомо)GroupMembers(якщо відомо)WasMentioned(результат перевірки згадки)- Теми форумів Telegram також містять
MessageThreadIdіIsForum.
/activation). Він нагадує моделі відповідати як людина, зводити до мінімуму порожні рядки, дотримуватися звичайних інтервалів у чаті та не вводити буквальні послідовності \n. Канали, заявлений режим таблиць яких не зберігає нативні або необроблені таблиці, також не рекомендують використовувати таблиці Markdown. Назви груп і позначення учасників, отримані з каналів, відтворюються як ненадійні метадані в огородженому блоці, а не як вбудовані системні інструкції.
Особливості iMessage
- Для маршрутизації або додавання до списку дозволених віддавайте перевагу
chat_id:<id>. - Перегляд списку чатів:
imsg chats --limit 20. - Групові відповіді завжди надсилаються назад до того самого
chat_id.