Configuration

پیام‌های گروهی WhatsApp

برای مدل گروه‌های میان‌کانالی (Discord، iMessage، Matrix، Microsoft Teams، QQBot، Signal، Slack، Telegram، WhatsApp، Zalo)، به گروه‌ها مراجعه کنید. این صفحه رفتار مختص WhatsApp را در کنار آن مدل پوشش می‌دهد: فعال‌سازی، فهرست‌های مجاز گروه‌ها، کلیدهای نشست برای هر گروه و تزریق زمینهٔ پیام‌های در انتظار.

هدف: OpenClaw بتواند در گروه‌های WhatsApp حضور داشته باشد، فقط هنگام خطاب‌شدن فعال شود و آن رشتهٔ گفتگو را از نشست پیام خصوصی شخصی جدا نگه دارد.

رفتار

  • حالت‌های فعال‌سازی: mention (پیش‌فرض) یا always. حالت mention به خطاب‌کردن نیاز دارد: یک اشارهٔ واقعی @ در WhatsApp ‏(mentionedJids)، یک الگوی عبارت منظم پیکربندی‌شده، ارقام E.164 ربات در هر جای متن، یا پاسخی نقل‌قول‌شده به یکی از پیام‌های ربات (به‌جز پیکربندی‌های گفت‌وگوی شخصی با شمارهٔ مشترک). حالت always عامل را با هر پیام فعال می‌کند، اما اعلان گروهی تزریق‌شده به آن می‌گوید فقط زمانی پاسخ دهد که ارزش افزوده‌ای دارد و در غیر این صورت، توکن دقیق سکوت NO_REPLY (بدون حساسیت به بزرگی و کوچکی حروف) را برگرداند. مقادیر پیش‌فرض از پیکربندی (channels.whatsapp.groups requireMention) گرفته می‌شوند و می‌توان آن‌ها را برای هر گروه از طریق /activation بازنویسی کرد.
  • فهرست مجاز گروه‌ها: وقتی channels.whatsapp.groups تنظیم شده باشد، فقط JIDهای گروه فهرست‌شده پذیرفته می‌شوند (برای مجازکردن همه، "*" را اضافه کنید)؛ پیام‌های گروه‌های فهرست‌نشده با ثبت یک راهنما در گزارش حذف می‌شوند.
  • سیاست گروه: channels.whatsapp.groupPolicy تعیین می‌کند که آیا پیام‌های گروه پذیرفته شوند (open|disabled|allowlist). مقدار allowlist از channels.whatsapp.groupAllowFrom استفاده می‌کند (مقدار جایگزین: channels.whatsapp.allowFrom صریح). مقدار پیش‌فرض allowlist است (تا زمانی که فرستندگان را اضافه نکنید، مسدود می‌ماند).
  • نشست‌های هر گروه: کلیدهای نشست به‌شکل agent:<agentId>:whatsapp:group:<jid> هستند (برای حساب‌های غیرپیش‌فرض، :thread:whatsapp-account-<accountId> به انتهای آن‌ها افزوده می‌شود)، بنابراین دستورالعمل‌هایی مانند /verbose on، /trace on یا /think high (که به‌صورت پیام‌های مستقل ارسال می‌شوند) فقط به همان گروه محدودند؛ وضعیت پیام خصوصی شخصی بدون تغییر می‌ماند.
  • تزریق زمینه: پیام‌های گروهی فقط در انتظار (به‌طور پیش‌فرض 50 پیام) که اجرای عامل را فعال نکرده‌اند، زیر [Chat messages since your last reply - for context] پیشوند می‌گیرند و خط فعال‌کننده زیر [Current message - respond to this] قرار می‌گیرد. پنجرهٔ پیام‌های در انتظار پس از اجرا پاک می‌شود؛ پیام‌هایی که از قبل در نشست هستند دوباره تزریق نمی‌شوند.
  • انتساب فرستنده: هر خط گروه برچسب فرستنده را درون پوش پیام حمل می‌کند، برای مثال [WhatsApp <groupJid> <timestamp>] Alice (+447700900123): text، و هویت فرستنده به‌همراه موضوع/اعضای گروه نیز در بلوک فرادادهٔ غیرقابل‌اعتماد گفتگو قرار می‌گیرد.
  • موقت/یک‌بارمشاهده: پیش از استخراج متن/اشاره‌ها، پوشش‌ها باز می‌شوند؛ بنابراین خطاب‌کردن‌های درون آن‌ها همچنان عامل را فعال می‌کنند.
  • اعلان سیستمی گروه: نوبت نخست نشست گروه (و هر نوبت پس از آنکه /activation حالت را تغییر دهد) راهنمای فعال‌سازی را در اعلان سیستمی تزریق می‌کند (Activation: trigger-only ... یا Activation: always-on ...، به‌اضافهٔ «فرستندهٔ مشخص را خطاب قرار دهید»). راهنمای پایدار تحویل در گفت‌وگوی گروهی («شما در یک گفت‌وگوی گروهی WhatsApp هستید...») همیشه درج می‌شود.

نمونهٔ پیکربندی (WhatsApp)

کاری کنید که خطاب‌کردن با نام نمایشی حتی زمانی که WhatsApp نشانهٔ بصری @ را از بدنهٔ متن حذف می‌کند، کار کند:

json5
{  channels: {    whatsapp: {      groups: {        "*": { requireMention: true },      },      historyLimit: 50, // پنجرهٔ زمینهٔ گروه در انتظار (پیش‌فرض 50)    },  },  agents: {    entries: {      main: {        groupChat: {          mentionPatterns: ["@?openclaw", "\\+?15555550123"],        },      },    },  },}

نکته‌ها:

  • عبارت‌های منظم به بزرگی و کوچکی حروف حساس نیستند و از همان محافظ‌های عبارت منظم امن در دیگر سطوح عبارت منظم پیکربندی استفاده می‌کنند؛ الگوهای نامعتبر و تکرارهای تودرتوی ناامن نادیده گرفته می‌شوند.
  • وقتی شخصی روی مخاطب ضربه می‌زند، WhatsApp همچنان اشاره‌های متعارف را از طریق mentionedJids ارسال می‌کند؛ بنابراین مقدار جایگزین شماره به‌ندرت لازم است، اما شبکهٔ ایمنی مفیدی محسوب می‌شود.
  • پنجرهٔ زمینهٔ در انتظار به‌ترتیب channels.whatsapp.accounts.<id>.historyLimitchannels.whatsapp.historyLimitmessages.groupChat.historyLimit ← 50 تعیین می‌شود.

فرمان فعال‌سازی (فقط مالک)

از فرمان گفت‌وگوی گروهی استفاده کنید:

  • /activation mention
  • /activation always

فقط شماره‌های مالک (از channels.whatsapp.allowFrom، یا شمارهٔ E.164 خود ربات در صورت تنظیم‌نبودن آن) می‌توانند این مورد را تغییر دهند؛ /activation از هر شخص دیگری نادیده گرفته می‌شود و فقط به‌عنوان زمینه ذخیره می‌شود. برای مشاهدهٔ حالت فعال‌سازی فعلی، /status را به‌صورت پیامی مستقل در گروه ارسال کنید.

روش استفاده

  1. حساب WhatsApp خود (حساب در حال اجرای OpenClaw) را به گروه اضافه کنید.
  2. @openclaw ... را بگویید (یا شماره را درج کنید). مگر آنکه groupPolicy: "open" را تنظیم کنید، فقط فرستندگان موجود در فهرست مجاز می‌توانند عامل را فعال کنند.
  3. اعلان عامل شامل زمینهٔ گروه در انتظار و خط‌های دارای برچسب فرستنده است تا بتواند شخص درست را خطاب قرار دهد.
  4. دستورالعمل‌های نشست (/verbose on، /trace on، /think high، /new یا /reset، /compact) فقط بر نشست همان گروه اعمال می‌شوند؛ آن‌ها را به‌صورت پیام‌های مستقل ارسال کنید تا ثبت شوند. نشست پیام خصوصی شخصی شما مستقل می‌ماند.

آزمایش / راستی‌آزمایی

  • آزمایش سریع دستی:
    • یک خطاب @openclaw در گروه ارسال کنید و دریافت پاسخی را که به نام فرستنده اشاره می‌کند تأیید کنید.
    • خطاب دومی ارسال کنید و بررسی کنید که بلوک تاریخچه درج شده و سپس در نوبت بعدی پاک می‌شود.
  • گزارش‌های Gateway را (با اجرای --verbose) برای ورودی‌های inbound web message بررسی کنید که from: <groupJid> و بدنهٔ دارای برچسب فرستنده را نشان می‌دهند.

ملاحظات شناخته‌شده

  • Heartbeatها در نشست اصلی عامل اجرا می‌شوند؛ نشست‌های گروهی هرگز اجرای Heartbeat دریافت نمی‌کنند.
  • سرکوب بازتاب، اعلان ترکیبی (تاریخچه + پیام فعلی) را برای هر نشست به‌خاطر می‌سپارد تا پیام‌های تحویل‌شدهٔ خود ربات دوباره آن را فعال نکنند؛ یک دستهٔ تکراری یکسان ممکن است به‌عنوان بازتاب نادیده گرفته شود.
  • ورودی‌های مخزن نشست در مخزن نشست SQLite هر عامل به‌شکل agent:<agentId>:whatsapp:group:<jid> ظاهر می‌شوند؛ نبود یک ورودی فقط به این معناست که گروه هنوز اجرایی را فعال نکرده است.
  • نشانگرهای تایپ از agents.entries.*.typingMode / agents.defaults.typingMode پیروی می‌کنند. وقتی پاسخ‌های قابل‌مشاهده برای حالت فقط ابزار پیام فعال شده باشند، تایپ به‌طور پیش‌فرض بلافاصله آغاز می‌شود تا اعضای گروه بتوانند فعالیت عامل را ببینند، حتی اگر هیچ پاسخ نهایی خودکاری ارسال نشود. پیکربندی صریح حالت تایپ همچنان اولویت دارد.

مرتبط

Was this useful?
On this page

On this page