Get started
Защита от зацикливания бота
OpenClaw может принимать сообщения, написанные другими ботами, в каналах, поддерживающих allowBots. Когда этот путь включен, защита от циклов между парами не позволяет двум ботам бесконечно отвечать друг другу.
Защита применяется основным обработчиком входящих ответов. Каждый поддерживающий канал преобразует входящее событие в универсальные данные: учетную запись или область действия, идентификатор беседы, идентификатор бота-отправителя и идентификатор бота-получателя. Ядро отслеживает пару участников в обоих направлениях (A → B и B → A считаются одной парой), применяет лимит скользящего окна и блокирует пару на период восстановления после превышения лимита.
Значения по умолчанию
Защита от циклов между парами активна всегда, когда канал позволяет сообщениям от ботов поступать на диспетчеризацию. Встроенные значения по умолчанию:
| Ключ | По умолчанию | Значение |
|---|---|---|
enabled |
true |
Защита активна для поддерживающих ее каналов. |
maxEventsPerWindow |
20 |
Число событий, которыми пара ботов может обменяться в пределах окна. |
windowSeconds |
60 |
Длительность скользящего окна. |
cooldownSeconds |
60 |
Время блокировки после превышения парой лимита. |
Защита не влияет на сообщения от людей, развертывания с одним ботом, фильтрацию собственных сообщений и ответы ботов, не превышающие лимит.
Настройка общих значений по умолчанию
Задайте channels.defaults.botLoopProtection один раз, чтобы установить одинаковые базовые параметры для всех поддерживающих каналов. Переопределения для каналов, учетных записей и комнат по-прежнему позволяют настраивать отдельные поверхности.
{ 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- встроенные значения по умолчанию
{ 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.