الاقتران
استكشاف أخطاء القنوات وإصلاحها
إعداد Gateway
الإعداد السريع
إنشاء رمز البوت في BotFather
- مسار الدردشة: افتح Telegram، وابدأ دردشة مع @BotFather (تأكد من أن المعرّف هو تمامًا
@BotFather) وشغّل/newbotواتبع المطالبات واحفظ الرمز. - مسار الويب: افتح تطبيق الويب الخاص بـ BotFather — فهو يعمل في جميع عملاء Telegram، بما فيها web.telegram.org — وأنشئ البوت في واجهة المستخدم، ثم انسخ رمزه.
إعداد الرمز وسياسة الرسائل الخاصة
TELEGRAM_BOT_TOKEN (للحساب الافتراضي فقط؛ يجب أن تستخدم الحسابات المسماة botToken أو tokenFile).
لا يستخدم Telegram openclaw channels login telegram؛ اضبط الرمز في الإعداد أو المتغير البيئي، ثم شغّل Gateway.تشغيل Gateway والموافقة على أول رسالة خاصة
إضافة البوت إلى مجموعة
- معرّف مستخدم Telegram الخاص بك، لاستخدامه مع
allowFrom/groupAllowFrom - معرّف دردشة مجموعة Telegram، ليكون المفتاح ضمن
channels.telegram.groups
openclaw logs --follow أو من بوت لمعرّفات الرسائل المُعاد توجيهها أو من getUpdates في Bot API. بعد السماح للمجموعة، يؤكد /whoami@<bot_username> معرّفي المستخدم والمجموعة.المعرّفات السالبة للمجموعات الفائقة التي تبدأ بـ -100 هي معرّفات دردشة مجموعات. توضع ضمن channels.telegram.groups، لا ضمن groupAllowFrom.tokenFile على botToken، والذي يتغلب بدوره على المتغير البيئي، كما يتغلب الإعداد دائمًا على TELEGRAM_BOT_TOKEN (الذي لا يُحدَّد إلا للحساب الافتراضي). بعد بدء تشغيل ناجح، يخزّن OpenClaw هوية البوت مؤقتًا لمدة تصل إلى 24 ساعة كي تتخطى عمليات إعادة التشغيل استدعاء getMe إضافيًا؛ ويؤدي تغيير الرمز أو إزالته إلى مسح ذاكرة التخزين المؤقت هذه.الإعدادات من جانب Telegram
وضع الخصوصية وإمكانية الظهور في المجموعات
وضع الخصوصية وإمكانية الظهور في المجموعات
- تعطيل وضع الخصوصية عبر
/setprivacy، أو - تعيين البوت مشرفًا على المجموعة.
أذونات المجموعة
أذونات المجموعة
خيارات BotFather المفيدة
خيارات BotFather المفيدة
/setjoingroups— السماح بإضافة البوت إلى المجموعات أو منعها/setprivacy— سلوك إمكانية الظهور في المجموعات
التطبيق المصغر للوحة التحكم
شغّل/dashboard في رسالة خاصة مع البوت لفتح لوحة تحكم OpenClaw داخل Telegram.
المتطلبات:
gateway.tailscale.mode: "serve"أو"funnel"لعنوان URL المنشور عبر HTTPS للتطبيق المصغر.- يجب أن يكون معرّف مستخدم Telegram الرقمي الخاص بك ضمن
allowFromالفعّالة للحساب المحدد أو ضمنcommands.ownerAllowFrom. - استخدم رسالة خاصة. في المجموعات، يرد
/dashboardبـopen this in a DM with the botولا يرسل أي زر. - عمليات تثبيت Docker: تتطلب أوضاع Serve/Funnel ربط Gateway بواجهة الاسترجاع بجوار
tailscaled، وهو ما لا يمكن لشبكة الجسر ذات المنافذ المنشورة تلبيته. شغّل حاوية Gateway باستخدامnetwork_mode: host، وثبّت مقبسtailscaledالخاص بالمضيف (/var/run/tailscale) بالإضافة إلى CLI tailscaleداخل الحاوية.
التحكم في الوصول والتنشيط
هوية البوت في المجموعة
في المجموعات وموضوعات المنتديات، تؤدي الإشارة الصريحة إلى معرّف البوت المُعدّ (مثل@my_bot) إلى مخاطبة وكيل OpenClaw المحدد، حتى عندما يختلف اسم شخصية الوكيل عن اسم مستخدم Telegram. تظل سياسة الصمت في المجموعة سارية على الحركة غير ذات الصلة، لكن معرّف البوت نفسه لا يكون أبدًا «شخصًا آخر».
- سياسة الرسائل الخاصة
- سياسة المجموعات وقوائم السماح
- سلوك الإشارات
channels.telegram.dmPolicy في الوصول إلى الرسائل المباشرة:pairing(الافتراضي)allowlist(يتطلب معرّف مرسل واحدًا على الأقل فيallowFrom)open(يتطلب أن يتضمنallowFromالقيمة"*")disabled
dmPolicy: "open" مع allowFrom: ["*"] لأي حساب Telegram يعثر على اسم مستخدم البوت أو يخمّنه إصدار أوامر إلى البوت. استخدمه فقط للبوتات العامة عمدًا ذات الأدوات المقيّدة بإحكام؛ وينبغي للبوتات ذات المالك الواحد استخدام allowlist مع معرّفات مستخدمين رقمية.يقبل channels.telegram.allowFrom معرّفات مستخدمي Telegram الرقمية. تُقبل البادئتان telegram: / tg: وتُطبَّعان.
في إعدادات الحسابات المتعددة، يمثل channels.telegram.allowFrom المقيّد على المستوى الأعلى حدًا للأمان: لا يجعل allowFrom: ["*"] على مستوى الحساب ذلك الحساب عامًا ما لم تظل قائمة السماح الفعّالة المدمجة تحتوي على محرف بدل صريح.
يمنع dmPolicy: "allowlist" مع allowFrom فارغة جميع الرسائل الخاصة، ويرفضه التحقق من صحة الإعداد.
لا يطلب الإعداد سوى معرّفات المستخدمين الرقمية. إذا كان إعدادك يحتوي على إدخالات قائمة سماح @username من إعداد أقدم، فشغّل openclaw doctor --fix لتحويلها إلى معرّفات رقمية (بقدر الإمكان؛ يتطلب رمز بوت Telegram).
إذا كنت تعتمد سابقًا على ملفات قائمة السماح في مخزن الاقتران، فيمكن لـ openclaw doctor --fix استعادة الإدخالات إلى channels.telegram.allowFrom لمسارات قائمة السماح (مثلًا عندما لا يحتوي dmPolicy: "allowlist" على معرّفات صريحة بعد).بالنسبة إلى البوتات ذات المالك الواحد، يُفضّل استخدام dmPolicy: "allowlist" مع معرّفات allowFrom رقمية صريحة بدلًا من الاعتماد على موافقات الاقتران السابقة.التباس شائع: لا تعني الموافقة على اقتران الرسائل الخاصة أن «هذا المرسل مخوّل في كل مكان». يمنح الاقتران الوصول إلى الرسائل الخاصة فقط. إذا لم يوجد مالك للأوامر بعد، فإن أول اقتران معتمد يضبط أيضًا commands.ownerAllowFrom، مما يمنح الأوامر الخاصة بالمالك والموافقات على التنفيذ حساب مشغّل صريحًا. ويظل تخويل مرسلي المجموعة مستمدًا من قوائم السماح الصريحة في الإعداد.
للحصول على تخويل للرسائل الخاصة وأوامر المجموعة معًا بهوية واحدة: ضع معرّف مستخدم Telegram الرقمي الخاص بك في channels.telegram.allowFrom، وتأكد بالنسبة إلى الأوامر الخاصة بالمالك من أن commands.ownerAllowFrom يحتوي على telegram:<your user id>.العثور على معرّف مستخدم Telegram الخاص بك
الطريقة الأكثر أمانًا (دون بوت تابع لجهة خارجية): أرسل رسالة خاصة إلى بوتك، وشغّلopenclaw logs --follow، واقرأ from.id.طريقة Bot API الرسمية:@userinfobot أو @getidsbot.سلوك وقت التشغيل
- يعمل Telegram داخل عملية Gateway.
- التوجيه حتمي: تعود الردود الواردة من Telegram إلى Telegram (لا يختار النموذج القنوات).
- تُوحَّد الرسائل الواردة ضمن مغلف القناة المشترك، مع بيانات وصفية للرد، وعناصر نائبة للوسائط، وسياق محفوظ لسلسلة الردود التي رصدها Gateway.
- تُعزل جلسات المجموعات حسب معرّف المجموعة. وتُلحق موضوعات المنتدى
:topic:<threadId>. - يمكن أن تحمل رسائل المحادثات الخاصة
message_thread_id؛ ويحافظ OpenClaw عليها في الردود. لا تنقسم جلسات موضوعات المحادثات الخاصة إلا عندما يُبلغ Telegram عبرgetMeعنhas_topics_enabled: trueللبوت؛ وإلا فتبقى المحادثات الخاصة ضمن الجلسة المسطحة. - يستخدم الاستطلاع الطويل مشغّل grammY مع تسلسل لكل محادثة/سلسلة. ويستخدم تزامن مستقبِل المشغّل
agents.defaults.maxConcurrent. - يحد بدء التشغيل متعدد الحسابات من تحقيقات
getMeالمتزامنة، كي لا تُطلق مجموعات البوتات الكبيرة تحقيقات جميع الحسابات دفعة واحدة. - تحمي كل عملية Gateway الاستطلاع الطويل بحيث لا يستطيع استخدام رمز البوت سوى مستطلع نشط واحد في كل مرة. تشير تعارضات 409 المستمرة في
getUpdatesإلى وجود Gateway آخر من OpenClaw أو برنامج نصي أو مستطلع خارجي يستخدم الرمز نفسه. - تُعيد آلية مراقبة الاستطلاع التشغيل افتراضيًا بعد 120 ثانية من دون اكتمال فحص حيوية
getUpdates. لا ترفعchannels.telegram.pollingStallThresholdMs(30000-600000، مع دعم التجاوزات لكل حساب) إلا إذا شهد نشرك عمليات إعادة تشغيل خاطئة بسبب تعطل الاستطلاع أثناء العمل طويل الأمد. - لا تدعم Telegram Bot API إيصالات القراءة (لا ينطبق
sendReadReceipts).
channels.telegram.dm.threadReplies وchannels.telegram.direct.<chatId>.threadReplies. شغّل openclaw doctor --fix بعد الترقية إذا ظل إعدادك يحتوي على هذين المفتاحين. يتبع توجيه موضوعات المحادثات الخاصة الآن getMe.has_topics_enabled في Telegram (يتحكم فيه وضع السلاسل في BotFather): تستخدم البوتات التي فُعّلت لها الموضوعات جلسات محادثات خاصة محددة النطاق بالسلسلة عندما يرسل Telegram message_thread_id؛ وتبقى المحادثات الخاصة الأخرى ضمن الجلسة المسطحة.مرجع الميزات
المعاينة المباشرة للبث (تعديلات الرسائل)
المعاينة المباشرة للبث (تعديلات الرسائل)
editMessageText مرارًا، ويُتمّها في موضعها.- القيمة
channels.telegram.streamingهيoff | partial | block | progress(الافتراضي:partial) - تُؤجَّل معاينات الإجابات الأولية القصيرة، ثم تُنشأ بعد مهلة محدودة إذا ظل التشغيل نشطًا
- يحتفظ
progressبمسودة حالة واحدة قابلة للتحرير لتقدم الأدوات، ويعرض تسمية الحالة المستقرة عندما يصل نشاط الإجابة قبل تقدم الأداة، ويمحوها عند الاكتمال، ويرسل الإجابة النهائية كرسالة عادية - يتحكم
streaming.preview.toolProgressفي ما إذا كانت تحديثات الأدوات/التقدم تعيد استخدام رسالة المعاينة المعدّلة نفسها (الافتراضي:trueعندما يكون بث المعاينة نشطًا) - يتحكم
streaming.preview.commandTextفي تفاصيل الأوامر/التنفيذ ضمن تلك الأسطر:raw(الافتراضي) أوstatus(تسمية الأداة فقط) - يتيح
streaming.progress.commentary(الافتراضي:false) تضمين نص تعليق/تمهيد المساعد في مسودة التقدم المؤقتة - تُكتشف القيم القديمة
channels.telegram.streamMode، والقيم المنطقية لـstreaming، ومفاتيح معاينة المسودة الأصلية المتقاعدة؛ شغّلopenclaw doctor --fixلترحيلها
v2026.4.22+).أبقِ تعديلات معاينة الإجابة مع إخفاء أسطر تقدم الأدوات:progress تقدم الأدوات من دون تعديل الإجابة النهائية داخل تلك الرسالة. ضع سياسة نص الأوامر ضمن streaming.progress:streaming.mode: "off" تعديلات المعاينة ويمنع رسائل الأدوات/التقدم العامة بدلًا من إرسالها كرسائل حالة مستقلة؛ وتظل مطالبات الموافقة والوسائط والأخطاء تمر عبر التسليم النهائي العادي. ويُبقي streaming.preview.toolProgress: false تعديلات معاينة الإجابة فقط.replyToMode هي first أو all أو batched، وتحتوي الرسالة الواردة على نص اقتباس محدد، يرسل OpenClaw الإجابة النهائية عبر مسار الرد الأصلي على الاقتباس في Telegram بدلًا من تعديل معاينة الإجابة، لذا لا يستطيع streaming.preview.toolProgress عرض أسطر الحالة في ذلك الدور. وتظل الردود على الرسالة الحالية من دون نص اقتباس محدد تُبث. اضبط replyToMode: "off" عندما تكون رؤية تقدم الأدوات أهم من الردود الأصلية على الاقتباسات، أو streaming.preview.toolProgress: false لقبول هذه المفاضلة./reasoning stream الاستدلال إلى المعاينة المباشرة أثناء الإنشاء، ثم يحذف معاينة الاستدلال بعد التسليم النهائي (استخدم /reasoning on لإبقائها ظاهرة). وتُرسل الإجابة النهائية من دون نص الاستدلال.تنسيق الرسائل الغنية
تنسيق الرسائل الغنية
$400-600K على أنها تعبيرات رياضية. وينقسم النص الغني الطويل تلقائيًا وفق حدود Telegram. وتعود الجداول التي تتجاوز حد 20 عمودًا إلى كتلة شيفرة.الافتراضي: معطّل، لضمان توافق العملاء — إذ تعرض بعض إصدارات عملاء Desktop وWeb وAndroid والعملاء الخارجيين الحالية الرسائل الغنية المقبولة على أنها غير مدعومة. أبقِ هذا الخيار معطّلًا ما لم يتمكن كل عميل مستخدم مع البوت من عرضها. يوضّح /status ما إذا كانت الرسائل الغنية مفعّلة أو معطّلة في الجلسة الحالية.معاينات الروابط مفعّلة افتراضيًا. يعطّل channels.telegram.linkPreview: false الاكتشاف التلقائي للكيانات في النص الغني.الأوامر الأصلية والأوامر المخصصة
الأوامر الأصلية والأوامر المخصصة
setMyCommands. ويفعّل commands.native: "auto" الأوامر الأصلية لـ Telegram.أضف إدخالات أوامر مخصصة إلى القائمة:/ البادئة وتحويلها إلى أحرف صغيرة)؛ والنمط الصالح هو a-z و0-9 و_، والطول 1-32؛ ولا تستطيع الأوامر المخصصة تجاوز الأوامر الأصلية؛ وتُتخطى التعارضات/التكرارات وتُسجَّل.الأوامر المخصصة مجرد إدخالات في القائمة — ولا تنفّذ السلوك تلقائيًا. ويمكن أن تظل أوامر Plugin/Skills تعمل عند كتابتها حتى إذا لم تظهر في قائمة Telegram. وإذا عُطّلت الأوامر الأصلية، تُزال الأوامر المضمّنة؛ وقد تظل أوامر Plugin/الأوامر المخصصة تُسجَّل إذا كانت مضبوطة.إخفاقات الإعداد الشائعة:- ظهور
setMyCommands failedمعBOT_COMMANDS_TOO_MUCHبعد إعادة محاولة الاختصار يعني أن القائمة لا تزال تتجاوز الحد؛ قلّل أوامر Plugin/Skills/الأوامر المخصصة أو عطّلchannels.telegram.commands.native. - فشل
deleteWebhookأوdeleteMyCommandsأوsetMyCommandsمع404: Not Foundبينما تعمل أوامر curl المباشرة لـ Bot API يعني عادةً أنchannels.telegram.apiRootضُبط على نقطة نهاية/bot<TOKEN>الكاملة. يجب أن يكونapiRootجذر Bot API فقط؛ ويزيلopenclaw doctor --fixاللاحقة/bot<TOKEN>المضافة بالخطأ. - يعني
getMe returned 401أن Telegram رفض رمز البوت المضبوط. حدّثbotTokenأوtokenFileأوTELEGRAM_BOT_TOKEN(الحساب الافتراضي) برمز BotFather الحالي؛ يتوقف OpenClaw قبل الاستطلاع، لذا لا يُبلَّغ عن ذلك كفشل في تنظيف Webhook. - يشير
setMyCommands failedالمصحوب بأخطاء الشبكة/الجلب عادةً إلى حظر DNS/HTTPS الصادر إلىapi.telegram.org.
أوامر إقران الأجهزة (Plugin device-pair)
عند تثبيته:- ينشئ
/pairرمز إعداد - ألصق الرمز في تطبيق iOS
- يسرد
/pair pendingالطلبات المعلّقة (بما فيها الدور/النطاقات) - للموافقة:
/pair approve <requestId>أو/pair approve(الطلب المعلّق الوحيد) أو/pair approve latest
requestId جديد؛ أعد تشغيل /pair pending قبل الموافقة.مزيد من التفاصيل: الإقران.الأزرار المضمّنة
الأزرار المضمّنة
off وdm وgroup وall وallowlist (الافتراضي). يرتبط capabilities: ["inlineButtons"] القديم بـ "all".مثال لإجراء رسالة:web_app إلا في المحادثات الخاصة بين المستخدم والبوت.تُمرَّر نقرات الاستدعاء التي لا تطالب بها أي معالِجات تفاعلية مسجّلة لـ plugin إلى الوكيل كنص: callback_data: <value>.إجراءات رسائل Telegram للوكلاء والأتمتة
إجراءات رسائل Telegram للوكلاء والأتمتة
sendMessage(to،content، وmediaUrlاختياري، وreplyToMessageId، وmessageThreadId)react(chatId،messageId،emoji)deleteMessage(chatId،messageId)editMessage(chatId،messageId،contentأوcaption، وأزرارpresentationالمضمّنة اختيارية؛ تحدّث التعديلات التي تقتصر على الأزرار ترميز الرد)createForumTopic(chatId،name، وiconColorاختياري، وiconCustomEmojiId)
send، react، delete، edit، sticker، sticker-search، topic-create.التحكّم في الإتاحة: channels.telegram.actions.sendMessage، deleteMessage، reactions، sticker (الافتراضي: معطّل). تكون edit وcreateForumTopic وeditForumTopic مفعّلة افتراضيًا بلا مفتاح تبديل مخصّص.
تستخدم عمليات الإرسال في وقت التشغيل لقطة الإعدادات/الأسرار النشطة منذ بدء التشغيل/إعادة التحميل، ولذلك لا تعيد مسارات الإجراءات تحليل قيم SecretRef عند كل إرسال.دلالات إزالة التفاعلات: /tools/reactions.وسوم تسلسل الردود
وسوم تسلسل الردود
[[reply_to_current]]— يرد على الرسالة المشغِّلة[[reply_to:<id>]]— يرد على معرّف رسالة محدد
channels.telegram.replyToMode: off (الافتراضي)، first، all.عند تمكين تسلسل الردود وتوفّر النص/التعليق الأصلي، يضيف OpenClaw مقتطف اقتباس أصليًا تلقائيًا. يقصر Telegram نص الاقتباس الأصلي على 1024 وحدة ترميز UTF-16؛ تُقتبس الرسائل الأطول من بدايتها، ويُرجع إلى رد عادي إذا رفض Telegram الاقتباس.يعطّل off تسلسل الردود الضمني فقط؛ وتظل وسوم [[reply_to_*]] الصريحة مطبّقة.موضوعات المنتدى وسلوك سلاسل المحادثات
موضوعات المنتدى وسلوك سلاسل المحادثات
:topic:<threadId>؛ وتستهدف الردود وحالة الكتابة سلسلة الموضوع؛ ومسار إعداد الموضوع هو channels.telegram.groups.<chatId>.topics.<threadId>.الموضوع العام (threadId=1) حالة خاصة: تحذف عمليات إرسال الرسائل message_thread_id (يرفض Telegram القيمة sendMessage(...thread_id=1) برسالة “سلسلة المحادثة غير موجودة”)، لكن إجراءات الكتابة تظل تتضمن message_thread_id (وهو مطلوب تجريبيًا لظهور مؤشر الكتابة).ترث إدخالات الموضوع إعدادات المجموعة ما لم تُتجاوز (requireMention، allowFrom، skills، systemPrompt، enabled، groupPolicy). يقتصر agentId على الموضوع ولا يرث الإعدادات الافتراضية للمجموعة. يضبط topics."*" الإعدادات الافتراضية لكل موضوع في تلك المجموعة؛ وتظل معرّفات الموضوعات الدقيقة مقدّمة على "*".توجيه الوكيل حسب الموضوع: يمكن توجيه كل موضوع إلى وكيل مختلف عبر agentId في إعداد الموضوع، ما يمنحه مساحة عمل وذاكرة وجلسة خاصة به:agent:zu:telegram:group:-1001234567890:topic:3.ربط موضوع ACP الدائم: يمكن لموضوعات المنتدى تثبيت جلسات حاضنة ACP عبر روابط مكتوبة من المستوى الأعلى (bindings[] مع type: "acp" وmatch.channel: "telegram" وpeer.kind: "group" ومعرّف مؤهل بموضوع مثل -1001234567890:topic:42). يقتصر النطاق حاليًا على موضوعات المنتدى في المجموعات/المجموعات الفائقة. راجع وكلاء ACP.إنشاء ACP مرتبط بسلسلة من الدردشة: يربط /acp spawn <agent> --thread here|auto الموضوع الحالي بجلسة ACP جديدة؛ وتُوجّه المتابعات إليها مباشرةً، ويثبّت OpenClaw تأكيد الإنشاء داخل الموضوع. يتطلب channels.telegram.threadBindings.spawnSessions (الافتراضي: true).يوفّر سياق القالب MessageThreadId وIsForum. تحتفظ محادثات الرسائل المباشرة التي تتضمن message_thread_id ببيانات الرد الوصفية، لكنها لا تستخدم مفاتيح جلسات تراعي سلاسل المحادثات إلا عندما يُبلغ getMe في Telegram عن has_topics_enabled: true.
أزيل تجاوزا dm.threadReplies وdirect.*.threadReplies المتقاعدان؛ ويُعد وضع سلاسل المحادثات في BotFather المصدر الوحيد للحقيقة. شغّل openclaw doctor --fix لإزالة مفاتيح الإعداد القديمة.الصوت والفيديو والملصقات
الصوت والفيديو والملصقات
الرسائل الصوتية
يميّز Telegram الملاحظات الصوتية عن الملفات الصوتية. الافتراضي: سلوك الملف الصوتي؛ ضع وسم[[audio_as_voice]] في رد الوكيل لفرض الإرسال كملاحظة صوتية. تُدرج نصوص الملاحظات الصوتية الواردة في سياق الوكيل بوصفها نصًا مولّدًا آليًا وغير موثوق، لكن اكتشاف الإشارات يظل يستخدم النص الخام، بحيث تستمر الرسائل الصوتية المشروطة بالإشارة في العمل.رسائل الفيديو
يميّز Telegram ملفات الفيديو عن ملاحظات الفيديو. لا تدعم ملاحظات الفيديو التعليقات؛ ويُرسل نص الرسالة المقدّم بصورة منفصلة.المواقع والأماكن
استخدم إجراءsend الحالي مع كائن location مستقل واحد. ترسل الإحداثيات دبوسًا أصليًا؛ وتؤدي إضافة كل من name وaddress إلى إرسال بطاقة مكان أصلية. لا يمكن دمج عمليات إرسال الموقع مع نص الرسالة أو الوسائط.الملصقات
الوارد: يُنزّل WEBP الثابت ويُعالج (العنصر النائب<media:sticker>)؛ ويُتخطى TGS المتحرك وWEBM للفيديو.حقول سياق الملصق: Sticker.emoji، Sticker.setName، Sticker.fileId، Sticker.fileUniqueId، Sticker.cachedDescription. تُخزّن الأوصاف مؤقتًا في حالة plugin الخاصة بـ OpenClaw في SQLite لتقليل استدعاءات الرؤية المتكررة.تمكين إجراءات الملصقات:إشعارات التفاعلات
إشعارات التفاعلات
message_reaction، منفصلة عن حمولات الرسائل. عند التمكين، يضع OpenClaw أحداث النظام مثل Telegram reaction added: 👍 by Alice (@alice) on msg 42 في قائمة الانتظار.channels.telegram.reactionNotifications:off | own | all(الافتراضي:own)channels.telegram.reactionLevel:off | ack | minimal | extensive(الافتراضي:minimal)
own تفاعلات المستخدمين مع الرسائل التي أرسلها البوت فقط (بأفضل جهد عبر ذاكرة مؤقتة للرسائل المرسلة). تظل أحداث التفاعل خاضعة لعناصر تحكّم الوصول في Telegram (dmPolicy، allowFrom، groupPolicy، groupAllowFrom)؛ ويُستبعد المرسلون غير المصرح لهم.لا يوفّر Telegram معرّفات سلاسل المحادثات في تحديثات التفاعل: تُوجّه المجموعات غير التابعة لمنتدى إلى جلسة محادثة المجموعة؛ وتُوجّه مجموعات المنتدى إلى جلسة الموضوع العام (:topic:1)، لا إلى الموضوع الأصلي الدقيق.تتضمن allowed_updates للاستقصاء/Webhook القيمة message_reaction تلقائيًا.تفاعلات الإقرار
تفاعلات الإقرار
ackReaction رمزًا تعبيريًا للإقرار أثناء معالجة OpenClaw لرسالة واردة. ويحدد messages.ackReactionScope متى يُرسل.ترتيب تحديد الرمز التعبيري:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- الرجوع إلى الرمز التعبيري لهوية الوكيل (
agents.list[].identity.emoji، وإلا ”👀”)
"" لتعطيل التفاعل لقناة أو حساب.النطاق (messages.ackReactionScope، الافتراضي "group-mentions"؛ لا يوجد حاليًا تجاوز على مستوى حساب Telegram أو قناة Telegram):all (الرسائل المباشرة + المجموعات، بما فيها أحداث الغرف المحيطة)، direct (الرسائل المباشرة فقط)، group-all (كل رسالة جماعية باستثناء أحداث الغرف المحيطة، ولا رسائل مباشرة)، group-mentions (المجموعات عندما يُشار إلى البوت؛ لا رسائل مباشرة — الافتراضي)، off / none (معطّل).group-mentions) تفاعلات الإقرار في الرسائل المباشرة أو أحداث الغرف المحيطة. استخدم direct أو all للرسائل المباشرة؛ وحده all يقرّ بأحداث الغرف المحيطة. تُقرأ هذه القيمة عند بدء موفّر Telegram، ولذلك تلزم إعادة تشغيل Gateway ليصبح التغيير نافذًا.كتابة الإعدادات من أحداث Telegram وأوامره
كتابة الإعدادات من أحداث Telegram وأوامره
configWrites !== false). تشمل عمليات الكتابة التي يشغّلها Telegram أحداث ترحيل المجموعة (migrate_to_chat_id، وتحديثات channels.telegram.groups) و/config set / /config unset (يتطلب تمكين الأوامر).التعطيل:الاستقصاء الطويل مقابل Webhook
الاستقصاء الطويل مقابل Webhook
channels.telegram.webhookUrl وchannels.telegram.webhookSecret؛ ويمكن اختياريًا تعيين webhookPath (الافتراضي /telegram-webhook)، وwebhookHost (الافتراضي 127.0.0.1)، وwebhookPort (الافتراضي 8787)، وwebhookCertPath (شهادة PEM موقعة ذاتيًا لإعدادات عنوان IP المباشر أو بلا نطاق).في وضع الاستقصاء الطويل، يحفظ OpenClaw علامة إعادة التشغيل المائية فقط بعد توزيع التحديث بنجاح؛ ويترك المعالِج الفاشل ذلك التحديث قابلًا لإعادة المحاولة في العملية نفسها بدلًا من وضع علامة اكتمال عليه.يرتبط المستمع المحلي بـ 127.0.0.1:8787 افتراضيًا. للدخول العام، ضع وكيلًا عكسيًا أمام المنفذ المحلي، أو عيّن webhookHost: "0.0.0.0" عمدًا.يتحقق وضع Webhook من حواجز الطلب ورمز Telegram السري ونص JSON، ثم يودع التحديث في قائمة انتظار الدخول الدائمة قبل إرجاع 200 فارغ. يتضمن التبنّي الدائم الناجح x-openclaw-delivery-accepted: durable؛ أما استجابات الصحة والتوجيه والمصادقة والتحقق وأخطاء التخزين فتحذف هذا الترويس. يمكن للوكلاء العكسيين ووحدات تحكّم المضيف اشتراط الترويس لتمييز تبنّي OpenClaw عن 200 فارغ عام دون استنتاج القبول من توقيت الاستجابة.يعالج OpenClaw بعد ذلك التحديث بصورة غير متزامنة عبر مسارات البوت نفسها الخاصة بكل محادثة/موضوع والمستخدمة في الاستقصاء الطويل، بحيث لا تؤخر دورات الوكيل البطيئة إقرار التسليم من Telegram.الحدود وإعادة المحاولة ووجهات CLI
الحدود وإعادة المحاولة ووجهات CLI
channels.telegram.textChunkLimitالقيمة الافتراضية 4000؛ يفضّلstreaming.chunkMode="newline"حدود الفقرات (الأسطر الفارغة) قبل التقسيم حسب الطول.channels.telegram.mediaMaxMb(القيمة الافتراضية 100) يضع حدًا أقصى لحجم الوسائط الواردة والصادرة.channels.telegram.mediaGroupFlushMs(القيمة الافتراضية 500، والنطاق 10-60000) يتحكم في مدة تخزين الألبومات/مجموعات الوسائط مؤقتًا قبل أن يرسلها OpenClaw كرسالة واردة واحدة. زِده إذا وصلت أجزاء الألبوم متأخرة؛ وقلّله لتقليل زمن استجابة الرد على الألبوم.channels.telegram.timeoutSecondsيتجاوز مهلة عميل API (تُطبّق القيمة الافتراضية لـ grammY إذا لم يُضبط). تقيّد عملاء البوت القيم المضبوطة التي تقل عن حاجز طلب النص/الكتابة الصادر البالغ 60 ثانية، كي لا يُجهض grammY تسليم الرد المرئي قبل أن يتمكن حاجز النقل والمسار الاحتياطي في OpenClaw من العمل. يظل الاستقصاء الطويل يستخدم حاجز طلبgetUpdatesمدته 45 ثانية كي لا تُترك عمليات الاستقصاء الخاملة بلا نهاية.channels.telegram.pollingStallThresholdMsقيمته الافتراضية 120000؛ اضبطه بين 30000 و600000 فقط عند حدوث عمليات إعادة تشغيل بسبب اكتشاف خاطئ لتوقف الاستقصاء.- يستخدم سجل سياق المجموعة
channels.telegram.historyLimitأوmessages.groupChat.historyLimit(القيمة الافتراضية 50)؛ ويؤدي0إلى تعطيله. - يُطبّع السياق الإضافي للرد/الاقتباس/إعادة التوجيه في نافذة سياق محادثة واحدة محددة عندما يكون Gateway قد رصد الرسائل الأصلية؛ وتوجد ذاكرة التخزين المؤقت للرسائل المرصودة في حالة Plugin ضمن SQLite في OpenClaw، بينما يستورد
openclaw doctor --fixالملفات الجانبية القديمة. لا يضمّن Telegram سوىreply_to_messageسطحي واحد لكل تحديث، لذلك تقتصر السلاسل الأقدم من ذاكرة التخزين المؤقت على حمولة البيانات هذه. - تتحكم قوائم السماح في Telegram أساسًا في مَن يمكنه تشغيل الوكيل، ولا تمثل حدًا كاملًا لتنقيح السياق الإضافي.
- سجل الرسائل المباشرة:
channels.telegram.dmHistoryLimit، وchannels.telegram.dms["<user_id>"].historyLimit. - ينطبق
channels.telegram.retryعلى مساعدات الإرسال في Telegram (CLI/الأدوات/الإجراءات) لأخطاء API الصادرة القابلة للاسترداد. يستخدم تسليم الرد النهائي الوارد إعادة محاولة محدودة وآمنة للإرسال عند حالات الفشل السابقة للاتصال، لكنه لا يعيد محاولة أغلفة الشبكة الملتبسة بعد الإرسال، إذ قد تؤدي إلى تكرار الرسائل المرئية.
openclaw message poll وتدعم موضوعات المنتدى:--poll-duration-seconds (5-600)، و--poll-anonymous، و--poll-public، و--thread-id (أو وجهة :topic:). يكرر --poll-option من 2 إلى 12 مرة (الحد الأقصى لخيارات Telegram).يدعم إرسال Telegram أيضًا --presentation مع كتل buttons للوحات المفاتيح المضمّنة (عندما يسمح channels.telegram.capabilities.inlineButtons بذلك)، و--pin أو --delivery '{"pin":true}' لطلب تسليم مثبّت عندما يستطيع البوت التثبيت في تلك الدردشة، و--force-document لإرسال الصور وملفات GIF ومقاطع الفيديو الصادرة كمستندات بدلًا من الرفع المضغوط/المتحرك/المرئي.تقييد الإجراءات: يعطّل channels.telegram.actions.sendMessage=false جميع الرسائل الصادرة بما فيها الاستطلاعات؛ ويعطّل channels.telegram.actions.poll=false إنشاء الاستطلاعات مع إبقاء عمليات الإرسال العادية مفعّلة.موافقات التنفيذ في Telegram
موافقات التنفيذ في Telegram
channels.telegram.execApprovals.enabled(يُفعّل"auto"عند إمكانية التعرّف على موافق واحد على الأقل)channels.telegram.execApprovals.approvers(يرجع إلى معرّفات المالك الرقمية منcommands.ownerAllowFrom)channels.telegram.execApprovals.target: dm(الافتراضي) |channel|bothagentFilter، وsessionFilter
channels.telegram.allowFrom وgroupAllowFrom وdefaultTo في مَن يمكنه التحدث إلى البوت وفي موضع إرساله للردود العادية، لكنها لا تجعل أي شخص موافقًا على التنفيذ. يؤدي أول اقتران معتمد عبر رسالة مباشرة إلى تهيئة commands.ownerAllowFrom عندما لا يوجد مالك للأوامر بعد، بحيث تعمل إعدادات المالك الواحد دون تكرار المعرّفات ضمن execApprovals.approvers.يعرض التسليم إلى القناة نص الأمر في الدردشة؛ لا تفعّل channel أو both إلا في المجموعات/الموضوعات الموثوقة. عندما تصل المطالبة إلى موضوع منتدى، يحافظ OpenClaw على الموضوع لمطالبة الموافقة والمتابعة. تنتهي صلاحية موافقات التنفيذ بعد 30 دقيقة افتراضيًا.تتطلب أزرار الموافقة المضمّنة أيضًا أن يسمح channels.telegram.capabilities.inlineButtons بالواجهة المستهدفة (dm أو group أو all). تُحل معرّفات الموافقة التي تبدأ بالبادئة plugin: عبر موافقات Plugin؛ أما غيرها فتُحل أولًا عبر موافقات التنفيذ.راجع موافقات التنفيذ.عناصر التحكم في ردود الأخطاء
عندما يواجه الوكيل خطأ في التسليم أو المزوّد، تتحكم سياسة الأخطاء في وصول رسائل الخطأ إلى دردشة Telegram:استكشاف الأخطاء وإصلاحها
لا يستجيب البوت لرسائل المجموعة التي لا تتضمن إشارة
لا يستجيب البوت لرسائل المجموعة التي لا تتضمن إشارة
- إذا كان
requireMention=false، فيجب أن يسمح وضع الخصوصية في Telegram بالرؤية الكاملة: BotFather /setprivacy-> Disable، ثم أزل البوت من المجموعة وأعد إضافته إليها. - يحذّر
openclaw channels statusعندما تتوقع الإعدادات رسائل مجموعة بلا إشارة. - يفحص
openclaw channels status --probeمعرّفات المجموعات الرقمية الصريحة؛ ولا يمكن فحص عضوية حرف البدل"*". - اختبار سريع للجلسة:
/activation always.
لا يرى البوت رسائل المجموعة إطلاقًا
لا يرى البوت رسائل المجموعة إطلاقًا
- عند وجود
channels.telegram.groups، يجب إدراج المجموعة (أو تضمين"*"). - تحقق من عضوية البوت في المجموعة.
- راجع
openclaw logs --followلمعرفة أسباب التخطي.
تعمل الأوامر جزئيًا أو لا تعمل إطلاقًا
تعمل الأوامر جزئيًا أو لا تعمل إطلاقًا
- صرّح بهوية المرسل (الاقتران و/أو
allowFromالرقمي)؛ يظل تصريح الأوامر ساريًا حتى عندما تكون سياسة المجموعةopen. - يعني
setMyCommands failedمعBOT_COMMANDS_TOO_MUCHأن القائمة الأصلية تحتوي على إدخالات أكثر من اللازم؛ قلّل أوامر Plugin أو Skills أو الأوامر المخصصة، أو عطّل القوائم الأصلية. - تكون استدعاءات بدء التشغيل
deleteMyCommands/setMyCommandsواستدعاءات الكتابةsendChatActionمحدودة، وتُعاد محاولتها مرة واحدة عبر مسار النقل الاحتياطي في Telegram عند انتهاء مهلة الطلب. تعني أخطاء الشبكة/الجلب المستمرة عادةً تعذّر الوصول عبر DNS/HTTPS إلىapi.telegram.org.
يبلّغ بدء التشغيل عن رمز غير مصرّح به
يبلّغ بدء التشغيل عن رمز غير مصرّح به
getMe returned 401هو فشل مصادقة في Telegram لرمز البوت المضبوط. انسخ الرمز مجددًا أو أعد توليده في BotFather، ثم حدّثchannels.telegram.botTokenأوtokenFileأوaccounts.<id>.botTokenأوTELEGRAM_BOT_TOKEN(الحساب الافتراضي).- يُعد
deleteWebhook 401 Unauthorizedأثناء بدء التشغيل فشل مصادقة أيضًا؛ فمعاملته باعتباره «لا يوجد Webhook» لن تؤدي إلا إلى تأجيل فشل الرمز غير الصالح نفسه حتى استدعاء API لاحق.
عدم استقرار الاستقصاء أو الشبكة
عدم استقرار الاستقصاء أو الشبكة
- يمكن أن يؤدي Node 22+ مع جلب/وكيل مخصص إلى سلوك إجهاض فوري إذا لم تتطابق أنواع
AbortSignal. - تحل بعض المضيفات
api.telegram.orgإلى IPv6 أولًا؛ ويتسبب خروج IPv6 المعطّل في حالات فشل متقطعة لـ API. - تُعاد محاولة السجلات التي تحتوي على
TypeError: fetch failedأوNetwork request for 'getUpdates' failed!باعتبارها أخطاء شبكة قابلة للاسترداد. - أثناء بدء تشغيل الاستقصاء، يعيد OpenClaw استخدام فحص
getMeالناجح عند بدء التشغيل لصالح grammY، كي لا يحتاج المشغّل إلىgetMeثانٍ قبل أولgetUpdates. - إذا فشل
deleteWebhookبخطأ شبكة عابر أثناء بدء تشغيل الاستقصاء، ينتقل OpenClaw إلى الاستقصاء الطويل بدلًا من إجراء استدعاء آخر لمستوى التحكم قبل الاستقصاء. يظهر Webhook الذي لا يزال نشطًا عندئذٍ كتعارضgetUpdates؛ ويعيد OpenClaw بناء النقل ويحاول تنظيف Webhook مجددًا. - إذا أُعيد تدوير مقابس Telegram وفق وتيرة ثابتة قصيرة، فتحقق من انخفاض
channels.telegram.timeoutSeconds؛ إذ تقيّد عملاء البوت القيم المضبوطة التي تقل عن حواجز الطلب الصادر وgetUpdates، لكن الإصدارات الأقدم كان يمكن أن تُجهض كل عملية استقصاء أو رد عند ضبطها دون تلك الحواجز. - يعني
Polling stall detectedفي السجلات أن OpenClaw يعيد تشغيل الاستقصاء ويعيد بناء النقل بعد مرور 120 ثانية دون اكتمال إثبات حيوية الاستقصاء الطويل افتراضيًا. - يحذّر
openclaw channels status --probeوopenclaw doctorعندما لا يكون حساب استقصاء قيد التشغيل قد أكملgetUpdatesبعد مهلة بدء التشغيل، أو عندما لا يكون حساب Webhook قيد التشغيل قد أكملsetWebhookبعد مهلة بدء التشغيل، أو عندما يكون آخر نشاط ناجح لنقل الاستقصاء قديمًا. - ارفع
channels.telegram.pollingStallThresholdMsفقط عندما تكون استدعاءاتgetUpdatesطويلة التشغيل سليمة، لكن مضيفك لا يزال يبلّغ عن عمليات إعادة تشغيل خاطئة بسبب توقف الاستقصاء. تشير حالات التوقف المستمرة عادةً إلى مشكلات في الوكيل أو DNS أو IPv6 أو خروج TLS إلىapi.telegram.org. - يراعي Telegram متغيرات بيئة وكيل العملية لنقل Bot API:
HTTP_PROXYوHTTPS_PROXYوALL_PROXY، وصيغها المكتوبة بأحرف صغيرة. لا يزال بإمكانNO_PROXY/no_proxyتجاوزapi.telegram.org. - إذا كان
OPENCLAW_PROXY_URLمضبوطًا لبيئة خدمة ولا توجد متغيرات بيئة وكيل قياسية، يستخدم Telegram عنوان URL هذا لنقل Bot API أيضًا. - على مضيفات VPS ذات خروج مباشر/TLS غير مستقر، وجّه استدعاءات Telegram API عبر وكيل:
- يستخدم Node 22+ افتراضيًا
autoSelectFamily=true(باستثناء WSL2). يراعي ترتيب نتائج DNS في Telegram القيمةOPENCLAW_TELEGRAM_DNS_RESULT_ORDER، ثمchannels.telegram.network.dnsResultOrder، ثم الإعداد الافتراضي للعملية (على سبيل المثالNODE_OPTIONS=--dns-result-order=ipv4first)؛ ويعود إلىipv4firstعلى Node 22+ إذا لم ينطبق أي منها. - على WSL2، أو عندما يعمل السلوك المعتمد على IPv4 فقط بشكل أفضل، افرض تحديد العائلة:
- إجابات نطاق قياس الأداء RFC 2544 (
198.18.0.0/15) مسموح بها بالفعل افتراضيًا لتنزيل وسائط Telegram. إذا أعاد وكيل fake-IP موثوق أو وكيل شفاف كتابةapi.telegram.orgإلى عنوان خاص/داخلي/ذي استخدام خاص آخر أثناء تنزيل الوسائط، ففعّل التجاوز الخاص بـ Telegram فقط:
- يتوفر خيار التفعيل نفسه لكل حساب على حدة في
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - إذا كان وكيلك يحل أسماء مضيفي وسائط Telegram إلى
198.18.x.x، فاترك العلامة الخطرة معطلة أولًا — فهذا النطاق مسموح به بالفعل افتراضيًا.
- تجاوزات البيئة المؤقتة:
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1،OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1،OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first. - تحقق من إجابات DNS:
مرجع الإعداد
المرجع الأساسي: مرجع الإعداد - Telegram.حقول Telegram عالية الدلالة
حقول Telegram عالية الدلالة
- بدء التشغيل/المصادقة:
enabled،botToken،tokenFile(يجب أن يكون ملفًا عاديًا؛ تُرفض الروابط الرمزية)،accounts.* - التحكم في الوصول:
dmPolicy،allowFrom،groupPolicy،groupAllowFrom،groups،groups.*.topics.*، وbindings[]في المستوى الأعلى (type: "acp") - الإعدادات الافتراضية للموضوعات: ينطبق
groups.<chatId>.topics."*"على موضوعات المنتدى غير المطابقة؛ وتتجاوزه معرّفات الموضوعات المطابقة تمامًا - الموافقات على التنفيذ:
execApprovals،accounts.*.execApprovals - الأوامر/القائمة:
commands.native،commands.nativeSkills،customCommands - سلاسل المحادثات/الردود:
replyToMode،threadBindings - البث:
streaming(الأوضاعoff | partial | block | progress)،streaming.preview.toolProgress - التنسيق/التسليم:
textChunkLimit،streaming.chunkMode،richMessages،markdown.tables(off | bullets | code | block)،linkPreview،responsePrefix - الوسائط/الشبكة:
mediaMaxMb،mediaGroupFlushMs،timeoutSeconds،pollingStallThresholdMs،retry،network.autoSelectFamily،network.dangerouslyAllowPrivateNetwork،proxy - جذر API المخصص:
apiRoot(جذر Bot API فقط؛ لا تُضمّن/bot<TOKEN>)،trustedLocalFileRoots(جذورfile_pathالمطلقة لـ Bot API المستضاف ذاتيًا) - Webhook:
webhookUrl،webhookSecret،webhookPath،webhookHost،webhookPort،webhookCertPath - الإجراءات/الإمكانات:
capabilities.inlineButtons،actions.sendMessage|editMessage|deleteMessage|reactions|sticker|createForumTopic|editForumTopic - التفاعلات:
reactionNotifications،reactionLevel - الأخطاء:
errorPolicy،errorCooldownMs،silentErrorReplies - عمليات الكتابة/السجل:
configWrites،historyLimit،dmHistoryLimit،dms.*.historyLimit
channels.telegram.defaultAccount (أو ضمّن channels.telegram.accounts.default) لجعل التوجيه الافتراضي صريحًا. وإلا فسيعود OpenClaw إلى أول معرّف حساب بعد تسويته، وسيصدر openclaw doctor تحذيرًا. ترث الحسابات المسماة channels.telegram.allowFrom / groupAllowFrom، ولكنها لا ترث قيم accounts.default.*.