Групи
OpenClaw однаково обробляє групові чати на різних поверхнях: Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo.Вступ для початківців (2 хвилини)
OpenClaw «живе» у ваших власних облікових записах месенджерів. Окремого користувача-бота WhatsApp немає. Якщо ви перебуваєте в групі, OpenClaw може бачити цю групу й відповідати там. Типова поведінка:- Групи обмежені (
groupPolicy: "allowlist"). - Для відповідей потрібне згадування, якщо ви явно не вимкнете керування згадуваннями.
КороткоКоротка схема (що відбувається з повідомленням у групі):
- Доступ до DM контролюється через
*.allowFrom.- Доступ до груп контролюється через
*.groupPolicy+ списки дозволу (*.groups,*.groupAllowFrom).- Запуск відповіді контролюється через керування згадуваннями (
requireMention,/activation).
Видимість контексту і списки дозволу
У безпеці груп задіяно два різні механізми керування:- Авторизація запуску: хто може запускати агента (
groupPolicy,groups,groupAllowFrom, списки дозволу для конкретного каналу). - Видимість контексту: який додатковий контекст передається в модель (текст відповіді, цитати, історія треду, метадані пересланого повідомлення).
- Деякі канали вже застосовують фільтрацію за відправником для додаткового контексту в окремих шляхах (наприклад, ініціалізація тредів у Slack, пошук відповіді/треду в Matrix).
- Інші канали досі передають контекст цитати/відповіді/пересилання в отриманому вигляді.
contextVisibility: "all"(типово) зберігає поточну поведінку з передаванням контексту в отриманому вигляді.contextVisibility: "allowlist"фільтрує додатковий контекст до відправників зі списку дозволу.contextVisibility: "allowlist_quote"— цеallowlistплюс один явний виняток для цитати/відповіді.
| Мета | Що налаштувати |
|---|---|
| Дозволити всі групи, але відповідати лише на @згадування | groups: { "*": { requireMention: true } } |
| Вимкнути всі відповіді в групах | groupPolicy: "disabled" |
| Лише певні групи | groups: { "<group-id>": { ... } } (без ключа "*") |
| Лише ви можете запускати в групах | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
Ключі сесій
- Для групових сесій використовуються ключі сесій
agent:<agentId>:<channel>:group:<id>(для кімнат/каналів —agent:<agentId>:<channel>:channel:<id>). - Для тем форумів Telegram до ідентифікатора групи додається
:topic:<threadId>, щоб кожна тема мала власну сесію. - Прямі чати використовують основну сесію (або окрему для кожного відправника, якщо це налаштовано).
- Heartbeat для групових сесій пропускаються.
Шаблон: особисті DM + публічні групи (один агент)
Так — це добре працює, якщо ваш «особистий» трафік — це DM, а «публічний» трафік — це групи. Чому: у режимі одного агента DM зазвичай потрапляють в основний ключ сесії (agent:main:main), тоді як групи завжди використовують неосновні ключі сесій (agent:main:<channel>:group:<id>). Якщо ви ввімкнете ізоляцію з mode: "non-main", ці групові сесії виконуватимуться в Docker, а ваша основна DM-сесія залишиться на хості.
Це дає вам один «мозок» агента (спільний workspace + пам’ять), але дві моделі виконання:
- DM: повні інструменти (хост)
- Групи: sandbox + інструменти лише для обміну повідомленнями (Docker)
Якщо вам потрібні справді окремі робочі простори/персони («особисте» і «публічне» ніколи не повинні змішуватися), використовуйте другого агента + bindings. Див. Маршрутизація кількох агентів.Приклад (DM на хості, групи в sandbox + лише інструменти для обміну повідомленнями):
workspaceAccess: "none" і змонтуйте в sandbox лише шляхи зі списку дозволу:
- Ключі конфігурації та типові значення: Конфігурація шлюзу
- Налагодження причин блокування інструмента: Sandbox vs Tool Policy vs Elevated
- Докладно про bind mount: Ізоляція
Мітки відображення
- Мітки інтерфейсу використовують
displayName, коли він доступний, у форматі<channel>:<token>. #roomзарезервовано для кімнат/каналів; групові чати використовуютьg-<slug>(нижній регістр, пробіли ->-, зберігаються#@+._-).
Політика груп
Керуйте тим, як обробляються повідомлення з груп/кімнат для кожного каналу:| Політика | Поведінка |
|---|---|
"open" | Групи обходять списки дозволу; керування згадуваннями все ще застосовується. |
"disabled" | Повністю блокує всі повідомлення з груп. |
"allowlist" | Дозволяє лише групи/кімнати, що відповідають налаштованому списку дозволу. |
groupPolicyвідокремлена від керування згадуваннями (яке вимагає @згадувань).- Для WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo використовуйте
groupAllowFrom(резервний варіант: явнийallowFrom). - Схвалення сполучення DM (записи в сховищі
*-allowFrom) застосовуються лише до доступу через DM; авторизація відправників у групах залишається явною й керується списками дозволу груп. - Для Discord список дозволу використовує
channels.discord.guilds.<id>.channels. - Для Slack список дозволу використовує
channels.slack.channels. - Для Matrix список дозволу використовує
channels.matrix.groups. Віддавайте перевагу ідентифікаторам або псевдонімам кімнат; пошук імен приєднаних кімнат виконується за принципом best-effort, а нерозпізнані імена ігноруються під час виконання. Використовуйтеchannels.matrix.groupAllowFrom, щоб обмежувати відправників; також підтримуються списки дозволуusersдля окремих кімнат. - Групові DM керуються окремо (
channels.discord.dm.*,channels.slack.dm.*). - Список дозволу Telegram може відповідати ID користувачів (
"123456789","telegram:123456789","tg:123456789") або іменам користувачів ("@alice"або"alice"); префікси не залежать від регістру. - Типове значення —
groupPolicy: "allowlist"; якщо ваш список дозволу груп порожній, повідомлення з груп блокуються. - Безпека під час виконання: коли блок провайдера повністю відсутній (
channels.<provider>відсутній), політика груп переходить у fail-closed режим (зазвичайallowlist) замість успадкуванняchannels.defaults.groupPolicy.
groupPolicy(open/disabled/allowlist)- списки дозволу груп (
*.groups,*.groupAllowFrom, список дозволу конкретного каналу) - керування згадуваннями (
requireMention,/activation)
Керування згадуваннями (типово)
Для повідомлень у групі потрібне згадування, якщо це не перевизначено для конкретної групи. Типові значення для кожної підсистеми задаються через*.groups."*".
Відповідь на повідомлення бота зараховується як неявне згадування (коли канал підтримує метадані відповіді). Це стосується Telegram, WhatsApp, Slack, Discord і Microsoft Teams.
mentionPatterns— це безпечні regex-шаблони без урахування регістру; недійсні шаблони та небезпечні форми з вкладеним повторенням ігноруються.- Поверхні, які надають явні згадування, усе одно їх передають; шаблони є резервним варіантом.
- Перевизначення для окремого агента:
agents.list[].groupChat.mentionPatterns(корисно, коли кілька агентів спільно використовують одну групу). - Керування згадуваннями застосовується лише тоді, коли можливе виявлення згадування (наявні нативні згадування або налаштовано
mentionPatterns). - Для Discord типові значення зберігаються в
channels.discord.guilds."*"(можна перевизначити для окремої гільдії/каналу). - Контекст історії групи однаково обгортається в усіх каналах і є лише для pending (повідомлення, пропущені через керування згадуваннями); використовуйте
messages.groupChat.historyLimitдля глобального типового значення таchannels.<channel>.historyLimit(абоchannels.<channel>.accounts.*.historyLimit) для перевизначень. Встановіть0, щоб вимкнути.
Обмеження інструментів для груп/каналів (необов’язково)
Деякі конфігурації каналів дають змогу обмежувати, які інструменти доступні всередині конкретної групи/кімнати/каналу.tools: дозволити/заборонити інструменти для всієї групи.toolsBySender: перевизначення для окремих відправників усередині групи. Використовуйте явні префікси ключів:id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>і wildcard"*". Старі ключі без префікса все ще приймаються й зіставляються лише якid:.
- збіг
toolsBySenderдля групи/каналу toolsдля групи/каналу- типовий збіг
toolsBySenderдля"*" - типове
toolsдля"*"
- Обмеження інструментів для груп/каналів застосовуються додатково до глобальної/агентської політики інструментів (deny все одно має пріоритет).
- Деякі канали використовують іншу вкладеність для кімнат/каналів (наприклад, Discord
guilds.*.channels.*, Slackchannels.*, Microsoft Teamsteams.*.channels.*).
Списки дозволу груп
Коли налаштованоchannels.whatsapp.groups, channels.telegram.groups або channels.imessage.groups, ключі діють як список дозволу груп. Використовуйте "*", щоб дозволити всі групи й водночас задати типову поведінку для згадувань.
Поширена плутанина: схвалення сполучення DM — це не те саме, що авторизація груп.
Для каналів, які підтримують сполучення DM, сховище pairing розблоковує лише DM. Команди в групах усе одно вимагають явної авторизації відправника групи з конфігураційних списків дозволу, таких як groupAllowFrom, або задокументованого резервного механізму конфігурації для цього каналу.
Типові наміри (копіюйте/вставляйте):
- Вимкнути всі відповіді в групах
- Дозволити лише певні групи (WhatsApp)
- Дозволити всі групи, але вимагати згадування (явно)
- Лише власник може запускати в групах (WhatsApp)
Активація (лише для власника)
Власники груп можуть перемикати активацію для окремої групи:/activation mention/activation always
channels.whatsapp.allowFrom (або через власний E.164 бота, якщо значення не задано). Надішліть команду як окреме повідомлення. Інші поверхні наразі ігнорують /activation.
Поля контексту
Для вхідних даних груп задаються:ChatType=groupGroupSubject(якщо відомо)GroupMembers(якщо відомо)WasMentioned(результат керування згадуваннями)- Теми форумів Telegram також містять
MessageThreadIdіIsForum.
- BlueBubbles може за бажанням збагачувати неіменованих учасників груп macOS з локальної бази контактів перед заповненням
GroupMembers. Це вимкнено типово й виконується лише після проходження звичайної перевірки груп.
\n.
Особливості iMessage
- Для маршрутизації або списків дозволу надавайте перевагу
chat_id:<id>. - Перегляд чатів:
imsg chats --limit 20. - Відповіді в групі завжди повертаються до того самого
chat_id.