Telegram (Bot API)
الحالة: جاهز للإنتاج لرسائل bot الخاصة والمجموعات عبر grammY. يكون long polling هو الوضع الافتراضي؛ ووضع webhook اختياري.الإقران
سياسة الرسائل الخاصة الافتراضية في Telegram هي pairing.
استكشاف أخطاء القنوات وإصلاحها
أدلة تشخيص وإصلاح عبر القنوات.
تكوين البوابة
أنماط وأمثلة كاملة لتكوين القنوات.
الإعداد السريع
أنشئ token البوت في BotFather
افتح Telegram وتحدث مع @BotFather (تأكد من أن اسم المستخدم هو
@BotFather تمامًا).نفّذ /newbot، واتبع التعليمات، واحفظ token.كوّن token وسياسة الرسائل الخاصة
TELEGRAM_BOT_TOKEN=... (للحساب الافتراضي فقط).
لا يستخدم Telegram الأمر openclaw channels login telegram؛ كوّن token في التكوين/البيئة، ثم ابدأ البوابة.ترتيب حل token يراعي الحسابات. عمليًا، تفوز قيم التكوين على الرجوع إلى البيئة، و
TELEGRAM_BOT_TOKEN ينطبق فقط على الحساب الافتراضي.إعدادات جانب Telegram
وضع الخصوصية ورؤية المجموعات
وضع الخصوصية ورؤية المجموعات
تعمل bots Telegram افتراضيًا في Privacy Mode، ما يحد من رسائل المجموعات التي تتلقاها.إذا كان يجب أن يرى البوت كل رسائل المجموعة، فإما أن:
- تعطل وضع الخصوصية عبر
/setprivacy، أو - تجعل البوت مشرفًا على المجموعة.
أذونات المجموعة
أذونات المجموعة
يتم التحكم في حالة المشرف من إعدادات مجموعة Telegram.تتلقى bots المشرفة جميع رسائل المجموعة، وهذا مفيد لسلوك المجموعات الدائم التشغيل.
خيارات مفيدة في BotFather
خيارات مفيدة في BotFather
/setjoingroupsللسماح/منع الإضافة إلى المجموعات/setprivacyلسلوك الرؤية داخل المجموعات
التحكم في الوصول والتفعيل
- سياسة الرسائل الخاصة
- سياسة المجموعات وallowlists
- سلوك الإشارات
يتحكم طريقة تابعة لجهة خارجية (خصوصية أقل):
channels.telegram.dmPolicy في الوصول إلى الرسائل الخاصة:pairing(الافتراضي)allowlist(يتطلب وجود معرّف مرسل واحد على الأقل فيallowFrom)open(يتطلب أن تتضمنallowFromالقيمة"*")disabled
channels.telegram.allowFrom معرّفات مستخدمي Telegram الرقمية. وتُقبل البادئات telegram: وtg: ويتم توحيدها.
يؤدي dmPolicy: "allowlist" مع allowFrom فارغة إلى حظر جميع الرسائل الخاصة ويتم رفضه عبر التحقق من صحة التكوين.
يقبل الإعداد التفاعلي إدخال @username ويحوّله إلى معرّفات رقمية.
إذا قمت بالترقية وكان التكوين لديك يحتوي على إدخالات allowlist بصيغة @username، فشغّل openclaw doctor --fix لتحويلها (بأفضل جهد؛ ويتطلب token Telegram bot).
إذا كنت تعتمد سابقًا على ملفات allowlist في pairing-store، فيمكن لـ openclaw doctor --fix استعادة الإدخالات إلى channels.telegram.allowFrom في تدفقات allowlist (على سبيل المثال عندما يكون dmPolicy: "allowlist" بلا معرّفات صريحة بعد).بالنسبة إلى bots ذات المالك الواحد، فضّل dmPolicy: "allowlist" مع معرّفات allowFrom رقمية صريحة للحفاظ على سياسة الوصول بشكل مستدام في التكوين (بدلًا من الاعتماد على موافقات pairing السابقة).التباس شائع: الموافقة على pairing في الرسائل الخاصة لا تعني أن “هذا المرسل مصرح له في كل مكان”.
يمنح pairing الوصول إلى الرسائل الخاصة فقط. أما تفويض مرسل المجموعة فما زال يأتي من allowlists الصريحة في التكوين.
إذا أردت “أن أُصرَّح مرة واحدة وأن تعمل الرسائل الخاصة وأوامر المجموعة معًا”، فضع معرّف مستخدم Telegram الرقمي الخاص بك في channels.telegram.allowFrom.العثور على معرّف مستخدم Telegram الخاص بك
الطريقة الأكثر أمانًا (من دون bot تابع لجهة خارجية):- أرسل رسالة خاصة إلى البوت.
- نفّذ
openclaw logs --follow. - اقرأ
from.id.
@userinfobot أو @getidsbot.سلوك وقت التشغيل
- يملك Telegram عملية البوابة.
- التوجيه حتمي: ترد رسائل Telegram الواردة إلى Telegram (ولا يختار النموذج القنوات).
- تُوحَّد الرسائل الواردة داخل غلاف القنوات المشترك مع بيانات الرد الوصفية والعناصر النائبة للوسائط.
- تُعزل جلسات المجموعات بحسب معرّف المجموعة. وتُلحق موضوعات المنتدى
:topic:<threadId>للحفاظ على عزل الموضوعات. - يمكن أن تحمل الرسائل الخاصة
message_thread_id؛ ويقوم OpenClaw بتوجيهها باستخدام مفاتيح جلسة تراعي thread ويحافظ على معرّف thread في الردود. - يستخدم long polling مشغّل grammY مع تسلسل لكل دردشة/لكل thread. ويستخدم تزامن sink العام للمشغّل
agents.defaults.maxConcurrent. - لا يحتوي Telegram Bot API على دعم لإيصالات القراءة (
sendReadReceiptsغير منطبق).
مرجع الميزات
معاينة البث المباشر (تعديلات الرسائل)
معاينة البث المباشر (تعديلات الرسائل)
يمكن لـ OpenClaw بث الردود الجزئية في الوقت الفعلي:
- الدردشات الخاصة: رسالة معاينة +
editMessageText - المجموعات/الموضوعات: رسالة معاينة +
editMessageText
- أن تكون
channels.telegram.streamingإحدى القيمoff | partial | block | progress(الافتراضي:partial) - تُحوَّل
progressإلىpartialعلى Telegram (للتوافق مع التسمية عبر القنوات) - تُحوَّل تلقائيًا قيم
channels.telegram.streamModeالقديمة وقيمstreamingالمنطقية
- الرسائل الخاصة: يحتفظ OpenClaw برسالة المعاينة نفسها ويجري تعديلًا نهائيًا في المكان نفسه (من دون رسالة ثانية)
- المجموعة/الموضوع: يحتفظ OpenClaw برسالة المعاينة نفسها ويجري تعديلًا نهائيًا في المكان نفسه (من دون رسالة ثانية)
sendMessage + editMessageText.بث الاستدلال الخاص بـ Telegram:/reasoning streamيرسل الاستدلال إلى المعاينة المباشرة أثناء التوليد- يُرسل الجواب النهائي من دون نص الاستدلال
التنسيق والرجوع إلى HTML
التنسيق والرجوع إلى HTML
يستخدم النص الصادر
parse_mode: "HTML" في Telegram.- يُعرَض النص الشبيه بـ Markdown إلى HTML آمن لـ Telegram.
- يُهَرب HTML الخام من النموذج لتقليل حالات فشل التحليل في Telegram.
- إذا رفض Telegram HTML المحلل، يعيد OpenClaw المحاولة كنص عادي.
channels.telegram.linkPreview: false.الأوامر الأصلية والأوامر المخصصة
الأوامر الأصلية والأوامر المخصصة
يتم تسجيل قائمة أوامر Telegram عند بدء التشغيل عبر القواعد:أوامر إقران الأجهزة (
عند تثبيت plugin
setMyCommands.الإعدادات الافتراضية للأوامر الأصلية:commands.native: "auto"يفعّل الأوامر الأصلية لـ Telegram
- تُوحَّد الأسماء (تُزال الشرطة المائلة
/من البداية، وتحوَّل إلى أحرف صغيرة) - النمط الصحيح:
a-zو0-9و_، والطول1..32 - لا يمكن للأوامر المخصصة تجاوز الأوامر الأصلية
- تُتخطى التعارضات/التكرارات ويُسجل ذلك
- الأوامر المخصصة هي إدخالات في القائمة فقط؛ ولا تنفذ السلوك تلقائيًا
- يمكن أن تستمر أوامر plugin/Skills في العمل عند كتابتها حتى إذا لم تظهر في قائمة Telegram
- فشل
setMyCommands failedمعBOT_COMMANDS_TOO_MUCHيعني أن قائمة Telegram ما زالت زائدة بعد التقليص؛ قلّل أوامر plugin/Skills/الأوامر المخصصة أو عطّلchannels.telegram.commands.native. - فشل
setMyCommands failedمع أخطاء الشبكة/fetch يعني عادةً أن DNS/HTTPS الصادر إلىapi.telegram.orgمحجوب.
أوامر إقران الأجهزة (device-pair plugin)
عند تثبيت plugin device-pair:- يولد
/pairرمز الإعداد - الصق الرمز في تطبيق iOS
- يسرد
/pair pendingالطلبات المعلقة (بما في ذلك الدور/النطاقات) - وافق على الطلب:
/pair approve <requestId>للموافقة الصريحة/pair approveعندما يكون هناك طلب معلق واحد فقط/pair approve latestللأحدث
scopes: []؛ وأي operator token يتم تسليمه يبقى محصورًا في operator.approvals وoperator.read وoperator.talk.secrets وoperator.write. وتكون فحوصات نطاق bootstrap مسبوقة بالدور، لذلك فإن allowlist الخاصة بالمشغل لا تلبّي إلا طلبات المشغل؛ أما الأدوار غير المشغلة فما زالت تحتاج إلى scopes تحت بادئة دورها الخاص.إذا أعاد جهاز المحاولة مع تفاصيل مصادقة متغيرة (مثل الدور/النطاقات/المفتاح العام)، فسيتم استبدال الطلب المعلق السابق وسيستخدم الطلب الجديد requestId مختلفًا. أعد تنفيذ /pair pending قبل الموافقة.مزيد من التفاصيل: الإقران.الأزرار المضمنة
الأزرار المضمنة
كوّن نطاق لوحة المفاتيح المضمنة:تجاوز لكل حساب:النطاقات:تُمرر نقرات callback إلى الوكيل كنص:
offdmgroupallallowlist(الافتراضي)
capabilities: ["inlineButtons"] القديمة إلى inlineButtons: "all".مثال على إجراء رسالة:callback_data: <value>إجراءات رسائل Telegram للوكلاء والأتمتة
إجراءات رسائل 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.*.
تستخدم الإرسالات وقت التشغيل snapshot النشط للتكوين/الأسرار (بدء التشغيل/إعادة التحميل)، لذلك لا تنفّذ مسارات الإجراء إعادة حل SecretRef مخصصة لكل إرسال.دلالات إزالة التفاعل: /tools/reactionsوسوم ربط الردود
وسوم ربط الردود
يدعم Telegram وسوم ربط الردود الصريحة في المخرجات المولدة:
[[reply_to_current]]يرد على الرسالة المُشغِّلة[[reply_to:<id>]]يرد على معرّف رسالة Telegram محدد
channels.telegram.replyToMode في المعالجة:off(الافتراضي)firstall
off يعطّل ربط الردود الضمني. لكن ما زالت وسوم [[reply_to_*]] الصريحة محترمة.موضوعات المنتدى وسلوك thread
موضوعات المنتدى وسلوك thread
في المجموعات الفائقة من نوع المنتدى:يمتلك كل موضوع عندئذٍ مفتاح جلسة خاصًا به: يقتصر هذا حاليًا على موضوعات المنتدى في المجموعات والمجموعات الفائقة.إنشاء ACP مرتبط بـ thread من الدردشة:
- تُلحق مفاتيح جلسات الموضوعات بـ
:topic:<threadId> - تستهدف الردود وإشارات الكتابة thread الخاص بالموضوع
- مسار تكوين الموضوع:
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 في تكوين الموضوع. وهذا يمنح كل موضوع مساحة عمل وذاكرة وجلسة معزولة خاصة به. مثال:agent:zu:telegram:group:-1001234567890:topic:3ربط ACP دائم للموضوع: يمكن لموضوعات المنتدى تثبيت جلسات harness الخاصة بـ ACP عبر عمليات ربط ACP مكتوبة على المستوى الأعلى:bindings[]معtype: "acp"وmatch.channel: "telegram"
- يمكن للأمر
/acp spawn <agent> --thread here|autoربط موضوع Telegram الحالي بجلسة ACP جديدة. - تُوجَّه رسائل الموضوع اللاحقة مباشرة إلى جلسة ACP المرتبطة (من دون الحاجة إلى
/acp steer). - يثبت OpenClaw رسالة تأكيد الإنشاء داخل الموضوع بعد نجاح الربط.
- يتطلب
channels.telegram.threadBindings.spawnAcpSessions=true.
MessageThreadIdIsForum
- تحافظ الدردشات الخاصة التي تحتوي على
message_thread_idعلى توجيه الرسائل الخاصة لكنها تستخدم مفاتيح جلسة/أهداف رد تراعي thread.
الصوت والفيديو والملصقات
الصوت والفيديو والملصقات
الرسائل الصوتية
يميز Telegram بين الملاحظات الصوتية وملفات الصوت.- الافتراضي: سلوك ملف صوتي
- الوسم
[[audio_as_voice]]في رد الوكيل لفرض الإرسال كملاحظة صوتية
رسائل الفيديو
يميز Telegram بين ملفات الفيديو وملاحظات الفيديو.مثال على إجراء رسالة:الملصقات
معالجة الملصقات الواردة:- WEBP ثابت: يتم تنزيله ومعالجته (عنصر نائب
<media:sticker>) - TGS متحرك: يتم تخطيه
- WEBM فيديو: يتم تخطيه
Sticker.emojiSticker.setNameSticker.fileIdSticker.fileUniqueIdSticker.cachedDescription
~/.openclaw/telegram/sticker-cache.json
إشعارات التفاعلات
إشعارات التفاعلات
تصل تفاعلات 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تفاعلات المستخدمين على الرسائل التي أرسلها البوت فقط (بأفضل جهد عبر cache الرسائل المرسلة). - ما زالت أحداث التفاعل تراعي عناصر التحكم في الوصول في Telegram (
dmPolicyوallowFromوgroupPolicyوgroupAllowFrom)؛ ويُسقَط المرسلون غير المصرح لهم. - لا يوفّر Telegram معرّفات thread في تحديثات التفاعل.
- تُوجَّه المجموعات غير التابعة للمنتدى إلى جلسة دردشة المجموعة
- وتُوجَّه مجموعات المنتدى إلى جلسة الموضوع العام للمجموعة (
:topic:1)، وليس إلى الموضوع الأصلي بالضبط
allowed_updates الخاصة بـ polling/webhook قيمة message_reaction تلقائيًا.تفاعلات التأكيد
تفاعلات التأكيد
يرسل
ackReaction رمز emoji للتأكيد بينما يعالج OpenClaw رسالة واردة.ترتيب الحل:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- الرجوع إلى emoji هوية الوكيل (
agents.list[].identity.emoji، وإلا ”👀”)
- يتوقع Telegram emoji موحدًا من Unicode (مثل ”👀”).
- استخدم
""لتعطيل التفاعل لقناة أو حساب.
كتابات التكوين من أحداث وأوامر Telegram
كتابات التكوين من أحداث وأوامر Telegram
تكون كتابات تكوين القناة مفعلة افتراضيًا (
configWrites !== false).تشمل الكتابات التي يطلقها Telegram ما يلي:- أحداث ترحيل المجموعات (
migrate_to_chat_id) لتحديثchannels.telegram.groups /config setو/config unset(يتطلب تمكين الأوامر)
Long polling مقابل webhook
Long polling مقابل webhook
الافتراضي: long polling.وضع webhook:
- اضبط
channels.telegram.webhookUrl - اضبط
channels.telegram.webhookSecret(مطلوب عند ضبط webhook URL) - اختياريًا
channels.telegram.webhookPath(الافتراضي/telegram-webhook) - اختياريًا
channels.telegram.webhookHost(الافتراضي127.0.0.1) - اختياريًا
channels.telegram.webhookPort(الافتراضي8787)
127.0.0.1:8787.إذا كانت نقطة النهاية العامة لديك مختلفة، فضع reverse proxy في الأمام ووجّه webhookUrl إلى الرابط العام.
اضبط webhookHost (مثل 0.0.0.0) عندما تحتاج عمدًا إلى ingress خارجي.الحدود وإعادة المحاولة وأهداف CLI
الحدود وإعادة المحاولة وأهداف CLI
- القيمة الافتراضية لـ
channels.telegram.textChunkLimitهي 4000. - يفضّل
channels.telegram.chunkMode="newline"حدود الفقرات (الأسطر الفارغة) قبل التقسيم حسب الطول. - يحدد
channels.telegram.mediaMaxMb(الافتراضي 100) الحد الأقصى لحجم الوسائط الواردة والصادرة في Telegram. - يتجاوز
channels.telegram.timeoutSecondsمهلة عميل Telegram API (إذا لم يُضبط، تُطبَّق القيمة الافتراضية لـ grammY). - يستخدم سجل سياق المجموعات
channels.telegram.historyLimitأوmessages.groupChat.historyLimit(الافتراضي 50)؛ و0يعطّل الميزة. - يُمرَّر حاليًا سياق الرد/الاقتباس/إعادة التوجيه التكميلي كما تم استلامه.
- تعمل allowlists في Telegram أساسًا على تقييد من يمكنه تشغيل الوكيل، وليست حدًا كاملًا لتنقيح السياق التكميلي.
- عناصر التحكم في سجل الرسائل الخاصة:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
- ينطبق تكوين
channels.telegram.retryعلى مساعدات الإرسال الخاصة بـ Telegram (CLI/tools/actions) في أخطاء Telegram API الصادرة القابلة للاسترداد.
openclaw message poll وتدعم موضوعات المنتدى:--poll-duration-seconds(من 5 إلى 600)--poll-anonymous--poll-public--thread-idلموضوعات المنتدى (أو استخدم هدف:topic:)
--buttonsللوحات المفاتيح المضمنة عندما يسمحchannels.telegram.capabilities.inlineButtonsبذلك--force-documentلإرسال الصور وملفات GIF الصادرة كمستندات بدلًا من تحميلات الصور المضغوطة أو الوسائط المتحركة
- يعطّل
channels.telegram.actions.sendMessage=falseرسائل Telegram الصادرة، بما في ذلك الاستطلاعات - يعطّل
channels.telegram.actions.poll=falseإنشاء استطلاعات Telegram مع إبقاء الإرسالات العادية مفعلة
موافقات exec في Telegram
موافقات exec في Telegram
يدعم Telegram موافقات exec في الرسائل الخاصة للموافِقين، ويمكنه اختياريًا نشر مطالبات الموافقة في الدردشة أو الموضوع الأصلي.مسار التكوين:
channels.telegram.execApprovals.enabledchannels.telegram.execApprovals.approvers(اختياري؛ ويرجع إلى معرّفات المالك الرقمية المستنتجة منallowFromوdefaultToالمباشر عند الإمكان)channels.telegram.execApprovals.target(dm|channel|both، الافتراضي:dm)agentFilterوsessionFilter
enabled غير مضبوط أو "auto" ويمكن حل موافق واحد على الأقل، إما من execApprovals.approvers أو من تكوين المالك الرقمي للحساب (allowFrom وdefaultTo للرسائل الخاصة المباشرة). اضبط enabled: false لتعطيل Telegram كعميل موافقات أصلي بشكل صريح. وإلا فستعود طلبات الموافقة إلى مسارات الموافقة الأخرى المكوّنة أو إلى سياسة الرجوع لموافقات exec.يعرض Telegram أيضًا أزرار الموافقة المشتركة المستخدمة بواسطة قنوات الدردشة الأخرى. ويضيف المهايئ الأصلي لـ Telegram أساسًا توجيه الرسائل الخاصة للموافقين، والتوزيع على القنوات/الموضوعات، وتلميحات الكتابة قبل التسليم.
عندما تكون هذه الأزرار موجودة، فهي واجهة الموافقة الأساسية؛ ويجب على OpenClaw
أن يضمّن أمر /approve اليدوي فقط عندما تقول نتيجة الأداة إن موافقات الدردشة غير متاحة
أو عندما تكون الموافقة اليدوية هي المسار الوحيد.قواعد التسليم:- يرسل
target: "dm"مطالبات الموافقة فقط إلى الرسائل الخاصة للموافقين الذين تم حلهم - يرسل
target: "channel"المطالبة مرة أخرى إلى دردشة/موضوع Telegram الأصلي - يرسل
target: "both"إلى الرسائل الخاصة للموافقين وإلى الدردشة/الموضوع الأصلي
/approve ولا أزرار الموافقة في Telegram.سلوك حل الموافقة:- تُحل دائمًا معرّفات الموافقة المسبوقة بـ
plugin:عبر موافقات plugin. - تحاول معرّفات الموافقة الأخرى أولًا
exec.approval.resolve. - إذا كان Telegram مصرحًا له أيضًا بموافقات plugin وقالت البوابة
إن موافقة exec غير معروفة/منتهية الصلاحية، يعيد Telegram المحاولة مرة واحدة عبر
plugin.approval.resolve. - لا تسقط حالات الرفض/الأخطاء الحقيقية الخاصة بـ exec بصمت إلى حل موافقات plugin.
channel أو both فقط في المجموعات/الموضوعات الموثوقة. عندما تصل المطالبة إلى موضوع منتدى، يحافظ OpenClaw على الموضوع لكل من مطالبة الموافقة والمتابعة بعد الموافقة. وتنتهي صلاحية موافقات exec بعد 30 دقيقة افتراضيًا.تعتمد أزرار الموافقة المضمنة أيضًا على سماح channels.telegram.capabilities.inlineButtons بالسطح المستهدف (dm أو group أو all).مستندات ذات صلة: موافقات Execعناصر التحكم في ردود الأخطاء
عندما يواجه الوكيل خطأ في التسليم أو خطأ من المزوّد، يمكن لـ Telegram إما الرد بنص الخطأ أو كتمه. يتحكم مفتاحا تكوين في هذا السلوك:| المفتاح | القيم | الافتراضي | الوصف |
|---|---|---|---|
channels.telegram.errorPolicy | reply, silent | reply | يرسل reply رسالة خطأ ودية إلى الدردشة. ويكتم silent ردود الأخطاء بالكامل. |
channels.telegram.errorCooldownMs | number (ms) | 60000 | الحد الأدنى للوقت بين ردود الأخطاء على الدردشة نفسها. يمنع سيلان الأخطاء أثناء الانقطاعات. |
استكشاف الأخطاء وإصلاحها
لا يستجيب البوت لرسائل المجموعات التي لا تحتوي على إشارة
لا يستجيب البوت لرسائل المجموعات التي لا تحتوي على إشارة
- إذا كان
requireMention=false، فيجب أن يسمح وضع الخصوصية في Telegram بالرؤية الكاملة.- BotFather:
/setprivacy-> Disable - ثم أزل البوت وأعد إضافته إلى المجموعة
- BotFather:
- يحذر
openclaw channels statusعندما يتوقع التكوين رسائل مجموعات من دون إشارة. - يستطيع
openclaw channels status --probeفحص معرّفات المجموعات الرقمية الصريحة؛ أما"*"فلا يمكن فحص العضوية لها. - اختبار جلسة سريع:
/activation always.
البوت لا يرى رسائل المجموعة إطلاقًا
البوت لا يرى رسائل المجموعة إطلاقًا
- عندما تكون
channels.telegram.groupsموجودة، يجب أن تكون المجموعة مدرجة (أو أن تتضمن"*") - تحقق من عضوية البوت في المجموعة
- راجع السجلات:
openclaw logs --followلمعرفة أسباب التخطي
تعمل الأوامر جزئيًا أو لا تعمل إطلاقًا
تعمل الأوامر جزئيًا أو لا تعمل إطلاقًا
- صرّح هوية المرسل الخاص بك (pairing و/أو
allowFromرقمية) - ما زال تفويض الأوامر يطبّق حتى عندما تكون سياسة المجموعة
open - يعني
setMyCommands failedمعBOT_COMMANDS_TOO_MUCHأن القائمة الأصلية تحتوي على عدد كبير جدًا من الإدخالات؛ قلّل أوامر plugin/Skills/الأوامر المخصصة أو عطّل القوائم الأصلية - يشير
setMyCommands failedمع أخطاء الشبكة/fetch عادةً إلى مشكلات في الوصول إلى DNS/HTTPS الخاص بـapi.telegram.org
عدم استقرار polling أو الشبكة
عدم استقرار polling أو الشبكة
- يمكن أن يؤدي Node 22+ مع fetch/proxy مخصص إلى سلوك إجهاض فوري إذا لم تتطابق أنواع AbortSignal.
- تحل بعض المضيفات
api.telegram.orgإلى IPv6 أولًا؛ وقد يؤدي خروج IPv6 المعطوب إلى أعطال متقطعة في Telegram API. - إذا تضمنت السجلات
TypeError: fetch failedأوNetwork request for 'getUpdates' failed!، فإن OpenClaw يعيد الآن محاولة هذه الحالات كأخطاء شبكة قابلة للاسترداد. - على مضيفات VPS ذات الخروج/TLS المباشر غير المستقر، وجّه استدعاءات Telegram API عبر
channels.telegram.proxy:
- يستخدم Node 22+ افتراضيًا
autoSelectFamily=true(باستثناء WSL2) وdnsResultOrder=ipv4first. - إذا كان مضيفك WSL2 أو يعمل صراحةً بشكل أفضل مع سلوك IPv4 فقط، فافرض اختيار family:
- تُسمح بالفعل افتراضيًا إجابات نطاق القياس RFC 2544 (
198.18.0.0/15) لتنزيلات وسائط Telegram. وإذا كانت fake-IP موثوقة أو transparent proxy تعيد كتابةapi.telegram.orgإلى عنوان آخر خاص/داخلي/ذو استخدام خاص أثناء تنزيلات الوسائط، فيمكنك تفعيل تجاوز Telegram فقط:
- يتوفر التفعيل نفسه لكل حساب في
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:
مؤشرات مرجع تكوين Telegram
المرجع الأساسي:-
channels.telegram.enabled: تمكين/تعطيل بدء تشغيل القناة. -
channels.telegram.botToken: bot token (BotFather). -
channels.telegram.tokenFile: قراءة token من مسار ملف عادي. تُرفض الروابط الرمزية. -
channels.telegram.dmPolicy: pairing | allowlist | open | disabled(الافتراضي: pairing). -
channels.telegram.allowFrom: allowlist الرسائل الخاصة (معرّفات مستخدمي Telegram الرقمية). تتطلبallowlistمعرّف مرسل واحدًا على الأقل. وتتطلبopenالقيمة"*". يمكن لـopenclaw doctor --fixتحويل إدخالات@usernameالقديمة إلى معرّفات، كما يمكنه استعادة إدخالات allowlist من ملفات pairing-store في تدفقات ترحيل allowlist. -
channels.telegram.actions.poll: تمكين أو تعطيل إنشاء استطلاعات Telegram (مفعّل افتراضيًا؛ وما زال يتطلبsendMessage). -
channels.telegram.defaultTo: هدف Telegram الافتراضي الذي يستخدمه CLI مع--deliverعندما لا يكون--reply-toصريحًا. -
channels.telegram.groupPolicy: open | allowlist | disabled(الافتراضي: allowlist). -
channels.telegram.groupAllowFrom: allowlist مرسلي المجموعات (معرّفات مستخدمي Telegram الرقمية). يمكن لـopenclaw doctor --fixتحويل إدخالات@usernameالقديمة إلى معرّفات. تُتجاهل الإدخالات غير الرقمية وقت التفويض. لا يستخدم تفويض المجموعات الرجوع إلى DM pairing-store (2026.2.25+). -
أولوية الحسابات المتعددة:
- عندما يتم تكوين معرّفي حسابين أو أكثر، اضبط
channels.telegram.defaultAccount(أو ضمّنchannels.telegram.accounts.default) لجعل التوجيه الافتراضي صريحًا. - إذا لم يُضبط أي منهما، يعود OpenClaw إلى أول معرّف حساب مُوحَّد ويصدر
openclaw doctorتحذيرًا. - ينطبق
channels.telegram.accounts.default.allowFromوchannels.telegram.accounts.default.groupAllowFromعلى حسابdefaultفقط. - ترث الحسابات المسماة
channels.telegram.allowFromوchannels.telegram.groupAllowFromعندما تكون قيم مستوى الحساب غير مضبوطة. - لا ترث الحسابات المسماة
channels.telegram.accounts.default.allowFrom/groupAllowFrom.
- عندما يتم تكوين معرّفي حسابين أو أكثر، اضبط
-
channels.telegram.groups: الإعدادات الافتراضية لكل مجموعة + allowlist (استخدم"*"للإعدادات العامة الافتراضية).channels.telegram.groups.<id>.groupPolicy: تجاوز لكل مجموعة لـ groupPolicy (open | allowlist | disabled).channels.telegram.groups.<id>.requireMention: تقييد الإشارات الافتراضي.channels.telegram.groups.<id>.skills: مرشح Skills (الحذف = كل Skills، والفارغ = لا شيء).channels.telegram.groups.<id>.allowFrom: تجاوز allowlist مرسلين لكل مجموعة.channels.telegram.groups.<id>.systemPrompt: system prompt إضافي للمجموعة.channels.telegram.groups.<id>.enabled: تعطيل المجموعة عندما تكونfalse.channels.telegram.groups.<id>.topics.<threadId>.*: تجاوزات لكل موضوع (حقول المجموعة +agentIdالخاص بالموضوع فقط).channels.telegram.groups.<id>.topics.<threadId>.agentId: توجيه هذا الموضوع إلى وكيل محدد (يتجاوز توجيه مستوى المجموعة وbindings).
-
channels.telegram.groups.<id>.topics.<threadId>.groupPolicy: تجاوز لكل موضوع لـ groupPolicy (open | allowlist | disabled). -
channels.telegram.groups.<id>.topics.<threadId>.requireMention: تجاوز تقييد الإشارات لكل موضوع. -
bindings[]على المستوى الأعلى معtype: "acp"ومعرّف الموضوع القياسيchatId:topic:topicIdفيmatch.peer.id: حقول ربط ACP الدائم للموضوع (راجع وكلاء ACP). -
channels.telegram.direct.<id>.topics.<threadId>.agentId: توجيه موضوعات الرسائل الخاصة إلى وكيل محدد (السلوك نفسه مثل موضوعات المنتدى). -
channels.telegram.execApprovals.enabled: تمكين Telegram كعميل موافقات exec قائم على الدردشة لهذا الحساب. -
channels.telegram.execApprovals.approvers: معرّفات مستخدمي Telegram المسموح لهم بالموافقة على طلبات exec أو رفضها. اختياري عندما يعرّفchannels.telegram.allowFromأوchannels.telegram.defaultToالمباشر المالك مسبقًا. -
channels.telegram.execApprovals.target: dm | channel | both(الافتراضي:dm). يحافظchannelوbothعلى موضوع Telegram الأصلي عند وجوده. -
channels.telegram.execApprovals.agentFilter: مرشح اختياري لمعرّف الوكيل لمطالبات الموافقة المعاد توجيهها. -
channels.telegram.execApprovals.sessionFilter: مرشح اختياري لمفتاح الجلسة (سلسلة فرعية أو regex) لمطالبات الموافقة المعاد توجيهها. -
channels.telegram.accounts.<account>.execApprovals: تجاوز لكل حساب لتوجيه موافقات exec وتفويض الموافقين في Telegram. -
channels.telegram.capabilities.inlineButtons: off | dm | group | all | allowlist(الافتراضي: allowlist). -
channels.telegram.accounts.<account>.capabilities.inlineButtons: تجاوز لكل حساب. -
channels.telegram.commands.nativeSkills: تمكين/تعطيل أوامر Skills الأصلية في Telegram. -
channels.telegram.replyToMode: off | first | all(الافتراضي:off). -
channels.telegram.textChunkLimit: حجم الأجزاء الصادرة (أحرف). -
channels.telegram.chunkMode: length(الافتراضي) أوnewlineللتقسيم على الأسطر الفارغة (حدود الفقرات) قبل التقسيم بحسب الطول. -
channels.telegram.linkPreview: تبديل معاينات الروابط للرسائل الصادرة (الافتراضي: true). -
channels.telegram.streaming: off | partial | block | progress(معاينة البث المباشر؛ الافتراضي:partial؛ تتحولprogressإلىpartial؛ وblockللتوافق مع وضع المعاينة القديم). يستخدم بث المعاينة في Telegram رسالة معاينة واحدة يتم تعديلها في مكانها. -
channels.telegram.mediaMaxMb: الحد الأقصى لوسائط Telegram الواردة/الصادرة (ميغابايت، الافتراضي: 100). -
channels.telegram.retry: سياسة إعادة المحاولة لمساعدات الإرسال في Telegram (CLI/tools/actions) عند أخطاء API الصادرة القابلة للاسترداد (المحاولات وminDelayMs وmaxDelayMs وjitter). -
channels.telegram.network.autoSelectFamily: تجاوز autoSelectFamily في Node (true=تمكين، false=تعطيل). يكون مفعّلًا افتراضيًا على Node 22+، مع تعطيل افتراضي في WSL2. -
channels.telegram.network.dnsResultOrder: تجاوز ترتيب نتائج DNS (ipv4firstأوverbatim). يكونipv4firstافتراضيًا على Node 22+. -
channels.telegram.network.dangerouslyAllowPrivateNetwork: تفعيل خطير لبيئات fake-IP أو transparent-proxy الموثوقة حيث تُحل تنزيلات وسائط Telegram لـapi.telegram.orgإلى عناوين خاصة/داخلية/ذات استخدام خاص خارج السماح الافتراضي لنطاق RFC 2544. -
channels.telegram.proxy: URL للـ proxy لاستدعاءات Bot API (SOCKS/HTTP). -
channels.telegram.webhookUrl: تمكين وضع webhook (يتطلبchannels.telegram.webhookSecret). -
channels.telegram.webhookSecret: سر webhook (مطلوب عند ضبط webhookUrl). -
channels.telegram.webhookPath: مسار webhook المحلي (الافتراضي/telegram-webhook). -
channels.telegram.webhookHost: مضيف ربط webhook المحلي (الافتراضي127.0.0.1). -
channels.telegram.webhookPort: منفذ ربط webhook المحلي (الافتراضي8787). -
channels.telegram.actions.reactions: تقييد تفاعلات أداة Telegram. -
channels.telegram.actions.sendMessage: تقييد إرسال رسائل أداة Telegram. -
channels.telegram.actions.deleteMessage: تقييد حذف رسائل أداة Telegram. -
channels.telegram.actions.sticker: تقييد إجراءات ملصقات Telegram — الإرسال والبحث (الافتراضي: false). -
channels.telegram.reactionNotifications: off | own | all— التحكم في التفاعلات التي تطلق أحداث النظام (الافتراضي:ownعندما لا تُضبط). -
channels.telegram.reactionLevel: off | ack | minimal | extensive— التحكم في قدرة الوكيل على التفاعل (الافتراضي:minimalعندما لا تُضبط). -
channels.telegram.errorPolicy: reply | silent— التحكم في سلوك ردود الأخطاء (الافتراضي:reply). وتُدعم تجاوزات لكل حساب/مجموعة/موضوع. -
channels.telegram.errorCooldownMs: الحد الأدنى بالميلي ثانية بين ردود الأخطاء للدردشة نفسها (الافتراضي:60000). يمنع سيلان الأخطاء أثناء الانقطاعات. - مرجع التكوين - Telegram
- بدء التشغيل/المصادقة:
enabledوbotTokenوtokenFileوaccounts.*(tokenFileيجب أن يشير إلى ملف عادي؛ وتُرفض الروابط الرمزية) - التحكم في الوصول:
dmPolicyوallowFromوgroupPolicyوgroupAllowFromوgroupsوgroups.*.topics.*وbindings[]على المستوى الأعلى (type: "acp") - موافقات exec:
execApprovalsوaccounts.*.execApprovals - الأوامر/القائمة:
commands.nativeوcommands.nativeSkillsوcustomCommands - threading/الردود:
replyToMode - البث:
streaming(المعاينة) وblockStreaming - التنسيق/التسليم:
textChunkLimitوchunkModeوlinkPreviewوresponsePrefix - الوسائط/الشبكة:
mediaMaxMbوtimeoutSecondsوretryوnetwork.autoSelectFamilyوnetwork.dangerouslyAllowPrivateNetworkوproxy - webhook:
webhookUrlوwebhookSecretوwebhookPathوwebhookHost - الإجراءات/القدرات:
capabilities.inlineButtonsوactions.sendMessage|editMessage|deleteMessage|reactions|sticker - التفاعلات:
reactionNotificationsوreactionLevel - الأخطاء:
errorPolicyوerrorCooldownMs - الكتابات/السجل:
configWritesوhistoryLimitوdmHistoryLimitوdms.*.historyLimit