Configuration
پیامهای گروهی WhatsApp
برای مدل گروههای میانکانالی (Discord، iMessage، Matrix، Microsoft Teams، Signal، Slack، Telegram، WhatsApp، Zalo)، گروهها را ببینید. این صفحه رفتار اختصاصی WhatsApp را روی آن مدل پوشش میدهد: فعالسازی، فهرستهای مجاز گروه، کلیدهای نشست برای هر گروه، و تزریق زمینه پیامهای در انتظار.
هدف: اجازه دهید OpenClaw در گروههای WhatsApp حضور داشته باشد، فقط وقتی پینگ میشود فعال شود، و آن رشته گفتگو را از نشست پیام مستقیم شخصی جدا نگه دارد.
رفتار
- حالتهای فعالسازی:
mention(پیشفرض) یاalways.mentionبه یک پینگ نیاز دارد (منشنهای واقعی WhatsApp از طریقmentionedJids، الگوهای regex امن، یا E.164 ربات در هر جای متن).alwaysعامل را روی هر پیام بیدار میکند، اما فقط وقتی باید پاسخ دهد که بتواند ارزش معناداری اضافه کند؛ در غیر این صورت توکن سکوت دقیقNO_REPLY/no_replyرا برمیگرداند. پیشفرضها را میتوان در پیکربندی (channels.whatsapp.groups) تنظیم کرد و برای هر گروه از طریق/activationبازنویسی کرد. وقتیchannels.whatsapp.groupsتنظیم شده باشد، بهعنوان فهرست مجاز گروه نیز عمل میکند (برای مجاز کردن همه،"*"را اضافه کنید). - سیاست گروه:
channels.whatsapp.groupPolicyکنترل میکند که آیا پیامهای گروه پذیرفته شوند یا نه (open|disabled|allowlist).allowlistازchannels.whatsapp.groupAllowFromاستفاده میکند (جایگزین:channels.whatsapp.allowFromصریح). پیشفرضallowlistاست (تا زمانی که فرستندهها را اضافه نکنید مسدود میماند). - نشستهای هر گروه: کلیدهای نشست شبیه
agent:<agentId>:whatsapp:group:<jid>هستند، بنابراین دستورهایی مانند/verbose on،/trace on، یا/think high(که بهصورت پیام مستقل ارسال میشوند) به همان گروه محدود میشوند؛ وضعیت پیام مستقیم شخصی دستنخورده میماند. Heartbeatها برای رشتههای گروهی رد میشوند. - تزریق زمینه: پیامهای گروهی فقط در انتظار (پیشفرض 50) که یک اجرا را تحریک نکردهاند زیر
[Chat messages since your last reply - for context]پیشوند میگیرند، و خط تحریککننده زیر[Current message - respond to this]قرار میگیرد. پیامهایی که از قبل در نشست هستند دوباره تزریق نمیشوند. - نمایش فرستنده: هر دسته گروهی اکنون با
[from: Sender Name (+E164)]پایان مییابد تا OpenClaw بداند چه کسی صحبت میکند. - زودگذر/یکبارنمایش: پیش از استخراج متن/منشنها، آنها را باز میکنیم، بنابراین پینگهای داخل آنها همچنان تحریک میشوند.
- اعلان سیستمی گروه: در اولین نوبت یک نشست گروهی (و هر زمان که
/activationحالت را تغییر دهد)، یک توضیح کوتاه شبیهYou are replying inside the WhatsApp group "<subject>". Group members: Alice (+44...), Bob (+43...), ... Activation: trigger-only ... Address the specific sender noted in the message context.را به اعلان سیستمی تزریق میکنیم. اگر فراداده در دسترس نباشد، همچنان به عامل میگوییم که این یک گفتگوی گروهی است.
نمونه پیکربندی (WhatsApp)
یک بلوک groupChat به ~/.openclaw/openclaw.json اضافه کنید تا پینگهای نام نمایشی حتی وقتی WhatsApp نویسه دیداری @ را از بدنه متن حذف میکند کار کنند:
{ channels: { whatsapp: { groups: { "*": { requireMention: true }, }, }, }, agents: { list: [ { id: "main", groupChat: { historyLimit: 50, mentionPatterns: ["@?openclaw", "\\+?15555550123"], }, }, ], },}نکتهها:
- regexها به بزرگی/کوچکی حروف حساس نیستند و از همان محافظهای safe-regex مانند سایر سطوح regex پیکربندی استفاده میکنند؛ الگوهای نامعتبر و تکرار تودرتوی ناامن نادیده گرفته میشوند.
- وقتی کسی روی مخاطب میزند، WhatsApp همچنان منشنهای کانونی را از طریق
mentionedJidsمیفرستد، بنابراین جایگزین شماره بهندرت لازم میشود، اما یک شبکه ایمنی مفید است.
دستور فعالسازی (فقط مالک)
از دستور گفتگوی گروهی استفاده کنید:
/activation mention/activation always
فقط شماره مالک (از channels.whatsapp.allowFrom، یا E.164 خود ربات وقتی تنظیم نشده باشد) میتواند این را تغییر دهد. برای دیدن حالت فعالسازی فعلی، /status را بهصورت پیام مستقل در گروه ارسال کنید.
روش استفاده
- حساب WhatsApp خود (همان که OpenClaw را اجرا میکند) را به گروه اضافه کنید.
- بگویید
@openclaw …(یا شماره را وارد کنید). فقط فرستندههای فهرست مجاز میتوانند آن را تحریک کنند، مگر اینکهgroupPolicy: "open"را تنظیم کنید. - اعلان عامل شامل زمینه اخیر گروه بههمراه نشانگر پایانی
[from: …]خواهد بود تا بتواند فرد درست را خطاب قرار دهد. - دستورالعملهای سطح نشست (
/verbose on،/trace on،/think high،/newیا/reset،/compact) فقط روی نشست همان گروه اعمال میشوند؛ آنها را بهصورت پیام مستقل ارسال کنید تا ثبت شوند. نشست پیام مستقیم شخصی شما مستقل میماند.
آزمایش / راستیآزمایی
- آزمون دود دستی:
- یک پینگ
@openclawدر گروه بفرستید و پاسخی را تأیید کنید که به نام فرستنده ارجاع میدهد. - یک پینگ دوم بفرستید و بررسی کنید که بلوک تاریخچه گنجانده شده و سپس در نوبت بعدی پاک میشود.
- یک پینگ
- لاگهای Gateway را بررسی کنید (با
--verboseاجرا کنید) تا ورودیهایinbound web messageرا ببینید کهfrom: <groupJid>و پسوند[from: …]را نشان میدهند.
ملاحظات شناختهشده
- Heartbeatها عمداً برای گروهها رد میشوند تا از پخشهای پرسروصدا جلوگیری شود.
- سرکوب بازتاب از رشته دستهای ترکیبی استفاده میکند؛ اگر متن یکسانی را دو بار بدون منشن ارسال کنید، فقط اولی پاسخ دریافت میکند.
- ورودیهای ذخیرهگاه نشست بهصورت
agent:<agentId>:whatsapp:group:<jid>در ذخیرهگاه نشست ظاهر میشوند (~/.openclaw/agents/<agentId>/sessions/sessions.jsonبهصورت پیشفرض)؛ نبودن یک ورودی فقط یعنی آن گروه هنوز اجرایی را تحریک نکرده است. - نشانگرهای تایپ در گروهها از
agents.defaults.typingModeپیروی میکنند. وقتی پاسخهای قابل مشاهده در حالت فقط-ابزار-پیام فعال شده باشند، تایپ بهصورت پیشفرض بلافاصله شروع میشود تا اعضای گروه بتوانند ببینند عامل در حال کار است، حتی اگر پاسخ نهایی خودکاری ارسال نشود. پیکربندی صریح حالت تایپ همچنان اولویت دارد.