Telegram (Bot API)
الحالة: جاهز للإنتاج للمحادثات الخاصة مع البوت + المجموعات عبر grammY. يعتمد الاستطلاع الطويل افتراضيًا؛ webhook اختياري.البدء السريع (للمبتدئين)
- أنشئ بوتًا باستخدام @BotFather (رابط مباشر). تأكّد من أن المعرّف هو بالضبط
@BotFather، ثم انسخ الرمز المميّز. - تعيين الرمز المميّز:
- احسن:
TELEGRAM_BOT_TOKEN=... - أو في التهيئة:
channels.telegram.botToken: "...". - إذا تم تعيين الاثنين، تكون أولوية التهيئة أعلى (الرجوع إلى متغيرات البيئة يكون فقط للحساب الافتراضي).
- احسن:
- شغّل Gateway.
- الوصول عبر الرسائل الخاصة يتم عبر الإقران افتراضيًا؛ وافق على رمز الإقران عند أول تواصل.
ما هو
- قناة Telegram Bot API مملوكة لـ Gateway.
- توجيه حتمي: الردود تعود إلى Telegram؛ ولا يختار النموذج القنوات.
- تشترك الرسائل الخاصة في الجلسة الرئيسية للوكيل؛ بينما تبقى المجموعات معزولة (
agent:<agentId>:telegram:group:<chatId>).
الإعداد (المسار السريع)
1. إنشاء رمز بوت (BotFather)
- افتح Telegram وابدأ محادثة مع @BotFather (رابط مباشر). تأكّد من أن المعرّف هو بالضبط
@BotFather. - نفّذ
/newbot، ثم اتبع التعليمات (الاسم + اسم مستخدم ينتهي بـbot). - انسخ الرمز المميّز واحفظه بأمان.
/setjoingroups— السماح/المنع لإضافة البوت إلى المجموعات./setprivacy— التحكّم فيما إذا كان البوت يرى جميع رسائل المجموعة.
2. تهيئة الرمز المميّز (بيئة أو تهيئة)
مثال:TELEGRAM_BOT_TOKEN=... (يعمل للحساب الافتراضي).
إذا تم تعيين متغيرات البيئة والتهيئة معًا، تكون أولوية التهيئة أعلى.
دعم تعدد الحسابات: استخدم channels.telegram.accounts مع رموز مميّزة لكل حساب و name اختياريًا. انظر gateway/configuration للنمط المشترك.
- شغّل Gateway. يبدأ Telegram عند حلّ رمز مميّز (التهيئة أولًا، ثم الرجوع إلى متغيرات البيئة).
- الوصول عبر الرسائل الخاصة افتراضيه الإقران. وافق على الرمز عند أول تواصل مع البوت.
- للمجموعات: أضف البوت، قرّر سلوك الخصوصية/الإدارة (أدناه)، ثم عيّن
channels.telegram.groupsللتحكّم ببوابة الذِكر + قوائم السماح.
الرمز المميّز + الخصوصية + الصلاحيات (جانب Telegram)
إنشاء الرمز المميّز (BotFather)
/newbotينشئ البوت ويعيد الرمز المميّز (احتفظ به سرًا).- إذا كان هناك تسرب رمزي ، قم بإلغائه/إعادة إنشائه عبر @BotFather وتحديث الإعدادات الخاصة بك.
رؤية رسائل المجموعات (وضع الخصوصية)
تعمل بوتات Telegram افتراضيًا في وضع الخصوصية، ما يقيّد الرسائل الجماعية التي تتلقّاها. إذا كان يجب أن يرى البوت جميع رسائل المجموعة، فلديك خياران:- تعطيل وضع الخصوصية باستخدام
/setprivacyأو - إضافة البوت كـ مشرف في المجموعة (البوتات المشرفة تتلقّى جميع الرسائل).
صلاحيات المجموعات (حقوق المشرف)
تُحدَّد حالة المشرف داخل المجموعة (واجهة Telegram). تتلقّى البوتات المشرفة دائمًا جميع رسائل المجموعة، لذا استخدم حالة المشرف إذا احتجت رؤية كاملة.كيف يعمل (السلوك)
- تُطبَّع الرسائل الواردة إلى غلاف القناة المشترك مع سياق الردّ ومواضع وسائط.
- تتطلب ردود المجموعات ذكرًا افتراضيًا (ذكر @ الأصلي أو
agents.list[].groupChat.mentionPatterns/messages.groupChat.mentionPatterns). - تجاوز متعدد الوكلاء: عيّن أنماطًا لكل وكيل على
agents.list[].groupChat.mentionPatterns. - تعود الردود دائمًا إلى نفس دردشة Telegram.
- يستخدم الاستطلاع الطويل مُشغّل grammY مع تسلسل لكل دردشة؛ ويُقيَّد التوازي العام بواسطة
agents.defaults.maxConcurrent. - لا يدعم Telegram Bot API إيصالات القراءة؛ ولا يوجد خيار
sendReadReceipts.
مسودة البث
يمكن لـ OpenClaw بث ردود جزئية في الرسائل الخاصة على Telegram باستخدامsendMessageDraft.
المتطلبات:
- تمكين وضع الخيوط للبوت في @BotFather (وضع مواضيع المنتدى).
- خيوط الدردشة الخاصة فقط (يتضمن Telegram
message_thread_idفي الرسائل الواردة). - عدم تعيين
channels.telegram.streamModeإلى"off"(الافتراضي:"partial"، ويُمكّن"block"تحديثات مسودة مجزّأة).
التنسيق (Telegram HTML)
- يستخدم نص Telegram الصادر
parse_mode: "HTML"(مجموعة وسوم Telegram المدعومة). - تُحوَّل المدخلات الشبيهة بـ Markdown إلى HTML آمن لـ Telegram (غامق/مائل/شطب/شفرة/روابط)؛ وتُسطَّح عناصر الكتل إلى نص مع أسطر جديدة/نقاط.
- يُهَرَّب HTML الخام من النماذج لتجنّب أخطاء التحليل في Telegram.
- إذا رفض Telegram حمولة HTML، يعيد OpenClaw إرسال الرسالة نفسها كنص عادي.
الأوامر (الأصلية + المخصّصة)
يسجّل OpenClaw أوامر أصلية (مثل/status، /reset، /model) مع قائمة بوت Telegram عند بدء التشغيل.
يمكنك إضافة أوامر مخصّصة إلى القائمة عبر التهيئة:
استكشاف أخطاء الإعداد (الأوامر)
- ظهور
setMyCommands failedفي السجلات يعني عادةً أن HTTPS/DNS الصادر محجوب إلىapi.telegram.org. - إذا رأيت إخفاقات
sendMessageأوsendChatAction، تحقّق من توجيه IPv6 وDNS.
- الأوامر المخصّصة هي عناصر قائمة فقط؛ لا ينفّذها OpenClaw ما لم تتعامل معها في مكان آخر.
- يمكن التعامل مع بعض الأوامر بواسطة الإضافات/المهارات دون تسجيلها في قائمة أوامر Telegram. ستظل هذه الأوامر تعمل عند كتابتها (لكنها لن تظهر في
/commands/ القائمة). - تُطبَّع أسماء الأوامر (إزالة بادئة
/، والتحويل إلى أحرف صغيرة) ويجب أن تطابقa-z،0-9،_(1–32 حرفًا). - لا يمكن للأوامر المخصّصة تجاوز الأوامر الأصلية. يتم تجاهل التعارضات وتسجيلها.
- إذا كان
commands.nativeمعطّلًا، تُسجَّل الأوامر المخصّصة فقط (أو تُزال إن لم توجد).
أوامر اقتران الأجهزة (إضافة device-pair)
إذا كانت إضافة device-pair مثبتة، فإنها تضيف تدفقًا يعتمد على Telegram أولًا لاقتران هاتف جديد:
/pairيُنشئ رمز إعداد (يُرسل كرسالة منفصلة لسهولة النسخ/اللصق).- الصق رمز الإعداد في تطبيق iOS للاتصال.
/pair approveيوافق على أحدث طلب جهاز معلّق.
الحدود
- يُجزَّأ النص الصادر إلى
channels.telegram.textChunkLimit(الافتراضي 4000). - تجزئة اختيارية على الأسطر الجديدة: عيّن
channels.telegram.chunkMode="newline"للتقسيم على الأسطر الفارغة (حدود الفقرات) قبل تجزئة الطول. - تُقيَّد تنزيلات/تحميلات الوسائط بـ
channels.telegram.mediaMaxMb(الافتراضي 5). - تنتهي مهلة طلبات Telegram Bot API بعد
channels.telegram.timeoutSeconds(الافتراضي 500 عبر grammY). خفّضها لتجنّب التعليق الطويل. - يستخدم سياق سجلّ المجموعة
channels.telegram.historyLimit(أوchannels.telegram.accounts.*.historyLimit)، مع الرجوع إلىmessages.groupChat.historyLimit. عيّن0لتعطيله (الافتراضي 50). - يمكن تقييد سجلّ الرسائل الخاصة بـ
channels.telegram.dmHistoryLimit(عدد أدوار المستخدم). تجاوزات لكل مستخدم:channels.telegram.dms["<user_id>"].historyLimit.
أوضاع تفعيل المجموعات
افتراضيًا، يردّ البوت فقط على الذِكر في المجموعات (@botname أو أنماط في agents.list[].groupChat.mentionPatterns). لتغيير هذا السلوك:
عبر التهيئة (مُوصى به)
channels.telegram.groups ينشئ قائمة سماح — لن تُقبَل إلا المجموعات المدرجة (أو "*").
ترث مواضيع المنتدى إعدادات المجموعة الأصلية (allowFrom، requireMention، skills، prompts) ما لم تضف تجاوزات لكل موضوع ضمن channels.telegram.groups.<groupId>.topics.<topicId>.
للسماح لجميع المجموعات مع الرد الدائم:
عبر الأمر (على مستوى الجلسة)
أرسل في المجموعة:/activation always— الرد على جميع الرسائل/activation mention— يتطلّب الذِكر (الافتراضي)
الحصول على معرّف دردشة المجموعة
أعد توجيه أي رسالة من المجموعة إلى@userinfobot أو @getidsbot على Telegram لرؤية معرّف الدردشة (رقم سالب مثل -1001234567890).
نصيحة: للحصول على معرّف المستخدم الخاص بك، أرسل رسالة خاصة للبوت وسيجيب بمعرّفك (رسالة الإقران)، أو استخدم /whoami بعد تمكين الأوامر.
ملاحظة الخصوصية: @userinfobot بوت تابع لجهة خارجية. إن فضّلت، أضف البوت إلى المجموعة، أرسل رسالة، واستخدم openclaw logs --follow لقراءة chat.id، أو استخدم Bot API getUpdates.
كتابة التهيئة
افتراضيًا، يُسمح لـ Telegram بكتابة تحديثات التهيئة المُشغَّلة بأحداث القناة أو/config set|unset.
يحدث هذا عندما:
- تتم ترقية مجموعة إلى supergroup ويُصدر Telegram
migrate_to_chat_id(يتغيّر معرّف الدردشة). يمكن لـ OpenClaw ترحيلchannels.telegram.groupsتلقائيًا. - تُنفّذ
/config setأو/config unsetفي دردشة Telegram (يتطلبcommands.config: true).
المواضيع (مجموعات المنتدى)
تتضمن مواضيع منتدى Telegrammessage_thread_id لكل رسالة. يقوم OpenClaw بما يلي:
- يضيف
:topic:<threadId>إلى مفتاح جلسة مجموعة Telegram بحيث يكون كل موضوع معزولًا. - يرسل مؤشرات الكتابة والردود مع
message_thread_idلتبقى الردود ضمن الموضوع. - الموضوع العام (معرّف الخيط
1) خاص: ترسل الرسائل دونmessage_thread_id(يرفضه Telegram)، لكن مؤشرات الكتابة ما زالت تتضمنه. - يعرِض
MessageThreadId+IsForumفي سياق القالب للتوجيه/القوالب. - تتوفر تهيئة خاصة بالموضوع تحت
channels.telegram.groups.<chatId>.topics.<threadId>(skills، قوائم السماح، الردّ التلقائي، مطالبات النظام، التعطيل). - ترث تهيئات الموضوع إعدادات المجموعة (requireMention، قوائم السماح، skills، prompts، التمكين) ما لم يتم تجاوزها لكل موضوع.
message_thread_id في بعض الحالات الحدّية. يُبقي OpenClaw مفتاح جلسة الرسائل الخاصة دون تغيير، لكنه ما زال يستخدم معرّف الخيط للردود/بثّ المسودات عند وجوده.
الأزرار المضمّنة
يدعم Telegram لوحات مفاتيح مضمّنة بأزرار ردّ.off— تعطيل الأزرار المضمّنةdm— الرسائل الخاصة فقط (حظر أهداف المجموعات)group— المجموعات فقط (حظر أهداف الرسائل الخاصة)all— الرسائل الخاصة + المجموعاتallowlist— الرسائل الخاصة + المجموعات، لكن فقط للمرسلين المسموح لهم بواسطةallowFrom/groupAllowFrom(نفس قواعد أوامر التحكّم)
allowlist.
قديم: capabilities: ["inlineButtons"] = inlineButtons: "all".
إرسال الأزرار
استخدم أداة الرسائل مع معاملbuttons:
callback_data: value
خيارات التهيئة
يمكن تهيئة إمكانات Telegram على مستويين (يُعرض شكل الكائن أعلاه؛ لا تزال مصفوفات السلاسل القديمة مدعومة):channels.telegram.capabilities: تهيئة إمكانات افتراضية عامة تُطبّق على جميع حسابات Telegram ما لم يتم تجاوزها.channels.telegram.accounts.<account>.capabilities: إمكانات لكل حساب تتجاوز الافتراضيات العامة لذلك الحساب تحديدًا.
التحكّم في الوصول (الرسائل الخاصة + المجموعات)
الوصول إلى DM
- الافتراضي:
channels.telegram.dmPolicy = "pairing". يتلقى المرسلون المجهولون رمز إقران؛ وتُتجاهل الرسائل حتى تتم الموافقة (تنتهي صلاحية الرموز بعد ساعة). - الموافقة عبر:
openclaw pairing list telegramopenclaw pairing approve telegram <CODE>
- الإقران هو تبادل الرموز الافتراضي المستخدم لرسائل Telegram الخاصة. التفاصيل: الإقران
- يقبل
channels.telegram.allowFromمعرّفات مستخدمين رقمية (مُوصى به) أو إدخالات@username. ليس اسم مستخدم البوت؛ استخدم معرّف المُرسل البشري. يقبل المعالج@usernameويحوّله إلى المعرّف الرقمي عند الإمكان.
العثور على معرف مستخدم تيليجرام الخاص بك
أكثر أمانًا (دون بوت طرف ثالث):- ابدأ البوابة و DM بوت الخاص بك.
- نفّذ
openclaw logs --followوابحث عنfrom.id.
- ادرج بوت الخاص بك.
-
اجلب التحديثات باستخدام رمز البوت واقرأ
message.from.id:
- أرسل رسالة خاصة إلى
@userinfobotأو@getidsbotواستخدم معرّف المستخدم المُعاد.
الوصول إلى المجموعات
تحكّمان مستقلان: 1. أي المجموعات مسموح بها (قائمة سماح المجموعات عبرchannels.telegram.groups):
- عدم وجود تهيئة
groups= جميع المجموعات مسموح بها - مع تهيئة
groups= فقط المجموعات المدرجة أو"*"مسموح بها - مثال:
"groups": { "-1001234567890": {}, "*": {} }يسمح بكل المجموعات
channels.telegram.groupPolicy):
"open"= جميع المرسلين في المجموعات المسموح بها يمكنهم الإرسال"allowlist"= فقط المرسلون فيchannels.telegram.groupAllowFromيمكنهم الإرسال"disabled"= لا تُقبل أي رسائل مجموعات إطلاقًا الافتراضي هوgroupPolicy: "allowlist"(محجوب ما لم تُضفgroupAllowFrom).
groupPolicy: "allowlist" + groupAllowFrom + مجموعات محددة مدرجة في channels.telegram.groups
للسماح لأي عضو في المجموعة بالتحدث في مجموعة محددة (مع إبقاء أوامر التحكّم مقيّدة بالمرسلين المصرّح لهم)، عيّن تجاوزًا لكل مجموعة:
الاستطلاع الطويل مقابل webhook
- الافتراضي: الاستطلاع الطويل (لا يتطلب عنوان URL عامًا).
- وضع webhook: عيّن
channels.telegram.webhookUrlوchannels.telegram.webhookSecret(اختياريًاchannels.telegram.webhookPath).- يرتبط المستمع المحلي بـ
0.0.0.0:8787ويخدمPOST /telegram-webhookافتراضيًا. - إذا كان عنوان URL العام مختلفًا، استخدم وكيلًا عكسيًا ووجّه
channels.telegram.webhookUrlإلى نقطة النهاية العامة.
- يرتبط المستمع المحلي بـ
تفرّع الردود
يدعم Telegram ردودًا مترابطة اختيارية عبر الوسوم:[[reply_to_current]]— الرد على الرسالة المُحفِّزة.[[reply_to:<id>]]— الرد على معرّف رسالة محدد.
channels.telegram.replyToMode:
first(الافتراضي)،all،off.
الرسائل الصوتية (ملاحظة صوتية مقابل ملف)
يميّز Telegram بين الملاحظات الصوتية (فقاعة دائرية) وملفات الصوت (بطاقة بيانات). يعتمد OpenClaw افتراضيًا ملفات الصوت للتوافق الخلفي. لفرض فقاعة ملاحظة صوتية في ردود الوكيل، أدرج هذا الوسم في أي مكان في الرد:[[audio_as_voice]]— إرسال الصوت كملاحظة صوتية بدل ملف.
asVoice: true مع عنوان URL متوافق مع الصوت media
(message اختياري عند وجود وسائط):
رسائل الفيديو (فيديو مقابل ملاحظة فيديو)
يميز Telegram بين ملاحظات الفيديو (فقاعة دائرية) وملفات الفيديو (مستطيلة). يستخدم OpenClaw افتراضيًا ملفات الفيديو. لإرسال أداة الرسائل، عيّنasVideoNote: true مع عنوان URL لوسائط الفيديو:
نعم، وذلك بتوجيه كل مُرسل إلى وكيل مختلف عبر
bindings (نوع النظير kind: "direct"، ورقم المرسل بصيغة E.164 مثل +15551234567).
الملصقات
يدعم OpenClaw استقبال وإرسال ملصقات Telegram مع تخزين مؤقّت ذكي.استقبال الملصقات
عند إرسال المستخدم ملصقًا، يتعامل OpenClaw معه حسب نوع الملصق:- ملصقات ثابتة (WEBP): تُنزَّل وتُعالَج عبر الرؤية. يظهر الملصق كموضع
<media:sticker>في محتوى الرسالة. - ملصقات متحركة (TGS): يتم تجاوزها (تنسيق Lottie غير مدعوم للمعالجة).
- ملصقات فيديو (WEBM): يتم تجاوزها (تنسيق الفيديو غير مدعوم للمعالجة).
Sticker— كائن يحتوي على:emoji— الرمز التعبيري المرتبط بالملصقsetName— اسم مجموعة الملصقاتfileId— معرّف ملف Telegram (لإرسال الملصق نفسه مرة أخرى)fileUniqueId— معرّف ثابت للبحث في التخزين المؤقّتcachedDescription— وصف الرؤية المخزّن مؤقتًا عند توفره
التخزين المؤقّت للملصقات
تُعالَج الملصقات عبر قدرات الرؤية للذكاء الاصطناعي لتوليد أوصاف. وبما أن الملصقات نفسها تُرسل كثيرًا، يخزّن OpenClaw هذه الأوصاف لتجنّب استدعاءات API المتكررة. كيف يعمل:- المرة الأولى: تُرسل صورة الملصق إلى الذكاء الاصطناعي لتحليل الرؤية. يُنشئ الذكاء الاصطناعي وصفًا (مثل: «قطة كرتونية تلوّح بحماس»).
- التخزين: يُحفظ الوصف مع معرّف الملف، والرمز التعبيري، واسم المجموعة.
- المرات اللاحقة: عند رؤية الملصق نفسه مرة أخرى، يُستخدم الوصف المخزّن مباشرةً دون إرسال الصورة للذكاء الاصطناعي. لم يتم إرسال الصورة إلى AI.
~/.openclaw/telegram/sticker-cache.json
تنسيق إدخال التخزين المؤقّت:
- تقليل تكاليف API بتجنّب مكالمات الرؤية المتكررة للملصق نفسه
- زمن استجابة أسرع للملصقات المخزّنة (لا تأخير لمعالجة الرؤية)
- تمكين البحث عن الملصقات بناءً على الأوصاف المخزّنة
إرسال الملصقات
يمكن للوكيل إرسال والبحث عن الملصقات باستخدام الإجراءينsticker و sticker-search. تكون معطّلة افتراضيًا ويجب تمكينها في التهيئة:
fileId(مطلوب) — معرّف ملف Telegram للملصق. احصل عليه منSticker.fileIdعند استقبال ملصق، أو من نتيجةsticker-search.replyTo(اختياري) — معرّف الرسالة للرد.threadId(اختياري) — معرّف خيط الرسالة لمواضيع المنتدى.
البثّ (المسودات)
يمكن لـ Telegram بث فقاعات مسودات أثناء توليد الوكيل للرد. يستخدم OpenClaw Bot APIsendMessageDraft (ليست رسائل حقيقية) ثم يرسل
الرد النهائي كرسالة عادية.
المتطلبات (Telegram Bot API 9.3+):
- دردشات خاصة مع تمكين المواضيع (وضع موضوع المنتدى للبوت).
- يجب أن تتضمن الرسائل الواردة
message_thread_id(خيط موضوع خاص). - يتم تجاهل البث للمجموعات/supergroups/القنوات.
channels.telegram.streamMode: "off" | "partial" | "block"(الافتراضي:partial)partial: تحديث فقاعة المسودة بأحدث نص متدفّق.block: تحديث فقاعة المسودة في كتل أكبر (مجزّأة).off: تعطيل بثّ المسودات.
- اختياري (فقط لـ
streamMode: "block"):channels.telegram.draftChunk: { minChars?, maxChars?, breakPreference? }- الافتراضيات:
minChars: 200،maxChars: 800،breakPreference: "paragraph"(مقيّدة بـchannels.telegram.textChunkLimit).
- الافتراضيات:
channels.telegram.blockStreaming: true
إذا أردت رسائل Telegram مبكرة بدل تحديثات المسودة.
بثّ الاستدلال (Telegram فقط):
/reasoning streamيبث الاستدلال داخل فقاعة المسودة أثناء توليد الرد، ثم يرسل الإجابة النهائية دون الاستدلال.- إذا كان
channels.telegram.streamModeهوoff، يتم تعطيل بثّ الاستدلال. مزيد من السياق: البث + التجزئة.
سياسة إعادة المحاولة
تعيد استدعاءات Telegram API الصادرة المحاولة عند أخطاء الشبكة العابرة/429 مع تراجع أُسّي وإزاحة عشوائية. يمكن التهيئة عبرchannels.telegram.retry. انظر سياسة إعادة المحاولة.
أداة الوكيل (الرسائل + التفاعلات)
- الأداة:
telegramمع إجراءsendMessage(to،content،mediaUrlاختياري،replyToMessageId،messageThreadId). - الأداة:
telegramمع إجراءreact(chatId،messageId،emoji). - الأداة:
telegramمع إجراءdeleteMessage(chatId،messageId). - دلالات إزالة التفاعل: انظر /tools/reactions.
- بوابات الأدوات:
channels.telegram.actions.reactions،channels.telegram.actions.sendMessage،channels.telegram.actions.deleteMessage(الافتراضي: مُمكّن)، وchannels.telegram.actions.sticker(الافتراضي: معطّل).
إشعارات التفاعلات
كيف تعمل التفاعلات: تصل تفاعلات Telegram كـ أحداثmessage_reaction منفصلة، وليست خصائص ضمن حمولة الرسالة. عندما يضيف المستخدم تفاعلًا، يقوم OpenClaw بما يلي:
- يتلقى تحديث
message_reactionمن Telegram API - يحوّله إلى حدث نظام بالتنسيق:
"Telegram reaction added: {emoji} by {user} on msg {id}" - يضع حدث النظام في الطابور باستخدام مفتاح الجلسة نفسه للرسائل العادية
- عند وصول الرسالة التالية في تلك المحادثة، تُفرَّغ أحداث النظام وتُسبق إلى سياق الوكيل
-
channels.telegram.reactionNotifications: يتحكّم في أي التفاعلات تُطلق إشعارات"off"— تجاهل جميع التفاعلات"own"— الإخطار عند تفاعل المستخدمين مع رسائل البوت (أفضل جهد؛ في الذاكرة) (الافتراضي)"all"— الإخطار لجميع التفاعلات
-
channels.telegram.reactionLevel: يتحكّم في قدرة الوكيل على التفاعل"off"— لا يمكن للوكيل التفاعل مع الرسائل"ack"— يرسل البوت تفاعلات إقرار (👀 أثناء المعالجة) (الافتراضي)"minimal"— يمكن للوكيل التفاعل باعتدال (إرشاد: 1 لكل 5–10 تبادلات)"extensive"— يمكن للوكيل التفاعل بسخاء عند الملاءمة
message_thread_id وتستخدم مفاتيح جلسة مثل agent:main:telegram:group:{chatId}:topic:{threadId}. يضمن ذلك بقاء التفاعلات والرسائل في الموضوع نفسه معًا.
مثال تهيئة:
- يجب على بوتات Telegram طلب
message_reactionصراحةً فيallowed_updates(يُهيَّأ تلقائيًا بواسطة OpenClaw) - في وضع webhook، تُضمَّن التفاعلات في webhook
allowed_updates - في وضع الاستطلاع، تُضمَّن التفاعلات في
getUpdatesallowed_updates
أهداف التسليم (CLI/cron)
- استخدم معرّف دردشة (
123456789) أو اسم مستخدم (@name) كهدف. - مثال:
openclaw message send --channel telegram --target 123456789 --message "hi".
استكشاف الأخطاء وإصلاحها
البوت لا يرد على رسائل غير مذكورة في مجموعة:- إذا عيّنت
channels.telegram.groups.*.requireMention=false، فيجب تعطيل وضع الخصوصية في Bot API الخاص بـ Telegram.- BotFather:
/setprivacy→ تعطيل (ثم إزالة البوت وإعادة إضافته إلى المجموعة)
- BotFather:
- يعرض
openclaw channels statusتحذيرًا عندما تتوقع التهيئة رسائل مجموعات دون ذكر. - يمكن لـ
openclaw channels status --probeأيضًا التحقق من العضوية لمعرّفات المجموعات الرقمية الصريحة (لا يمكنه تدقيق قواعد البدل"*"). - اختبار سريع:
/activation always(على مستوى الجلسة؛ استخدم التهيئة للاستمرارية)
- إذا كان
channels.telegram.groupsمعيّنًا، فيجب إدراج المجموعة أو استخدام"*" - تحقّق من إعدادات الخصوصية في @BotFather → «خصوصية المجموعات» يجب أن تكون OFF
- تأكّد من أن البوت عضو فعليًا (وليس مجرد مشرف دون وصول قراءة)
- تحقّق من سجلات Gateway:
openclaw logs --follow(ابحث عن «skipping group message»)
/activation always:
- يُحدّث أمر
/activationحالة الجلسة لكنه لا يستمر في التهيئة - للسلوك الدائم، أضف المجموعة إلى
channels.telegram.groupsمعrequireMention: false
/status لا تعمل:
- تأكّد من أن معرّف مستخدم Telegram الخاص بك مخوّل (عبر الإقران أو
channels.telegram.allowFrom) - تتطلب الأوامر التفويض حتى في المجموعات مع
groupPolicy: "open"
- أصبح Node 22+ أكثر صرامة بخصوص مثيلات
AbortSignal؛ يمكن لإشارات خارجية إجهاض استدعاءاتfetchفورًا. - حدّث إلى إصدار OpenClaw يطبّع إشارات الإجهاض، أو شغّل Gateway على Node 20 حتى تتمكّن من التحديث.
HttpError: Network request ... failed):
- تقوم بعض المضيفات بحلّ
api.telegram.orgإلى IPv6 أولًا. إذا لم يكن لخادمك خروج IPv6 عامل، قد يعلق grammY على طلبات IPv6 فقط. - أصلح ذلك بتمكين خروج IPv6 أو فرض حل IPv4 لـ
api.telegram.org(مثلًا، أضف إدخال/etc/hostsباستخدام سجل A لـ IPv4، أو فضّل IPv4 في مكدس DNS لنظام التشغيل)، ثم أعد تشغيل Gateway. - فحص سريع:
dig +short api.telegram.org Aوdig +short api.telegram.org AAAAلتأكيد ما يعيده DNS.
مرجع التهيئة (Telegram)
التهيئة الكاملة: التهيئة خيارات الموفّر:channels.telegram.enabled: تمكين/تعطيل بدء القناة.channels.telegram.botToken: رمز البوت (BotFather).channels.telegram.tokenFile: قراءة الرمز من مسار ملف.channels.telegram.dmPolicy:pairing | allowlist | open | disabled(الافتراضي: الإقران).channels.telegram.allowFrom: قائمة سماح الرسائل الخاصة (معرّفات/أسماء مستخدمين). يتطلبopenوجود"*".channels.telegram.groupPolicy:open | allowlist | disabled(الافتراضي: قائمة سماح).channels.telegram.groupAllowFrom: قائمة سماح مرسلي المجموعات (معرّفات/أسماء مستخدمين).channels.telegram.groups: افتراضيات لكل مجموعة + قائمة سماح (استخدم"*"للافتراضيات العامة).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: تجاوز قائمة سماح المرسلين لكل مجموعة.channels.telegram.groups.<id>.systemPrompt: مطالبة نظام إضافية للمجموعة.channels.telegram.groups.<id>.enabled: تعطيل المجموعة عندماfalse.channels.telegram.groups.<id>.topics.<threadId>.*: تجاوزات لكل موضوع (نفس حقول المجموعة).channels.telegram.groups.<id>.topics.<threadId>.groupPolicy: تجاوز لكل موضوع لـ groupPolicy (open | allowlist | disabled).channels.telegram.groups.<id>.topics.<threadId>.requireMention: تجاوز بوابة الذِكر لكل موضوع.
channels.telegram.capabilities.inlineButtons:off | dm | group | all | allowlist(الافتراضي: قائمة سماح).channels.telegram.accounts.<account>.capabilities.inlineButtons: تجاوز لكل حساب.channels.telegram.replyToMode:off | first | all(الافتراضي:first).channels.telegram.textChunkLimit: حجم تجزئة الصادر (أحرف).channels.telegram.chunkMode:length(افتراضي) أوnewlineللتقسيم على الأسطر الفارغة (حدود الفقرات) قبل تجزئة الطول.channels.telegram.linkPreview: تبديل معاينات الروابط للرسائل الصادرة (الافتراضي: true).channels.telegram.streamMode:off | partial | block(بثّ المسودات).channels.telegram.mediaMaxMb: حد الوسائط الواردة/الصادرة (MB).channels.telegram.retry: سياسة إعادة المحاولة لاستدعاءات Telegram API الصادرة (عدد المحاولات، minDelayMs، maxDelayMs، jitter).channels.telegram.network.autoSelectFamily: تجاوز Node autoSelectFamily (true=تمكين، false=تعطيل). الافتراضي معطّل على Node 22 لتجنّب مهلات Happy Eyeballs.channels.telegram.proxy: عنوان URL للوكيل لاستدعاءات Bot API (SOCKS/HTTP).channels.telegram.webhookUrl: تمكين وضع webhook (يتطلبchannels.telegram.webhookSecret).channels.telegram.webhookSecret: سرّ webhook (مطلوب عند تعيين webhookUrl).channels.telegram.webhookPath: مسار webhook المحلي (الافتراضي/telegram-webhook).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عند عدم التعيين).
agents.list[].groupChat.mentionPatterns(أنماط بوابة الذِكر).messages.groupChat.mentionPatterns(الرجوع العام).commands.native(الافتراضي"auto"→ مفعّل لـ Telegram/Discord، معطّل لـ Slack)،commands.text،commands.useAccessGroups(سلوك الأوامر). تجاوز باستخدامchannels.telegram.commands.native.messages.responsePrefix،messages.ackReaction،messages.ackReactionScope،messages.removeAckAfterReply.