channels.*. تغطي الوصول إلى الرسائل المباشرة والمجموعات،
وإعدادات الحسابات المتعددة، وبوابة الإشارات، ومفاتيح كل قناة لـ Slack وDiscord
وTelegram وWhatsApp وMatrix وiMessage وبقية Plugins القنوات المضمّنة.
بالنسبة إلى الوكلاء والأدوات ووقت تشغيل Gateway والمفاتيح العليا الأخرى، راجع
مرجع التهيئة.
القنوات
تبدأ كل قناة تلقائياً عند وجود قسم التهيئة الخاص بها (ما لم تكنenabled: false).
الوصول إلى الرسائل المباشرة والمجموعات
تدعم كل القنوات سياسات الرسائل المباشرة وسياسات المجموعات:| سياسة الرسائل المباشرة | السلوك |
|---|---|
pairing (الافتراضي) | يحصل المرسلون غير المعروفين على رمز اقتران لمرة واحدة؛ ويجب أن يوافق المالك |
allowlist | المرسلون الموجودون في allowFrom فقط (أو في مخزن السماح المقترن) |
open | السماح بكل الرسائل المباشرة الواردة (يتطلب allowFrom: ["*"]) |
disabled | تجاهل كل الرسائل المباشرة الواردة |
| سياسة المجموعة | السلوك |
|---|---|
allowlist (الافتراضي) | المجموعات المطابقة لقائمة السماح المهيأة فقط |
open | تجاوز قوائم السماح للمجموعات (مع استمرار تطبيق بوابة الإشارات) |
disabled | حظر كل رسائل المجموعات/الغرف |
يضبط
channels.defaults.groupPolicy القيمة الافتراضية عندما تكون groupPolicy الخاصة بالمزوّد غير مضبوطة.
تنتهي صلاحية رموز الاقتران بعد ساعة واحدة. وتُحد طلبات اقتران الرسائل المباشرة المعلقة عند 3 لكل قناة.
إذا كانت كتلة مزوّد مفقودة بالكامل (channels.<provider> غير موجودة)، تعود سياسة مجموعات وقت التشغيل إلى allowlist (إغلاق آمن عند الفشل) مع تحذير عند بدء التشغيل.تجاوزات نموذج القناة
استخدمchannels.modelByChannel لتثبيت معرّفات قنوات محددة أو أقران رسائل مباشرة على نموذج. تقبل القيم provider/model أو الأسماء البديلة للنماذج المهيأة. يُطبّق تعيين القناة عندما لا تملك الجلسة تجاوزاً للنموذج مسبقاً (مثلاً، مضبوطاً عبر /model).
بالنسبة إلى محادثات المجموعات/السلاسل، تكون المفاتيح معرّفات مجموعات خاصة بالقناة أو معرّفات موضوعات أو أسماء قنوات. وبالنسبة إلى محادثات الرسائل المباشرة، تكون المفاتيح معرّفات أقران مشتقة من هوية مرسل القناة (nativeDirectUserId أو origin.from أو origin.to أو OriginatingTo أو From أو SenderId). يعتمد شكل المفتاح الدقيق على القناة:
| القناة | شكل مفتاح الرسالة المباشرة | مثال |
|---|---|---|
| Slack | user:U... | user:U12345 |
| Telegram | معرّف المستخدم الخام | 123456789 |
| Discord | معرّف المستخدم الخام | 987654321 |
| رقم الهاتف أو JID | 15551234567 | |
| Matrix | معرّف مستخدم Matrix | @user:matrix.org |
| Feishu | feishu:ou_... | feishu:ou_a8b6cab7e945387de5f253775d9b4d85 |
افتراضيات القناة وHeartbeat
استخدمchannels.defaults لسلوك سياسة المجموعات وHeartbeat المشترك عبر المزوّدين:
channels.defaults.groupPolicy: سياسة المجموعة الاحتياطية عندما تكونgroupPolicyعلى مستوى المزوّد غير مضبوطة.channels.defaults.contextVisibility: وضع رؤية السياق التكميلي الافتراضي لكل القنوات. القيم:all(الافتراضي، تضمين كل سياق الاقتباس/السلسلة/السجل)، وallowlist(تضمين السياق من المرسلين الموجودين في قائمة السماح فقط)، وallowlist_quote(مثل قائمة السماح لكن مع إبقاء سياق الاقتباس/الرد الصريح). التجاوز لكل قناة:channels.<channel>.contextVisibility.channels.defaults.heartbeat.showOk: تضمين حالات القنوات السليمة في مخرجات Heartbeat.channels.defaults.heartbeat.showAlerts: تضمين حالات التدهور/الأخطاء في مخرجات Heartbeat.channels.defaults.heartbeat.useIndicator: عرض مخرجات Heartbeat بأسلوب مؤشرات مضغوط.
- تهيئ إدخالات
bindings[]العليا ذاتtype: "acp"روابط ACP دائمة لرسائل ومجموعات WhatsApp المباشرة. استخدم رقماً مباشراً بصيغة E.164 أو JID لمجموعة WhatsApp فيmatch.peer.id. دلالات الحقول مشتركة في وكلاء ACP.
WhatsApp متعدد الحسابات
WhatsApp متعدد الحسابات
- تستخدم الأوامر الصادرة الحساب
defaultافتراضياً إذا كان موجوداً؛ وإلا تستخدم أول معرّف حساب مهيأ (بعد الفرز). - يتجاوز
channels.whatsapp.defaultAccountالاختياري اختيار الحساب الافتراضي الاحتياطي هذا عندما يطابق معرّف حساب مهيأ. - يُرحّل دليل مصادقة Baileys القديم أحادي الحساب بواسطة
openclaw doctorإلىwhatsapp/default. - تجاوزات كل حساب:
channels.whatsapp.accounts.<id>.sendReadReceiptsوchannels.whatsapp.accounts.<id>.dmPolicyوchannels.whatsapp.accounts.<id>.allowFrom.
Telegram
- رمز البوت:
channels.telegram.botTokenأوchannels.telegram.tokenFile(ملف عادي فقط؛ تُرفض الروابط الرمزية)، معTELEGRAM_BOT_TOKENكاحتياطي للحساب الافتراضي. apiRootهو جذر Telegram Bot API فقط. استخدمhttps://api.telegram.orgأو جذر الاستضافة الذاتية/الوكيل لديك، وليسhttps://api.telegram.org/bot<TOKEN>؛ يزيلopenclaw doctor --fixلاحقة/bot<TOKEN>الزائدة بالخطأ.- يتجاوز
channels.telegram.defaultAccountالاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مهيأ. - في إعدادات الحسابات المتعددة (معرّفا حساب أو أكثر)، اضبط افتراضياً صريحاً (
channels.telegram.defaultAccountأوchannels.telegram.accounts.default) لتجنب التوجيه الاحتياطي؛ يحذرopenclaw doctorعندما يكون هذا مفقوداً أو غير صالح. - يحظر
configWrites: falseعمليات كتابة التهيئة التي يبدأها Telegram (ترحيلات معرّفات المجموعات الفائقة، و/config set|unset). - تهيئ إدخالات
bindings[]العليا ذاتtype: "acp"روابط ACP دائمة لموضوعات المنتدى (استخدمchatId:topic:topicIdالقياسي فيmatch.peer.id). دلالات الحقول مشتركة في وكلاء ACP. - تستخدم معاينات بث Telegram
sendMessage+editMessageText(تعمل في المحادثات المباشرة والجماعية). - سياسة إعادة المحاولة: راجع سياسة إعادة المحاولة.
Discord
- الرمز المميز:
channels.discord.token، معDISCORD_BOT_TOKENكخيار احتياطي للحساب الافتراضي. - تستخدم الاستدعاءات الصادرة المباشرة التي توفر
tokenصريحا لـ Discord ذلك الرمز المميز للاستدعاء؛ وتظل إعدادات إعادة المحاولة/السياسة الخاصة بالحساب مأخوذة من الحساب المحدد في لقطة وقت التشغيل النشطة. - يتجاوز
channels.discord.defaultAccountالاختياري اختيار الحساب الافتراضي عندما يطابق معرف حساب مكوّنا. - استخدم
user:<id>(رسالة مباشرة) أوchannel:<id>(قناة خادم) لأهداف التسليم؛ تُرفض المعرفات الرقمية المجردة. - تكون أسماء الخوادم المختصرة بأحرف صغيرة مع استبدال المسافات بـ
-؛ وتستخدم مفاتيح القنوات الاسم المختصر (من دون#). يُفضّل استخدام معرفات الخوادم. - تُتجاهل الرسائل التي كتبها الروبوت افتراضيا. يفعّلها
allowBots: true؛ استخدمallowBots: "mentions"لقبول رسائل الروبوت التي تذكر الروبوت فقط (مع استمرار تصفية رسائله الذاتية). - يمكن للقنوات التي تدعم الرسائل الواردة المكتوبة بواسطة الروبوت استخدام حماية حلقة الروبوت المشتركة. اضبط
channels.defaults.botLoopProtectionلميزانيات الأزواج الأساسية، ثم تجاوز القناة أو الحساب فقط عندما يحتاج سطح واحد إلى حدود مختلفة. - يُسقط
channels.discord.guilds.<id>.ignoreOtherMentions(وتجاوزات القنوات) الرسائل التي تذكر مستخدما آخر أو دورا آخر ولكن لا تذكر الروبوت (باستثناء @everyone/@here). - يربط
channels.discord.mentionAliasesنص@handleالصادر المستقر بمعرفات مستخدمي Discord قبل الإرسال، بحيث يمكن ذكر الزملاء المعروفين بصورة حتمية حتى عندما تكون ذاكرة التخزين المؤقت العابرة للدليل فارغة. توجد تجاوزات كل حساب ضمنchannels.discord.accounts.<accountId>.mentionAliases. - يقسّم
maxLinesPerMessage(الافتراضي 17) الرسائل الطويلة حتى عندما تكون أقل من 2000 حرف. - يكون
channels.discord.suppressEmbedsافتراضياtrue، لذلك لا تتوسع عناوين URL الصادرة إلى معاينات روابط Discord ما لم يُعطّل ذلك. تظل حمولاتembedsالصريحة تُرسل بشكل طبيعي؛ ويمكن لاستدعاءات الأدوات لكل رسالة التجاوز باستخدامsuppressEmbeds. - يتحكم
channels.discord.threadBindingsفي توجيه Discord المرتبط بالخيوط:enabled: تجاوز Discord لميزات الجلسات المرتبطة بالخيوط (/focusو/unfocusو/agentsو/session idleو/session max-ageوالتسليم/التوجيه المرتبط)idleHours: تجاوز Discord لإلغاء التركيز التلقائي بسبب عدم النشاط بالساعات (0يعطّل)maxAgeHours: تجاوز Discord للحد الأقصى الصارم للعمر بالساعات (0يعطّل)spawnSessions: مفتاح لـsessions_spawn({ thread: true })وإنشاء/ربط الخيط التلقائي عند إنشاء خيط ACP (الافتراضي:true)defaultSpawnContext: سياق الوكيل الفرعي الأصلي لعمليات الإنشاء المرتبطة بالخيوط ("fork"افتراضيا)
- تُكوّن إدخالات
bindings[]ذات المستوى الأعلى معtype: "acp"ارتباطات ACP دائمة للقنوات والخيوط (استخدم معرف القناة/الخيط فيmatch.peer.id). تشترك دلالات الحقول في وكلاء ACP. - يضبط
channels.discord.ui.components.accentColorلون التمييز لحاويات مكونات Discord v2. - يتحكم
channels.discord.agentComponents.ttlMsفي مدة بقاء استدعاءات مكونات Discord المرسلة مسجلة. القيمة الافتراضية هي1800000(30 دقيقة)، والحد الأقصى هو86400000(24 ساعة)، وتوجد تجاوزات كل حساب ضمنchannels.discord.accounts.<accountId>.agentComponents.ttlMs. تُبقي القيم الأطول الأزرار/القوائم/النماذج القديمة قابلة للاستخدام لمدة أطول، لذلك فضّل أقصر مدة TTL تناسب سير العمل. - يفعّل
channels.discord.voiceمحادثات قنوات الصوت في Discord وتجاوزات اختيارية للانضمام التلقائي + LLM + TTS. تترك إعدادات Discord النصية فقط الصوت متوقفا افتراضيا؛ اضبطchannels.discord.voice.enabled=trueللاشتراك. - يتجاوز
channels.discord.voice.modelاختياريا نموذج LLM المستخدم لاستجابات قنوات الصوت في Discord. - يمرر
channels.discord.voice.daveEncryptionوchannels.discord.voice.decryptionFailureToleranceإلى خيارات DAVE في@discordjs/voice(trueو24افتراضيا). - يتحكم
channels.discord.voice.connectTimeoutMsفي انتظار Ready الأولي لـ@discordjs/voiceلمحاولات/vc joinوالانضمام التلقائي (30000افتراضيا). - يتحكم
channels.discord.voice.reconnectGraceMsفي المدة التي يمكن أن تستغرقها جلسة صوت منفصلة للدخول في إشارات إعادة الاتصال قبل أن يدمرها OpenClaw (15000افتراضيا). - لا تتم مقاطعة تشغيل صوت Discord بحدث بدء تحدث مستخدم آخر. لتجنب حلقات التغذية الراجعة، يتجاهل OpenClaw التقاط الصوت الجديد أثناء تشغيل TTS.
- يحاول OpenClaw أيضا استعادة استقبال الصوت بمغادرة جلسة صوت وإعادة الانضمام إليها بعد تكرار فشل فك التشفير.
channels.discord.streamingهو مفتاح وضع البث المعياري. يستخدم Discord افتراضياstreaming.mode: "progress"بحيث يظهر تقدم الأدوات/العمل في رسالة معاينة واحدة محررة؛ اضبطstreaming.mode: "off"لتعطيله. تظل قيمstreamModeالقديمة وقيمstreamingالمنطقية أسماء مستعارة وقت التشغيل؛ شغّلopenclaw doctor --fixلإعادة كتابة الإعدادات المحفوظة.- يربط
channels.discord.autoPresenceإتاحة وقت التشغيل بحالة حضور الروبوت (سليم => متصل، متدهور => خامل، مستنفد => عدم الإزعاج) ويسمح بتجاوزات اختيارية لنص الحالة. - يعيد
channels.discord.dangerouslyAllowNameMatchingتفعيل مطابقة الاسم/الوسم القابلة للتغيير (وضع توافق لكسر الزجاج). channels.discord.execApprovals: تسليم موافقات التنفيذ الأصلية في Discord وتفويض الموافقين.enabled:trueأوfalseأو"auto"(الافتراضي). في الوضع التلقائي، تنشط موافقات التنفيذ عندما يمكن حل الموافقين منapproversأوcommands.ownerAllowFrom.approvers: معرفات مستخدمي Discord المسموح لهم بالموافقة على طلبات التنفيذ. يعود إلىcommands.ownerAllowFromعند حذفه.agentFilter: قائمة سماح اختيارية لمعرفات الوكلاء. احذفها لتمرير الموافقات لجميع الوكلاء.sessionFilter: أنماط اختيارية لمفاتيح الجلسات (سلسلة فرعية أو تعبير نمطي).target: مكان إرسال مطالبات الموافقة. يرسل"dm"(الافتراضي) إلى الرسائل المباشرة للموافق، ويرسل"channel"إلى القناة الأصلية، ويرسل"both"إلى الاثنين معا. عندما يتضمن الهدف"channel"، لا تكون الأزرار قابلة للاستخدام إلا من قِبل الموافقين المحلولين.cleanupAfterResolve: عندما تكونtrue، تحذف رسائل الموافقة المباشرة بعد الموافقة أو الرفض أو انتهاء المهلة.
off (لا شيء)، own (رسائل الروبوت، الافتراضي)، all (كل الرسائل)، allowlist (من guilds.<id>.users على كل الرسائل).
Google Chat
- JSON حساب الخدمة: مضمّن (
serviceAccount) أو قائم على ملف (serviceAccountFile). - SecretRef لحساب الخدمة مدعوم أيضا (
serviceAccountRef). - بدائل البيئة:
GOOGLE_CHAT_SERVICE_ACCOUNTأوGOOGLE_CHAT_SERVICE_ACCOUNT_FILE. - استخدم
spaces/<spaceId>أوusers/<userId>لأهداف التسليم. - يعيد
channels.googlechat.dangerouslyAllowNameMatchingتفعيل مطابقة كيان البريد الإلكتروني القابلة للتغيير (وضع توافق لكسر الزجاج).
Slack
- يتطلب وضع Socket كلًا من
botTokenوappToken(SLACK_BOT_TOKEN+SLACK_APP_TOKENلاستخدام حساب fallback الافتراضي من env). - يتطلب وضع HTTP وجود
botTokenبالإضافة إلىsigningSecret(في الجذر أو لكل حساب). - يمرر
socketModeضبط نقل Slack SDK Socket Mode إلى واجهة Bolt receiver API العامة. استخدمه فقط عند التحقيق في مهلة ping/pong أو سلوك websocket القديم. القيمة الافتراضية لـclientPingTimeoutهي15000؛ ولا يتم تمريرserverPingTimeoutوpingPongLoggingEnabledإلا عند ضبطهما. - تقبل
botTokenوappTokenوsigningSecretوuserTokenسلاسل نصية عادية أو كائنات SecretRef. - تعرض لقطات حساب Slack حقول المصدر/الحالة لكل اعتماد، مثل
botTokenSourceوbotTokenStatusوappTokenStatus، وفي وضع HTTP،signingSecretStatus. تعنيconfigured_unavailableأن الحساب مضبوط عبر SecretRef لكن مسار الأمر/التشغيل الحالي لم يتمكن من حل قيمة السر. - يمنع
configWrites: falseعمليات كتابة الإعدادات التي يبدأها Slack. - يتجاوز
channels.slack.defaultAccountالاختياري اختيار الحساب الافتراضي عندما يطابق معرف حساب مضبوطًا. channels.slack.streaming.modeهو مفتاح وضع بث Slack القياسي. يتحكمchannels.slack.streaming.nativeTransportفي نقل البث الأصلي في Slack. تبقى قيمstreamModeالقديمة، وstreamingالمنطقية، وnativeStreamingأسماء بديلة في وقت التشغيل؛ شغّلopenclaw doctor --fixلإعادة كتابة الإعدادات المحفوظة.- يمرر
unfurlLinksوunfurlMediaالقيم المنطقية الخاصة بفك روابط ووسائطchat.postMessageفي Slack لردود البوت. القيمة الافتراضية لـunfurlLinksهيfalseحتى لا تتوسع روابط البوت الصادرة داخل السطر ما لم يتم تفعيل ذلك؛ ويتم حذفunfurlMediaما لم يُضبط. عيّن أيًا من القيمتين فيchannels.slack.accounts.<accountId>لتجاوز قيمة المستوى الأعلى لحساب واحد. - استخدم
user:<id>(DM) أوchannel:<id>لأهداف التسليم.
off، own (الافتراضي)، all، allowlist (من reactionAllowlist).
عزل جلسة الخيط: يكون thread.historyScope لكل خيط (الافتراضي) أو مشتركًا عبر القناة. ينسخ thread.inheritParent نص قناة الأصل إلى الخيوط الجديدة.
- يتطلب البث الأصلي في Slack مع حالة الخيط بأسلوب مساعد Slack “is typing…” هدف خيط للرد. تبقى رسائل DM في المستوى الأعلى خارج الخيط افتراضيًا، لذلك لا يزال بإمكانها البث عبر معاينات منشور مسودة Slack وتحريرها بدلًا من إظهار معاينة البث/الحالة الأصلية بأسلوب الخيط.
- يضيف
typingReactionتفاعلًا مؤقتًا إلى رسالة Slack الواردة أثناء تشغيل الرد، ثم يزيله عند الاكتمال. استخدم اختصار رمز تعبيري في Slack مثل"hourglass_flowing_sand". channels.slack.execApprovals: تسليم عميل الموافقات الأصلي في Slack وتخويل موافق التنفيذ. المخطط نفسه كما في Discord:enabled(true/false/"auto")، وapprovers(معرفات مستخدمي Slack)، وagentFilter، وsessionFilter، وtarget("dm"أو"channel"أو"both"). يمكن لموافقات Plugin استخدام مسار العميل الأصلي هذا للطلبات الصادرة من Slack عندما يتم حل موافقي Slack plugin؛ كما يمكن تفعيل تسليم موافقات Plugin الأصلية في Slack عبرapprovals.pluginلجلسات منشؤها Slack أو أهداف Slack. تستخدم موافقات Plugin موافقي Slack plugin منallowFromوالتوجيه الافتراضي، وليس موافقي التنفيذ.
| مجموعة الإجراء | الافتراضي | الملاحظات |
|---|---|---|
| reactions | مفعّل | التفاعل + سرد التفاعلات |
| messages | مفعّل | قراءة/إرسال/تحرير/حذف |
| pins | مفعّل | تثبيت/إلغاء تثبيت/سرد |
| memberInfo | مفعّل | معلومات العضو |
| emojiList | مفعّل | قائمة الرموز التعبيرية المخصصة |
Mattermost
يُشحن Mattermost بوصفه Plugin مضمّنًا في إصدارات OpenClaw الحالية. يمكن للإصدارات الأقدم أو البنى المخصصة تثبيت حزمة npm حالية باستخدامopenclaw plugins install @openclaw/mattermost. تحقق من
npmjs.com/package/@openclaw/mattermost
لوسوم التوزيع الحالية قبل تثبيت إصدار محدد.
oncall (الرد عند @-mention، الافتراضي)، onmessage (كل رسالة)، onchar (الرسائل التي تبدأ ببادئة تشغيل).
عند تفعيل أوامر Mattermost الأصلية:
- يجب أن يكون
commands.callbackPathمسارًا (على سبيل المثال/api/channels/mattermost/command)، وليس URL كاملًا. - يجب أن يحل
commands.callbackUrlإلى نقطة نهاية OpenClaw Gateway وأن يكون قابلًا للوصول من خادم Mattermost. - تتم مصادقة استدعاءات الشرطة المائلة الأصلية باستخدام الرموز المميزة لكل أمر التي يعيدها
Mattermost أثناء تسجيل أمر الشرطة المائلة. إذا فشل التسجيل أو لم يتم
تفعيل أي أوامر، يرفض OpenClaw الاستدعاءات باستخدام
Unauthorized: invalid command token. - بالنسبة لمضيفي الاستدعاء الخاصين/داخل tailnet/الداخليين، قد يتطلب Mattermost
أن يتضمن
ServiceSettings.AllowedUntrustedInternalConnectionsمضيف/نطاق الاستدعاء. استخدم قيم المضيف/النطاق، وليس عناوين URL كاملة. channels.mattermost.configWrites: السماح بعمليات كتابة الإعدادات التي يبدأها Mattermost أو رفضها.channels.mattermost.requireMention: يتطلب@mentionقبل الرد في القنوات.channels.mattermost.groups.<channelId>.requireMention: تجاوز بوابة الإشارة لكل قناة ("*"للافتراضي).- يتجاوز
channels.mattermost.defaultAccountالاختياري اختيار الحساب الافتراضي عندما يطابق معرف حساب مضبوطًا.
Signal
off، own (الافتراضي)، all، allowlist (من reactionAllowlist).
channels.signal.account: تثبيت بدء تشغيل القناة على هوية حساب Signal محددة.channels.signal.configWrites: السماح بعمليات كتابة الإعدادات التي يبدأها Signal أو رفضها.- يتجاوز
channels.signal.defaultAccountالاختياري اختيار الحساب الافتراضي عندما يطابق معرف حساب مضبوطًا.
iMessage
يشغّل OpenClaw الأمرimsg rpc (JSON-RPC عبر stdio). لا يلزم daemon أو منفذ. هذا هو المسار المفضل لإعدادات OpenClaw iMessage الجديدة عندما يستطيع المضيف منح أذونات قاعدة بيانات Messages وAutomation.
تمت إزالة دعم BlueBubbles. channels.bluebubbles ليس سطح إعدادات وقت تشغيل مدعومًا في OpenClaw الحالي. انقل الإعدادات القديمة إلى channels.imessage؛ استخدم إزالة BlueBubbles ومسار imsg iMessage للنسخة المختصرة والقادمون من BlueBubbles لجدول الترجمة الكامل.
إذا لم يكن Gateway يعمل على جهاز Mac المسجل دخوله إلى Messages، فأبقِ channels.imessage.enabled=true وعيّن channels.imessage.cliPath إلى مغلف SSH يشغّل imsg "$@" على ذلك Mac. مسار imsg المحلي الافتراضي خاص بـ macOS فقط.
قبل الاعتماد على مغلف SSH لإرسالات الإنتاج، تحقق من إرسال صادر عبر imsg send باستخدام ذلك المغلف نفسه. بعض حالات macOS TCC تسند Automation الخاصة بـ Messages إلى /usr/libexec/sshd-keygen-wrapper، ما قد يجعل القراءات والفحوصات تعمل بينما تفشل الإرسالات مع AppleEvents -1743؛ راجع فشل إرسال مغلف SSH مع AppleEvents -1743.
-
يتجاوز
channels.imessage.defaultAccountالاختياري اختيار الحساب الافتراضي عندما يطابق معرف حساب مضبوطًا. - يتطلب Full Disk Access إلى قاعدة بيانات Messages.
-
فضّل أهداف
chat_id:<id>. استخدمimsg chats --limit 20لسرد الدردشات. -
يمكن أن يشير
cliPathإلى مغلف SSH؛ عيّنremoteHost(hostأوuser@host) لجلب المرفقات عبر SCP. -
يقيّد
attachmentRootsوremoteAttachmentRootsمسارات المرفقات الواردة (الافتراضي:/Users/*/Library/Messages/Attachments). -
يستخدم SCP تحققًا صارمًا من مفتاح المضيف، لذا تأكد من أن مفتاح مضيف الترحيل موجود مسبقًا في
~/.ssh/known_hosts. -
channels.imessage.configWrites: السماح بعمليات كتابة الإعدادات التي يبدأها iMessage أو رفضها. -
channels.imessage.sendTransport: نقل إرسالimsgRPC المفضل للردود الصادرة العادية. يستخدمauto(الافتراضي) جسر IMCore للدردشات الموجودة عندما يكون قيد التشغيل، ثم يعود إلى AppleScript؛ يتطلبbridgeتسليمًا عبر API خاص؛ ويفرضapplescriptمسار Automation العام في Messages. -
channels.imessage.actions.*: تفعيل إجراءات API الخاصة المحكومة أيضًا بواسطةimsg status/openclaw channels status --probe. -
channels.imessage.includeAttachmentsمعطل افتراضيًا؛ عيّنه إلىtrueقبل توقع وسائط واردة في دورات الوكيل. -
الاسترداد الوارد بعد إعادة تشغيل الجسر/gateway تلقائي (إزالة تكرار GUID بالإضافة إلى حد عمر لسجل متأخر قديم). لا تزال إعدادات
channels.imessage.catchup.enabled: trueالحالية محترمة كملف توافق مهجور. -
channels.imessage.groups: سجل المجموعات وإعدادات كل مجموعة. معgroupPolicy: "allowlist"، اضبط إما مفاتيحchat_idصريحة أو إدخال بدل"*"حتى تتمكن رسائل المجموعة من اجتياز بوابة السجل. -
يمكن لإدخالات
bindings[]في المستوى الأعلى ذاتtype: "acp"ربط محادثات iMessage بجلسات ACP مستمرة. استخدم مقبضًا موحدًا أو هدف دردشة صريحًا (chat_id:*،chat_guid:*،chat_identifier:*) فيmatch.peer.id. دلالات الحقول المشتركة: وكلاء ACP.
مثال مغلف SSH لـ iMessage
مثال مغلف SSH لـ iMessage
Matrix
Matrix مدعوم بواسطة Plugin ويُضبط ضمنchannels.matrix.
- تستخدم مصادقة الرمز
accessToken؛ وتستخدم مصادقة كلمة المرورuserId+password. - يوجّه
channels.matrix.proxyحركة مرور Matrix HTTP عبر وكيل HTTP(S) صريح. يمكن للحسابات المسماة تجاوزه باستخدامchannels.matrix.accounts.<id>.proxy. - يسمح
channels.matrix.network.dangerouslyAllowPrivateNetworkبخوادم homeserver الخاصة/الداخلية. يُعدproxyوهذا الاشتراك الشبكي عنصرَي تحكم مستقلين. - يحدد
channels.matrix.defaultAccountالحساب المفضل في إعدادات الحسابات المتعددة. - تكون القيمة الافتراضية لـ
channels.matrix.autoJoinهيoff، لذلك تُتجاهل الغرف المدعو إليها والدعوات الجديدة ذات نمط الرسائل المباشرة حتى تضبطautoJoin: "allowlist"معautoJoinAllowlistأوautoJoin: "always". channels.matrix.execApprovals: تسليم موافقات التنفيذ الأصلية في Matrix وتخويل الموافقين.enabled:trueأوfalseأو"auto"(افتراضي). في الوضع التلقائي، تُفعّل موافقات التنفيذ عندما يمكن حل الموافقين منapproversأوcommands.ownerAllowFrom.approvers: معرّفات مستخدمي Matrix (مثل@owner:example.org) المسموح لهم بالموافقة على طلبات التنفيذ.agentFilter: قائمة سماح اختيارية لمعرّفات الوكلاء. احذفها لتمرير الموافقات لجميع الوكلاء.sessionFilter: أنماط مفاتيح جلسات اختيارية (سلسلة فرعية أو تعبير نمطي).target: مكان إرسال مطالبات الموافقة."dm"(افتراضي)، أو"channel"(الغرفة الأصلية)، أو"both".- تجاوزات لكل حساب:
channels.matrix.accounts.<id>.execApprovals.
- يتحكم
channels.matrix.dm.sessionScopeفي كيفية تجميع رسائل Matrix المباشرة ضمن الجلسات: يشاركper-user(افتراضي) حسب النظير الموجّه، بينما يعزلper-roomكل غرفة رسائل مباشرة. - تستخدم فحوصات حالة Matrix وعمليات البحث المباشر في الدليل سياسة الوكيل نفسها مثل حركة مرور وقت التشغيل.
- وُثّقت تهيئة Matrix الكاملة وقواعد الاستهداف وأمثلة الإعداد في Matrix.
Microsoft Teams
Microsoft Teams مدعوم بـ Plugin ومهيأ ضمنchannels.msteams.
- مسارات المفاتيح الأساسية المغطاة هنا:
channels.msteams،channels.msteams.configWrites. - وُثّقت تهيئة Teams الكاملة (بيانات الاعتماد، Webhook، سياسة الرسائل المباشرة/المجموعات، وتجاوزات كل فريق/كل قناة) في Microsoft Teams.
IRC
IRC مدعوم بـ Plugin ومهيأ ضمنchannels.irc.
- مسارات المفاتيح الأساسية المغطاة هنا:
channels.irc،channels.irc.dmPolicy،channels.irc.configWrites،channels.irc.nickserv.*. - يتجاوز
channels.irc.defaultAccountالاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مهيأ. - وُثّقت تهيئة قناة IRC الكاملة (المضيف/المنفذ/TLS/القنوات/قوائم السماح/بوابة الإشارات) في IRC.
الحسابات المتعددة (كل القنوات)
شغّل عدة حسابات لكل قناة (لكل منهاaccountId خاص به):
- يُستخدم
defaultعند حذفaccountId(CLI + التوجيه). - تنطبق رموز البيئة فقط على الحساب الافتراضي.
- تنطبق إعدادات القناة الأساسية على جميع الحسابات ما لم تُتجاوز لكل حساب.
- استخدم
bindings[].match.accountIdلتوجيه كل حساب إلى وكيل مختلف. - إذا أضفت حسابًا غير افتراضي عبر
openclaw channels add(أو إعداد القناة) بينما لا تزال تستخدم تهيئة قناة علوية لحساب واحد، فإن OpenClaw يرقّي أولًا قيم الحساب الواحد العلوية ذات نطاق الحساب إلى خريطة حسابات القناة حتى يستمر الحساب الأصلي في العمل. تنقلها معظم القنوات إلىchannels.<channel>.accounts.default؛ ويمكن لـ Matrix بدلًا من ذلك الحفاظ على هدف مسمى/افتراضي مطابق موجود. - تستمر ارتباطات القناة فقط الموجودة (بدون
accountId) في مطابقة الحساب الافتراضي؛ وتبقى الارتباطات ذات نطاق الحساب اختيارية. - يصلح
openclaw doctor --fixأيضًا الأشكال المختلطة عبر نقل قيم الحساب الواحد العلوية ذات نطاق الحساب إلى الحساب المرَقّى المختار لتلك القناة. تستخدم معظم القنواتaccounts.default؛ ويمكن لـ Matrix بدلًا من ذلك الحفاظ على هدف مسمى/افتراضي مطابق موجود.
قنوات Plugin الأخرى
تُهيأ قنوات Plugin كثيرة بصيغةchannels.<id> وتُوثّق في صفحات القنوات المخصصة لها (مثل Feishu وMatrix وLINE وNostr وZalo وNextcloud Talk وSynology Chat وTwitch).
راجع فهرس القنوات الكامل: القنوات.
بوابة الإشارات في دردشة المجموعات
تتطلب رسائل المجموعات افتراضيًا إشارة إلزامية (إشارة بيانات وصفية أو أنماط تعبيرات نمطية آمنة). ينطبق ذلك على دردشات مجموعات WhatsApp وTelegram وDiscord وGoogle Chat وiMessage. تُتحكم الردود المرئية بشكل منفصل. تكون طلبات المجموعات والقنوات وWebChat الداخلية المباشرة الافتراضية مهيأة للتسليم النهائي التلقائي: يُنشر نص المساعد النهائي عبر مسار الرد المرئي القديم. اشترك فيmessages.visibleReplies: "message_tool" أو messages.groupChat.visibleReplies: "message_tool" عندما يجب ألا يُنشر الإخراج المرئي إلا بعد أن يستدعي الوكيل message(action=send). إذا أعاد النموذج نصًا نهائيًا دون استدعاء أداة الرسائل في وضع أداة فقط مشترك فيه، يبقى ذلك النص النهائي خاصًا ويسجل سجل Gateway التفصيلي بيانات وصفية للحمولة المكبوتة.
تتطلب الردود المرئية ذات الأداة فقط نموذجًا/وقت تشغيل يستدعي الأدوات بشكل موثوق، ويُوصى بها للغرف المحيطة المشتركة على نماذج الجيل الأحدث مثل GPT 5.5. يمكن لبعض النماذج الأضعف أن تجيب بنص نهائي لكنها تفشل في فهم أن الإخراج المرئي للمصدر يجب أن يُرسل باستخدام message(action=send). لهذه النماذج، استخدم "automatic" بحيث تكون دورة المساعد النهائية هي مسار الرد المرئي. إذا أظهر سجل الجلسة نص مساعد مع didSendViaMessagingTool: false، فقد أنتج النموذج نصًا نهائيًا خاصًا بدلًا من استدعاء أداة الرسائل. انتقل إلى نموذج أقوى في استدعاء الأدوات لتلك القناة، أو افحص سجل Gateway التفصيلي لملخص الحمولة المكبوتة، أو اضبط messages.groupChat.visibleReplies: "automatic" لاستخدام الردود النهائية المرئية لكل طلب مجموعة/قناة.
إذا كانت أداة الرسائل غير متاحة ضمن سياسة الأدوات النشطة، يعود OpenClaw إلى الردود المرئية التلقائية بدلًا من كبت الاستجابة بصمت. يحذر openclaw doctor من عدم التطابق هذا.
تنطبق هذه القاعدة على النص النهائي العادي للوكيل. تستخدم ارتباطات المحادثة المملوكة لـ Plugin الرد الذي يعيده Plugin المالك كاستجابة مرئية لدورات السلاسل المرتبطة المطالب بها؛ ولا يحتاج Plugin إلى استدعاء message(action=send) لتلك الردود الخاصة بالارتباطات.
استكشاف الأخطاء وإصلاحها: تؤدي إشارة @mention في المجموعة إلى الكتابة ثم الصمت (بلا خطأ)
العَرَض: تُظهر إشارة @mention في مجموعة/قناة مؤشر الكتابة ويُبلغ سجل Gateway عن dispatch complete (queuedFinal=false, replies=0)، لكن لا تصل أي رسالة إلى الغرفة. ترد الرسائل المباشرة إلى الوكيل نفسه بشكل طبيعي.
السبب: يُحل وضع الرد المرئي للمجموعة/القناة إلى "message_tool"، لذلك يشغّل OpenClaw الدورة لكنه يكبت نص المساعد النهائي ما لم يستدعِ الوكيل message(action=send). لا يوجد عقد NO_REPLY في هذا الوضع؛ وعدم وجود استدعاء لأداة الرسائل يعني عدم وجود رد للمصدر. لا يوجد خطأ لأن الكبت هو السلوك المهيأ. تكون دورات المجموعات والقنوات العادية افتراضيًا "automatic"، لذلك لا يظهر هذا العرض إلا عندما يكون messages.groupChat.visibleReplies (أو messages.visibleReplies العام) مضبوطًا صراحة على "message_tool". لا ينطبق defaultVisibleReplies الخاص بالحزمة هنا — إذ يتجاهله محلل المجموعة/القناة؛ فهو يؤثر فقط في الدردشات المباشرة/المصدرية (تكبت حزمة Codex النهائيات في الدردشة المباشرة بهذه الطريقة).
الإصلاح: إما اختر نموذجًا أقوى في استدعاء الأدوات، أو أزل تجاوز "message_tool" الصريح للرجوع إلى الافتراضي "automatic"، أو اضبط messages.groupChat.visibleReplies: "automatic" لفرض الردود المرئية لكل طلب مجموعة/قناة. يعيد Gateway تحميل تهيئة messages مباشرة بعد حفظ الملف؛ ولا تُعد تشغيل Gateway إلا عندما تكون مراقبة الملفات أو إعادة تحميل التهيئة معطلة في النشر.
أنواع الإشارات:
- إشارات البيانات الوصفية: إشارات @ الأصلية للمنصة. تُتجاهل في وضع الدردشة الذاتية في WhatsApp.
- أنماط النص: أنماط تعبيرات نمطية آمنة في
agents.list[].groupChat.mentionPatterns. تُتجاهل الأنماط غير الصالحة والتكرارات المتداخلة غير الآمنة. - تُفرض بوابة الإشارات فقط عندما يكون الاكتشاف ممكنًا (إشارات أصلية أو نمط واحد على الأقل).
messages.groupChat.historyLimit الافتراضي العام. يمكن للقنوات التجاوز باستخدام channels.<channel>.historyLimit (أو لكل حساب). اضبطه على 0 للتعطيل.
يرسل messages.groupChat.unmentionedInbound: "room_event" رسائل المجموعات/القنوات غير المشار إليها والدائمة التشغيل كسياق غرفة هادئ على القنوات المدعومة. تبقى الرسائل المشار إليها والأوامر والرسائل المباشرة طلبات مستخدم. راجع أحداث الغرف المحيطة للحصول على أمثلة كاملة لـ Discord وSlack وTelegram.
messages.visibleReplies هو الافتراضي العام لحدث المصدر؛ ويتجاوزه messages.groupChat.visibleReplies لأحداث مصدر المجموعة/القناة. عندما لا يكون messages.visibleReplies مضبوطًا، تستخدم دردشات المصدر/المباشرة الافتراضي المختار لوقت التشغيل أو الحزمة، لكن دورات WebChat الداخلية المباشرة تستخدم التسليم النهائي التلقائي لتكافؤ مطالبات Pi/Codex. اضبط messages.visibleReplies: "message_tool" لطلب message(action=send) عمدًا للإخراج المرئي. لا تزال قوائم سماح القنوات وبوابة الإشارات تقرر ما إذا كان الحدث سيُعالَج.
حدود سجل الرسائل المباشرة
telegram، whatsapp، discord، slack، signal، imessage، msteams.
وضع الدردشة الذاتية
ضمّن رقمك الخاص فيallowFrom لتفعيل وضع الدردشة الذاتية (يتجاهل إشارات @ الأصلية، ولا يستجيب إلا لأنماط النص):
الأوامر (معالجة أوامر الدردشة)
Command details
Command details
- تُهيئ هذه الكتلة أسطح الأوامر. للاطلاع على كتالوج الأوامر المضمّنة + المرفقة الحالي، راجع أوامر Slash.
- هذه الصفحة هي مرجع لمفاتيح الإعدادات، وليست كتالوج الأوامر الكامل. الأوامر المملوكة للقنوات/Plugin مثل أوامر QQ Bot
/bot-pingو/bot-helpو/bot-logs، وLINE/card، وإقران الأجهزة/pair، والذاكرة/dreaming، والتحكم بالهاتف/phone، وTalk/voiceموثقة في صفحات القنوات/Plugin الخاصة بها، إضافة إلى أوامر Slash. - يجب أن تكون الأوامر النصية رسائل مستقلة تبدأ بـ
/. - يفعّل
native: "auto"الأوامر الأصلية لـ Discord/Telegram، ويترك Slack معطلاً. - يفعّل
nativeSkills: "auto"أوامر Skills الأصلية لـ Discord/Telegram، ويترك Slack معطلاً. - التجاوز لكل قناة:
channels.discord.commands.native(قيمة منطقية أو"auto"). بالنسبة إلى Discord، تتخطىfalseتسجيل الأوامر الأصلية وتنظيفها أثناء بدء التشغيل. - تجاوز تسجيل Skills الأصلية لكل قناة باستخدام
channels.<provider>.commands.nativeSkills. - يضيف
channels.telegram.customCommandsإدخالات إضافية إلى قائمة بوت Telegram. - يفعّل
bash: trueالصيغة! <cmd>لصدفة المضيف. يتطلب ذلكtools.elevated.enabledوأن يكون المرسل ضمنtools.elevated.allowFrom.<channel>. - يفعّل
config: trueالأمر/config(لقراءة/كتابةopenclaw.json). بالنسبة إلى عملاء Gatewaychat.send، تتطلب عمليات الكتابة الدائمة عبر/config set|unsetأيضًاoperator.admin؛ يظل/config showللقراءة فقط متاحًا لعملاء المشغّل العاديين ذوي نطاق الكتابة. - يفعّل
mcp: trueالأمر/mcpلإعداد خادم MCP المُدار بواسطة OpenClaw ضمنmcp.servers. - يفعّل
plugins: trueالأمر/pluginsلاكتشاف Plugin وتثبيتها وعناصر التحكم في تفعيلها/تعطيلها. - يتحكم
channels.<provider>.configWritesفي طفرات الإعدادات لكل قناة (الافتراضي: true). - بالنسبة إلى القنوات متعددة الحسابات، يتحكم
channels.<provider>.accounts.<id>.configWritesأيضًا في عمليات الكتابة التي تستهدف ذلك الحساب (مثل/allowlist --config --account <id>أو/config set channels.<provider>.accounts.<id>...). - يعطّل
restart: falseالأمر/restartوإجراءات أداة إعادة تشغيل Gateway. الافتراضي:true. ownerAllowFromهي قائمة السماح الصريحة للمالك للأوامر الخاصة بالمالك فقط وإجراءات القناة المحكومة بالمالك. وهي منفصلة عنallowFrom.- يجزّئ
ownerDisplay: "hash"معرّفات المالك في مطالبة النظام. اضبطownerDisplaySecretللتحكم في التجزئة. allowFromمخصص لكل موفّر. عند ضبطه، يكون هو مصدر التفويض الوحيد (يتم تجاهل قوائم سماح القنوات/الإقران وuseAccessGroups).- يسمح
useAccessGroups: falseللأوامر بتجاوز سياسات مجموعات الوصول عندما لا يكونallowFromمضبوطًا. - خريطة وثائق الأوامر:
ذو صلة
- مرجع الإعدادات — مفاتيح المستوى الأعلى
- الإعدادات — الوكلاء
- نظرة عامة على القنوات