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.groupsrequireMention) گرفته میشوند و میتوان آنها را برای هر گروه از طریق/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 نشانهٔ بصری @ را از بدنهٔ متن حذف میکند، کار کند:
{ channels: { whatsapp: { groups: { "*": { requireMention: true }, }, historyLimit: 50, // پنجرهٔ زمینهٔ گروه در انتظار (پیشفرض 50) }, }, agents: { entries: { main: { groupChat: { mentionPatterns: ["@?openclaw", "\\+?15555550123"], }, }, }, },}نکتهها:
- عبارتهای منظم به بزرگی و کوچکی حروف حساس نیستند و از همان محافظهای عبارت منظم امن در دیگر سطوح عبارت منظم پیکربندی استفاده میکنند؛ الگوهای نامعتبر و تکرارهای تودرتوی ناامن نادیده گرفته میشوند.
- وقتی شخصی روی مخاطب ضربه میزند، WhatsApp همچنان اشارههای متعارف را از طریق
mentionedJidsارسال میکند؛ بنابراین مقدار جایگزین شماره بهندرت لازم است، اما شبکهٔ ایمنی مفیدی محسوب میشود. - پنجرهٔ زمینهٔ در انتظار بهترتیب
channels.whatsapp.accounts.<id>.historyLimit←channels.whatsapp.historyLimit←messages.groupChat.historyLimit← 50 تعیین میشود.
فرمان فعالسازی (فقط مالک)
از فرمان گفتوگوی گروهی استفاده کنید:
/activation mention/activation always
فقط شمارههای مالک (از channels.whatsapp.allowFrom، یا شمارهٔ E.164 خود ربات در صورت تنظیمنبودن آن) میتوانند این مورد را تغییر دهند؛ /activation از هر شخص دیگری نادیده گرفته میشود و فقط بهعنوان زمینه ذخیره میشود. برای مشاهدهٔ حالت فعالسازی فعلی، /status را بهصورت پیامی مستقل در گروه ارسال کنید.
روش استفاده
- حساب WhatsApp خود (حساب در حال اجرای OpenClaw) را به گروه اضافه کنید.
@openclaw ...را بگویید (یا شماره را درج کنید). مگر آنکهgroupPolicy: "open"را تنظیم کنید، فقط فرستندگان موجود در فهرست مجاز میتوانند عامل را فعال کنند.- اعلان عامل شامل زمینهٔ گروه در انتظار و خطهای دارای برچسب فرستنده است تا بتواند شخص درست را خطاب قرار دهد.
- دستورالعملهای نشست (
/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پیروی میکنند. وقتی پاسخهای قابلمشاهده برای حالت فقط ابزار پیام فعال شده باشند، تایپ بهطور پیشفرض بلافاصله آغاز میشود تا اعضای گروه بتوانند فعالیت عامل را ببینند، حتی اگر هیچ پاسخ نهایی خودکاری ارسال نشود. پیکربندی صریح حالت تایپ همچنان اولویت دارد.