---
read_when:
    - Настройка сообщений в каналах, создаваемых ботами
    - Настройка защиты от зацикливания взаимодействия между ботами
sidebarTitle: Bot loop protection
summary: Параметры защиты от циклов между ботами по умолчанию и их переопределение для каналов
title: Защита от зацикливания бота
x-i18n:
    generated_at: "2026-07-13T17:51:53Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 24
    provider: openai
    source_hash: 08637267cd3422d3154315e709c85c85fa57641f1adb0e8ef10c32e8a7b73312
    source_path: channels/bot-loop-protection.md
    workflow: 16
---

OpenClaw может принимать сообщения, написанные другими ботами, в каналах, поддерживающих `allowBots`. Когда этот путь включен, защита от циклов между парами не позволяет двум ботам бесконечно отвечать друг другу.

Защита применяется основным обработчиком входящих ответов. Каждый поддерживающий канал преобразует входящее событие в универсальные данные: учетную запись или область действия, идентификатор беседы, идентификатор бота-отправителя и идентификатор бота-получателя. Ядро отслеживает пару участников в обоих направлениях (A → B и B → A считаются одной парой), применяет лимит скользящего окна и блокирует пару на период восстановления после превышения лимита.

## Значения по умолчанию

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

| Ключ                 | По умолчанию | Значение                                                   |
| -------------------- | ------------ | ---------------------------------------------------------- |
| `enabled`   | `true` | Защита активна для поддерживающих ее каналов.          |
| `maxEventsPerWindow`   | `20` | Число событий, которыми пара ботов может обменяться в пределах окна. |
| `windowSeconds`   | `60` | Длительность скользящего окна.                         |
| `cooldownSeconds`   | `60` | Время блокировки после превышения парой лимита.        |

Защита не влияет на сообщения от людей, развертывания с одним ботом, фильтрацию собственных сообщений и ответы ботов, не превышающие лимит.

## Настройка общих значений по умолчанию

Задайте `channels.defaults.botLoopProtection` один раз, чтобы установить одинаковые базовые параметры для всех поддерживающих каналов. Переопределения для каналов, учетных записей и комнат по-прежнему позволяют настраивать отдельные поверхности.

```json5
{
  channels: {
    defaults: {
      botLoopProtection: {
        maxEventsPerWindow: 20,
        windowSeconds: 60,
        cooldownSeconds: 60,
      },
    },
  },
}
```

Задавайте `enabled: false` только тогда, когда политика канала намеренно разрешает беседы между ботами без автоматической блокировки.

## Переопределение для канала, учетной записи или комнаты

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

1. `channels.<channel>.<room-or-space>.botLoopProtection`, если канал поддерживает переопределения для отдельных бесед
2. `channels.<channel>.accounts.<account>.botLoopProtection`, если канал поддерживает учетные записи
3. `channels.<channel>.botLoopProtection`, если канал поддерживает значения по умолчанию верхнего уровня
4. `channels.defaults.botLoopProtection`
5. встроенные значения по умолчанию

```json5
{
  channels: {
    defaults: {
      botLoopProtection: {
        maxEventsPerWindow: 20,
      },
    },
    discord: {
      botLoopProtection: {
        maxEventsPerWindow: 8,
      },
      accounts: {
        secondary: {
          allowBots: "mentions",
          botLoopProtection: {
            maxEventsPerWindow: 5,
            cooldownSeconds: 90,
          },
        },
      },
    },
    googlechat: {
      allowBots: true,
      groups: {
        "spaces/AAAA": {
          botLoopProtection: {
            maxEventsPerWindow: 5,
          },
        },
      },
    },
    matrix: {
      allowBots: "mentions",
      groups: {
        "!roomid:example.org": {
          botLoopProtection: {
            maxEventsPerWindow: 5,
          },
        },
      },
    },
    slack: {
      allowBots: "mentions",
      botLoopProtection: {
        maxEventsPerWindow: 8,
      },
    },
  },
}
```

## Поддержка каналами

- Discord: собственные данные `author.bot`, сгруппированные по учетной записи Discord, каналу и паре ботов.
- Google Chat: собственные данные `sender.type=BOT` для принятых сообщений от ботов, сгруппированные по учетной записи, пространству и паре ботов.
- Matrix: настроенные учетные записи ботов Matrix, сгруппированные по учетной записи Matrix, комнате и настроенной паре ботов.
- Slack: собственные данные `bot_id` для принятых сообщений от ботов, сгруппированные по учетной записи Slack, каналу и паре ботов.

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

Подробности реализации плагина см. в разделе [Среда выполнения SDK](/ru/plugins/sdk-runtime#reusable-runtime-utilities).
