Групи
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>до ідентифікатора групи, щоб кожна тема мала власну сесію. - Прямі чати використовують основну сесію (або окрему для кожного відправника, якщо це налаштовано).
- Heartbeats для групових сесій пропускаються.
Шаблон: особисті DM + публічні групи (один агент)
Так — це добре працює, якщо ваш «особистий» трафік — це DM, а ваш «публічний» трафік — це групи. Чому: у режимі одного агента DM зазвичай потрапляють до основного ключа сесії (agent:main:main), тоді як групи завжди використовують неосновні ключі сесій (agent:main:<channel>:group:<id>). Якщо ви ввімкнете sandboxing із mode: "non-main", ці групові сесії працюватимуть у Docker, а ваша основна DM-сесія залишиться на хості.
Це дає вам один «мозок» агента (спільний workspace + memory), але дві моделі виконання:
- DM: повні інструменти (хост)
- Групи: sandbox + обмежені інструменти (Docker)
Якщо вам потрібні справді окремі workspace/персони («особисте» й «публічне» ніколи не мають змішуватися), використовуйте другого агента + bindings. Див. Маршрутизація кількох агентів.Приклад (DM на хості, групи в sandbox + лише інструменти для обміну повідомленнями):
workspaceAccess: "none" і змонтуйте в sandbox лише шляхи зі списку дозволених:
- Ключі конфігурації та значення за замовчуванням: Конфігурація шлюзу
- Налагодження, чому інструмент заблоковано: Sandbox vs Tool Policy vs Elevated
- Подробиці bind mounts: Sandboxing
Мітки відображення
- Мітки в UI використовують
displayName, якщо він доступний, у форматі<channel>:<token>. #roomзарезервовано для кімнат/каналів; групові чати використовуютьg-<slug>(нижній регістр, пробіли ->-, зберігати#@+._-).
Політика груп
Керуйте тим, як обробляються повідомлення груп/кімнат для кожного каналу:| Політика | Поведінка |
|---|---|
"open" | Групи оминають списки дозволених; керування згадками все одно застосовується. |
"disabled" | Повністю блокує всі групові повідомлення. |
"allowlist" | Дозволяє лише групи/кімнати, що відповідають налаштованому списку дозволених. |
groupPolicyвідокремлена від керування згадками (яке вимагає @згадок).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: використовуйте
groupAllowFrom(резервний варіант: явнийallowFrom). - Погодження DM pairing (записи у сховищі
*-allowFrom) стосуються лише доступу до DM; авторизація відправника в групі лишається явно керованою списками дозволених для груп. - Discord: список дозволених використовує
channels.discord.guilds.<id>.channels. - Slack: список дозволених використовує
channels.slack.channels. - Matrix: список дозволених використовує
channels.matrix.groups. Віддавайте перевагу room ID або alias; пошук за назвою приєднаної кімнати є best-effort, а нерозпізнані назви ігноруються під час виконання. Використовуйтеchannels.matrix.groupAllowFromдля обмеження відправників; також підтримуються списки дозволенихusersдля окремих кімнат. - Групові DM керуються окремо (
channels.discord.dm.*,channels.slack.dm.*). - Список дозволених Telegram може відповідати user 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 і ZaloUser.
mentionPatterns— це безпечні regex-шаблони, нечутливі до регістру; невалідні шаблони та небезпечні форми з вкладеним повторенням ігноруються.- Поверхні, що надають явні згадки, усе одно проходять; шаблони є резервним варіантом.
- Перевизначення для окремого агента:
agents.list[].groupChat.mentionPatterns(корисно, коли кілька агентів спільно використовують групу). - Керування згадками застосовується лише тоді, коли можливе виявлення згадки (власні згадки або налаштовано
mentionPatterns). - Значення за замовчуванням для Discord містяться в
channels.discord.guilds."*"(можна перевизначати для окремого guild/channel). - Контекст історії групи уніфіковано обгортається для всіх каналів і є лише для 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 pairing — це не те саме, що авторизація групи.
Для каналів, які підтримують DM pairing, сховище pairing розблоковує лише DM. Групові команди все одно вимагають явної авторизації відправника групи через конфігураційні списки дозволених, як-от groupAllowFrom, або задокументований резервний механізм конфігурації для цього каналу.
Поширені наміри (скопіювати/вставити):
- Вимкнути всі відповіді в групах
- Дозволити лише певні групи (WhatsApp)
- Дозволити всі групи, але вимагати згадку (явно)
- Лише власник може запускати в групах (WhatsApp)
Активація (лише для власника)
Власники груп можуть перемикати активацію для окремої групи:/activation mention/activation always
channels.whatsapp.allowFrom (або власний E.164 бота, якщо не задано). Надсилайте команду як окреме повідомлення. Інші поверхні наразі ігнорують /activation.
Поля контексту
Вхідні payload для груп задають:ChatType=groupGroupSubject(якщо відомо)GroupMembers(якщо відомо)WasMentioned(результат керування згадками)- Теми форуму Telegram також включають
MessageThreadIdіIsForum.
- BlueBubbles за потреби може збагачувати учасників без імен у групах macOS із локальної бази Contacts перед заповненням
GroupMembers. Це вимкнено за замовчуванням і запускається лише після проходження звичайної перевірки груп.
\n.
Особливості iMessage
- Для маршрутизації або списків дозволених віддавайте перевагу
chat_id:<id>. - Перегляд чатів:
imsg chats --limit 20. - Відповіді в групах завжди повертаються до того самого
chat_id.