Mainstream messaging
Telegram
جاهز للإنتاج لرسائل البوت الخاصة والمجموعات عبر grammY. وضع الاستقصاء الطويل هو الوضع الافتراضي؛ أما وضع Webhook فهو اختياري.
سياسة الرسائل الخاصة الافتراضية في Telegram هي الاقتران.
تشخيصات متعددة القنوات وإرشادات الإصلاح.
أنماط وأمثلة كاملة لتكوين القنوات.
الإعداد السريع
أنشئ رمز البوت في BotFather
افتح Telegram وتحدث مع @BotFather (تأكد من أن المعرّف هو بالضبط @BotFather).
شغّل /newbot، واتبع المطالبات، واحفظ الرمز.
كوّن الرمز وسياسة الرسائل الخاصة
{
channels: {
telegram: {
enabled: true,
botToken: "123:abc",
dmPolicy: "pairing",
groups: { "*": { requireMention: true } },
},
},
}
بديل البيئة: TELEGRAM_BOT_TOKEN=... (للحساب الافتراضي فقط).
لا يستخدم Telegram الأمر openclaw channels login telegram؛ كوّن الرمز في التكوين/البيئة، ثم ابدأ Gateway.
ابدأ Gateway واعتمد أول رسالة خاصة
openclaw gateway
openclaw pairing list telegram
openclaw pairing approve telegram <CODE>
تنتهي صلاحية رموز الاقتران بعد ساعة واحدة.
أضف البوت إلى مجموعة
أضف البوت إلى مجموعتك، ثم عيّن channels.telegram.groups وgroupPolicy بما يطابق نموذج الوصول لديك.
إعدادات جانب Telegram
وضع الخصوصية ورؤية المجموعة
تستخدم بوتات Telegram افتراضيًا وضع الخصوصية، وهو يحد من رسائل المجموعة التي تتلقاها.
إذا كان يجب أن يرى البوت كل رسائل المجموعة، فإما:
- عطّل وضع الخصوصية عبر
/setprivacy، أو - اجعل البوت مشرفًا في المجموعة.
عند تبديل وضع الخصوصية، أزل البوت ثم أعد إضافته في كل مجموعة حتى يطبق Telegram التغيير.
أذونات المجموعة
تُدار حالة المشرف من إعدادات مجموعة Telegram.
تتلقى بوتات المشرفين كل رسائل المجموعة، وهو أمر مفيد لسلوك المجموعات الدائم التشغيل.
مفاتيح تبديل BotFather المفيدة
/setjoingroupsللسماح/منع الإضافة إلى المجموعات/setprivacyلسلوك رؤية المجموعة
التحكم في الوصول والتفعيل
سياسة الرسائل الخاصة
يتحكم 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 حتى تكون للأوامر الخاصة بالمالك وموافقات exec حساب مشغّل صريح.
لا يزال تفويض مرسلي المجموعات يأتي من قوائم السماح الصريحة في التكوين.
إذا كنت تريد "أنا مخول مرة واحدة وتعمل كل من الرسائل الخاصة وأوامر المجموعة"، فضع معرّف مستخدم 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.
سياسة المجموعة وقوائم السماح
ينطبق عنصران للتحكم معًا:
-
المجموعات المسموح بها (
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: {
groups: {
"-1001234567890": {
groupPolicy: "open",
requireMention: false,
},
},
},
},
}
مثال: السماح لمستخدمين محددين فقط داخل مجموعة محددة واحدة:
{
channels: {
telegram: {
groups: {
"-1001234567890": {
requireMention: true,
allowFrom: ["8734062810", "745123456"],
},
},
},
},
}
سلوك الإشارة
تتطلب ردود المجموعة الإشارة افتراضيًا.
يمكن أن تأتي الإشارة من:
- إشارة
@botusernameالأصلية، أو - أنماط الإشارة في:
agents.list[].groupChat.mentionPatternsmessages.groupChat.mentionPatterns
مفاتيح تبديل الأوامر على مستوى الجلسة:
/activation always/activation mention
تحدّث هذه حالة الجلسة فقط. استخدم التكوين للاستمرارية.
مثال تكوين مستمر:
{
channels: {
telegram: {
groups: {
"*": { requireMention: false },
},
},
},
}
الحصول على معرّف دردشة المجموعة:
- وجّه رسالة مجموعة إلى
@userinfobot/@getidsbot - أو اقرأ
chat.idمنopenclaw logs --follow - أو افحص
getUpdatesفي Bot API
سلوك وقت التشغيل
- يملك Gateway عملية Telegram.
- التوجيه حتمي: ترد رسائل Telegram الواردة إلى Telegram (لا يختار النموذج القنوات).
- تُطبّع الرسائل الواردة إلى مظروف القناة المشترك مع بيانات الرد الوصفية وعناصر نائبة للوسائط.
- تُعزل جلسات المجموعة حسب معرّف المجموعة. تضيف مواضيع المنتدى
: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لا ينطبق).
مرجع الميزات
معاينة البث المباشر (تعديلات الرسائل)
يمكن لـ OpenClaw بث ردود جزئية في الوقت الفعلي:
- الدردشات المباشرة: رسالة معاينة +
editMessageText - المجموعات/المواضيع: رسالة معاينة +
editMessageText
المتطلب:
channels.telegram.streamingهوoff | partial | block | progress(الافتراضي:partial)- يحتفظ
progressبمسودة حالة واحدة قابلة للتحرير لتقدم الأدوات، ويمسحها عند الاكتمال، ويرسل الإجابة النهائية كرسالة عادية - يتحكم
streaming.preview.toolProgressفيما إذا كانت تحديثات الأدوات/التقدم تعيد استخدام رسالة المعاينة المحررة نفسها (الافتراضي:trueعندما يكون بث المعاينة نشطًا) - يتحكم
streaming.preview.commandTextفي تفاصيل الأوامر/exec داخل أسطر تقدم الأدوات تلك: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
}
}
}
}
}
لإبقاء تقدم الأدوات مرئيًا مع إخفاء نص الأوامر/exec، عيّن:
{
"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عندما يجب أن يظل التفكير مرئيًا - تُرسل الإجابة النهائية دون نص التفكير
Formatting and HTML fallback
يستخدم النص الصادر parse_mode: "HTML" في Telegram.
- يُعرض النص الشبيه بـ Markdown كـ HTML آمن لـ Telegram.
- يُهرّب HTML الخام الصادر من النموذج لتقليل إخفاقات تحليل Telegram.
- إذا رفض Telegram HTML المحلّل، يعيد OpenClaw المحاولة كنص عادي.
تكون معاينات الروابط مفعلة افتراضيًا ويمكن تعطيلها باستخدام channels.telegram.linkPreview: false.
Native commands and custom commands
تُعالَج عملية تسجيل قائمة أوامر 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
إذا كانت الأوامر الأصلية معطلة، تُزال الأوامر المضمنة. قد تظل أوامر custom/plugin تسجَّل إذا كانت مهيأة.
إخفاقات الإعداد الشائعة:
- يعني
setMyCommands failedمعBOT_COMMANDS_TOO_MUCHأن قائمة Telegram ما زالت متجاوزة الحد بعد التشذيب؛ قلّل أوامر plugin/skill/custom أو عطّلchannels.telegram.commands.native. - قد يعني فشل
deleteWebhookأوdeleteMyCommandsأوsetMyCommandsمع404: Not Foundبينما تعمل أوامر Bot API المباشرة عبر curl أن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 قبل الموافقة.
مزيد من التفاصيل: الإقران.
Inline buttons
هيّئ نطاق لوحة المفاتيح المضمنة:
{
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_data: <value>
Telegram message actions for agents and automation
تتضمن إجراءات أداة 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
Reply threading tags
يدعم Telegram وسوم سلاسل الرد الصريحة في المخرجات المولدة:
- يرد
[[reply_to_current]]على الرسالة التي أطلقت الإجراء - يرد
[[reply_to:<id>]]على معرّف رسالة Telegram محدد
يتحكم channels.telegram.replyToMode في المعالجة:
off(افتراضي)firstall
عندما تكون سلاسل الرد مفعلة ويكون نص Telegram الأصلي أو التعليق متاحًا، يضمّن OpenClaw مقتطف اقتباس أصليًا من Telegram تلقائيًا. يحد Telegram نص الاقتباس الأصلي عند 1024 وحدة ترميز UTF-16، لذلك تُقتبس الرسائل الأطول من بدايتها وتعود إلى رد عادي إذا رفض Telegram الاقتباس.
ملاحظة: يعطّل off سلاسل الرد الضمنية. لا تزال وسوم [[reply_to_*]] الصريحة تُحترم.
Forum topics and thread behavior
مجموعات المنتدى الفائقة:
- تضيف مفاتيح جلسة الموضوع
: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 خاص بالموضوع ولا يرث من افتراضات المجموعة.
توجيه الوكيل لكل موضوع: يمكن لكل موضوع التوجيه إلى وكيل مختلف عن طريق تعيين 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 التحديث بشكل غير متزامن عبر المسارات نفسها لكل دردشة/لكل موضوع التي يستخدمها الاستقصاء الطويل، لذلك لا تجعل دورات الوكيل البطيئة إقرار التسليم الخاص بTelegram ينتظر.
الحدود وإعادة المحاولة وأهداف CLI
- القيمة الافتراضية لـ
channels.telegram.textChunkLimitهي 4000. - يفضل
channels.telegram.chunkMode="newline"حدود الفقرات (الأسطر الفارغة) قبل التقسيم حسب الطول. - يحدد
channels.telegram.mediaMaxMb(الافتراضي 100) الحد الأقصى لحجم وسائط Telegram الواردة والصادرة. - يتحكم
channels.telegram.mediaGroupFlushMs(الافتراضي 500) في مدة تخزين ألبومات/مجموعات وسائط Telegram مؤقتا قبل أن يرسلها OpenClaw كرسالة واردة واحدة. زدها إذا وصلت أجزاء الألبوم متأخرة؛ وأنقصها لتقليل زمن استجابة الرد على الألبوم. - يتجاوز
channels.telegram.timeoutSecondsمهلة عميل Telegram API (إذا لم يضبط، ينطبق افتراضي grammY). تقيد عملاء البوت القيم المكونة التي تقل عن حارس طلب النص/الكتابة الصادر البالغ 60 ثانية حتى لا يجهض grammY تسليم الرد المرئي قبل أن يعمل حارس نقل OpenClaw والبديل. لا يزال الاستقصاء الطويل يستخدم حارس طلبgetUpdatesمدته 45 ثانية حتى لا تترك الاستقصاءات الخاملة إلى أجل غير مسمى. - تكون القيمة الافتراضية لـ
channels.telegram.pollingStallThresholdMsهي120000؛ اضبطها بين30000و600000فقط لحالات إعادة تشغيل توقف الاستقصاء الإيجابية الكاذبة. - يستخدم سجل سياق المجموعة
channels.telegram.historyLimitأوmessages.groupChat.historyLimit(الافتراضي 50)؛ وتعطله القيمة0. - يتم حاليا تمرير السياق التكميلي للرد/الاقتباس/إعادة التوجيه كما تم استلامه.
- تتحكم قوائم السماح في 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لإرسال الصور وGIFs الصادرة كمستندات بدلا من تحميلات صور مضغوطة أو وسائط متحركة
تقييد الإجراءات:
- يعطل
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/Skills/الأوامر المخصصة أو عطل القوائم الأصلية - تكون استدعاءات بدء التشغيل
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 في Telegram بـOPENCLAW_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 A
dig +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