Mainstream messaging
Telegram
آمادهٔ تولید برای پیامهای مستقیم ربات و گروهها از طریق grammY. حالت پیشفرض، long polling است؛ حالت 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 gateway
openclaw pairing list telegram
openclaw pairing approve telegram <CODE>
کدهای جفتسازی پس از ۱ ساعت منقضی میشوند.
Add the bot to a group
ربات را به گروه خود اضافه کنید، سپس channels.telegram.groups و groupPolicy را مطابق مدل دسترسی خود تنظیم کنید.
تنظیمات سمت Telegram
Privacy mode and group visibility
رباتهای Telegram بهطور پیشفرض از Privacy Mode استفاده میکنند، که پیامهای گروهی دریافتی آنها را محدود میکند.
اگر ربات باید همهٔ پیامهای گروه را ببیند، یکی از این کارها را انجام دهید:
- حالت حریم خصوصی را از طریق
/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: ["*"] در سطح حساب، آن حساب را عمومی نمیکنند مگر اینکه allowlist مؤثر حساب پس از ادغام همچنان شامل wildcard صریح باشد.
dmPolicy: "allowlist" با allowFrom خالی همهٔ پیامهای مستقیم را مسدود میکند و توسط اعتبارسنجی پیکربندی رد میشود.
راهاندازی فقط شناسههای عددی کاربر را درخواست میکند.
اگر ارتقا دادهاید و پیکربندی شما شامل ورودیهای allowlist از نوع @username است، openclaw doctor --fix را اجرا کنید تا آنها را حل کند (بهترین تلاش؛ به توکن ربات Telegram نیاز دارد).
اگر قبلاً به فایلهای allowlist مربوط به pairing-store متکی بودید، openclaw doctor --fix میتواند در جریانهای allowlist ورودیها را در channels.telegram.allowFrom بازیابی کند (برای مثال وقتی dmPolicy: "allowlist" هنوز شناسهٔ صریحی ندارد).
برای رباتهای تکمالک، dmPolicy: "allowlist" را با شناسههای عددی صریح allowFrom ترجیح دهید تا سیاست دسترسی در پیکربندی پایدار بماند (بهجای وابستگی به تأییدهای جفتسازی قبلی).
ابهام رایج: تأیید جفتسازی پیام مستقیم به معنی «این فرستنده همهجا مجاز است» نیست.
جفتسازی دسترسی پیام مستقیم را اعطا میکند. اگر هنوز مالک فرمانی وجود نداشته باشد، نخستین جفتسازی تأییدشده همچنین commands.ownerAllowFrom را تنظیم میکند تا فرمانهای فقطمالک و تأییدهای اجرا یک حساب اپراتور صریح داشته باشند.
مجوز فرستنده در گروه همچنان از allowlistهای صریح پیکربندی میآید.
اگر میخواهید «یک بار مجاز شوم و هم پیامهای مستقیم و هم فرمانهای گروه کار کنند»، شناسهٔ عددی کاربر 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پیکربندیشده: بهعنوان allowlist عمل میکند (شناسههای صریح یا"*")
- بدون پیکربندی
-
کدام فرستندهها در گروهها مجاز هستند (
channels.telegram.groupPolicy)openallowlist(پیشفرض)disabled
groupAllowFrom برای فیلتر کردن فرستندههای گروه استفاده میشود. اگر تنظیم نشده باشد، Telegram به allowFrom برمیگردد.
ورودیهای groupAllowFrom باید شناسههای عددی کاربران Telegram باشند (پیشوندهای telegram: / tg: نرمالسازی میشوند).
شناسههای چت گروه یا سوپرگروه Telegram را در groupAllowFrom قرار ندهید. شناسههای چت منفی باید زیر channels.telegram.groups باشند.
ورودیهای غیرعددی برای مجوز فرستنده نادیده گرفته میشوند.
مرز امنیتی (2026.2.25+): احراز هویت فرستندهٔ گروه، تأییدهای DM pairing-store را به ارث نمیبرد.
جفتسازی فقط برای پیام مستقیم میماند. برای گروهها، groupAllowFrom یا allowFrom در سطح هر گروه/هر موضوع را تنظیم کنید.
اگر groupAllowFrom تنظیم نشده باشد، Telegram به allowFrom پیکربندی برمیگردد، نه pairing store.
الگوی عملی برای رباتهای تکمالک: شناسهٔ کاربری خود را در channels.telegram.allowFrom تنظیم کنید، groupAllowFrom را تنظیمنشده بگذارید، و گروههای هدف را زیر channels.telegram.groups مجاز کنید.
نکتهٔ زمان اجرا: اگر channels.telegram کاملاً وجود نداشته باشد، زمان اجرا بهطور پیشفرض روی groupPolicy="allowlist" fail-closed میشود مگر اینکه channels.defaults.groupPolicy صریحاً تنظیم شده باشد.
مثال: اجازه به هر عضو در یک گروه مشخص:
{
channels: {
telegram: {
groups: {
"-1001234567890": {
groupPolicy: "open",
requireMention: false,
},
},
},
},
}
مثال: اجازه فقط به کاربران مشخص در یک گروه مشخص:
{
channels: {
telegram: {
groups: {
"-1001234567890": {
requireMention: true,
allowFrom: ["8734062810", "745123456"],
},
},
},
},
}
Mention behavior
پاسخهای گروه بهطور پیشفرض نیازمند mention هستند.
mention میتواند از این منابع بیاید:
- mention بومی
@botusername، یا - الگوهای mention در:
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 را بررسی کنید
رفتار زمان اجرا
- Telegram در مالکیت فرایند Gateway است.
- مسیریابی قطعی است: ورودی Telegram به Telegram پاسخ داده میشود (مدل کانالها را انتخاب نمیکند).
- پیامهای ورودی به envelope مشترک کانال با فرادادهٔ پاسخ و جاینگهدارهای رسانه نرمالسازی میشوند.
- نشستهای گروه بر اساس شناسهٔ گروه جدا میشوند. موضوعهای تالار
:topic:<threadId>را اضافه میکنند تا موضوعها جدا بمانند. - پیامهای مستقیم میتوانند
message_thread_idداشته باشند؛ OpenClaw شناسهٔ thread را برای پاسخها حفظ میکند اما پیامهای مستقیم را بهطور پیشفرض روی نشست flat نگه میدارد. وقتی عمداً جداسازی نشست موضوع پیام مستقیم را میخواهید،channels.telegram.dm.threadReplies: "inbound"،channels.telegram.direct.<chatId>.threadReplies: "inbound"،requireTopic: true، یا پیکربندی موضوع منطبق را تنظیم کنید. - Long polling از grammY runner با ترتیبدهی در سطح هر چت/هر thread استفاده میکند. همروندی کلی runner sink از
agents.defaults.maxConcurrentاستفاده میکند. - Long polling درون هر فرایند Gateway محافظت میشود تا در هر زمان فقط یک poller فعال بتواند از توکن ربات استفاده کند. اگر هنوز تداخلهای
getUpdates409 میبینید، احتمالاً یک OpenClaw Gateway، اسکریپت، یا poller خارجی دیگر از همان توکن استفاده میکند. - راهاندازی مجدد watchdog برای long-polling بهطور پیشفرض پس از ۱۲۰ ثانیه بدون liveness تکمیلشدهٔ
getUpdatesفعال میشود.channels.telegram.pollingStallThresholdMsرا فقط وقتی افزایش دهید که استقرار شما هنوز هنگام کارهای طولانیمدت راهاندازی مجدد کاذب به دلیل توقف polling میبیند. مقدار بر حسب میلیثانیه است و از30000تا600000مجاز است؛ overrideهای سطح حساب پشتیبانی میشوند. - Telegram Bot API از read receipt پشتیبانی نمیکند (
sendReadReceiptsاعمال نمیشود).
مرجع قابلیتها
Live stream preview (message edits)
OpenClaw میتواند پاسخهای جزئی را بهصورت بلادرنگ stream کند:
- چتهای مستقیم: پیام preview +
editMessageText - گروهها/موضوعها: پیام preview +
editMessageText
نیازمندی:
channels.telegram.streamingبرابرoff | partial | block | progressاست (پیشفرض:partial)progressیک پیشنویس وضعیت قابل ویرایش برای پیشرفت ابزار نگه میدارد، آن را هنگام تکمیل پاک میکند، و پاسخ نهایی را بهعنوان پیام عادی میفرستدstreaming.preview.toolProgressکنترل میکند که آیا بهروزرسانیهای ابزار/پیشرفت از همان پیام preview ویرایششده دوباره استفاده کنند یا نه (پیشفرض:trueوقتی preview streaming فعال است)streaming.preview.commandTextجزئیات فرمان/اجرا را داخل آن خطوط پیشرفت ابزار کنترل میکند:raw(پیشفرض، رفتار منتشرشده را حفظ میکند) یاstatus(فقط برچسب ابزار)channels.telegram.streamModeقدیمی و مقادیر بولیstreamingتشخیص داده میشوند؛openclaw doctor --fixرا اجرا کنید تا آنها را بهchannels.telegram.streaming.modeمهاجرت دهید
بهروزرسانیهای preview پیشرفت ابزار، خطوط وضعیت کوتاهی هستند که هنگام اجرای ابزارها نمایش داده میشوند، برای مثال اجرای فرمان، خواندن فایل، بهروزرسانیهای برنامهریزی، یا خلاصههای patch. Telegram اینها را بهطور پیشفرض فعال نگه میدارد تا با رفتار منتشرشدهٔ OpenClaw از v2026.4.22 و بعد از آن همخوان باشد. برای نگهداشتن preview ویرایششده برای متن پاسخ اما پنهان کردن خطوط پیشرفت ابزار، این را تنظیم کنید:
{
"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 غیرفعال میشوند و پیامهای عمومی ابزار/پیشرفت بهجای ارسال بهصورت پیامهای وضعیت مستقل، سرکوب میشوند. درخواستهای تأیید، payloadهای رسانه و خطاها همچنان از مسیر تحویل نهایی معمول عبور میکنند. زمانی از streaming.preview.toolProgress: false استفاده کنید که فقط میخواهید ویرایشهای پیشنمایش پاسخ را نگه دارید و خطهای وضعیت پیشرفت ابزار را پنهان کنید.
برای پاسخهای فقط متنی:
- پیشنمایشهای کوتاه DM/گروه/موضوع: OpenClaw همان پیام پیشنمایش را نگه میدارد و ویرایش نهایی را در همانجا انجام میدهد
- خروجیهای نهایی متنی بلند که به چند پیام Telegram تقسیم میشوند، در صورت امکان از پیشنمایش موجود بهعنوان نخستین قطعه نهایی استفاده میکنند و سپس فقط قطعههای باقیمانده را میفرستند
- خروجیهای نهایی حالت پیشرفت، پیشنویس وضعیت را پاک میکنند و بهجای ویرایش پیشنویس به پاسخ، از تحویل نهایی معمول استفاده میکنند
- اگر ویرایش نهایی پیش از تأیید متن کاملشده شکست بخورد، OpenClaw از تحویل نهایی معمول استفاده میکند و پیشنمایش کهنه را پاکسازی میکند
برای پاسخهای پیچیده (برای مثال payloadهای رسانهای)، OpenClaw به تحویل نهایی معمول برمیگردد و سپس پیام پیشنمایش را پاکسازی میکند.
جریاندهی پیشنمایش از جریاندهی بلوکی جدا است. وقتی جریاندهی بلوکی برای Telegram بهصراحت فعال شده باشد، OpenClaw برای جلوگیری از جریاندهی دوباره، جریان پیشنمایش را رد میکند.
جریان استدلال فقط برای Telegram:
/reasoning streamهنگام تولید، استدلال را به پیشنمایش زنده میفرستد- پیشنمایش استدلال پس از تحویل نهایی حذف میشود؛ وقتی استدلال باید قابل مشاهده باقی بماند، از
/reasoning onاستفاده کنید - پاسخ نهایی بدون متن استدلال ارسال میشود
قالببندی و مسیر جایگزین HTML
متن خروجی از parse_mode: "HTML" در Telegram استفاده میکند.
- متن شبیه Markdown به HTML امن برای Telegram رندر میشود.
- HTML خام مدل escape میشود تا شکستهای parse در Telegram کاهش یابد.
- اگر 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/Skills همچنان میتوانند هنگام تایپشدن کار کنند، حتی اگر در منوی Telegram نشان داده نشوند
اگر دستورهای بومی غیرفعال باشند، دستورهای داخلی حذف میشوند. دستورهای سفارشی/Plugin ممکن است در صورت پیکربندی همچنان ثبت شوند.
شکستهای رایج راهاندازی:
setMyCommands failedباBOT_COMMANDS_TOO_MUCHیعنی منوی Telegram پس از کوتاهسازی همچنان از حد مجاز گذشته است؛ دستورهای Plugin/Skills/سفارشی را کاهش دهید یا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مسدود شده است.
دستورهای جفتسازی دستگاه (device-pair Plugin)
وقتی device-pair Plugin نصب شده باشد:
/pairکد راهاندازی تولید میکند- کد را در برنامه iOS جایگذاری کنید
/pair pendingدرخواستهای در انتظار را فهرست میکند (شامل role/scopes)- درخواست را تأیید کنید:
/pair approve <requestId>برای تأیید صریح/pair approveوقتی فقط یک درخواست در انتظار وجود دارد/pair approve latestبرای جدیدترین مورد
کد راهاندازی یک توکن bootstrap کوتاهعمر حمل میکند. تحویل داخلی bootstrap، توکن Node اصلی را در scopes: [] نگه میدارد؛ هر توکن operator واگذارشده به operator.approvals، operator.read، operator.talk.secrets و operator.write محدود میماند. بررسیهای scope در bootstrap دارای پیشوند نقش هستند، بنابراین آن allowlist مربوط به operator فقط درخواستهای operator را برآورده میکند؛ نقشهای غیر operator همچنان به scopeهایی زیر پیشوند نقش خودشان نیاز دارند.
اگر دستگاهی با جزئیات احراز هویت تغییرکرده دوباره تلاش کند (برای مثال role/scopes/public key)، درخواست در انتظار قبلی جایگزین میشود و درخواست جدید از 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_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)
کنشهای پیام کانال aliasهای آسانکار ارائه میکنند (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 در حال حاضر بهصورت پیشفرض فعال هستند و toggleهای جداگانه channels.telegram.actions.* ندارند.
ارسالهای زمان اجرا از تصویر لحظهای فعال پیکربندی/اسرار (راهاندازی/بارگذاری مجدد) استفاده میکنند، بنابراین مسیرهای کنش برای هر ارسال، بازحلکردن موردی SecretRef انجام نمیدهند.
معناشناسی حذف واکنش: /tools/reactions
برچسبهای رشتهبندی پاسخ
Telegram از برچسبهای صریح رشتهبندی پاسخ در خروجی تولیدشده پشتیبانی میکند:
[[reply_to_current]]به پیام محرک پاسخ میدهد[[reply_to:<id>]]به یک شناسه پیام مشخص Telegram پاسخ میدهد
channels.telegram.replyToMode نحوه رسیدگی را کنترل میکند:
off(پیشفرض)firstall
وقتی رشتهبندی پاسخ فعال باشد و متن یا caption اصلی Telegram در دسترس باشد، OpenClaw بهطور خودکار یک excerpt نقلقول بومی Telegram را شامل میکند. Telegram متن نقلقول بومی را به 1024 واحد کد UTF-16 محدود میکند، بنابراین پیامهای طولانیتر از ابتدا نقلقول میشوند و اگر Telegram نقلقول را رد کند، به پاسخ ساده برمیگردند.
توجه: off رشتهبندی پاسخ ضمنی را غیرفعال میکند. برچسبهای صریح [[reply_to_*]] همچنان رعایت میشوند.
موضوعهای انجمن و رفتار رشته
ابرگروههای انجمن:
- کلیدهای نشست موضوع
:topic:<threadId>را اضافه میکنند - پاسخها و وضعیت تایپ، رشته موضوع را هدف میگیرند
- مسیر پیکربندی موضوع:
channels.telegram.groups.<chatId>.topics.<threadId>
حالت ویژه موضوع عمومی (threadId=1):
- ارسالهای پیام
message_thread_idرا حذف میکنند (Telegram،sendMessage(...thread_id=1)را رد میکند) - کنشهای تایپ همچنان
message_thread_idرا شامل میکنند
ارثبری موضوع: مدخلهای موضوع تنظیمات گروه را به ارث میبرند، مگر اینکه بازنویسی شوند (requireMention، allowFrom، skills، systemPrompt، enabled، groupPolicy).
agentId فقط مخصوص موضوع است و از پیشفرضهای گروه ارثبری نمیکند.
مسیریابی عامل برای هر موضوع: هر موضوع میتواند با تنظیم 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: موضوعهای انجمن میتوانند نشستهای harness ACP را از طریق bindingهای ACP typed سطح بالا pin کنند (bindings[] با type: "acp" و match.channel: "telegram"، peer.kind: "group" و یک شناسه واجد موضوع مثل -1001234567890:topic:42). در حال حاضر به موضوعهای انجمن در گروهها/ابرگروهها محدود است. عاملهای ACP را ببینید.
spawn کردن ACP وابسته به رشته از چت: /acp spawn <agent> --thread here|auto موضوع فعلی را به یک نشست ACP جدید bind میکند؛ پیگیریها مستقیم به همانجا مسیریابی میشوند. OpenClaw تأیید spawn را در همان موضوع pin میکند. نیاز دارد channels.telegram.threadBindings.spawnSessions فعال بماند (پیشفرض: true).
زمینهی الگو MessageThreadId و IsForum را در دسترس قرار میدهد. گفتوگوهای DM با message_thread_id بهطور پیشفرض مسیریابی DM و فرادادهی پاسخ را در نشستهای تخت نگه میدارند؛ آنها فقط وقتی از کلیدهای نشست آگاه از رشته استفاده میکنند که با threadReplies: "inbound"، threadReplies: "always"، requireTopic: true، یا پیکربندی topic مطابق تنظیم شده باشند. برای پیشفرض حساب از channels.telegram.dm.threadReplies در سطح بالا استفاده کنید، یا برای یک DM از direct.<chatId>.threadReplies.
صدا، ویدیو، و استیکرها
پیامهای صوتی
Telegram بین یادداشتهای صوتی و فایلهای صوتی تمایز قائل میشود.
- پیشفرض: رفتار فایل صوتی
- برچسب
[[audio_as_voice]]در پاسخ عامل برای اجبار به ارسال یادداشت صوتی - رونوشتهای یادداشت صوتی ورودی در زمینهی عامل بهصورت متن ماشینتولید و نامطمئن قاببندی میشوند؛ تشخیص mention همچنان از رونوشت خام استفاده میکند، بنابراین پیامهای صوتی محدودشده با mention همچنان کار میکنند.
نمونهی کنش پیام:
{
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 ایستا: دانلود و پردازش میشود (placeholder
<media:sticker>) - TGS متحرک: رد میشود
- WEBM ویدیویی: رد میشود
فیلدهای زمینهی استیکر:
Sticker.emojiSticker.setNameSticker.fileIdSticker.fileUniqueIdSticker.cachedDescription
فایل کش استیکر:
~/.openclaw/telegram/sticker-cache.json
استیکرها یکبار توصیف میشوند (در صورت امکان) و برای کاهش فراخوانیهای تکراری vision کش میشوند.
فعالسازی کنشهای استیکر:
{
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 میرسند (جدا از payloadهای پیام).
وقتی فعال باشد، 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 عمومی گروه (
:topic:1) مسیریابی میشوند، نه topic دقیق مبدأ
allowed_updates برای polling/webhook بهطور خودکار شامل message_reaction است.
واکنشهای تأیید دریافت
ackReaction هنگام پردازش یک پیام ورودی توسط OpenClaw یک ایموجی تأیید دریافت ارسال میکند.
ترتیب تفکیک:
channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- جایگزین ایموجی هویت عامل (
agents.list[].identity.emoji، وگرنه "👀")
نکتهها:
- Telegram انتظار ایموجی یونیکد دارد (برای مثال "👀").
- برای غیرفعالکردن واکنش برای یک کانال یا حساب از
""استفاده کنید.
نوشتن پیکربندی از رویدادها و فرمانهای Telegram
نوشتن پیکربندی کانال بهطور پیشفرض فعال است (configWrites !== false).
نوشتنهای تحریکشده توسط Telegram شامل موارد زیر است:
- رویدادهای مهاجرت گروه (
migrate_to_chat_id) برای بهروزرسانیchannels.telegram.groups /config setو/config unset(نیازمند فعالسازی فرمان)
غیرفعالسازی:
{
channels: {
telegram: {
configWrites: false,
},
},
}
Long polling در برابر webhook
پیشفرض long polling است. برای حالت webhook، channels.telegram.webhookUrl و channels.telegram.webhookSecret را تنظیم کنید؛ webhookPath، webhookHost، webhookPort اختیاری هستند (پیشفرضها /telegram-webhook، 127.0.0.1، 8787).
در حالت long-polling، OpenClaw واترمارک راهاندازی مجدد خود را فقط پس از توزیع موفق یک بهروزرسانی پایدار میکند. اگر یک handler شکست بخورد، آن بهروزرسانی در همان فرایند قابل تلاش دوباره باقی میماند و برای dedupe راهاندازی مجدد بهعنوان تکمیلشده نوشته نمیشود.
شنوندهی محلی به 127.0.0.1:8787 متصل میشود. برای ورودی عمومی، یا یک reverse proxy جلوی پورت محلی بگذارید یا عمداً webhookHost: "0.0.0.0" را تنظیم کنید.
حالت Webhook، guardهای درخواست، توکن محرمانهی Telegram، و بدنهی JSON را پیش از برگرداندن 200 به Telegram اعتبارسنجی میکند.
سپس OpenClaw بهروزرسانی را بهصورت ناهمگام از همان مسیرهای بات بهازای هر گفتوگو/هر topic که long polling استفاده میکند پردازش میکند، بنابراین نوبتهای کند عامل ACK تحویل Telegram را نگه نمیدارند.
محدودیتها، تلاش دوباره، و هدفهای CLI
- پیشفرض
channels.telegram.textChunkLimitبرابر 4000 است. channels.telegram.chunkMode="newline"پیش از تقسیم بر اساس طول، مرزهای پاراگراف (خطوط خالی) را ترجیح میدهد.channels.telegram.mediaMaxMb(پیشفرض 100) اندازهی رسانهی ورودی و خروجی Telegram را محدود میکند.channels.telegram.mediaGroupFlushMs(پیشفرض 500) کنترل میکند آلبومها/گروههای رسانهای Telegram چه مدت buffer شوند پیش از آنکه OpenClaw آنها را بهعنوان یک پیام ورودی توزیع کند. اگر بخشهای آلبوم دیر میرسند آن را افزایش دهید؛ برای کاهش تأخیر پاسخ آلبوم آن را کاهش دهید.channels.telegram.timeoutSecondsزمان انتظار کلاینت API تلگرام را بازنویسی میکند (اگر تنظیم نشده باشد، پیشفرض grammY اعمال میشود). کلاینتهای بات مقدارهای پیکربندیشدهی کمتر از guard درخواست ۶۰ ثانیهای متن/typing خروجی را clamp میکنند تا grammY تحویل پاسخ قابل مشاهده را پیش از اجرای guard انتقال و fallback در OpenClaw قطع نکند. long polling همچنان از guard درخواست ۴۵ ثانیهایgetUpdatesاستفاده میکند تا pollهای idle بیپایان رها نشوند.- پیشفرض
channels.telegram.pollingStallThresholdMsبرابر120000است؛ فقط برای راهاندازیهای مجدد false-positive ناشی از توقف polling، بین30000و600000تنظیم کنید. - تاریخچهی زمینهی گروه از
channels.telegram.historyLimitیاmessages.groupChat.historyLimitاستفاده میکند (پیشفرض 50)؛0غیرفعال میکند. - زمینهی تکمیلی reply/quote/forward در حال حاضر همانطور که دریافت شده پاس داده میشود.
- allowlistهای Telegram عمدتاً کنترل میکنند چه کسی میتواند عامل را تحریک کند، نه یک مرز کامل حذف زمینهی تکمیلی.
- کنترلهای تاریخچهی DM:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
- پیکربندی
channels.telegram.retryبرای خطاهای API خروجی قابل بازیابی روی helperهای ارسال Telegram (CLI/tools/actions) اعمال میشود. تحویل پاسخ نهایی ورودی نیز برای شکستهای pre-connect در Telegram از تلاش دوبارهی safe-send محدود استفاده میکند، اما envelopeهای شبکهی مبهم پس از ارسال را که ممکن است پیامهای قابل مشاهده را تکراری کنند دوباره تلاش نمیکند.
هدفهای ارسال CLI و message-tool میتوانند شناسهی عددی گفتوگو، نام کاربری، یا هدف topic فوروم باشند:
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"
pollهای Telegram از openclaw message poll استفاده میکنند و از topicهای فوروم پشتیبانی میکنند:
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
پرچمهای poll فقط مخصوص Telegram:
--poll-duration-seconds(5-600)--poll-anonymous--poll-public--thread-idبرای topicهای فوروم (یا از هدف:topic:استفاده کنید)
ارسال Telegram همچنین پشتیبانی میکند از:
--presentationبا بلوکهایbuttonsبرای صفحهکلیدهای درونخطی وقتیchannels.telegram.capabilities.inlineButtonsاجازه میدهد--pinیا--delivery '{"pin":true}'برای درخواست تحویل سنجاقشده وقتی بات بتواند در آن گفتوگو سنجاق کند--force-documentبرای ارسال تصاویر و GIFهای خروجی بهعنوان سند بهجای بارگذاریهای عکس فشرده یا رسانهی متحرک
کنترل کنش:
channels.telegram.actions.sendMessage=falseپیامهای خروجی Telegram، از جمله pollها، را غیرفعال میکندchannels.telegram.actions.poll=falseایجاد poll در Telegram را غیرفعال میکند و ارسالهای عادی را فعال نگه میدارد
تأییدهای exec در Telegram
Telegram از تأییدهای exec در DMهای تأییدکننده پشتیبانی میکند و میتواند بهصورت اختیاری promptها را در گفتوگو یا topic مبدأ پست کند. تأییدکنندهها باید شناسههای عددی کاربر Telegram باشند.
مسیر پیکربندی:
channels.telegram.execApprovals.enabled(وقتی حداقل یک تأییدکننده قابل تفکیک باشد خودکار فعال میشود)channels.telegram.execApprovals.approvers(به شناسههای عددی مالک ازcommands.ownerAllowFromfallback میکند)channels.telegram.execApprovals.target:dm(پیشفرض) |channel|bothagentFilter,sessionFilter
channels.telegram.allowFrom، groupAllowFrom، و defaultTo کنترل میکنند چه کسی میتواند با بات صحبت کند و پاسخهای عادی را کجا ارسال میکند. آنها کسی را به تأییدکنندهی exec تبدیل نمیکنند. اولین جفتسازی DM تأییدشده وقتی هنوز مالک فرمانی وجود ندارد، commands.ownerAllowFrom را bootstrap میکند، بنابراین راهاندازی تکمالک همچنان بدون تکرار شناسهها زیر execApprovals.approvers کار میکند.
تحویل کانال متن فرمان را در گفتوگو نشان میدهد؛ channel یا both را فقط در گروهها/topicهای مورد اعتماد فعال کنید. وقتی prompt در یک topic فوروم قرار میگیرد، OpenClaw همان topic را برای prompt تأیید و پیگیری حفظ میکند. تأییدهای exec بهطور پیشفرض پس از ۳۰ دقیقه منقضی میشوند.
دکمههای تأیید درونخطی نیز نیاز دارند channels.telegram.capabilities.inlineButtons سطح هدف (dm، group، یا all) را مجاز کند. شناسههای تأیید با پیشوند plugin: از طریق تأییدهای Plugin تفکیک میشوند؛ بقیه ابتدا از طریق تأییدهای exec تفکیک میشوند.
تأییدهای exec را ببینید.
کنترلهای پاسخ خطا
وقتی عامل با خطای تحویل یا provider روبهرو میشود، Telegram میتواند یا با متن خطا پاسخ دهد یا آن را سرکوب کند. دو کلید پیکربندی این رفتار را کنترل میکنند:
| کلید | مقدارها | پیشفرض | توضیح |
|---|---|---|---|
channels.telegram.errorPolicy |
reply, silent |
reply |
reply یک پیام خطای دوستانه به گفتوگو ارسال میکند. silent پاسخهای خطا را کاملاً سرکوب میکند. |
channels.telegram.errorCooldownMs |
عدد (ms) | 60000 |
حداقل زمان بین پاسخهای خطا به همان گفتوگو. از هرزنامهی خطا هنگام قطعیها جلوگیری میکند. |
بازنویسیهای بهازای هر حساب، هر گروه، و هر topic پشتیبانی میشوند (همان وراثت کلیدهای دیگر پیکربندی Telegram).
{
channels: {
telegram: {
errorPolicy: "reply",
errorCooldownMs: 120000,
groups: {
"-1001234567890": {
errorPolicy: "silent", // suppress errors in this group
},
},
},
},
}
عیبیابی
بات به پیامهای گروهی بدون mention پاسخ نمیدهد
- اگر
requireMention=falseباشد، حالت حریم خصوصی Telegram باید دید کامل را مجاز کند.- BotFather:
/setprivacy-> غیرفعالسازی - سپس ربات را از گروه حذف کنید و دوباره اضافه کنید
- BotFather:
- وقتی پیکربندی انتظار پیامهای گروهی بدون منشن را دارد،
openclaw channels statusهشدار میدهد. openclaw channels status --probeمیتواند شناسههای عددی صریح گروه را بررسی کند؛ wildcard"*"را نمیتوان از نظر عضویت بررسی کرد.- آزمون سریع نشست:
/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 موکول میکند.
ناپایداری polling یا شبکه
- Node 22+ + fetch/proxy سفارشی میتواند در صورت ناسازگاری نوعهای AbortSignal، رفتار توقف فوری ایجاد کند.
- برخی میزبانها ابتدا
api.telegram.orgرا به IPv6 resolve میکنند؛ خروجی خراب IPv6 میتواند باعث شکستهای متناوب API Telegram شود. - اگر گزارشها شامل
TypeError: fetch failedیاNetwork request for 'getUpdates' failed!باشند، OpenClaw اکنون این موارد را بهعنوان خطاهای شبکه قابل بازیابی دوباره تلاش میکند. - هنگام راهاندازی polling، OpenClaw بررسی موفق راهاندازی
getMeرا برای grammY دوباره استفاده میکند تا اجراکننده پیش از اولینgetUpdatesبهgetMeدوم نیاز نداشته باشد. - اگر
deleteWebhookهنگام راهاندازی polling با خطای شبکه گذرا شکست بخورد، OpenClaw بهجای انجام یک فراخوانی control-plane دیگر پیش از polling، وارد long polling میشود. webhook همچنان فعال بهصورت تعارضgetUpdatesظاهر میشود؛ سپس OpenClaw انتقال Telegram را بازسازی میکند و پاکسازی webhook را دوباره تلاش میکند. - اگر سوکتهای Telegram در یک چرخه ثابت کوتاه بازیافت میشوند، مقدار پایین
channels.telegram.timeoutSecondsرا بررسی کنید؛ کلاینتهای ربات مقادیر پیکربندیشده پایینتر از محافظهای درخواست خروجی وgetUpdatesرا محدود میکنند، اما نسخههای قدیمیتر ممکن بود وقتی این مقدار پایینتر از آن محافظها تنظیم شده بود، هر poll یا پاسخ را متوقف کنند. - اگر گزارشها شامل
Polling stall detectedباشند، OpenClaw بهصورت پیشفرض پس از 120 ثانیه بدون liveness تکمیلشده long-poll، polling را دوباره راهاندازی میکند و انتقال Telegram را بازسازی میکند. openclaw channels status --probeوopenclaw doctorزمانی هشدار میدهند که یک حساب polling در حال اجرا پس از مهلت راهاندازیgetUpdatesرا تکمیل نکرده باشد، یک حساب webhook در حال اجرا پس از مهلت راهاندازیsetWebhookرا تکمیل نکرده باشد، یا آخرین فعالیت موفق انتقال polling قدیمی شده باشد.- فقط زمانی
channels.telegram.pollingStallThresholdMsرا افزایش دهید که فراخوانیهای طولانیمدتgetUpdatesسالم هستند اما میزبان شما همچنان راهاندازیهای مجدد polling-stall کاذب گزارش میکند. توقفهای پایدار معمولا به مشکلات proxy، DNS، IPv6 یا خروجی TLS بین میزبان وapi.telegram.orgاشاره دارند. - Telegram همچنین env پروکسی فرایند را برای انتقال Bot API رعایت میکند، از جمله
HTTP_PROXY،HTTPS_PROXY،ALL_PROXYو گونههای حروف کوچک آنها.NO_PROXY/no_proxyهمچنان میتواندapi.telegram.orgرا دور بزند. - اگر پروکسی مدیریتشده OpenClaw از طریق
OPENCLAW_PROXY_URLبرای یک محیط سرویس پیکربندی شده باشد و env پروکسی استانداردی وجود نداشته باشد، Telegram نیز از همان URL برای انتقال Bot API استفاده میکند. - در میزبانهای VPS با خروجی مستقیم/TLS ناپایدار، فراخوانیهای API Telegram را از طریق
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
- پاسخهای بازه benchmark در RFC 2544 (
198.18.0.0/15) بهصورت پیشفرض از قبل برای دانلودهای رسانه Telegram مجاز هستند. اگر یک fake-IP قابل اعتماد یا پروکسی شفاف هنگام دانلود رسانه،api.telegram.orgرا به آدرس خصوصی/داخلی/با کاربرد ویژه دیگری بازنویسی میکند، میتوانید برای دورزدن فقط مخصوص Telegram opt in کنید:
channels:
telegram:
network:
dangerouslyAllowPrivateNetwork: true
- همین opt-in برای هر حساب نیز در
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetworkدر دسترس است. - اگر پروکسی شما میزبانهای رسانه Telegram را به
198.18.x.xresolve میکند، ابتدا پرچم خطرناک را خاموش بگذارید. رسانه Telegram از قبل بهصورت پیشفرض بازه benchmark در 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باید به یک فایل عادی اشاره کند؛ symlinkها رد میشوند) - کنترل دسترسی:
dmPolicy،allowFrom،groupPolicy،groupAllowFrom،groups،groups.*.topics.*،bindings[]سطح بالا (type: "acp") - تأییدهای exec:
execApprovals،accounts.*.execApprovals - فرمان/منو:
commands.native،commands.nativeSkills،customCommands - threadها/پاسخها:
replyToMode،dm.threadReplies،direct.*.threadReplies - streaming:
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