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)]تمام میشود تا Pi بداند چه کسی صحبت میکند. - گذرا/یکبارمشاهده: پیش از استخراج متن/منشنها، آنها را باز میکنیم، بنابراین فراخوانیهای داخل آنها همچنان فعال میشوند.
- اعلان سیستمی گروه: در نوبت اول یک نشست گروهی (و هر زمان که
/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ها به بزرگی و کوچکی حروف حساس نیستند و از همان محافظهای 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پیروی میکنند. وقتی پاسخهای قابل مشاهده از حالت پیشفرض فقط-ابزار-پیام استفاده میکنند، تایپ بهطور پیشفرض فوراً شروع میشود تا اعضای گروه بتوانند ببینند عامل در حال کار است، حتی اگر هیچ پاسخ نهایی خودکاری ارسال نشود. پیکربندی صریح حالت تایپ همچنان اولویت دارد.