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: { list: [ { id: "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 مطلقًا.
- يتذكر منع الصدى الموجه المدمج (السجل + الرسالة الحالية) لكل جلسة، حتى لا تعيد رسائل البوت المسلّمة تشغيله؛ وقد تُتخطى دفعة متطابقة متكررة باعتبارها صدى.
- تظهر إدخالات مخزن الجلسات بصيغة
agent:<agentId>:whatsapp:group:<jid>في مخزن جلسات SQLite الخاص بكل وكيل؛ ويعني غياب الإدخال ببساطة أن المجموعة لم تشغّل تنفيذًا بعد. - تتبع مؤشرات الكتابة
session.typingMode/agents.defaults.typingMode. عند الاشتراك في وضع أداة الرسائل فقط للردود المرئية، تبدأ الكتابة فورًا افتراضيًا حتى يتمكن أعضاء المجموعة من رؤية أن الوكيل يعمل، حتى إذا لم يُنشر رد نهائي تلقائي. وتظل لإعدادات وضع الكتابة الصريحة الأولوية.