@@ -125,7 +125,26 @@ Access groups are available in shared message-channel authorization paths, inclu
|
125 | 125 | - channel-specific per-room sender allowlists that use the same sender matching rules |
126 | 126 | - command authorization paths that reuse message-channel sender allowlists |
127 | 127 | |
128 | | -Channel support depends on whether that channel is wired through the shared OpenClaw sender-authorization helpers. Current bundled support includes Discord, Google Chat, Nostr, WhatsApp, Zalo, and Zalo Personal. Static `message.senders` groups are designed to be channel-agnostic, so new message channels should support them by using the shared plugin SDK helpers instead of custom allowlist expansion. |
| 128 | +Channel support depends on whether that channel is wired through the shared OpenClaw sender-authorization helpers. Current bundled support includes BlueBubbles, Discord, Feishu, Google Chat, iMessage, LINE, Mattermost, Microsoft Teams, Nextcloud Talk, Nostr, QQBot, Signal, WhatsApp, Zalo, and Zalo Personal. Static `message.senders` groups are designed to be channel-agnostic, so new message channels should support them by using the shared plugin SDK helpers instead of custom allowlist expansion. |
| 129 | + |
| 130 | +## Plugin diagnostics |
| 131 | + |
| 132 | +Plugin authors can inspect structured access-group state without expanding it back into a flat allowlist: |
| 133 | + |
| 134 | +```typescript |
| 135 | +import { resolveAccessGroupAllowFromState } from "openclaw/plugin-sdk/security-runtime"; |
| 136 | + |
| 137 | +const state = await resolveAccessGroupAllowFromState({ |
| 138 | + accessGroups: cfg.accessGroups, |
| 139 | + allowFrom: channelConfig.allowFrom, |
| 140 | + channel: "my-channel", |
| 141 | + accountId: "default", |
| 142 | +senderId, |
| 143 | +isSenderAllowed, |
| 144 | +}); |
| 145 | +``` |
| 146 | + |
| 147 | +The result reports referenced, matched, missing, unsupported, and failed groups. Use this when you need diagnostics or conformance tests. Use `expandAllowFromWithAccessGroups(...)` only for compatibility paths that still expect a flat `allowFrom` array. |
129 | 148 | |
130 | 149 | ## Discord channel audiences |
131 | 150 | |
|