Configuration

アクセスグループ

アクセスグループは、一度定義してチャネル許可リストから accessGroup:<name> で参照する、名前付きの送信者リストです。

同じ人たちを複数のメッセージチャネルで許可したい場合や、信頼済みの 1 つの集合を DM とグループ送信者認可の両方に適用したい場合に使用します。

アクセスグループは、それ自体ではアクセスを付与しません。グループが意味を持つのは、許可リストフィールドがそれを参照している場合だけです。

静的メッセージ送信者グループ

静的送信者グループは type: "message.senders" を使用します。

json5
{  accessGroups: {    operators: {      type: "message.senders",      members: {        "*": ["global-owner-id"],        discord: ["discord:123456789012345678"],        telegram: ["987654321"],        whatsapp: ["+15551234567"],      },    },  },}

メンバーリストはメッセージチャネル ID でキー付けされます。

キー 意味
"*" グループを参照するすべてのメッセージチャネルでチェックされる共有エントリ。
discord Discord の許可リスト照合でのみチェックされるエントリ。
telegram Telegram の許可リスト照合でのみチェックされるエントリ。
whatsapp WhatsApp の許可リスト照合でのみチェックされるエントリ。

エントリは、宛先チャネルの通常の allowFrom ルールで照合されます。OpenClaw はチャネル間で送信者 ID を変換しません。Alice に Telegram ID と Discord ID がある場合は、該当するキーの下に両方の ID を列挙してください。

許可リストからグループを参照する

メッセージチャネルパスが送信者許可リストをサポートする場所ならどこでも、accessGroup:<name> でグループを参照します。

DM 許可リストの例:

json5
{  accessGroups: {    operators: {      type: "message.senders",      members: {        discord: ["discord:123456789012345678"],        telegram: ["987654321"],      },    },  },  channels: {    discord: {      dmPolicy: "allowlist",      allowFrom: ["accessGroup:operators"],    },    telegram: {      dmPolicy: "allowlist",      allowFrom: ["accessGroup:operators"],    },  },}

グループ送信者許可リストの例:

json5
{  accessGroups: {    oncall: {      type: "message.senders",      members: {        whatsapp: ["+15551234567"],        googlechat: ["users/1234567890"],      },    },  },  channels: {    whatsapp: {      groupPolicy: "allowlist",      groupAllowFrom: ["accessGroup:oncall"],    },    googlechat: {      spaces: {        "spaces/AAA": {          users: ["accessGroup:oncall"],        },      },    },  },}

グループと直接エントリを混在させることもできます。

json5
{  channels: {    discord: {      dmPolicy: "allowlist",      allowFrom: ["accessGroup:operators", "discord:123456789012345678"],    },  },}

サポートされるメッセージチャネルパス

アクセスグループは、共有メッセージチャネル認可パスで利用できます。たとえば次のものが含まれます。

  • channels.<channel>.allowFrom などの DM 送信者許可リスト
  • channels.<channel>.groupAllowFrom などのグループ送信者許可リスト
  • 同じ送信者照合ルールを使用する、チャネル固有のルーム単位の送信者許可リスト
  • メッセージチャネル送信者許可リストを再利用するコマンド認可パス

チャネルサポートは、そのチャネルが共有の OpenClaw 送信者認可ヘルパー経由で接続されているかどうかに依存します。現在バンドルされているサポートには、Discord、Feishu、Google Chat、iMessage、LINE、Mattermost、Microsoft Teams、Nextcloud Talk、Nostr、QQBot、Signal、WhatsApp、Zalo、Zalo Personal が含まれます。静的な message.senders グループはチャネルに依存しないように設計されているため、新しいメッセージチャネルは、カスタムの許可リスト展開ではなく共有 Plugin SDK ヘルパーを使用することで、それらをサポートする必要があります。

Plugin 診断

Plugin 作成者は、構造化されたアクセスグループ状態を、フラットな許可リストへ展開し直さずに調査できます。

typescript
 const state = await resolveAccessGroupAllowFromState({  accessGroups: cfg.accessGroups,  allowFrom: channelConfig.allowFrom,  channel: "my-channel",  accountId: "default",  senderId,  isSenderAllowed,});

結果には、参照済み、一致済み、欠落、未サポート、失敗の各グループが報告されます。診断や適合性テストが必要な場合に使用してください。まだフラットな allowFrom 配列を想定している互換性パスに限り、expandAllowFromWithAccessGroups(...) を使用してください。

Discord チャネルオーディエンス

Discord は動的アクセスグループ型もサポートします。

json5
{  accessGroups: {    maintainers: {      type: "discord.channelAudience",      guildId: "1456350064065904867",      channelId: "1456744319972282449",      membership: "canViewChannel",    },  },  channels: {    discord: {      dmPolicy: "allowlist",      allowFrom: ["accessGroup:maintainers"],    },  },}

discord.channelAudience は「現在このギルドチャネルを表示できる Discord DM 送信者を許可する」ことを意味します。OpenClaw は認可時に Discord 経由で送信者を解決し、Discord の ViewChannel 権限ルールを適用します。

#maintainers#on-call のように、Discord チャネルがすでにチームの信頼できる情報源である場合に使用します。

要件と失敗時の挙動:

  • ボットはギルドとチャネルにアクセスできる必要があります。
  • ボットには Discord Developer Portal の Server Members Intent が必要です。
  • Discord が Missing Access を返した場合、送信者をギルドメンバーとして解決できない場合、またはチャネルが別のギルドに属している場合、アクセスグループはフェイルクローズします。

Discord 固有のその他の例: Discord アクセス制御

セキュリティメモ

  • アクセスグループは許可リストのエイリアスであり、ロールではありません。それ自体では、所有者を作成したり、ペアリング要求を承認したり、ツール権限を付与したりしません。
  • dmPolicy: "open" でも、有効な DM 許可リスト内に "*" が必要です。アクセスグループを参照することは、公開アクセスと同じではありません。
  • 存在しないグループ名はフェイルクローズします。allowFromaccessGroup:operators が含まれていて、accessGroups.operators が存在しない場合、そのエントリは誰も認可しません。
  • チャネル ID は安定させてください。チャネルが表示名と数値/ユーザー ID の両方をサポートする場合は、表示名よりも数値/ユーザー ID を優先してください。

トラブルシューティング

送信者が一致するはずなのにブロックされる場合:

  1. 許可リストフィールドに正確な accessGroup:<name> 参照が含まれていることを確認します。
  2. accessGroups.<name>.type が正しいことを確認します。
  3. 送信者 ID が一致するチャネルキーの下、または "*" の下に列挙されていることを確認します。
  4. エントリがそのチャネルの通常の許可リスト構文を使用していることを確認します。
  5. Discord チャネルオーディエンスについては、ボットがギルドチャネルを表示でき、Server Members Intent が有効になっていることを確認します。

アクセス制御設定を編集した後は openclaw doctor を実行してください。ランタイム前に、多くの無効な許可リストとポリシーの組み合わせを検出できます。

Was this useful?