accessGroups and reference from channel allowlists with accessGroup:<name>.
Use them when the same people should be allowed across several message channels, or when one trusted set should apply to both DMs and group sender authorization.
A group grants nothing by itself. It only matters where an allowlist field references it.
Static message sender groups
Static sender groups usetype: "message.senders". members is keyed by message-channel id, plus "*" for entries shared by every channel:
| Key | Meaning |
|---|---|
"*" | Shared entries checked for every message channel that references the group. |
discord, telegram, … | Entries checked only for that channel’s allowlist matching. |
allowFrom rules. OpenClaw does not translate sender ids between channels: if Alice has a Telegram id and a Discord id, list both ids under the matching channel keys.
Reference groups from allowlists
Reference a group withaccessGroup:<name> anywhere the message channel path supports sender allowlists.
DM allowlist example:
Supported message-channel paths
Access groups work in the shared message-channel authorization paths:- DM sender allowlists such as
channels.<channel>.allowFrom - group sender allowlists such as
channels.<channel>.groupAllowFrom - channel-specific per-room sender allowlists that use the same sender matching rules (for example Google Chat
groups.<space>.users) - command authorization paths that reuse message-channel sender allowlists
message.senders groups are channel-agnostic, so new message channels get them by using the shared plugin SDK ingress helpers instead of custom allowlist expansion.
Discord channel audiences
Discord also supports a dynamic access group type:discord.channelAudience means “allow Discord DM senders who can currently view this guild channel.” OpenClaw resolves the sender through Discord at authorization time and applies Discord ViewChannel permission rules. membership is optional and defaults to canViewChannel.
Use this when a Discord channel is already the source of truth for a team, such as #maintainers or #on-call.
Requirements and failure behavior:
- The bot needs access to the guild and channel.
- The bot needs the Discord Developer Portal Server Members Intent.
- The access group fails closed when Discord returns
Missing Access, the sender cannot be resolved as a guild member, or the channel belongs to another guild.
Plugin diagnostics
Plugin authors can inspect structured access-group state without expanding it back into a flat allowlist:expandAllowFromWithAccessGroups(...) only for compatibility paths that still expect a flat allowFrom array.
Security notes
- Access groups are allowlist aliases, not roles. They do not create owners, approve pairing requests, or grant tool permissions by themselves.
dmPolicy: "open"still requires"*"in the effective DM allowlist. Referencing an access group is not the same as public access.- Missing group names fail closed. If
allowFromcontainsaccessGroup:operatorsandaccessGroups.operatorsis absent, that entry authorizes nobody. - Keep channel ids stable. Prefer numeric/user ids over display names when the channel supports both.
Troubleshooting
If a sender should match but is blocked:- Confirm the allowlist field contains the exact
accessGroup:<name>reference. - Confirm
accessGroups.<name>.typeis correct. - Confirm the sender id is listed under the matching channel key, or under
"*". - Confirm the entry uses that channel’s normal allowlist syntax.
- For Discord channel audiences, confirm the bot can see the guild channel and has Server Members Intent enabled.
openclaw doctor after editing access-control config. It catches many invalid allowlist and policy combinations before runtime.