Get started
محافظت در برابر حلقهٔ ربات
OpenClaw میتواند در کانالهایی که از allowBots پشتیبانی میکنند، پیامهای نوشتهشده توسط رباتهای دیگر را بپذیرد. هنگامی که این مسیر فعال باشد، محافظت در برابر حلقهٔ جفتی مانع میشود دو هویت ربات بهطور نامحدود به یکدیگر پاسخ دهند.
این محافظ توسط اجراکنندهٔ اصلی پاسخ ورودی اعمال میشود. هر کانال پشتیبان، رویداد ورودی خود را به دادههای عمومی نگاشت میکند: حساب یا دامنه، شناسهٔ مکالمه، شناسهٔ ربات فرستنده و شناسهٔ ربات گیرنده. هسته جفت مشارکتکنندگان را در هر دو جهت ردیابی میکند (A به B و B به A یک جفت محسوب میشوند)، یک سهمیهٔ پنجرهٔ لغزان اعمال میکند و پس از تجاوز از سهمیه، جفت را برای یک دورهٔ توقف موقت سرکوب میکند.
پیشفرضها
محافظت در برابر حلقهٔ جفتی هرگاه کانالی اجازه دهد پیامهای نوشتهشده توسط ربات به مرحلهٔ توزیع برسند، فعال است. پیشفرضهای داخلی:
| کلید | پیشفرض | معنا |
|---|---|---|
enabled |
true |
محافظ برای کانالهایی که از آن پشتیبانی میکنند فعال است. |
maxEventsPerWindow |
20 |
تعداد رویدادهایی که یک جفت ربات میتواند درون پنجره مبادله کند. |
windowSeconds |
60 |
طول پنجرهٔ لغزان. |
cooldownSeconds |
60 |
مدت سرکوب پس از تجاوز جفت از سهمیه. |
این محافظ بر پیامهای نوشتهشده توسط انسان، استقرارهای تکرباتی، فیلترکردن پیامهای خود ربات یا پاسخهای رباتی که زیر سهمیه باقی میمانند تأثیری ندارد.
پیکربندی پیشفرضهای مشترک
channels.defaults.botLoopProtection را یکبار تنظیم کنید تا همهٔ کانالهای پشتیبان خط مبنای یکسانی داشته باشند. کانالها همچنین ممکن است بازنویسیهای محدودتری ارائه دهند؛ Feishu عمداً فقط از همین خط مبنای مشترک استفاده میکند.
{ 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: true, 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، کانال و جفت ربات. - Feishu: دادههای بومی
sender_type=botبرای پیامهای گروهی پذیرفتهشدهٔ نوشتهشده توسط ربات، کلیدگذاریشده بر اساس حساب Feishu، گفتوگو و جفت ربات. Feishu فقط ازchannels.defaults.botLoopProtectionاستفاده میکند. - Google Chat: دادههای بومی
sender.type=BOTبرای پیامهای پذیرفتهشدهٔ نوشتهشده توسط ربات، کلیدگذاریشده بر اساس حساب، فضا و جفت ربات. - Matrix: حسابهای ربات Matrix پیکربندیشده، کلیدگذاریشده بر اساس حساب Matrix، اتاق و جفت ربات پیکربندیشده.
- Slack: دادههای بومی
bot_idبرای پیامهای پذیرفتهشدهٔ نوشتهشده توسط ربات، کلیدگذاریشده بر اساس حساب Slack، کانال و جفت ربات.
کانالهایی که هویت قابلاعتمادی از ربات ورودی ارائه نمیدهند، همچنان از فیلترهای معمول پیام خود ربات و خطمشی دسترسی استفاده میکنند. آنها نباید تا زمانی که بتوانند هر دو مشارکتکنندهٔ جفت ربات را شناسایی کنند، این محافظ را فعال کنند.
برای جزئیات پیادهسازی Plugin به زمان اجرای SDK مراجعه کنید.