---
read_when:
    - Настройка одного и того же списка разрешений для нескольких каналов сообщений
    - Общие правила доступа для отправителей личных сообщений и групповых чатов
    - Проверка управления доступом к каналам сообщений
summary: Многократно используемые списки разрешённых отправителей для каналов сообщений
title: Группы доступа
x-i18n:
    generated_at: "2026-07-13T17:52:32Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 24
    provider: openai
    source_hash: 099abc95e90d9a7b7006d19062c46b4ffdb2aecb1e8e714454a3182131a786d0
    source_path: channels/access-groups.md
    workflow: 16
---

Группы доступа — это именованные списки отправителей, которые вы один раз определяете в `accessGroups` и указываете в списках разрешённых отправителей каналов с помощью `accessGroup:<name>`.

Используйте их, когда одним и тем же людям нужно разрешить доступ в нескольких каналах сообщений или когда один доверенный набор должен применяться как к личным сообщениям, так и к авторизации отправителей в группах.

Сама по себе группа ничего не разрешает. Она действует только там, где на неё ссылается поле списка разрешённых отправителей.

## Статические группы отправителей сообщений

Статические группы отправителей используют `type: "message.senders"`. `members` индексируется по идентификатору канала сообщений, а `"*"` используется для записей, общих для всех каналов:

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

| Ключ                       | Значение                                                                    |
| -------------------------- | --------------------------------------------------------------------------- |
| `"*"`                      | Общие записи, проверяемые для каждого канала сообщений, ссылающегося на группу. |
| `discord`, `telegram`, ... | Записи, проверяемые только при сопоставлении со списком разрешённых отправителей этого канала. |

Записи сопоставляются по обычным правилам `allowFrom` целевого канала. OpenClaw не преобразует идентификаторы отправителей между каналами: если у Алисы есть идентификатор Telegram и идентификатор Discord, укажите оба идентификатора в соответствующих ключах каналов.

## Ссылки на группы из списков разрешённых отправителей

Указывайте группу с помощью `accessGroup:<name>` в любом месте пути канала сообщений, где поддерживаются списки разрешённых отправителей.

Пример списка разрешённых отправителей личных сообщений:

```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: {
      groups: {
        "spaces/AAA": {
          users: ["accessGroup:oncall"],
        },
      },
    },
  },
}
```

Группы и прямые записи можно использовать совместно:

```json5
{
  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 также поддерживает динамический тип группы доступа:

```json5
{
  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`.

Требования и поведение при сбоях:

- Боту необходим доступ к серверу и каналу.
- Для бота в Discord Developer Portal требуется **Server Members Intent**.
- Группа доступа запрещает доступ при сбое, если Discord возвращает `Missing Access`, отправителя невозможно определить как участника сервера или канал принадлежит другому серверу.

Дополнительные примеры для Discord: [Управление доступом Discord](/ru/channels/discord#access-control-and-routing)

## Диагностика плагинов

Авторы плагинов могут проверять структурированное состояние группы доступа, не преобразуя его обратно в плоский список разрешённых отправителей:

```typescript
import { resolveAccessGroupAllowFromState } from "openclaw/plugin-sdk/access-groups";

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` отсутствует, эта запись никого не авторизует.
- Используйте стабильные идентификаторы каналов. Если канал поддерживает оба варианта, предпочитайте числовые идентификаторы или идентификаторы пользователей отображаемым именам.

## Устранение неполадок

Если отправитель должен соответствовать условию, но заблокирован:

1. Убедитесь, что поле списка разрешённых отправителей содержит точную ссылку `accessGroup:<name>`.
2. Убедитесь, что `accessGroups.<name>.type` указан правильно.
3. Убедитесь, что идентификатор отправителя указан в соответствующем ключе канала или в `"*"`.
4. Убедитесь, что запись использует обычный синтаксис списка разрешённых отправителей этого канала.
5. Для аудиторий каналов Discord убедитесь, что бот видит канал сервера и что Server Members Intent включён.

После изменения конфигурации управления доступом выполните `openclaw doctor`. Эта команда обнаруживает многие недопустимые сочетания списков разрешённых отправителей и политик до запуска.
