Mainstream messaging
Telegram
جاهز للإنتاج لرسائل البوت المباشرة والمجموعات عبر grammY. وضع الاستقصاء الطويل هو الوضع الافتراضي؛ ووضع Webhook اختياري.
سياسة الرسائل المباشرة الافتراضية لـ Telegram هي الاقتران.
تشخيصات متعددة القنوات وأدلة إصلاح.
أنماط وأمثلة كاملة لإعدادات القنوات.
الإعداد السريع
Create the bot token in BotFather
افتح Telegram وتحدث مع @BotFather (تأكد أن المعرّف هو بالضبط @BotFather).
شغّل /newbot، واتبع المطالبات، واحفظ الرمز المميز.
Configure token and DM policy
{channels: {telegram: { enabled: true, botToken: "123:abc", dmPolicy: "pairing", groups: { "*": { requireMention: true } },},},}بديل البيئة: TELEGRAM_BOT_TOKEN=... (الحساب الافتراضي فقط).
لا يستخدم Telegram الأمر openclaw channels login telegram؛ اضبط الرمز المميز في الإعدادات/البيئة، ثم ابدأ Gateway.
Start gateway and approve first DM
openclaw gatewayopenclaw pairing list telegramopenclaw pairing approve telegram <CODE>تنتهي صلاحية رموز الاقتران بعد ساعة واحدة.
Add the bot to a group
أضف البوت إلى مجموعتك، ثم احصل على كلا المعرّفين اللذين يحتاجهما وصول المجموعة:
- معرّف مستخدم Telegram الخاص بك، ويُستخدم في
allowFrom/groupAllowFrom - معرّف دردشة مجموعة Telegram، ويُستخدم مفتاحًا ضمن
channels.telegram.groups
للإعداد لأول مرة، احصل على معرّف دردشة المجموعة من openclaw logs --follow، أو بوت يمرر المعرّفات، أو Bot API getUpdates. بعد السماح للمجموعة، يمكن لـ /whoami@<bot_username> تأكيد معرّفات المستخدم والمجموعة.
معرّفات مجموعات Telegram الفائقة السالبة التي تبدأ بـ -100 هي معرّفات دردشة مجموعات. ضعها ضمن channels.telegram.groups، وليس ضمن groupAllowFrom.
إعدادات جهة Telegram
Privacy mode and group visibility
تعتمد بوتات Telegram افتراضيًا على وضع الخصوصية، الذي يحد من رسائل المجموعات التي تستقبلها.
إذا كان يجب على البوت رؤية كل رسائل المجموعة، فإما:
- عطّل وضع الخصوصية عبر
/setprivacy، أو - اجعل البوت مشرفًا في المجموعة.
عند تبديل وضع الخصوصية، أزل البوت ثم أعد إضافته في كل مجموعة حتى يطبق Telegram التغيير.
Group permissions
تتحكم إعدادات مجموعة Telegram في حالة المشرف.
تستقبل بوتات المشرفين كل رسائل المجموعة، وهو أمر مفيد لسلوك المجموعة الدائم التشغيل.
Helpful BotFather toggles
/setjoingroupsللسماح بإضافات المجموعات أو رفضها/setprivacyلسلوك رؤية المجموعة
التحكم في الوصول والتفعيل
DM policy
يتحكم 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 الرسمية:
curl "https://api.telegram.org/bot<bot_token>/getUpdates"طريقة طرف ثالث (أقل خصوصية): @userinfobot أو @getidsbot.
Group policy and allowlists
ينطبق عنصران للتحكم معًا:
-
ما المجموعات المسموح بها (
channels.telegram.groups)- لا توجد إعدادات
groups:- مع
groupPolicy: "open": يمكن لأي مجموعة اجتياز فحوصات معرّف المجموعة - مع
groupPolicy: "allowlist"(افتراضي): تُحظر المجموعات حتى تضيف إدخالاتgroups(أو"*")
- مع
- تم ضبط
groups: تعمل كقائمة سماح (معرّفات صريحة أو"*")
- لا توجد إعدادات
-
ما المرسلون المسموح بهم في المجموعات (
channels.telegram.groupPolicy)openallowlist(افتراضي)disabled
يُستخدم groupAllowFrom لتصفية مرسلي المجموعة. إذا لم يُضبط، يعود Telegram إلى allowFrom.
يجب أن تكون إدخالات groupAllowFrom معرّفات مستخدمي Telegram رقمية (تُوحّد البادئات telegram: / tg:).
لا تضع معرّفات دردشة مجموعات Telegram أو المجموعات الفائقة في groupAllowFrom. تنتمي معرّفات الدردشة السالبة ضمن channels.telegram.groups.
تُتجاهل الإدخالات غير الرقمية لتفويض المرسل.
حد الأمان (2026.2.25+): لا يرث تفويض مرسل المجموعة موافقات مخزن اقتران الرسائل المباشرة.
يبقى الاقتران خاصًا بالرسائل المباشرة فقط. للمجموعات، اضبط groupAllowFrom أو allowFrom لكل مجموعة/موضوع.
إذا لم يُضبط groupAllowFrom، يعود Telegram إلى إعداد allowFrom، وليس مخزن الاقتران.
نمط عملي لبوتات المالك الواحد: اضبط معرّف مستخدمك في channels.telegram.allowFrom، واترك groupAllowFrom غير مضبوط، واسمح بالمجموعات المستهدفة ضمن channels.telegram.groups.
ملاحظة وقت التشغيل: إذا كان channels.telegram مفقودًا تمامًا، فإن وقت التشغيل يستخدم افتراضيًا groupPolicy="allowlist" بإغلاق آمن ما لم يُضبط channels.defaults.groupPolicy صراحة.
إعداد مجموعة لمالك فقط:
{channels: {telegram: { enabled: true, dmPolicy: "pairing", allowFrom: ["<YOUR_TELEGRAM_USER_ID>"], groupPolicy: "allowlist", groups: { "<GROUP_CHAT_ID>": { requireMention: true, }, },},},}اختبره من المجموعة باستخدام @<bot_username> ping. لا تؤدي رسائل المجموعة العادية إلى تشغيل البوت عندما تكون requireMention: true.
مثال: السماح لأي عضو في مجموعة محددة واحدة:
{channels: {telegram: { groups: { "-1001234567890": { groupPolicy: "open", requireMention: false, }, },},},}مثال: السماح لمستخدمين محددين فقط داخل مجموعة محددة واحدة:
{channels: {telegram: { groups: { "-1001234567890": { requireMention: true, allowFrom: ["8734062810", "745123456"], }, },},},}Mention behavior
تتطلب ردود المجموعات ذكرًا افتراضيًا.
يمكن أن يأتي الذكر من:
- ذكر
@botusernameأصلي، أو - أنماط الذكر في:
agents.list[].groupChat.mentionPatternsmessages.groupChat.mentionPatterns
مفاتيح تبديل الأوامر على مستوى الجلسة:
/activation always/activation mention
تحدّث هذه حالة الجلسة فقط. استخدم الإعدادات للاستمرارية.
مثال إعدادات دائم:
{channels: {telegram: { groups: { "*": { requireMention: false }, },},},}الحصول على معرّف دردشة المجموعة:
- مرّر رسالة مجموعة إلى
@userinfobot/@getidsbot - أو اقرأ
chat.idمنopenclaw logs --follow - أو افحص Bot API
getUpdates - بعد السماح للمجموعة، شغّل
/whoami@<bot_username>إذا كانت الأوامر الأصلية مفعلة
سلوك وقت التشغيل
- Telegram مملوك لعملية Gateway.
- التوجيه حتمي: ترد الرسائل الواردة من Telegram إلى Telegram (لا يختار النموذج القنوات).
- تُوحّد الرسائل الواردة في مغلف القناة المشترك مع بيانات الرد الوصفية، وعناصر نائبة للوسائط، وسياق سلسلة ردود مستمر لردود Telegram التي رصدها Gateway.
- تُعزل جلسات المجموعات حسب معرّف المجموعة. تضيف موضوعات المنتدى
:topic:<threadId>لإبقاء الموضوعات معزولة. - يمكن لرسائل الرسائل المباشرة حمل
message_thread_id؛ يحافظ OpenClaw على معرّف الخيط للردود لكنه يُبقي الرسائل المباشرة على الجلسة المسطحة افتراضيًا. اضبطchannels.telegram.dm.threadReplies: "inbound"، أوchannels.telegram.direct.<chatId>.threadReplies: "inbound"، أوrequireTopic: true، أو إعداد موضوع مطابقًا عندما تريد عمدًا عزل جلسات موضوعات الرسائل المباشرة. - يستخدم الاستقصاء الطويل مشغّل grammY مع تسلسل لكل دردشة/كل خيط. يستخدم تزامن مصرف المشغّل العام
agents.defaults.maxConcurrent. - الاستقصاء الطويل محمي داخل كل عملية Gateway بحيث يمكن لمستطلع نشط واحد فقط استخدام رمز بوت في كل مرة. إذا كنت لا تزال ترى تعارضات
getUpdates409، فمن المرجح أن Gateway آخر من OpenClaw أو سكربتًا أو مستطلعًا خارجيًا يستخدم الرمز نفسه. - يتم تشغيل عمليات إعادة تشغيل مراقب الاستقصاء الطويل بعد 120 ثانية بدون اكتمال حيوية
getUpdatesافتراضيًا. زدchannels.telegram.pollingStallThresholdMsفقط إذا كان نشرُك لا يزال يرى عمليات إعادة تشغيل خاطئة لتوقف الاستقصاء أثناء العمل طويل المدى. القيمة بالميلي ثانية ومسموح بها من30000إلى600000؛ وتُدعم التجاوزات لكل حساب. - لا يدعم Telegram Bot API إيصالات القراءة (
sendReadReceiptsلا ينطبق).
مرجع الميزات
Live stream preview (message edits)
يمكن لـ OpenClaw بث ردود جزئية في الوقت الحقيقي:
- الدردشات المباشرة: رسالة معاينة +
editMessageText - المجموعات/الموضوعات: رسالة معاينة +
editMessageText
المتطلب:
channels.telegram.streamingهيoff | partial | block | progress(الافتراضي:partial)- يحافظ
progressعلى مسودة حالة واحدة قابلة للتحرير لتقدم الأدوات، ويمحوها عند الاكتمال، ويرسل الإجابة النهائية كرسالة عادية - يتحكم
streaming.preview.toolProgressفي ما إذا كانت تحديثات الأدوات/التقدم تعيد استخدام رسالة المعاينة نفسها بعد تحريرها (الافتراضي:trueعندما يكون بث المعاينة نشطًا) - يتحكم
streaming.preview.commandTextفي تفاصيل الأمر/التنفيذ داخل أسطر تقدم الأدوات تلك:raw(الافتراضي، يحافظ على السلوك الصادر) أوstatus(تسمية الأداة فقط) - يتم اكتشاف
channels.telegram.streamModeالقديم وقيمstreamingالمنطقية؛ شغّلopenclaw doctor --fixلترحيلها إلىchannels.telegram.streaming.mode
تحديثات معاينة تقدم الأدوات هي أسطر الحالة القصيرة التي تظهر أثناء تشغيل الأدوات، مثل تنفيذ الأوامر، وقراءة الملفات، وتحديثات التخطيط، أو ملخصات التصحيحات. يبقي Telegram هذه مفعلة افتراضيًا لمطابقة سلوك OpenClaw الصادر من v2026.4.22 وما بعده. للإبقاء على المعاينة المحررة لنص الإجابة مع إخفاء أسطر تقدم الأدوات، عيّن:
{ "channels": { "telegram": { "streaming": { "mode": "partial", "preview": { "toolProgress": false } } } }}للإبقاء على تقدم الأدوات مرئيًا مع إخفاء نص الأمر/التنفيذ، عيّن:
{ "channels": { "telegram": { "streaming": { "mode": "partial", "preview": { "commandText": "status" } } } }}استخدم وضع progress عندما تريد تقدم أدوات مرئيًا دون تحرير الإجابة النهائية في تلك الرسالة نفسها. ضع سياسة نص الأمر تحت streaming.progress:
{ "channels": { "telegram": { "streaming": { "mode": "progress", "progress": { "toolProgress": true, "commandText": "status" } } } }}استخدم streaming.mode: "off" فقط عندما تريد تسليمًا نهائيًا فقط: تُعطّل تعديلات معاينة Telegram ويتم كتم رسائل الأدوات/التقدم العامة بدلًا من إرسالها كرسائل حالة مستقلة. تظل مطالبات الموافقة، وحمولات الوسائط، والأخطاء تمر عبر التسليم النهائي العادي. استخدم streaming.preview.toolProgress: false عندما تريد فقط الإبقاء على تعديلات معاينة الإجابة مع إخفاء أسطر حالة تقدم الأدوات.
للردود النصية فقط:
- معاينات الرسائل المباشرة/المجموعات/المواضيع القصيرة: يحتفظ OpenClaw برسالة المعاينة نفسها ويجري التحرير النهائي في مكانه
- الردود النصية النهائية الطويلة التي تنقسم إلى عدة رسائل Telegram تعيد استخدام المعاينة الحالية كأول جزء نهائي عندما يكون ذلك ممكنًا، ثم ترسل الأجزاء المتبقية فقط
- الردود النهائية في وضع التقدم تمحو مسودة الحالة وتستخدم التسليم النهائي العادي بدلًا من تحرير المسودة لتصبح الإجابة
- إذا فشل التحرير النهائي قبل تأكيد النص المكتمل، يستخدم OpenClaw التسليم النهائي العادي وينظف المعاينة القديمة
للردود المعقدة (مثل حمولات الوسائط)، يعود OpenClaw إلى التسليم النهائي العادي ثم ينظف رسالة المعاينة.
بث المعاينة منفصل عن بث الكتل. عند تفعيل بث الكتل صراحةً لـ Telegram، يتجاوز OpenClaw بث المعاينة لتجنب البث المزدوج.
بث الاستدلال الخاص بـ Telegram فقط:
- يرسل
/reasoning streamالاستدلال إلى المعاينة المباشرة أثناء التوليد - تُحذف معاينة الاستدلال بعد التسليم النهائي؛ استخدم
/reasoning onعندما يجب أن يظل الاستدلال مرئيًا - تُرسل الإجابة النهائية من دون نص الاستدلال
التنسيق والرجوع إلى HTML
يستخدم النص الصادر parse_mode: "HTML" في Telegram.
- يُعرض النص الشبيه بـ Markdown كـ HTML آمن لـ Telegram.
- تُحفظ وسوم HTML المدعومة في Telegram؛ ويُهرّب HTML غير المدعوم.
- إذا رفض Telegram HTML المحلل، يعيد OpenClaw المحاولة كنص عادي.
تكون معاينات الروابط مفعلة افتراضيًا ويمكن تعطيلها باستخدام channels.telegram.linkPreview: false.
الأوامر الأصلية والأوامر المخصصة
تتم معالجة تسجيل قائمة أوامر Telegram عند بدء التشغيل باستخدام setMyCommands.
الإعدادات الافتراضية للأوامر الأصلية:
- يفعّل
commands.native: "auto"الأوامر الأصلية لـ Telegram
أضف إدخالات قائمة أوامر مخصصة:
{channels: {telegram: { customCommands: [ { command: "backup", description: "Git backup" }, { command: "generate", description: "Create an image" }, ],},},}القواعد:
- تُطبّع الأسماء (إزالة
/في البداية، وتحويلها إلى أحرف صغيرة) - النمط الصالح:
a-z،0-9،_، الطول1..32 - لا يمكن للأوامر المخصصة تجاوز الأوامر الأصلية
- تُتجاوز التعارضات/التكرارات وتُسجّل
ملاحظات:
- الأوامر المخصصة هي إدخالات قائمة فقط؛ ولا تنفذ السلوك تلقائيًا
- يمكن لأوامر plugin/skill أن تستمر في العمل عند كتابتها حتى لو لم تظهر في قائمة Telegram
إذا عُطّلت الأوامر الأصلية، تُزال الأوامر المضمنة. قد تظل أوامر مخصصة/Plugin قادرة على التسجيل إذا كانت مهيأة.
إخفاقات الإعداد الشائعة:
- يعني
setMyCommands failedمعBOT_COMMANDS_TOO_MUCHأن قائمة Telegram ما زالت تتجاوز الحد بعد التقليص؛ قلّل أوامر plugin/skill/المخصصة أو عطّل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)
عند تثبيت Plugin device-pair:
- يولّد
/pairرمز الإعداد - الصق الرمز في تطبيق iOS
- يعرض
/pair pendingالطلبات المعلقة (بما في ذلك الدور/النطاقات) - وافق على الطلب:
/pair approve <requestId>للموافقة الصريحة/pair approveعندما يكون هناك طلب معلق واحد فقط/pair approve latestللأحدث
يحمل رمز الإعداد رمز تمهيد قصير العمر. تُبقي عملية تسليم التمهيد المضمنة رمز العقدة الأساسي عند scopes: []؛ وأي رمز مشغل مُسلّم يبقى مقيدًا بـ operator.approvals وoperator.read وoperator.talk.secrets وoperator.write. فحوصات نطاق التمهيد مسبوقة بالدور، لذلك لا تلبي قائمة السماح الخاصة بالمشغل إلا طلبات المشغل؛ ما زالت الأدوار غير المشغّلة تحتاج إلى نطاقات تحت بادئة الدور الخاصة بها.
إذا أعاد جهاز المحاولة بتفاصيل مصادقة متغيرة (مثل الدور/النطاقات/المفتاح العام)، يُستبدل الطلب المعلق السابق ويستخدم الطلب الجديد requestId مختلفًا. أعد تشغيل /pair pending قبل الموافقة.
مزيد من التفاصيل: الإقران.
الأزرار المضمنة
هيّئ نطاق لوحة المفاتيح المضمنة:
{channels: {telegram: { capabilities: { inlineButtons: "allowlist", },},},}تجاوز لكل حساب:
{channels: {telegram: { accounts: { main: { capabilities: { inlineButtons: "allowlist", }, }, },},},}النطاقات:
offdmgroupallallowlist(الافتراضي)
يطابق capabilities: ["inlineButtons"] القديم إلى inlineButtons: "all".
مثال إجراء رسالة:
{action: "send",channel: "telegram",to: "123456789",message: "Choose an option:",buttons: [[ { text: "Yes", callback_data: "yes" }, { text: "No", callback_data: "no" },],[{ text: "Cancel", callback_data: "cancel" }],],}تُمرر نقرات Callback إلى الوكيل كنص:
callback_data: <value>
إجراءات رسائل Telegram للوكلاء والأتمتة
تتضمن إجراءات أدوات Telegram:
sendMessage(to،content،mediaUrlاختياري،replyToMessageId،messageThreadId)react(chatId،messageId،emoji)deleteMessage(chatId،messageId)editMessage(chatId،messageId،content)createForumTopic(chatId،name،iconColorاختياري،iconCustomEmojiId)
تكشف إجراءات رسائل القناة أسماء مستعارة سهلة الاستخدام (send، react، delete، edit، sticker، sticker-search، topic-create).
عناصر تحكم الحجب:
channels.telegram.actions.sendMessagechannels.telegram.actions.deleteMessagechannels.telegram.actions.reactionschannels.telegram.actions.sticker(الافتراضي: معطل)
ملاحظة: edit وtopic-create مفعلان حاليًا افتراضيًا وليست لهما مفاتيح تبديل channels.telegram.actions.* منفصلة.
تستخدم الإرسالات وقت التشغيل لقطة الإعداد/الأسرار النشطة (بدء التشغيل/إعادة التحميل)، لذلك لا تجري مسارات الإجراءات إعادة حل SecretRef مخصصة لكل إرسال.
دلالات إزالة التفاعل: /tools/reactions
وسوم سلاسل الرد
يدعم Telegram وسوم سلاسل رد صريحة في المخرجات المولدة:
- يرد
[[reply_to_current]]على الرسالة التي شغّلت الطلب - يرد
[[reply_to:<id>]]على معرف رسالة Telegram محدد
يتحكم channels.telegram.replyToMode في المعالجة:
off(الافتراضي)firstall
عند تفعيل سلاسل الرد وتوفر نص Telegram الأصلي أو التعليق، يدرج OpenClaw مقتطف اقتباس أصلي من Telegram تلقائيًا. يحد Telegram نص الاقتباس الأصلي عند 1024 وحدة ترميز UTF-16، لذلك تُقتبس الرسائل الأطول من البداية وتعود إلى رد عادي إذا رفض Telegram الاقتباس.
ملاحظة: يعطل off سلاسل الرد الضمنية. لا تزال وسوم [[reply_to_*]] الصريحة محترمة.
مواضيع المنتدى وسلوك السلاسل
المجموعات الفائقة للمنتدى:
- تضيف مفاتيح جلسة الموضوع
:topic:<threadId> - تستهدف الردود وإجراءات الكتابة سلسلة الموضوع
- مسار إعداد الموضوع:
channels.telegram.groups.<chatId>.topics.<threadId>
حالة خاصة للموضوع العام (threadId=1):
- تحذف إرسالات الرسائل
message_thread_id(يرفض TelegramsendMessage(...thread_id=1)) - ما زالت إجراءات الكتابة تتضمن
message_thread_id
توريث الموضوع: ترث إدخالات الموضوع إعدادات المجموعة ما لم تُتجاوز (requireMention، allowFrom، skills، systemPrompt، enabled، groupPolicy).
agentId خاص بالموضوع فقط ولا يرث من الإعدادات الافتراضية للمجموعة.
توجيه الوكيل لكل موضوع: يمكن لكل موضوع التوجيه إلى وكيل مختلف بتعيين agentId في إعداد الموضوع. يمنح هذا كل موضوع مساحة عمل وذاكرة وجلسة معزولة خاصة به. مثال:
{ channels: { telegram: { groups: { "-1001234567890": { topics: { "1": { agentId: "main" }, // General topic → main agent "3": { agentId: "zu" }, // Dev topic → zu agent "5": { agentId: "coder" } // Code review → coder agent } } } } }}يصبح لكل موضوع عندئذ مفتاح جلسة خاص به: agent:zu:telegram:group:-1001234567890:topic:3
ربط موضوع ACP الدائم: يمكن لموضوعات المنتدى تثبيت جلسات حزمة ACP عبر روابط ACP typed ذات المستوى الأعلى (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 بتوجيه الرسائل المباشرة وبيانات الرد الوصفية في جلسات مسطحة افتراضيا؛ ولا تستخدم مفاتيح جلسات مدركة للمحادثات إلا عند تكوينها باستخدام threadReplies: "inbound" أو threadReplies: "always" أو requireTopic: true أو تكوين موضوع مطابق. استخدم channels.telegram.dm.threadReplies ذي المستوى الأعلى للقيمة الافتراضية للحساب، أو direct.<chatId>.threadReplies لرسالة مباشرة واحدة.
الصوت والفيديو والملصقات
الرسائل الصوتية
يميز Telegram بين الملاحظات الصوتية والملفات الصوتية.
- الافتراضي: سلوك الملف الصوتي
- الوسم
[[audio_as_voice]]في رد الوكيل لفرض الإرسال كملاحظة صوتية - تُؤطر نصوص الملاحظات الصوتية الواردة كنص مولد آليا وغير موثوق في سياق الوكيل؛ ويظل اكتشاف الإشارات يستخدم النص الخام بحيث تستمر الرسائل الصوتية المحكومة بالإشارات في العمل.
مثال إجراء الرسالة:
{action: "send",channel: "telegram",to: "123456789",media: "https://example.com/voice.ogg",asVoice: true,}رسائل الفيديو
يميز Telegram بين ملفات الفيديو وملاحظات الفيديو.
مثال إجراء الرسالة:
{action: "send",channel: "telegram",to: "123456789",media: "https://example.com/video.mp4",asVideoNote: true,}لا تدعم ملاحظات الفيديو التسميات التوضيحية؛ يُرسل نص الرسالة المقدم بشكل منفصل.
الملصقات
معالجة الملصقات الواردة:
- WEBP ثابت: يُنزل ويُعالج (العنصر النائب
<media:sticker>) - TGS متحرك: يُتخطى
- WEBM فيديو: يُتخطى
حقول سياق الملصق:
Sticker.emojiSticker.setNameSticker.fileIdSticker.fileUniqueIdSticker.cachedDescription
ملف ذاكرة التخزين المؤقت للملصقات:
~/.openclaw/telegram/sticker-cache.json
توصف الملصقات مرة واحدة (عند الإمكان) وتُخزن مؤقتا لتقليل استدعاءات الرؤية المتكررة.
تفعيل إجراءات الملصقات:
{channels: {telegram: { actions: { sticker: true, },},},}إجراء إرسال ملصق:
{action: "sticker",channel: "telegram",to: "123456789",fileId: "CAACAgIAAxkBAAI...",}البحث في الملصقات المخزنة مؤقتا:
{action: "sticker-search",channel: "telegram",query: "cat waving",limit: 5,}إشعارات التفاعلات
تصل تفاعلات Telegram كتحديثات 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 لرسالة واردة.
ترتيب الحل:
channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- رجوع احتياطي إلى إيموجي هوية الوكيل (
agents.list[].identity.emoji، وإلا "👀")
ملاحظات:
- يتوقع Telegram إيموجي unicode (على سبيل المثال "👀").
- استخدم
""لتعطيل التفاعل لقناة أو حساب.
كتابات التكوين من أحداث وأوامر Telegram
تكون كتابات تكوين القناة مفعلة افتراضيا (configWrites !== false).
تشمل الكتابات المشغلة من Telegram:
- أحداث ترحيل المجموعة (
migrate_to_chat_id) لتحديثchannels.telegram.groups /config setو/config unset(يتطلب تفعيل الأوامر)
التعطيل:
{channels: {telegram: { configWrites: false,},},}الاستقصاء الطويل مقابل Webhook
الافتراضي هو الاستقصاء الطويل. لوضع Webhook عيّن channels.telegram.webhookUrl وchannels.telegram.webhookSecret؛ اختياريا webhookPath وwebhookHost وwebhookPort (القيم الافتراضية /telegram-webhook و127.0.0.1 و8787).
في وضع الاستقصاء الطويل، يحفظ OpenClaw علامة إعادة التشغيل المائية فقط بعد إرسال التحديث بنجاح. إذا فشل معالج، يظل ذلك التحديث قابلا لإعادة المحاولة في العملية نفسها ولا يُكتب كمكتمل لإزالة تكرار إعادة التشغيل.
يرتبط المستمع المحلي بـ 127.0.0.1:8787. للدخول العام، إما ضع وكيلا عكسيا أمام المنفذ المحلي أو عيّن webhookHost: "0.0.0.0" عن قصد.
يتحقق وضع Webhook من حراس الطلب، ورمز Telegram السري، وجسم JSON قبل إرجاع 200 إلى Telegram.
يعالج OpenClaw بعد ذلك التحديث بشكل غير متزامن عبر المسارات نفسها لكل دردشة/لكل موضوع في البوت المستخدمة في الاستقصاء الطويل، لذلك لا تجعل دورات الوكيل البطيئة ACK التسليم الخاص بـ Telegram منتظرا.
الحدود وإعادة المحاولة وأهداف CLI
- القيمة الافتراضية لـ
channels.telegram.textChunkLimitهي 4000. - يفضل
channels.telegram.chunkMode="newline"حدود الفقرات (الأسطر الفارغة) قبل التقسيم حسب الطول. - يحد
channels.telegram.mediaMaxMb(الافتراضي 100) حجم وسائط Telegram الواردة والصادرة. - يتحكم
channels.telegram.mediaGroupFlushMs(الافتراضي 500) في مدة تخزين ألبومات/مجموعات وسائط Telegram مؤقتا قبل أن يرسلها OpenClaw كرسالة واردة واحدة. زِدها إذا كانت أجزاء الألبوم تصل متأخرة؛ وقللها لتقليل زمن تأخر الرد على الألبوم. - يتجاوز
channels.telegram.timeoutSecondsمهلة عميل API في Telegram (إذا لم يُعين، تطبق القيمة الافتراضية لـ grammY). تقيّد عملاء البوت القيم المكوّنة الأقل من حارس طلب النص/الكتابة الصادر البالغ 60 ثانية حتى لا يوقف grammY تسليم الرد المرئي قبل أن يتمكن حارس نقل OpenClaw والرجوع الاحتياطي من العمل. لا يزال الاستقصاء الطويل يستخدم حارس طلبgetUpdatesمدته 45 ثانية حتى لا تُترك عمليات الاستقصاء الخاملة إلى أجل غير محدد. - القيمة الافتراضية لـ
channels.telegram.pollingStallThresholdMsهي120000؛ اضبطها بين30000و600000فقط لحالات إعادة تشغيل تعثر الاستقصاء الإيجابية الكاذبة. - يستخدم سجل سياق المجموعة
channels.telegram.historyLimitأوmessages.groupChat.historyLimit(الافتراضي 50)؛ وتقوم0بالتعطيل. - يُطبع سياق الرد/الاقتباس/إعادة التوجيه التكميلي في نافذة سياق محادثة مختارة واحدة عندما يكون Gateway قد رصد الرسائل الأصلية؛ وتُحفظ ذاكرة التخزين المؤقت للرسائل المرصودة بجوار مخزن الجلسات. لا يتضمن Telegram إلا
reply_to_messageسطحيا واحدا في التحديثات، لذلك تقتصر السلاسل الأقدم من ذاكرة التخزين المؤقت على حمولة التحديث الحالية في Telegram. - تتحكم قوائم السماح في Telegram بشكل أساسي في من يمكنه تشغيل الوكيل، وليست حدا كاملا لتنقيح السياق التكميلي.
- عناصر تحكم سجل الرسائل المباشرة:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
- ينطبق تكوين
channels.telegram.retryعلى مساعدات إرسال Telegram (CLI/الأدوات/الإجراءات) لأخطاء API الصادرة القابلة للاسترداد. يستخدم تسليم الرد النهائي الوارد أيضا إعادة محاولة إرسال آمنة ومحدودة لفشل Telegram قبل الاتصال، لكنه لا يعيد محاولة مغلفات الشبكة الغامضة بعد الإرسال التي قد تكرر الرسائل المرئية.
يمكن أن تكون أهداف الإرسال في CLI وأداة الرسائل معرف دردشة رقميا أو اسم مستخدم أو هدف موضوع منتدى:
openclaw message send --channel telegram --target 123456789 --message "hi"openclaw message send --channel telegram --target @name --message "hi"openclaw message send --channel telegram --target -1001234567890:topic:42 --message "hi topic"تستخدم استطلاعات Telegram الأمر openclaw message poll وتدعم موضوعات المنتدى:
openclaw message poll --channel telegram --target 123456789 \--poll-question "Ship it?" --poll-option "Yes" --poll-option "No"openclaw message poll --channel telegram --target -1001234567890:topic:42 \--poll-question "Pick a time" --poll-option "10am" --poll-option "2pm" \--poll-duration-seconds 300 --poll-publicأعلام الاستطلاع الخاصة بـ Telegram فقط:
--poll-duration-seconds(5-600)--poll-anonymous--poll-public--thread-idلموضوعات المنتدى (أو استخدم هدف:topic:)
يدعم إرسال Telegram أيضا:
--presentationمع كتلbuttonsللوحات المفاتيح المضمنة عندما يسمحchannels.telegram.capabilities.inlineButtonsبذلك--pinأو--delivery '{"pin":true}'لطلب التسليم المثبت عندما يستطيع البوت التثبيت في تلك الدردشة--force-documentلإرسال الصور وGIF ومقاطع الفيديو الصادرة كمستندات بدلا من تحميلات الصور المضغوطة أو الوسائط المتحركة أو الفيديو
حوكمة الإجراءات:
- يعطل
channels.telegram.actions.sendMessage=falseرسائل Telegram الصادرة، بما في ذلك الاستطلاعات - يعطل
channels.telegram.actions.poll=falseإنشاء استطلاعات Telegram مع ترك الإرسال العادي مفعلا
موافقات التنفيذ في Telegram
يدعم Telegram موافقات التنفيذ في الرسائل المباشرة للموافقين ويمكنه اختياريا نشر المطالبات في الدردشة أو الموضوع الأصلي. يجب أن يكون الموافقون معرفات مستخدمي Telegram رقمية.
مسار التكوين:
channels.telegram.execApprovals.enabled(يفعّل تلقائيا عندما يكون هناك موافق واحد على الأقل قابل للحل)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 بنص الخطأ أو يكتمه. يتحكم مفتاحا إعداد في هذا السلوك:
| المفتاح | القيم | الافتراضي | الوصف |
|---|---|---|---|
channels.telegram.errorPolicy |
reply, silent |
reply |
يرسل reply رسالة خطأ ودية إلى المحادثة. يكتم silent ردود الخطأ بالكامل. |
channels.telegram.errorCooldownMs |
عدد (ms) | 60000 |
الحد الأدنى للوقت بين ردود الخطأ إلى المحادثة نفسها. يمنع رسائل الخطأ المزعجة أثناء الانقطاعات. |
تُدعم التجاوزات لكل حساب، ولكل مجموعة، ولكل موضوع (بنفس الوراثة مثل مفاتيح إعداد Telegram الأخرى).
{ channels: { telegram: { errorPolicy: "reply", errorCooldownMs: 120000, groups: { "-1001234567890": { errorPolicy: "silent", // suppress errors in this group }, }, }, },}استكشاف الأخطاء وإصلاحها
لا يستجيب البوت لرسائل المجموعة التي لا تتضمن إشارة إليه
- إذا كان
requireMention=false، فيجب أن يسمح وضع الخصوصية في Telegram بالرؤية الكاملة.- BotFather:
/setprivacy-> Disable - ثم أزل البوت من المجموعة وأعد إضافته
- BotFather:
- يحذر
openclaw channels statusعندما يتوقع الإعداد رسائل مجموعة بلا إشارة. - يمكن لـ
openclaw channels status --probeفحص معرّفات المجموعات الرقمية الصريحة؛ لا يمكن فحص العضوية باستخدام حرف البدل"*". - اختبار جلسة سريع:
/activation always.
لا يرى البوت رسائل المجموعة إطلاقًا
- عندما يكون
channels.telegram.groupsموجودًا، يجب إدراج المجموعة (أو تضمين"*") - تحقق من عضوية البوت في المجموعة
- راجع السجلات:
openclaw logs --followلمعرفة أسباب التخطي
الأوامر تعمل جزئيًا أو لا تعمل إطلاقًا
- خوّل هوية المرسل لديك (الاقتران و/أو
allowFromالرقمي) - يظل تخويل الأوامر مطبقًا حتى عندما تكون سياسة المجموعة
open - يعني فشل
setMyCommands failedمعBOT_COMMANDS_TOO_MUCHأن القائمة الأصلية تحتوي على عدد كبير جدًا من الإدخالات؛ قلّل أوامر Plugin/Skill/الأوامر المخصصة أو عطّل القوائم الأصلية - تُقيّد استدعاءات بدء التشغيل
deleteMyCommands/setMyCommandsواستدعاءات الكتابةsendChatActionوتُعاد المحاولة مرة واحدة عبر آلية الرجوع في نقل Telegram عند انتهاء مهلة الطلب. تشير أخطاء الشبكة/الجلب المستمرة عادةً إلى مشكلات في إمكانية الوصول عبر DNS/HTTPS إلىapi.telegram.org
يبلّغ بدء التشغيل عن رمز غير مصرّح به
getMe returned 401هو فشل مصادقة من Telegram لرمز البوت المضبوط.- أعد نسخ رمز البوت أو أعد توليده في BotFather، ثم حدّث
channels.telegram.botTokenأوchannels.telegram.tokenFileأوchannels.telegram.accounts.<id>.botTokenأوTELEGRAM_BOT_TOKENللحساب الافتراضي. deleteWebhook 401 Unauthorizedأثناء بدء التشغيل هو أيضًا فشل مصادقة؛ معاملته على أنه "لا يوجد Webhook" لن يؤدي إلا إلى تأجيل فشل الرمز غير الصالح نفسه إلى استدعاءات API لاحقة.
عدم استقرار الاستقصاء أو الشبكة
- يمكن أن يؤدي Node 22+ مع fetch/proxy مخصص إلى سلوك إجهاض فوري إذا لم تتطابق أنواع AbortSignal.
- تحل بعض المضيفات
api.telegram.orgإلى IPv6 أولًا؛ وقد يؤدي خروج IPv6 المعطّل إلى إخفاقات متقطعة في Telegram API. - إذا تضمنت السجلات
TypeError: fetch failedأوNetwork request for 'getUpdates' failed!، يعيد OpenClaw الآن المحاولة مع هذه الأخطاء باعتبارها أخطاء شبكة قابلة للاسترداد. - أثناء بدء تشغيل الاستقصاء، يعيد OpenClaw استخدام فحص بدء التشغيل الناجح
getMeلـ grammY حتى لا يحتاج المشغّل إلىgetMeثانٍ قبل أولgetUpdates. - إذا فشل
deleteWebhookبخطأ شبكة عابر أثناء بدء تشغيل الاستقصاء، يواصل OpenClaw إلى الاستقصاء الطويل بدلًا من إجراء استدعاء آخر في مستوى التحكم قبل الاستقصاء. يظهر Webhook الذي لا يزال نشطًا كتعارضgetUpdates؛ ثم يعيد OpenClaw بناء نقل Telegram ويحاول تنظيف Webhook مجددًا. - إذا كانت مقابس Telegram تُعاد تدويرها بوتيرة ثابتة قصيرة، فتحقق من انخفاض
channels.telegram.timeoutSeconds؛ تثبّت عملاء البوت القيم المضبوطة تحت حراس طلبات الخروج وgetUpdates، لكن الإصدارات الأقدم قد تُجهض كل استقصاء أو رد عندما كانت هذه القيمة مضبوطة دون تلك الحراس. - إذا تضمنت السجلات
Polling stall detected، يعيد OpenClaw تشغيل الاستقصاء ويعيد بناء نقل Telegram بعد 120 ثانية دون اكتمال نبض حياة الاستقصاء الطويل افتراضيًا. - يحذر
openclaw channels status --probeوopenclaw doctorعندما لا يكون حساب استقصاء قيد التشغيل قد أكملgetUpdatesبعد مهلة بدء التشغيل، أو عندما لا يكون حساب Webhook قيد التشغيل قد أكملsetWebhookبعد مهلة بدء التشغيل، أو عندما يكون آخر نشاط ناجح لنقل الاستقصاء قديمًا. - لا تزد
channels.telegram.pollingStallThresholdMsإلا عندما تكون استدعاءاتgetUpdatesالطويلة سليمة لكن مضيفك لا يزال يبلّغ عن عمليات إعادة تشغيل كاذبة بسبب تعثر الاستقصاء. تشير التعثرات المستمرة عادةً إلى مشكلات في proxy أو DNS أو IPv6 أو خروج TLS بين المضيف وapi.telegram.org. - يراعي Telegram أيضًا متغيرات بيئة proxy الخاصة بالعملية لنقل Bot API، بما في ذلك
HTTP_PROXYوHTTPS_PROXYوALL_PROXYوصيغها بالأحرف الصغيرة. لا يزال بإمكانNO_PROXY/no_proxyتجاوزapi.telegram.org. - إذا ضُبط proxy المُدار من OpenClaw عبر
OPENCLAW_PROXY_URLلبيئة خدمة ولم تكن هناك متغيرات بيئة proxy قياسية، يستخدم Telegram ذلك URL لنقل Bot API أيضًا. - على مضيفات VPS ذات خروج مباشر/TLS غير مستقر، وجّه استدعاءات Telegram API عبر
channels.telegram.proxy:
channels:telegram:proxy: socks5://<user>:<password>@proxy-host:1080- يضبط Node 22+ افتراضيًا
autoSelectFamily=true(باستثناء WSL2). يراعي ترتيب نتائج DNS في TelegramOPENCLAW_TELEGRAM_DNS_RESULT_ORDER، ثمchannels.telegram.network.dnsResultOrder، ثم افتراضي العملية مثلNODE_OPTIONS=--dns-result-order=ipv4first؛ إذا لم ينطبق أي منها، يعود Node 22+ إلىipv4first. - إذا كان مضيفك WSL2 أو يعمل بوضوح بشكل أفضل مع سلوك IPv4 فقط، فأجبر اختيار العائلة:
channels:telegram:network: autoSelectFamily: false- إجابات نطاق معيار RFC 2544 (
198.18.0.0/15) مسموح بها بالفعل لتنزيلات وسائط Telegram افتراضيًا. إذا كان fake-IP موثوق أو proxy شفاف يعيد كتابةapi.telegram.orgإلى عنوان خاص/داخلي/ذي استخدام خاص آخر أثناء تنزيلات الوسائط، يمكنك الاشتراك في التجاوز الخاص بـ Telegram فقط:
channels:telegram:network: dangerouslyAllowPrivateNetwork: true- يتوفر الاشتراك نفسه لكل حساب في
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - إذا كان proxy لديك يحل مضيفات وسائط Telegram إلى
198.18.x.x، فاترك العلامة الخطرة معطلة أولًا. تسمح وسائط Telegram بالفعل بنطاق معيار RFC 2544 افتراضيًا.
- تجاوزات البيئة (مؤقتة):
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first
- تحقق من إجابات DNS:
dig +short api.telegram.org Adig +short api.telegram.org AAAAمزيد من المساعدة: استكشاف أخطاء القنوات وإصلاحها.
مرجع الإعداد
المرجع الأساسي: مرجع الإعداد - Telegram.
حقول Telegram عالية الأهمية
- بدء التشغيل/المصادقة:
enabled,botToken,tokenFile,accounts.*(يجب أن يشيرtokenFileإلى ملف عادي؛ تُرفض الروابط الرمزية) - التحكم في الوصول:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*, المستوى الأعلىbindings[](type: "acp") - موافقات التنفيذ:
execApprovals,accounts.*.execApprovals - الأمر/القائمة:
commands.native,commands.nativeSkills,customCommands - الترابط/الردود:
replyToMode,dm.threadReplies,direct.*.threadReplies - البث:
streaming(معاينة),streaming.preview.toolProgress,blockStreaming - التنسيق/التسليم:
textChunkLimit,chunkMode,linkPreview,responsePrefix - الوسائط/الشبكة:
mediaMaxMb,mediaGroupFlushMs,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - جذر API المخصص:
apiRoot(جذر Bot API فقط؛ لا تُضمّن/bot<TOKEN>) - Webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost - الإجراءات/القدرات:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker - التفاعلات:
reactionNotifications,reactionLevel - الأخطاء:
errorPolicy,errorCooldownMs - الكتابات/السجل:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit