التثبيت (عند الطلب)
- يطلب الإعداد الأولي (
openclaw onboard) وopenclaw channels add --channel whatsappتثبيت Plugin الخاص بـ WhatsApp في أول مرة تختاره فيها. - يوفّر
openclaw channels login --channel whatsappأيضًا مسار التثبيت عندما لا يكون Plugin موجودًا بعد. - قناة التطوير + نسخة git: تستخدم مسار Plugin المحلي افتراضيًا.
- المستقر/بيتا: يثبّت Plugin الرسمي
@openclaw/whatsappمن ClawHub أولًا، مع npm كخيار احتياطي. - يُوزَّع وقت تشغيل WhatsApp خارج حزمة OpenClaw الأساسية على npm حتى تبقى اعتماديات وقت التشغيل الخاصة بـ WhatsApp مع Plugin الخارجي.
@openclaw/whatsapp) فقط عندما تحتاج إلى خيار الرجوع
إلى السجل. ثبّت إصدارًا محددًا بدقة فقط عندما تحتاج إلى تثبيت قابل لإعادة الإنتاج.
الإقران
استكشاف أخطاء القنوات وإصلاحها
إعدادات Gateway
إعداد سريع
ربط WhatsApp (QR)
الاتصال بمقدم الطلب الحالي باستخدام MeowCaller (تجريبي)
يمكن لـ Plugin الخاص بـ WhatsApp كشفwhatsapp_call في أدوار الوكيل الناشئة من WhatsApp. تستخدم الأداة
MeowCaller لإجراء مكالمة صوتية عبر WhatsApp إلى
مقدم الطلب المخوّل الحالي وتشغّل رسالة OpenClaw TTS بعد أن يجيب. لا تقبل الأداة
رقم وجهة، لذلك لا يمكن للمطالبة إعادة توجيه المكالمة إلى طرف ثالث.
هذه القدرة التجريبية معطلة افتراضيًا.
تفعيل المكالمات التجريبية
actions.calls: true إلى قناة WhatsApp في openclaw.json:false، لا يكشف OpenClaw أداة whatsapp_call للوكيل.تثبيت CLI الخاص بـ MeowCaller الذي تمت مراجعته
meowcaller على PATH في مضيف Gateway.
إلى أن يُدمج MeowCaller PR #7، ابنِ
الفرع الذي تمت مراجعته عند الالتزام 752050471fc2bf7a8cdfbf7dbd3cd4e865d85d3f:$HOME/.local/bin موجود أيضًا على PATH لخدمة Gateway. يوفر هذا التنقيح
أوامر pair و notify للإرسال فقط بشكل صريح. لا يفتح notify أي ميكروفون أو سماعة
أو جهاز فيديو أو مصرف صوت وارد أو التقاط تشخيصي. لا تستبدله بأمر play
الخاص بـ CLI المثال.إقران الجهاز المرتبط بـ MeowCaller
whatsapp_call
عن دليل الحالة الخاص بالحساب وأمر الإقران. للحساب الافتراضي:MeowCaller linked device ready. ثم يخرج الأمر. أبقِ wa-voip.db
خاصًا؛ فهو جلسة الجهاز المرتبط الخاصة بـ MeowCaller. يعيد إجراء حالة whatsapp_call
الأمر والصدفة الخاصين بالحساب عندما تستخدم حسابًا غير افتراضي. على
Windows، شغّل أمر PowerShell الخاص به؛ ينشئ MeowCaller دليل التخزين.إعداد TTS والاتصال من WhatsApp
Call me and say the build finished. تحل الأداة المرسل
من سياق وارد موثوق، وتولّد ملف WAV مؤقتًا خاصًا، وتشغّل MeowCaller ضمن
نافذة اتصال محدودة، وتحذف ملف الصوت بعد ذلك. يمرر OpenClaw مخزن الحساب
صراحة، وينتظر حالة خروج صفرية بعد الإجابة والتشغيل وإنهاء المكالمة، ويتعامل
مع انتهاء المهلة أو الخروج غير الصفري كمكالمة أداة فاشلة.- مكالمات صوتية صادرة فردية فقط
- لا أرقام وجهة عشوائية
- لا مصادقة مشتركة مع اتصال الدردشة
- لا مكالمات ذاتية من وضع الرقم الشخصي/الدردشة الذاتية
- الصوت المولّد محدود إلى 60 ثانية
- لا إيصال سماعية من جهة الهاتف يتجاوز اكتمال الإجابة/التشغيل/إنهاء المكالمة في MeowCaller
- يوقف OpenClaw العملية المرافقة بعد نافذة محدودة من 115 إلى 175 ثانية، بما يشمل مراحل اتصال MeowCaller والإجابة والتشغيل والإيقاف
أنماط النشر
رقم مخصص (موصى به)
رقم مخصص (موصى به)
- هوية WhatsApp منفصلة لـ OpenClaw
- قوائم سماح وحدود توجيه أوضح للرسائل المباشرة
- احتمال أقل لارتباك الدردشة الذاتية
خيار الرجوع إلى الرقم الشخصي
خيار الرجوع إلى الرقم الشخصي
dmPolicy: "allowlist"- يتضمن
allowFromرقمك الشخصي selfChatMode: true
allowFrom.نطاق قناة WhatsApp Web فقط
نطاق قناة WhatsApp Web فقط
Baileys) في بنية قنوات OpenClaw الحالية.لا توجد قناة مراسلة Twilio WhatsApp منفصلة في سجل قنوات الدردشة المدمج.نموذج وقت التشغيل
- يتولى Gateway امتلاك مقبس WhatsApp وحلقة إعادة الاتصال.
- يستخدم مراقب إعادة الاتصال نشاط نقل WhatsApp Web، وليس حجم رسائل التطبيق الواردة فقط، لذلك لا يُعاد تشغيل جلسة جهاز مرتبط هادئة لمجرد أن لا أحد أرسل رسالة مؤخرًا. لا يزال حد صمت التطبيق الأطول يفرض إعادة اتصال إذا استمرت إطارات النقل في الوصول لكن لم تُعالَج أي رسائل تطبيق خلال نافذة المراقب؛ وبعد إعادة اتصال عابرة لجلسة نشطة مؤخرًا، يستخدم فحص صمت التطبيق هذا مهلة الرسائل العادية لنافذة الاسترداد الأولى.
- توقيتات مقبس Baileys صريحة ضمن
web.whatsapp.*: يتحكمkeepAliveIntervalMsفي نبضات تطبيق WhatsApp Web، ويتحكمconnectTimeoutMsفي مهلة مصافحة الفتح، ويتحكمdefaultQueryTimeoutMsفي انتظار استعلامات Baileys بالإضافة إلى حدود عمليات الإرسال/الحضور الصادرة المحلية وإيصالات القراءة الواردة في OpenClaw. - تتطلب الإرسالات الصادرة مستمع WhatsApp نشطًا للحساب الهدف.
- تُرفق إرسالات المجموعات بيانات ذكر وصفية أصلية لرموز
@+<digits>و@<digits>في النص وتسميات الوسائط عندما يطابق الرمز بيانات مشارك WhatsApp الوصفية الحالية، بما في ذلك المجموعات المدعومة بـ LID. - يتم تجاهل دردشات الحالة والبث (
@status,@broadcast). - يتبع مراقب إعادة الاتصال نشاط نقل WhatsApp Web، وليس حجم رسائل التطبيق الواردة فقط: تبقى جلسات الأجهزة المرتبطة الهادئة عاملة أثناء استمرار إطارات النقل، لكن توقف النقل يفرض إعادة الاتصال قبل مسار قطع الاتصال البعيد اللاحق بوقت كاف.
- تستخدم الدردشات المباشرة قواعد جلسة الرسائل المباشرة (
session.dmScope؛ الافتراضيmainيدمج الرسائل المباشرة في جلسة الوكيل الرئيسية). - جلسات المجموعات معزولة (
agent:<agentId>:whatsapp:group:<jid>). - يمكن أن تكون قنوات/نشرات WhatsApp أهدافًا صادرة صريحة مع JID الأصلي
@newsletter. تستخدم إرسالات النشرات الصادرة بيانات جلسة القناة الوصفية (agent:<agentId>:whatsapp:channel:<jid>) بدل دلالات جلسة الرسائل المباشرة. - يحترم نقل WhatsApp Web متغيرات بيئة الوكيل القياسية على مضيف Gateway (
HTTPS_PROXY,HTTP_PROXY,NO_PROXY/ المتغيرات الصغيرة). فضّل إعداد الوكيل على مستوى المضيف بدل إعدادات وكيل WhatsApp الخاصة بالقناة. - عند تفعيل
messages.removeAckAfterReply، يمسح OpenClaw تفاعل إقرار WhatsApp بعد تسليم رد مرئي.
مطالبات الموافقة
يمكن لـ WhatsApp عرض مطالبات موافقة التنفيذ وPlugin باستخدام تفاعلات👍 / 👎. يتحكم في التسليم
إعداد إعادة توجيه الموافقات في المستوى الأعلى:
approvals.exec و approvals.plugin مستقلان. تفعيل WhatsApp كقناة يربط
النقل فقط؛ ولا يرسل مطالبات موافقة إلا إذا كانت عائلة الموافقة المطابقة مفعلة
وتوجّه إلى WhatsApp. يسلّم وضع الجلسة موافقات الرموز التعبيرية الأصلية فقط للموافقات التي
تنشأ من WhatsApp. يستخدم وضع الهدف مسار إعادة التوجيه المشترك لأهداف WhatsApp
الصريحة ولا ينشئ توسعًا منفصلًا لرسائل مباشرة إلى الموافقين.
تتطلب تفاعلات موافقة WhatsApp موافقين صريحين من WhatsApp من allowFrom أو "*".
يتحكم defaultTo في أهداف الرسائل الافتراضية العادية؛ وليس موافقًا للموافقة. لا تزال
أوامر /approve اليدوية تمر عبر مسار تخويل مرسل WhatsApp العادي قبل
حل الموافقة.
خطافات Plugin والخصوصية
يمكن أن تحتوي رسائل WhatsApp الواردة على محتوى رسائل شخصية، وأرقام هواتف، ومعرّفات مجموعات، وأسماء مرسلين، وحقول ربط للجلسات. لهذا السبب، لا يبث WhatsApp حِمولات hook الواردةmessage_received إلى Plugins
إلا إذا اخترت ذلك صراحة:
التحكم في الوصول والتفعيل
- DM policy
- Group policy + allowlists
- Mentions + /activation
channels.whatsapp.dmPolicy في الوصول إلى المحادثات المباشرة:pairing(الافتراضي)allowlistopen(يتطلب أن يتضمنallowFromالقيمة"*")disabled
allowFrom أرقامًا بنمط E.164 (تُطبّع داخليًا).allowFrom هو قائمة تحكم في وصول مرسلي الرسائل المباشرة. ولا يقيّد الإرسال الصادر الصريح إلى JIDs مجموعات WhatsApp أو JIDs قنوات @newsletter.تجاوز الحسابات المتعددة: تكون channels.whatsapp.accounts.<id>.dmPolicy (وallowFrom) أسبق من الافتراضيات على مستوى القناة لذلك الحساب.تفاصيل سلوك وقت التشغيل:- تُحفظ عمليات الاقتران في مخزن السماح للقناة وتُدمج مع
allowFromالمكوّن - تستخدم الأتمتة المجدولة ومستلم Heartbeat الاحتياطي أهداف تسليم صريحة أو
allowFromالمكوّن؛ موافقات اقتران الرسائل المباشرة ليست مستلمين ضمنيين لـ Cron أو Heartbeat - إذا لم تُكوّن أي قائمة سماح، يُسمح بالرقم الذاتي المرتبط افتراضيًا
- لا يقرن OpenClaw تلقائيًا الرسائل المباشرة الصادرة
fromMe(الرسائل التي ترسلها إلى نفسك من الجهاز المرتبط)
ارتباطات ACP المكوّنة
يدعم WhatsApp ارتباطات ACP دائمة باستخدام إدخالاتbindings[] في المستوى الأعلى:
- تطابق المحادثات المباشرة أرقام E.164 مثل
+15555550123. - تطابق المجموعات JIDs مجموعات WhatsApp مثل
120363424282127706@g.us. - تعمل قوائم سماح المجموعات، وسياسة المرسل، وبوابة الإشارة أو التفعيل قبل أن يضمن OpenClaw وجود جلسة ACP المكوّنة.
- يملك ارتباط ACP مكوّن ومطابق المسار. لا تفرّع مجموعات بث WhatsApp تلك الجولة إلى جلسات WhatsApp عادية.
سلوك الرقم الشخصي والمحادثة الذاتية
عندما يكون الرقم الذاتي المرتبط موجودًا أيضًا فيallowFrom، تُفعّل وسائل حماية المحادثة الذاتية في WhatsApp:
- تخطي إيصالات القراءة لجولات المحادثة الذاتية
- تجاهل سلوك التشغيل التلقائي عبر mention-JID الذي كان سيؤدي بخلاف ذلك إلى تنبيه نفسك
- إذا لم يُعيّن
messages.responsePrefix، تكون ردود المحادثة الذاتية افتراضيًا[{identity.name}]أو[openclaw]
تطبيع الرسائل والسياق
Inbound envelope + reply context
Inbound envelope + reply context
ReplyToId، ReplyToBody، ReplyToSender، وJID/E.164 المرسل).
عندما يكون هدف الرد المقتبس وسائط قابلة للتنزيل، يحفظها OpenClaw عبر
مخزن الوسائط الواردة العادي ويعرضها كـ MediaPath/MediaType حتى
يتمكن الوكيل من فحص الصورة المشار إليها بدلًا من رؤية
<media:image> فقط.Media placeholders and location/contact extraction
Media placeholders and location/contact extraction
<media:image><media:video><media:audio><media:document><media:sticker>
<media:audio> فقط، ولذلك يمكن أن يؤدي ذكر البوت في ملاحظة الصوت
إلى تشغيل الرد. إذا ظل النص لا يذكر البوت، فيُحتفظ بالنص في سجل المجموعة المعلق بدلًا من العنصر النائب الخام.تستخدم أجسام الموقع نص إحداثيات موجزًا. تُعرض تسميات/تعليقات الموقع وتفاصيل جهة الاتصال/vCard كبيانات وصفية غير موثوقة داخل أسوار، وليس كنص مطالبة مضمّن.Pending group history injection
Pending group history injection
- الحد الافتراضي:
50 - الإعداد:
channels.whatsapp.historyLimit - الاحتياطي:
messages.groupChat.historyLimit 0يعطّل ذلك
[Chat messages since your last reply - for context][Current message - respond to this]
Read receipts
Read receipts
التسليم، والتقسيم إلى أجزاء، والوسائط
Text chunking
Text chunking
- حد الجزء الافتراضي:
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"- يفضّل وضع
newlineحدود الفقرات (الأسطر الفارغة)، ثم يعود إلى التقسيم الآمن حسب الطول
Outbound media behavior
Outbound media behavior
- يدعم حِمولات الصور، والفيديو، والصوت (ملاحظة صوتية PTT)، والمستندات
- تُرسل الوسائط الصوتية عبر حمولة Baileys
audioمعptt: true، ولذلك تعرضها عملاء WhatsApp كملاحظة صوتية اضغط للتحدث - تحافظ حِمولات الرد على
audioAsVoice؛ ويبقى خرج ملاحظة الصوت من TTS لـ WhatsApp على مسار PTT هذا حتى عندما يعيد المزوّد MP3 أو WebM - يُرسل صوت Ogg/Opus الأصلي كـ
audio/ogg; codecs=opusلتوافق ملاحظات الصوت - يُحوّل الصوت غير Ogg، بما في ذلك خرج Microsoft Edge TTS بصيغة MP3/WebM، باستخدام
ffmpegإلى Ogg/Opus أحادي القناة بتردد 48 كيلوهرتز قبل تسليم PTT - يرسل
/tts latestأحدث رد من المساعد كملاحظة صوتية واحدة ويمنع تكرار الإرسال للرد نفسه؛ يتحكم/tts chat on|off|defaultفي TTS التلقائي لمحادثة WhatsApp الحالية - يُدعم تشغيل GIF المتحرك عبر
gifPlayback: trueعند إرسال الفيديو - يرسل
forceDocument/asDocumentالصور وGIFs والفيديوهات الصادرة عبر حمولة مستند Baileys لتجنب ضغط وسائط WhatsApp مع الحفاظ على اسم الملف المحلول ونوع MIME - تُطبق التسميات التوضيحية على أول عنصر وسائط عند إرسال حِمولات رد متعددة الوسائط، باستثناء أن ملاحظات الصوت PTT ترسل الصوت أولًا والنص المرئي بشكل منفصل لأن عملاء WhatsApp لا يعرضون تسميات ملاحظات الصوت التوضيحية باستمرار
- يمكن أن يكون مصدر الوسائط HTTP(S)، أو
file://، أو مسارات محلية
Media size limits and fallback behavior
Media size limits and fallback behavior
- سقف حفظ الوسائط الواردة:
channels.whatsapp.mediaMaxMb(الافتراضي50) - سقف إرسال الوسائط الصادرة:
channels.whatsapp.mediaMaxMb(الافتراضي50) - تستخدم التجاوزات لكل حساب
channels.whatsapp.accounts.<accountId>.mediaMaxMb - تُحسّن الصور تلقائيًا (مسح تغيير الحجم/الجودة) لتلائم الحدود ما لم يطلب
forceDocument/asDocumentالتسليم كمستند - عند فشل إرسال الوسائط، يرسل احتياطي العنصر الأول تحذيرًا نصيًا بدلًا من إسقاط الرد بصمت
اقتباس الردود
يدعم WhatsApp اقتباس الردود الأصلي، حيث تقتبس الردود الصادرة الرسالة الواردة بشكل مرئي. تحكم به باستخدامchannels.whatsapp.replyToMode.
| القيمة | السلوك |
|---|---|
"off" | لا تقتبس أبدًا؛ أرسل كرسالة عادية |
"first" | اقتبس جزء الرد الصادر الأول فقط |
"all" | اقتبس كل جزء من الرد الصادر |
"batched" | اقتبس الردود المجمعة في الطابور مع ترك الردود الفورية غير مقتبسة |
"off". تستخدم التجاوزات لكل حساب channels.whatsapp.accounts.<id>.replyToMode.
مستوى التفاعل
يتحكمchannels.whatsapp.reactionLevel في مدى استخدام الوكيل لتفاعلات الرموز التعبيرية على WhatsApp:
| المستوى | تفاعلات الإقرار | تفاعلات يبدأها الوكيل | الوصف |
|---|---|---|---|
"off" | لا | لا | لا توجد تفاعلات إطلاقًا |
"ack" | نعم | لا | تفاعلات الإقرار فقط (إيصال قبل الرد) |
"minimal" | نعم | نعم (محافظة) | إقرار + تفاعلات الوكيل مع إرشادات محافظة |
"extensive" | نعم | نعم (مستحسنة) | إقرار + تفاعلات الوكيل مع إرشادات مستحسنة |
"minimal".
تستخدم التجاوزات لكل حساب channels.whatsapp.accounts.<id>.reactionLevel.
تفاعلات الإقرار
يدعم WhatsApp تفاعلات الإقرار الفورية عند استلام الوارد عبرchannels.whatsapp.ackReaction.
تُقيّد تفاعلات الإقرار بواسطة reactionLevel — إذ تُحجب عندما يكون reactionLevel هو "off".
- يُرسل فورًا بعد قبول الوارد (قبل الرد)
- إذا كان
ackReactionموجودًا من دونemoji، يستخدم WhatsApp رمز الهوية التعبيري للوكيل الموجَّه إليه، مع الرجوع إلى ”👀”؛ احذفackReactionأو عيّنemoji: ""لعدم إرسال أي تفاعل إقرار - تُسجَّل الإخفاقات لكنها لا تمنع تسليم الرد العادي
- يتفاعل وضع المجموعة
mentionsفي الأدوار التي تُشغَّل بالإشارة؛ ويعمل تفعيل المجموعةalwaysكتجاوز لهذا الفحص - يستخدم WhatsApp
channels.whatsapp.ackReaction(لا يُستخدمmessages.ackReactionالقديم هنا)
تفاعلات حالة دورة الحياة
عيّنmessages.statusReactions.enabled: true للسماح لـ WhatsApp باستبدال تفاعل الإقرار أثناء الدور بدلًا من ترك رمز تعبيري ثابت للإيصال. عند التفعيل، يستخدم OpenClaw خانة تفاعل الرسالة الواردة نفسها لحالات دورة الحياة مثل في قائمة الانتظار، والتفكير، ونشاط الأداة، وCompaction، والانتهاء، والخطأ.
- لا يزال
channels.whatsapp.ackReactionيتحكم في أهلية تفاعلات الحالة للرسائل المباشرة والمجموعات. - يستخدم تفاعل حالة قائمة الانتظار رمز الإقرار الفعّال نفسه المستخدم في تفاعلات الإقرار العادية.
- لدى WhatsApp خانة تفاعل واحدة للبوت لكل رسالة، لذلك تستبدل تحديثات دورة الحياة التفاعل الحالي في مكانه.
- يمسح
messages.removeAckAfterReply: trueتفاعل الحالة النهائي بعد مدة الاحتفاظ المُهيأة للانتهاء/الخطأ. - تشمل فئات رموز الأدوات التعبيرية
toolوcodingوwebوdeployوbuildوconcierge.
الحسابات المتعددة وبيانات الاعتماد
اختيار الحساب والإعدادات الافتراضية
اختيار الحساب والإعدادات الافتراضية
- تأتي معرّفات الحسابات من
channels.whatsapp.accounts - اختيار الحساب الافتراضي:
defaultإذا كان موجودًا، وإلا فأول معرّف حساب مُهيأ (بعد الفرز) - تُطبَّع معرّفات الحسابات داخليًا للبحث
مسارات بيانات الاعتماد والتوافق القديم
مسارات بيانات الاعتماد والتوافق القديم
- مسار المصادقة الحالي:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - ملف النسخة الاحتياطية:
creds.json.bak - لا تزال المصادقة الافتراضية القديمة في
~/.openclaw/credentials/معروفة/مُرحَّلة لتدفقات الحساب الافتراضي
سلوك تسجيل الخروج
سلوك تسجيل الخروج
openclaw channels logout --channel whatsapp [--account <id>] حالة مصادقة WhatsApp لذلك الحساب.عندما يكون Gateway قابلًا للوصول، يوقف تسجيل الخروج أولًا مستمع WhatsApp الحي للحساب المحدد حتى لا تواصل الجلسة المرتبطة تلقي الرسائل حتى إعادة التشغيل التالية. يوقف openclaw channels remove --channel whatsapp أيضًا المستمع الحي قبل تعطيل إعدادات الحساب أو حذفها.في أدلة المصادقة القديمة، يُحتفظ بـ oauth.json بينما تُزال ملفات مصادقة Baileys.الأدوات والإجراءات وكتابات الإعدادات
- يتضمن دعم أداة الوكيل إجراء تفاعل WhatsApp (
react). - بوابات الإجراءات:
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- كتابات الإعدادات التي تبدأها القناة مفعّلة افتراضيًا (عطّلها عبر
channels.whatsapp.configWrites=false).
استكشاف الأخطاء وإصلاحها
غير مرتبط (يتطلب QR)
غير مرتبط (يتطلب QR)
مرتبط لكن مفصول / حلقة إعادة اتصال
مرتبط لكن مفصول / حلقة إعادة اتصال
status=408 Request Time-out Connection was lost بشكل متكرر، فاضبط
توقيتات مقبس Baileys ضمن web.whatsapp. ابدأ بتقصير
keepAliveIntervalMs ليصبح أقل من مهلة الخمول في شبكتك وزيادة
connectTimeoutMs على الروابط البطيئة أو كثيرة الفقد:~/.openclaw/logs/whatsapp-health.log يقول Gateway inactive لكن
openclaw gateway status وopenclaw channels status --probe يُظهران أن
Gateway وWhatsApp سليمان، فشغّل openclaw doctor. على Linux، يحذّر doctor
من إدخالات crontab القديمة التي لا تزال تستدعي
~/.openclaw/bin/ensure-whatsapp.sh؛ أزل هذه الإدخالات القديمة باستخدام
crontab -e لأن cron قد يفتقر إلى بيئة ناقل مستخدم systemd وقد
يجعل ذلك السكربت القديم يسيء الإبلاغ عن صحة Gateway.عند الحاجة، أعد الربط باستخدام channels login.تنتهي مهلة تسجيل الدخول عبر QR خلف وكيل
تنتهي مهلة تسجيل الدخول عبر QR خلف وكيل
openclaw channels login --channel whatsapp قبل عرض رمز QR صالح للاستخدام مع status=408 Request Time-out أو انقطاع مقبس TLS.يستخدم تسجيل دخول WhatsApp Web بيئة الوكيل القياسية لمضيف Gateway (HTTPS_PROXY وHTTP_PROXY والمتغيرات بالحروف الصغيرة وNO_PROXY). تحقّق من أن عملية Gateway ترث بيئة الوكيل وأن NO_PROXY لا يطابق mmg.whatsapp.net.لا يوجد مستمع نشط عند الإرسال
لا يوجد مستمع نشط عند الإرسال
يظهر الرد في النص المنسوخ لكن ليس في WhatsApp
يظهر الرد في النص المنسوخ لكن ليس في WhatsApp
auto-reply delivery failed أو auto-reply was not accepted by WhatsApp provider.يتم تجاهل رسائل المجموعة بشكل غير متوقع
يتم تجاهل رسائل المجموعة بشكل غير متوقع
groupPolicygroupAllowFrom/allowFrom- إدخالات قائمة السماح
groups - بوابة الإشارات (
requireMention+ أنماط الإشارات) - المفاتيح المكررة في
openclaw.json(JSON5): تتجاوز الإدخالات اللاحقة الإدخالات السابقة، لذلك احتفظ بـgroupPolicyواحد فقط لكل نطاق
channels.whatsapp.groups موجودًا، فلا يزال WhatsApp قادرًا على ملاحظة الرسائل من مجموعات أخرى، لكن OpenClaw يسقطها قبل توجيه الجلسة. أضف JID المجموعة إلى channels.whatsapp.groups أو أضف groups["*"] لقبول جميع المجموعات مع إبقاء تخويل المرسِل تحت groupPolicy وgroupAllowFrom.تحذير وقت تشغيل Bun
تحذير وقت تشغيل Bun
مطالبات النظام
يدعم WhatsApp مطالبات نظام بأسلوب Telegram للمجموعات والمحادثات المباشرة عبر خريطتيgroups وdirect.
هرمية الحل لرسائل المجموعات:
تُحدَّد خريطة groups الفعّالة أولًا: إذا عرّف الحساب groups الخاصة به، فإنها تستبدل بالكامل خريطة groups الجذرية (من دون دمج عميق). ثم يُجرى بحث المطالبة على الخريطة المفردة الناتجة:
- مطالبة النظام الخاصة بالمجموعة (
groups["<groupId>"].systemPrompt): تُستخدم عندما يكون إدخال المجموعة المحددة موجودًا في الخريطة و يكون مفتاحsystemPromptالخاص به معرّفًا. إذا كانsystemPromptسلسلة فارغة ("")، يُكبَت حرف البدل ولا تُطبَّق أي مطالبة نظام. - مطالبة نظام حرف البدل للمجموعات (
groups["*"].systemPrompt): تُستخدم عندما يكون إدخال المجموعة المحددة غائبًا تمامًا عن الخريطة، أو عندما يكون موجودًا لكنه لا يعرّف مفتاحsystemPrompt.
direct الفعّالة أولًا: إذا عرّف الحساب direct الخاصة به، فإنها تستبدل بالكامل خريطة direct الجذرية (من دون دمج عميق). ثم يُجرى بحث المطالبة على الخريطة المفردة الناتجة:
- مطالبة النظام الخاصة بالمباشر (
direct["<peerId>"].systemPrompt): تُستخدم عندما يكون إدخال النظير المحدد موجودًا في الخريطة و يكون مفتاحsystemPromptالخاص به معرّفًا. إذا كانsystemPromptسلسلة فارغة ("")، يُكبَت حرف البدل ولا تُطبَّق أي مطالبة نظام. - مطالبة نظام حرف البدل للمباشر (
direct["*"].systemPrompt): تُستخدم عندما يكون إدخال النظير المحدد غائبًا تمامًا عن الخريطة، أو عندما يكون موجودًا لكنه لا يعرّف مفتاحsystemPrompt.
dms وعاء التجاوز الخفيف للسجل لكل رسالة مباشرة (dms.<id>.historyLimit). تعيش تجاوزات المطالبات ضمن direct.groups الجذرية عمدًا لكل الحسابات في إعداد متعدد الحسابات، حتى الحسابات التي لا تعرّف groups خاصة بها، لمنع بوت من تلقي رسائل مجموعة لمجموعات لا ينتمي إليها. لا يطبّق WhatsApp هذا الحارس: تُورَّث groups الجذرية وdirect الجذرية دائمًا بواسطة الحسابات التي لا تعرّف تجاوزًا على مستوى الحساب، بغض النظر عن عدد الحسابات المُهيأة. في إعداد WhatsApp متعدد الحسابات، إذا أردت مطالبات مجموعة أو مباشرة لكل حساب، فعرّف الخريطة الكاملة ضمن كل حساب صراحة بدلًا من الاعتماد على الإعدادات الافتراضية على مستوى الجذر.
سلوك مهم:
channels.whatsapp.groupsهو خريطة إعدادات لكل مجموعة وقائمة سماح للمجموعات على مستوى المحادثة في الوقت نفسه. في نطاق الجذر أو الحساب، تعنيgroups["*"]أن “كل المجموعات مقبولة” لذلك النطاق.- لا تضف
systemPromptلمجموعة بحرف بدل إلا عندما تريد بالفعل أن يقبل ذلك النطاق كل المجموعات. إذا كنت لا تزال تريد أن تكون مجموعة ثابتة فقط من معرّفات المجموعات مؤهلة، فلا تستخدمgroups["*"]كافتراضي للمطالبة. بدلًا من ذلك، كرر المطالبة في كل إدخال مجموعة مسموح به صراحة. - قبول المجموعة وتخويل المرسِل فحصان منفصلان. يوسّع
groups["*"]مجموعة المجموعات التي يمكنها الوصول إلى معالجة المجموعات، لكنه لا يخول بحد ذاته كل مرسِل في تلك المجموعات. لا يزال وصول المرسِل مضبوطًا بشكل منفصل بواسطةchannels.whatsapp.groupPolicyوchannels.whatsapp.groupAllowFrom. - لا يملك
channels.whatsapp.directالأثر الجانبي نفسه للرسائل المباشرة. لا يوفرdirect["*"]إلا إعداد محادثة مباشرة افتراضيًا بعد قبول الرسالة المباشرة بالفعل بواسطةdmPolicyإضافة إلىallowFromأو قواعد مخزن الاقتران.
مؤشرات مرجع التكوين
المرجع الأساسي: حقول WhatsApp عالية الأهمية:- الوصول:
dmPolicy،allowFrom،groupPolicy،groupAllowFrom،groups - التسليم:
textChunkLimit،chunkMode،mediaMaxMb،sendReadReceipts،ackReaction،reactionLevel - تعدد الحسابات:
accounts.<id>.enabled،accounts.<id>.authDir، التجاوزات على مستوى الحساب - العمليات:
configWrites،debounceMs،web.enabled،web.heartbeatSeconds،web.reconnect.*،web.whatsapp.* - سلوك الجلسة:
session.dmScope،historyLimit،dmHistoryLimit،dms.<id>.historyLimit - المطالبات:
groups.<id>.systemPrompt،groups["*"].systemPrompt،direct.<id>.systemPrompt،direct["*"].systemPrompt