---
read_when:
    - Настройка сообщений каналов от имени бота
    - Настройка защиты от циклов между ботами
sidebarTitle: Bot loop protection
summary: Защита от зацикливания bot-to-bot по умолчанию и переопределения каналов
title: Защита от циклов ботов
x-i18n:
    generated_at: "2026-06-28T22:33:21Z"
    model: gpt-5.5
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 7a36794332e89dc7a9cf558e1687beabf4a6d10fb8e73c39794b0f0fd01c65b7
    source_path: channels/bot-loop-protection.md
    workflow: 16
---

# Защита от зацикливания ботов

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

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

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

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

- `maxEventsPerWindow: 20` - пара ботов может обменяться 20 событиями в пределах окна
- `windowSeconds: 60` - длительность скользящего окна
- `cooldownSeconds: 60` - время подавления после превышения парой бюджета

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

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

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

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

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

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

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

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

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

## Поддержка каналов

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

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

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