Configuration
Групи доступу
Групи доступу — це іменовані списки відправників, які ви один раз визначаєте в accessGroups і на які посилаєтеся зі списків дозволених каналів за допомогою accessGroup:<name>.
Використовуйте їх, коли потрібно дозволити тим самим людям доступ через кілька каналів обміну повідомленнями або коли один довірений набір має застосовуватися як для авторизації в особистих повідомленнях, так і для авторизації відправників у групах.
Сама собою група нічого не надає. Вона має значення лише там, де на неї посилається поле списку дозволених.
Статичні групи відправників повідомлень
Статичні групи відправників використовують type: "message.senders". Ключами members є ідентифікатори каналів обміну повідомленнями, а також "*" для записів, спільних для всіх каналів:
{ accessGroups: { operators: { type: "message.senders", members: { "*": ["global-owner-id"], discord: ["discord:123456789012345678"], telegram: ["987654321"], whatsapp: ["+15551234567"], }, }, },}| Ключ | Значення |
|---|---|
"*" |
Спільні записи, які перевіряються для кожного каналу обміну повідомленнями, що посилається на групу. |
discord, telegram, ... |
Записи, які перевіряються лише під час зіставлення зі списком дозволених відповідного каналу. |
Записи зіставляються за звичайними правилами allowFrom цільового каналу. OpenClaw не перетворює ідентифікатори відправників між каналами: якщо Аліса має ідентифікатор Telegram та ідентифікатор Discord, зазначте обидва ідентифікатори під відповідними ключами каналів.
Посилання на групи зі списків дозволених
Посилайтеся на групу за допомогою accessGroup:<name> у будь-якому місці шляху каналу обміну повідомленнями, де підтримуються списки дозволених відправників.
Приклад списку дозволених для особистих повідомлень:
{ accessGroups: { operators: { type: "message.senders", members: { discord: ["discord:123456789012345678"], telegram: ["987654321"], }, }, }, channels: { discord: { dmPolicy: "allowlist", allowFrom: ["accessGroup:operators"], }, telegram: { dmPolicy: "allowlist", allowFrom: ["accessGroup:operators"], }, },}Приклад списку дозволених відправників у групах:
{ accessGroups: { oncall: { type: "message.senders", members: { whatsapp: ["+15551234567"], googlechat: ["users/1234567890"], }, }, }, channels: { whatsapp: { groupPolicy: "allowlist", groupAllowFrom: ["accessGroup:oncall"], }, googlechat: { groups: { "spaces/AAA": { users: ["accessGroup:oncall"], }, }, }, },}Можна поєднувати групи та безпосередні записи:
{ channels: { discord: { dmPolicy: "allowlist", allowFrom: ["accessGroup:operators", "discord:123456789012345678"], }, },}Підтримувані шляхи каналів обміну повідомленнями
Групи доступу працюють у спільних шляхах авторизації каналів обміну повідомленнями:
- списки дозволених відправників особистих повідомлень, як-от
channels.<channel>.allowFrom - списки дозволених відправників у групах, як-от
channels.<channel>.groupAllowFrom - специфічні для каналу списки дозволених відправників для окремих кімнат, які використовують ті самі правила зіставлення відправників (наприклад,
groups.<space>.usersу Google Chat) - шляхи авторизації команд, які повторно використовують списки дозволених відправників каналів обміну повідомленнями
Підтримка каналу залежить від того, чи підключено його до спільних допоміжних засобів OpenClaw для авторизації відправників. Поточна вбудована підтримка охоплює ClickClack, Discord, Feishu, Google Chat, iMessage, IRC, LINE, Mattermost, Microsoft Teams, Nextcloud Talk, Nostr, QQ Bot, Signal, Slack, SMS, Telegram, WhatsApp, Zalo та Zalo Personal. Статичні групи message.senders не залежать від каналу, тому нові канали обміну повідомленнями отримують їхню підтримку, використовуючи спільні вхідні допоміжні засоби SDK плагінів замість власного розгортання списків дозволених.
Аудиторії каналів Discord
Discord також підтримує динамічний тип групи доступу:
{ accessGroups: { maintainers: { type: "discord.channelAudience", guildId: "1456350064065904867", channelId: "1456744319972282449", membership: "canViewChannel", }, }, channels: { discord: { dmPolicy: "allowlist", allowFrom: ["accessGroup:maintainers"], }, },}discord.channelAudience означає «дозволити особисті повідомлення від відправників Discord, які наразі можуть переглядати цей канал сервера». OpenClaw визначає відправника через Discord під час авторизації та застосовує правила дозволу Discord ViewChannel. membership є необов’язковим і за замовчуванням має значення canViewChannel.
Використовуйте це, коли канал Discord уже є джерелом істини для команди, наприклад #maintainers або #on-call.
Вимоги та поведінка в разі помилки:
- Боту потрібен доступ до сервера й каналу.
- Боту потрібен Server Members Intent у Discord Developer Portal.
- Група доступу відхиляє доступ у разі помилки, коли Discord повертає
Missing Access, відправника не вдається визначити як учасника сервера або канал належить іншому серверу.
Додаткові приклади для Discord: Керування доступом у Discord
Діагностика Plugin
Автори Plugin можуть перевіряти структурований стан груп доступу, не розгортаючи його назад у плоский список дозволених:
const state = await resolveAccessGroupAllowFromState({ accessGroups: cfg.accessGroups, allowFrom: channelConfig.allowFrom, channel: "my-channel", accountId: "default", senderId, isSenderAllowed,});Результат містить відомості про групи, на які є посилання, які збіглися, відсутні, не підтримуються або завершилися помилкою. Використовуйте його для діагностики або тестів відповідності. Використовуйте expandAllowFromWithAccessGroups(...) лише для шляхів сумісності, які досі очікують плоский масив allowFrom.
Примітки щодо безпеки
- Групи доступу — це псевдоніми списків дозволених, а не ролі. Самі собою вони не створюють власників, не схвалюють запити на сполучення та не надають дозволів інструментам.
dmPolicy: "open"усе одно потребує"*"у фактичному списку дозволених для особистих повідомлень. Посилання на групу доступу не рівнозначне публічному доступу.- Відсутні назви груп призводять до відхилення доступу. Якщо
allowFromміститьaccessGroup:operators, аaccessGroups.operatorsвідсутня, цей запис нікого не авторизує. - Забезпечуйте стабільність ідентифікаторів каналів. Якщо канал підтримує і числові ідентифікатори або ідентифікатори користувачів, і відображувані імена, віддавайте перевагу ідентифікаторам.
Усунення несправностей
Якщо відправник має відповідати умовам, але його заблоковано:
- Переконайтеся, що поле списку дозволених містить точне посилання
accessGroup:<name>. - Переконайтеся, що значення
accessGroups.<name>.typeправильне. - Переконайтеся, що ідентифікатор відправника зазначено під відповідним ключем каналу або під
"*". - Переконайтеся, що запис використовує звичайний синтаксис списку дозволених цього каналу.
- Для аудиторій каналів Discord переконайтеся, що бот бачить канал сервера й має ввімкнений Server Members Intent.
Після редагування конфігурації керування доступом запустіть openclaw doctor. Ця команда виявляє багато неприпустимих комбінацій списків дозволених і політик ще до виконання.