رسائل المجموعات (قناة WhatsApp web)
الهدف: السماح لـ Clawd بالتواجد في مجموعات WhatsApp، والاستيقاظ فقط عند مناداته، مع إبقاء ذلك الخيط منفصلًا عن جلسة الرسائل الخاصة (DM) الشخصية. ملاحظة: أصبحagents.list[].groupChat.mentionPatterns مستخدمًا الآن أيضًا في Telegram/Discord/Slack/iMessage؛ يركّز هذا المستند على السلوك الخاص بـ WhatsApp. لإعدادات متعددة الوكلاء، اضبط agents.list[].groupChat.mentionPatterns لكل وكيل (أو استخدم messages.groupChat.mentionPatterns كبديل عام).
ما تم تنفيذه (2025-12-03)
- أوضاع التفعيل:
mention(الافتراضي) أوalways. يتطلّبmentionتنبيهًا (إشارات WhatsApp الحقيقية عبرmentionedJids، أو أنماط regex، أو رقم E.164 الخاص بالبوت في أي موضع من النص). يقومalwaysبإيقاظ الوكيل عند كل رسالة، لكنه ينبغي أن يرد فقط عندما يمكنه إضافة قيمة ذات معنى؛ وإلا فيُرجِع الرمز الصامت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أو/think high(عند إرسالها كرسائل مستقلة) محصورة بتلك المجموعة؛ ولا تتأثر حالة الرسائل الخاصة الشخصية. يتم تخطي نبضات القلب لخيوط المجموعات. - حقن السياق: يتم إلحاق رسائل المجموعة المعلّقة فقط (الافتراضي 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 العلامة المرئية @ من نص الرسالة:
- تكون تعابير regex غير حساسة لحالة الأحرف؛ وهي تغطي إشارة اسم العرض مثل
@openclawوالرقم الخام مع أو بدون+/مسافات. - ما يزال WhatsApp يرسل الإشارات القياسية عبر
mentionedJidsعندما ينقر شخص على جهة الاتصال، لذا نادرًا ما تكون الحاجة إلى بديل الرقم، لكنها شبكة أمان مفيدة.
أمر التفعيل (خاص بالمالك فقط)
استخدم أمر الدردشة الجماعية:/activation mention/activation always
channels.whatsapp.allowFrom، أو رقم E.164 الخاص بالبوت عند عدم تعيينه) تغيير ذلك. أرسل /status كرسالة مستقلة في المجموعة لعرض وضع التفعيل الحالي.
كيفية الاستخدام
- أضِف حساب WhatsApp الخاص بك (الذي يشغّل OpenClaw) إلى المجموعة.
- قُل
@openclaw …(أو أدرِج الرقم). يمكن فقط للمرسلين ضمن قائمة السماح تشغيله ما لم تُعيِّنgroupPolicy: "open". - سيتضمن موجه الوكيل سياق المجموعة الأخير بالإضافة إلى وسم
[from: …]الختامي ليتمكن من مخاطبة الشخص الصحيح. - تنطبق توجيهات مستوى الجلسة (
/verbose on،/think high،/newأو/reset،/compact) فقط على جلسة تلك المجموعة؛ أرسلها كرسائل مستقلة كي تُسجَّل. تبقى جلسة الرسائل الخاصة الشخصية مستقلة.
الاختبار / التحقق
- دخان يدوي:
- أرسل تنبيه
@openclawفي المجموعة وتحقق من وجود رد يشير إلى اسم المُرسِل. - أرسل تنبيهًا ثانيًا وتحقق من تضمين كتلة السجل ثم مسحها في الدور التالي.
- أرسل تنبيه
- تحقّق من سجلات Gateway (شغّل مع
--verbose) لرؤية إدخالاتinbound web messageالتي تُظهِرfrom: <groupJid>واللاحقة[from: …].
اعتبارات معروفة
- يتم تخطي نبضات القلب للمجموعات عمدًا لتجنّب البث المزعج.
- يستخدم كبح الصدى السلسلة المجمّعة الموحّدة؛ إذا أرسلت نصًا متطابقًا مرتين دون إشارات، فسيحصل الأول فقط على رد.
- ستظهر إدخالات مخزن الجلسات على أنها
agent:<agentId>:whatsapp:group:<jid>في مخزن الجلسات (~/.openclaw/agents/<agentId>/sessions/sessions.jsonافتراضيًا)؛ وعدم وجود إدخال يعني فقط أن المجموعة لم تُشغِّل تنفيذًا بعد. - تتبع مؤشرات الكتابة في المجموعات
agents.defaults.typingMode(الافتراضي:messageعند عدم الإشارة).