Mainstream messaging
Telegram
grammY के माध्यम से बॉट DM और समूहों के लिए प्रोडक्शन-तैयार। लॉन्ग पोलिंग डिफ़ॉल्ट मोड है; Webhook मोड वैकल्पिक है।
Telegram के लिए डिफ़ॉल्ट DM नीति pairing है।
क्रॉस-चैनल डायग्नोस्टिक्स और सुधार प्लेबुक।
पूर्ण चैनल कॉन्फ़िग पैटर्न और उदाहरण।
त्वरित सेटअप
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 } },},},}Env fallback: TELEGRAM_BOT_TOKEN=... (केवल डिफ़ॉल्ट खाते के लिए)।
Telegram openclaw channels login telegram का उपयोग नहीं करता; टोकन को config/env में कॉन्फ़िगर करें, फिर Gateway शुरू करें।
Start gateway and approve first DM
openclaw gatewayopenclaw pairing list telegramopenclaw pairing approve telegram <CODE>Pairing कोड 1 घंटे बाद समाप्त हो जाते हैं।
Add the bot to a group
बॉट को अपने समूह में जोड़ें, फिर समूह एक्सेस के लिए आवश्यक दोनों ID प्राप्त करें:
- आपका Telegram उपयोगकर्ता ID, जिसका उपयोग
allowFrom/groupAllowFromमें होता है - Telegram समूह चैट ID, जिसका उपयोग
channels.telegram.groupsके अंतर्गत कुंजी के रूप में होता है
पहली बार सेटअप के लिए, समूह चैट ID openclaw logs --follow, किसी forwarded-ID बॉट, या Bot API getUpdates से प्राप्त करें। समूह की अनुमति मिलने के बाद, /whoami@<bot_username> उपयोगकर्ता और समूह ID की पुष्टि कर सकता है।
-100 से शुरू होने वाले नकारात्मक Telegram supergroup ID समूह चैट ID होते हैं। उन्हें channels.telegram.groups के अंतर्गत रखें, groupAllowFrom के अंतर्गत नहीं।
Telegram साइड सेटिंग्स
Privacy mode and group visibility
Telegram बॉट डिफ़ॉल्ट रूप से Privacy Mode में होते हैं, जो यह सीमित करता है कि वे कौन से समूह संदेश प्राप्त करते हैं।
यदि बॉट को सभी समूह संदेश देखने चाहिए, तो इनमें से कोई एक करें:
/setprivacyके माध्यम से privacy mode अक्षम करें, या- बॉट को समूह admin बनाएँ।
privacy mode बदलते समय, प्रत्येक समूह में बॉट को हटाकर फिर से जोड़ें ताकि Telegram बदलाव लागू करे।
Group permissions
Admin स्थिति Telegram समूह सेटिंग्स में नियंत्रित होती है।
Admin बॉट सभी समूह संदेश प्राप्त करते हैं, जो हमेशा-चालू समूह व्यवहार के लिए उपयोगी है।
Helpful BotFather toggles
/setjoingroupsसमूह में जोड़ने की अनुमति/मनाही के लिए/setprivacyसमूह visibility व्यवहार के लिए
एक्सेस नियंत्रण और activation
समूह बॉट पहचान
Telegram समूहों और forum topics में, कॉन्फ़िगर किए गए बॉट हैंडल (उदाहरण के लिए @my_bot) के स्पष्ट mention को चुने गए OpenClaw agent को संबोधित करना माना जाता है, भले ही agent persona नाम Telegram username से अलग हो। असंबंधित समूह traffic पर group silence policy अभी भी लागू होती है, लेकिन बॉट हैंडल स्वयं "कोई और" नहीं माना जाता।
DM policy
channels.telegram.dmPolicy direct message access नियंत्रित करता है:
pairing(डिफ़ॉल्ट)allowlist(allowFromमें कम से कम एक sender ID आवश्यक)open(allowFromमें"*"शामिल होना आवश्यक)disabled
dmPolicy: "open" के साथ allowFrom: ["*"] किसी भी Telegram खाते को, जो बॉट username खोजता या अनुमान लगाता है, बॉट को command करने देता है। इसे केवल जानबूझकर public bots के लिए कसकर restricted tools के साथ उपयोग करें; एक-owner बॉटों को numeric user IDs के साथ allowlist उपयोग करना चाहिए।
channels.telegram.allowFrom numeric Telegram user IDs स्वीकार करता है। telegram: / tg: prefixes स्वीकार किए जाते हैं और normalize किए जाते हैं।
multi-account configs में, restrictive top-level channels.telegram.allowFrom को safety boundary माना जाता है: account-level allowFrom: ["*"] entries उस खाते को public नहीं बनातीं, जब तक merge के बाद effective account allowlist में explicit wildcard अभी भी मौजूद न हो।
खाली allowFrom के साथ dmPolicy: "allowlist" सभी DMs को block करता है और config validation द्वारा reject किया जाता है।
Setup केवल numeric user IDs माँगता है।
यदि आपने upgrade किया है और आपके config में @username allowlist entries हैं, तो उन्हें resolve करने के लिए openclaw doctor --fix चलाएँ (best-effort; Telegram bot token आवश्यक है)।
यदि आप पहले pairing-store allowlist files पर निर्भर थे, तो openclaw doctor --fix allowlist flows में entries को channels.telegram.allowFrom में recover कर सकता है (उदाहरण के लिए जब dmPolicy: "allowlist" में अभी explicit IDs नहीं हैं)।
एक-owner बॉटों के लिए, access policy को config में टिकाऊ रखने के लिए explicit numeric allowFrom IDs के साथ dmPolicy: "allowlist" पसंद करें (पिछली pairing approvals पर निर्भर होने के बजाय)।
सामान्य भ्रम: DM pairing approval का अर्थ "यह sender हर जगह authorized है" नहीं होता।
Pairing DM access देती है। यदि अभी कोई command owner मौजूद नहीं है, तो पहली approved pairing commands.ownerAllowFrom भी set करती है ताकि owner-only commands और exec approvals के पास explicit operator account हो।
Group sender authorization अभी भी explicit config allowlists से आता है।
यदि आप चाहते हैं कि "मैं एक बार authorized हूँ और DMs तथा group commands दोनों काम करें", तो अपना numeric Telegram user ID channels.telegram.allowFrom में रखें; owner-only commands के लिए, सुनिश्चित करें कि commands.ownerAllowFrom में telegram:<your user id> शामिल है।
अपना Telegram user ID ढूँढना
अधिक सुरक्षित (third-party bot नहीं):
- अपने बॉट को DM करें।
openclaw logs --followचलाएँ।from.idपढ़ें।
आधिकारिक Bot API विधि:
curl "https://api.telegram.org/bot<bot_token>/getUpdates"Third-party विधि (कम private): @userinfobot या @getidsbot।
Group policy and allowlists
दो controls साथ में लागू होते हैं:
-
कौन से समूह allowed हैं (
channels.telegram.groups)- कोई
groupsconfig नहीं:groupPolicy: "open"के साथ: कोई भी समूह group-ID checks पास कर सकता हैgroupPolicy: "allowlist"(डिफ़ॉल्ट) के साथ: समूह तब तक block होते हैं जब तक आपgroupsentries (या"*") नहीं जोड़ते
groupsconfigured: allowlist के रूप में काम करता है (explicit IDs या"*")
- कोई
-
समूहों में कौन से senders allowed हैं (
channels.telegram.groupPolicy)openallowlist(डिफ़ॉल्ट)disabled
groupAllowFrom group sender filtering के लिए उपयोग होता है। यदि set नहीं है, तो Telegram allowFrom पर fallback करता है।
groupAllowFrom entries numeric Telegram user IDs होनी चाहिए (telegram: / tg: prefixes normalize किए जाते हैं)।
Telegram group या supergroup chat IDs को groupAllowFrom में न रखें। नकारात्मक chat IDs channels.telegram.groups के अंतर्गत आते हैं।
Non-numeric entries sender authorization के लिए ignore की जाती हैं।
Security boundary (2026.2.25+): group sender auth DM pairing-store approvals inherit नहीं करता।
Pairing केवल DM रहती है। समूहों के लिए, groupAllowFrom या per-group/per-topic allowFrom set करें।
यदि groupAllowFrom unset है, तो Telegram config allowFrom पर fallback करता है, pairing store पर नहीं।
एक-owner बॉटों के लिए व्यावहारिक pattern: अपना user ID channels.telegram.allowFrom में set करें, groupAllowFrom unset छोड़ें, और target groups को channels.telegram.groups के अंतर्गत allow करें।
Runtime note: यदि channels.telegram पूरी तरह missing है, तो runtime fail-closed groupPolicy="allowlist" पर default करता है, जब तक channels.defaults.groupPolicy explicit रूप से set न हो।
Owner-only समूह setup:
{channels: {telegram: { enabled: true, dmPolicy: "pairing", allowFrom: ["<YOUR_TELEGRAM_USER_ID>"], groupPolicy: "allowlist", groups: { "<GROUP_CHAT_ID>": { requireMention: true, }, },},},}इसे समूह से @<bot_username> ping के साथ test करें। requireMention: true रहते हुए plain group messages बॉट को trigger नहीं करते।
उदाहरण: एक specific समूह में किसी भी member को allow करें:
{channels: {telegram: { groups: { "-1001234567890": { groupPolicy: "open", requireMention: false, }, },},},}उदाहरण: एक specific समूह के अंदर केवल specific users को allow करें:
{channels: {telegram: { groups: { "-1001234567890": { requireMention: true, allowFrom: ["8734062810", "745123456"], }, },},},}Mention behavior
Group replies के लिए डिफ़ॉल्ट रूप से mention आवश्यक होता है।
Mention इनसे आ सकता है:
- native
@botusernamemention, या - इनमें mention patterns:
agents.list[].groupChat.mentionPatternsmessages.groupChat.mentionPatterns
Session-level command toggles:
/activation always/activation mention
ये केवल session state update करते हैं। persistence के लिए config का उपयोग करें।
Persistent config उदाहरण:
{channels: {telegram: { groups: { "*": { requireMention: false }, },},},}Group history context समूहों के लिए हमेशा on रहता है और
historyLimit से bounded होता है। Telegram group history window अक्षम करने के लिए channels.telegram.historyLimit: 0 set करें। retired includeGroupHistoryContext
key को openclaw doctor --fix द्वारा हटा दिया जाता है।
समूह chat ID प्राप्त करना:
- group message को
@userinfobot/@getidsbotपर forward करें - या
openclaw logs --followसेchat.idपढ़ें - या Bot API
getUpdatesinspect करें - समूह allowed होने के बाद, यदि native commands enabled हैं तो
/whoami@<bot_username>चलाएँ
Runtime व्यवहार
- Telegram का स्वामित्व Gateway प्रक्रिया के पास है।
- Routing निर्धारक है: Telegram inbound उत्तर Telegram पर ही वापस जाते हैं (मॉडल चैनल नहीं चुनता)।
- Inbound संदेश साझा channel envelope में normalize होते हैं, जिसमें reply metadata, media placeholders, और Gateway द्वारा देखे गए Telegram replies के लिए persisted reply-chain context शामिल होता है।
- Group sessions group ID से अलग किए जाते हैं। Forum topics को अलग रखने के लिए
:topic:<threadId>जोड़ा जाता है। - DM संदेशों में
message_thread_idहो सकता है; OpenClaw इसे replies के लिए सुरक्षित रखता है। DM topic sessions केवल तब split होते हैं जब TelegramgetMebot के लिएhas_topics_enabled: trueरिपोर्ट करता है; अन्यथा DMs flat session पर रहते हैं। - Long polling, per-chat/per-thread sequencing के साथ grammY runner का उपयोग करता है। Overall runner sink concurrency
agents.defaults.maxConcurrentका उपयोग करती है। - Multi-account startup concurrent Telegram
getMeprobes को सीमित करता है, ताकि बड़े bot fleets हर account probe को एक साथ fan out न करें। - Long polling हर Gateway process के भीतर guarded है, ताकि एक समय में केवल एक active poller bot token का उपयोग कर सके। अगर आपको अभी भी
getUpdates409 conflicts दिखते हैं, तो संभवतः कोई दूसरा OpenClaw Gateway, script, या external poller वही token उपयोग कर रहा है। - Long-polling watchdog restarts default रूप से 120 seconds तक completed
getUpdatesliveness न मिलने पर trigger होते हैं।channels.telegram.pollingStallThresholdMsकेवल तब बढ़ाएँ जब आपके deployment में long-running work के दौरान अभी भी false polling-stall restarts दिखते हों। मान milliseconds में है और30000से600000तक allowed है; per-account overrides समर्थित हैं। - Telegram Bot API में read-receipt support नहीं है (
sendReadReceiptsलागू नहीं होता)।
Feature reference
Live stream preview (message edits)
OpenClaw partial replies को real time में stream कर सकता है:
- direct chats: preview message +
editMessageText - groups/topics: preview message +
editMessageText
आवश्यकता:
channels.telegram.streamingoff | partial | block | progressहै (default:partial)- छोटे initial answer previews debounce किए जाते हैं, फिर run अभी भी active होने पर bounded delay के बाद materialize होते हैं
progresstool progress के लिए एक editable status draft रखता है, tool progress से पहले answer activity आने पर stable status label दिखाता है, completion पर उसे clear करता है, और final answer को normal message के रूप में भेजता हैstreaming.preview.toolProgressनियंत्रित करता है कि tool/progress updates वही edited preview message reuse करें या नहीं (default: preview streaming active होने परtrue)streaming.preview.commandTextउन tool-progress lines के अंदर command/exec detail नियंत्रित करता है:raw(default, released behavior सुरक्षित रखता है) याstatus(केवल tool label)streaming.progress.commentary(default:false) temporary progress draft में assistant commentary/preamble text को opt in करता है- legacy
channels.telegram.streamMode, booleanstreamingvalues, और retired native draft preview keys detect की जाती हैं; उन्हें current streaming config में migrate करने के लिएopenclaw doctor --fixचलाएँ
Tool-progress preview updates वे छोटे status lines हैं जो tools चलने के दौरान दिखते हैं, जैसे command execution, file reads, planning updates, patch summaries, या Codex app-server mode में Codex preamble/commentary text। Telegram इन्हें default रूप से enabled रखता है ताकि v2026.4.22 और बाद के released OpenClaw behavior से मेल बना रहे।
Answer text के लिए edited preview रखना लेकिन tool-progress lines छिपाना हो, तो set करें:
{ "channels": { "telegram": { "streaming": { "mode": "partial", "preview": { "toolProgress": false } } } }}Tool-progress visible रखना लेकिन command/exec text छिपाना हो, तो set करें:
{ "channels": { "telegram": { "streaming": { "mode": "partial", "preview": { "commandText": "status" } } } }}जब आप final answer को उसी message में edit किए बिना visible tool progress चाहते हों, तब progress mode का उपयोग करें। Command-text policy को streaming.progress के नीचे रखें:
{ "channels": { "telegram": { "streaming": { "mode": "progress", "progress": { "toolProgress": true, "commandText": "status" } } } }}streaming.mode: "off" केवल तब उपयोग करें जब आप final-only delivery चाहते हों: Telegram preview edits disabled होते हैं और generic tool/progress chatter को standalone status messages के रूप में भेजने के बजाय suppress किया जाता है। Approval prompts, media payloads, और errors फिर भी normal final delivery के माध्यम से route होते हैं। streaming.preview.toolProgress: false तब उपयोग करें जब आप tool-progress status lines छिपाते हुए केवल answer preview edits रखना चाहते हों।
Text-only replies के लिए:
- छोटे DM/group/topic previews: OpenClaw वही preview message रखता है और final edit in place करता है
- कई Telegram messages में split होने वाले long text finals, संभव होने पर existing preview को first final chunk के रूप में reuse करते हैं, फिर केवल remaining chunks भेजते हैं
- progress-mode finals status draft clear करते हैं और draft को answer में edit करने के बजाय normal final delivery उपयोग करते हैं
- अगर completed text confirm होने से पहले final edit fail हो जाता है, तो OpenClaw normal final delivery उपयोग करता है और stale preview साफ करता है
Complex replies (जैसे media payloads) के लिए, OpenClaw normal final delivery पर fall back करता है और फिर preview message साफ करता है।
Preview streaming, block streaming से अलग है। जब Telegram के लिए block streaming explicitly enabled हो, तो OpenClaw double-streaming से बचने के लिए preview stream skip करता है।
Reasoning stream behavior:
/reasoning streamsupported channel के reasoning-preview path का उपयोग करता है; Telegram पर, यह generate करते समय reasoning को live preview में stream करता है- final delivery के बाद reasoning preview delete हो जाता है; reasoning visible रखना हो तो
/reasoning onउपयोग करें - final answer reasoning text के बिना भेजा जाता है
Rich message formatting
Outbound text default रूप से standard Telegram HTML messages का उपयोग करता है, ताकि replies current Telegram clients में readable रहें। यह compatibility mode normal bold, italic, links, code, spoilers, और quotes को support करता है, लेकिन Bot API 10.1 rich-only blocks जैसे native tables, details, rich media, और formulas को नहीं।
Bot API 10.1 rich messages में opt in करने के लिए channels.telegram.richMessages: true set करें:
{channels: {telegram: { richMessages: true,},},}Enabled होने पर:
- Agent को बताया जाता है कि इस bot/account के लिए Telegram rich messages available हैं।
- Markdown text OpenClaw के Markdown IR से render होकर Telegram rich HTML के रूप में भेजा जाता है।
- Explicit rich HTML payloads supported Bot API 10.1 tags जैसे headings, tables, details, rich media, और formulas को preserve करते हैं।
- Media captions अभी भी Telegram HTML captions का उपयोग करते हैं क्योंकि rich messages captions को replace नहीं करते।
इससे model text Telegram Rich Markdown sigils से दूर रहता है, इसलिए $400-600K जैसी currency math के रूप में parse नहीं होती। Long rich text automatically Telegram की rich text और rich block limits के पार split होता है। Telegram की column limit से अधिक tables code blocks के रूप में भेजे जाते हैं।
Default: client compatibility के लिए off। Rich messages के लिए compatible Telegram clients आवश्यक हैं; कुछ current Desktop, Web, Android, और third-party clients accepted rich messages को unsupported के रूप में display करते हैं। इस option को disabled रखें, जब तक bot के साथ उपयोग होने वाला हर client इन्हें render न कर सके। /status दिखाता है कि current Telegram session में rich messages on हैं या off।
Link previews default रूप से enabled हैं। channels.telegram.linkPreview: false rich text के लिए automatic entity detection skip करता है।
Native commands and custom commands
Telegram command menu registration startup पर setMyCommands के साथ handle किया जाता है।
Native command defaults:
commands.native: "auto"Telegram के लिए native commands enable करता है
Custom command menu entries जोड़ें:
{channels: {telegram: { customCommands: [ { command: "backup", description: "Git backup" }, { command: "generate", description: "Create an image" }, ],},},}नियम:
- names normalized होते हैं (leading
/हटाएँ, lowercase) - valid pattern:
a-z,0-9,_, length1..32 - custom commands native commands को override नहीं कर सकते
- conflicts/duplicates skip किए जाते हैं और log होते हैं
Notes:
- custom commands केवल menu entries हैं; वे behavior को auto-implement नहीं करते
- plugin/skill commands typed होने पर अभी भी काम कर सकते हैं, भले ही Telegram menu में न दिखें
अगर native commands disabled हैं, तो built-ins हटाए जाते हैं। Custom/plugin commands configured होने पर अभी भी register हो सकते हैं।
Common setup failures:
setMyCommands failedके साथBOT_COMMANDS_TOO_MUCHका मतलब है कि trimming के बाद भी Telegram menu overflow हुआ; plugin/skill/custom commands कम करें याchannels.telegram.commands.nativedisable करें।- Direct Bot API curl commands काम करते समय
deleteWebhook,deleteMyCommands, याsetMyCommandsका404: Not Foundके साथ fail होना यह संकेत दे सकता है किchannels.telegram.apiRootको full/bot<TOKEN>endpoint पर set किया गया था।apiRootकेवल Bot API root होना चाहिए, औरopenclaw doctor --fixaccidental trailing/bot<TOKEN>को हटाता है। getMe returned 401का मतलब है कि Telegram ने configured bot token reject कर दिया। Current BotFather token के साथbotToken,tokenFile, याTELEGRAM_BOT_TOKENupdate करें; OpenClaw polling से पहले रुक जाता है, इसलिए इसे webhook cleanup failure के रूप में report नहीं किया जाता।- Network/fetch errors के साथ
setMyCommands failedका आमतौर पर मतलब है किapi.telegram.orgतक outbound DNS/HTTPS blocked है।
Device pairing commands (device-pair plugin)
जब device-pair plugin installed हो:
/pairsetup code generate करता है- iOS app में code paste करें
/pair pendingpending requests list करता है (role/scopes सहित)- request approve करें:
- explicit approval के लिए
/pair approve <requestId> - जब केवल एक pending request हो, तो
/pair approve - most recent के लिए
/pair approve latest
- explicit approval के लिए
Setup code एक short-lived bootstrap token carry करता है। Built-in setup-code bootstrap scopes: [] के साथ durable node token और trusted mobile onboarding के लिए bounded operator handoff token लौटाता है। वह operator token setup-time native configuration पढ़ सकता है, लेकिन pairing mutation scopes या operator.admin grant नहीं करता।
अगर device बदली हुई auth details (जैसे role/scopes/public key) के साथ retry करता है, तो पिछली pending request supersede हो जाती है और नई request अलग requestId उपयोग करती है। Approve करने से पहले /pair pending फिर से चलाएँ।
अधिक विवरण: पेयरिंग.
Inline buttons
इनलाइन कीबोर्ड scope कॉन्फ़िगर करें:
{channels: {telegram: { capabilities: { inlineButtons: "allowlist", },},},}प्रति-अकाउंट override:
{channels: {telegram: { accounts: { main: { capabilities: { inlineButtons: "allowlist", }, }, },},},}Scopes:
offdmgroupallallowlist(डिफ़ॉल्ट)
Legacy capabilities: ["inlineButtons"] inlineButtons: "all" पर मैप होता है।
संदेश action उदाहरण:
{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" }],],}Mini App बटन उदाहरण:
{action: "send",channel: "telegram",to: "123456789",message: "Open app:",presentation: {blocks: [ { type: "buttons", buttons: [{ label: "Launch", web_app: { url: "https://example.com/app" } }], },],},}Telegram web_app बटन केवल किसी उपयोगकर्ता और bot के बीच निजी चैट में काम करते हैं।
Callback क्लिक जिन्हें किसी रजिस्टर्ड plugin interactive handler ने claim नहीं किया है,
agent को टेक्स्ट के रूप में पास किए जाते हैं:
callback_data: <value>
Telegram message actions for agents and automation
Telegram tool actions में शामिल हैं:
sendMessage(to,content, वैकल्पिकmediaUrl,replyToMessageId,messageThreadId)react(chatId,messageId,emoji)deleteMessage(chatId,messageId)editMessage(chatId,messageId,contentयाcaption, वैकल्पिकpresentationइनलाइन बटन; केवल-बटन edits reply markup अपडेट करते हैं)createForumTopic(chatId,name, वैकल्पिकiconColor,iconCustomEmojiId)
Channel message actions ergonomic aliases (send, react, delete, edit, sticker, sticker-search, topic-create) expose करते हैं।
Gating controls:
channels.telegram.actions.sendMessagechannels.telegram.actions.deleteMessagechannels.telegram.actions.reactionschannels.telegram.actions.sticker(डिफ़ॉल्ट: disabled)
नोट: edit और topic-create फ़िलहाल डिफ़ॉल्ट रूप से enabled हैं और इनके लिए अलग channels.telegram.actions.* toggles नहीं हैं।
Runtime sends सक्रिय config/secrets snapshot (startup/reload) का उपयोग करते हैं, इसलिए action paths प्रत्येक send पर ad-hoc SecretRef re-resolution नहीं करते।
Reaction removal semantics: /tools/reactions
Reply threading tags
Telegram generated output में explicit reply threading tags का समर्थन करता है:
[[reply_to_current]]triggering message का reply देता है[[reply_to:<id>]]किसी विशिष्ट Telegram message ID का reply देता है
channels.telegram.replyToMode handling नियंत्रित करता है:
off(डिफ़ॉल्ट)firstall
जब reply threading enabled हो और मूल Telegram text या caption उपलब्ध हो, OpenClaw अपने-आप native Telegram quote excerpt शामिल करता है। Telegram native quote text को 1024 UTF-16 code units तक सीमित करता है, इसलिए लंबे messages की quote शुरुआत से ली जाती है और अगर Telegram quote अस्वीकार कर दे तो plain reply पर fallback होता है।
नोट: off implicit reply threading को disabled करता है। Explicit [[reply_to_*]] tags फिर भी सम्मानित किए जाते हैं।
Forum topics and thread behavior
Forum supergroups:
- topic session keys में
:topic:<threadId>जुड़ता है - replies और typing topic thread को target करते हैं
- topic config path:
channels.telegram.groups.<chatId>.topics.<threadId>
General topic (threadId=1) special-case:
- message sends
message_thread_idछोड़ देते हैं (TelegramsendMessage(...thread_id=1)को reject करता है) - typing actions फिर भी
message_thread_idशामिल करते हैं
Topic inheritance: topic entries group settings को inherit करती हैं जब तक override न किया जाए (requireMention, allowFrom, skills, systemPrompt, enabled, groupPolicy)।
agentId केवल topic के लिए है और group defaults से inherit नहीं करता।
topics."*" उस group के हर topic के लिए defaults सेट करता है; exact topic IDs फिर भी "*" से अधिक प्राथमिकता रखते हैं।
प्रति-topic agent routing: हर topic, topic config में agentId सेट करके अलग agent को route कर सकता है। इससे हर topic को अपना isolated workspace, memory, और session मिलता है। उदाहरण:
{ 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 } } } } }}फिर हर topic की अपनी session key होती है: agent:zu:telegram:group:-1001234567890:topic:3
Persistent ACP topic binding: Forum topics top-level typed ACP bindings (bindings[] जिसमें type: "acp" और match.channel: "telegram", peer.kind: "group", और -1001234567890:topic:42 जैसी topic-qualified id हो) के माध्यम से ACP harness sessions pin कर सकते हैं। फ़िलहाल groups/supergroups में forum topics तक scoped है। देखें ACP Agents।
Chat से thread-bound ACP spawn: /acp spawn <agent> --thread here|auto current topic को नए ACP session से bind करता है; follow-ups सीधे वहीं route होते हैं। OpenClaw spawn confirmation को in-topic pin करता है। channels.telegram.threadBindings.spawnSessions enabled रहना आवश्यक है (डिफ़ॉल्ट: true)।
Template context MessageThreadId और IsForum expose करता है। message_thread_id वाली DM chats reply metadata रखती हैं; वे thread-aware session keys केवल तब उपयोग करती हैं जब Telegram getMe bot के लिए has_topics_enabled: true report करता है।
पुराने dm.threadReplies और direct.*.threadReplies overrides जानबूझकर retired हैं; BotFather threaded mode को single source of truth के रूप में उपयोग करें और stale config keys हटाने के लिए openclaw doctor --fix चलाएं।
Audio, video, and stickers
Audio messages
Telegram voice notes और audio files में अंतर करता है।
- डिफ़ॉल्ट: audio file behavior
- voice-note send force करने के लिए agent reply में tag
[[audio_as_voice]] - inbound voice-note transcripts को agent context में machine-generated, untrusted text के रूप में frame किया जाता है; mention detection फिर भी raw transcript का उपयोग करता है ताकि mention-gated voice messages काम करते रहें।
Message action उदाहरण:
{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,}वीडियो नोट्स कैप्शन का समर्थन नहीं करते; दिया गया संदेश टेक्स्ट अलग से भेजा जाता है।
स्टिकर
आने वाले स्टिकर का प्रबंधन:
- static WEBP: डाउनलोड और प्रोसेस किया गया (placeholder
<media:sticker>) - animated TGS: छोड़ा गया
- video WEBM: छोड़ा गया
स्टिकर संदर्भ फ़ील्ड:
Sticker.emojiSticker.setNameSticker.fileIdSticker.fileUniqueIdSticker.cachedDescription
बार-बार vision कॉल कम करने के लिए स्टिकर विवरण OpenClaw SQLite Plugin स्टेट में कैश किए जाते हैं।
स्टिकर कार्रवाइयां सक्षम करें:
{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 अपडेट के रूप में आती हैं (संदेश payloads से अलग)।
सक्षम होने पर, 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का अर्थ है केवल bot द्वारा भेजे गए संदेशों पर उपयोगकर्ता प्रतिक्रियाएं (भेजे गए संदेश कैश के माध्यम से best-effort)।- प्रतिक्रिया इवेंट फिर भी Telegram एक्सेस नियंत्रणों (
dmPolicy,allowFrom,groupPolicy,groupAllowFrom) का पालन करते हैं; अनधिकृत प्रेषक हटा दिए जाते हैं। - Telegram प्रतिक्रिया अपडेट में thread IDs प्रदान नहीं करता।
- non-forum groups समूह चैट सत्र पर रूट होते हैं
- forum groups समूह के general-topic सत्र (
:topic:1) पर रूट होते हैं, सटीक मूल topic पर नहीं
polling/Webhook के लिए allowed_updates में message_reaction अपने आप शामिल होता है।
Ack प्रतिक्रियाएं
जब OpenClaw किसी आने वाले संदेश को प्रोसेस कर रहा होता है, तो ackReaction एक acknowledgement emoji भेजता है। ackReactionScope तय करता है कि वह emoji वास्तव में कब भेजा जाता है।
Emoji (ackReaction) समाधान क्रम:
channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- agent identity emoji fallback (
agents.list[].identity.emoji, अन्यथा "👀")
नोट्स:
- Telegram unicode emoji की अपेक्षा करता है (उदाहरण के लिए "👀")।
- किसी channel या account के लिए प्रतिक्रिया अक्षम करने हेतु
""का उपयोग करें।
Scope (messages.ackReactionScope):
Telegram provider scope को messages.ackReactionScope से पढ़ता है (डिफ़ॉल्ट "group-mentions")। आज कोई Telegram-account या Telegram-channel-level override नहीं है।
मान: "all" (DMs + groups), "direct" (केवल DMs), "group-all" (हर group message, DMs नहीं), "group-mentions" (groups जब bot का उल्लेख हो; DMs नहीं — यह डिफ़ॉल्ट है), "off" / "none" (अक्षम)।
Telegram इवेंट और कमांड से कॉन्फ़िग लेखन
Channel config writes डिफ़ॉल्ट रूप से सक्षम होते हैं (configWrites !== false)।
Telegram-triggered writes में शामिल हैं:
channels.telegram.groupsअपडेट करने के लिए group migration events (migrate_to_chat_id)/config setऔर/config unset(command enablement आवश्यक)
अक्षम करें:
{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 अपना restart watermark केवल किसी update के सफलतापूर्वक dispatch होने के बाद persist करता है। यदि कोई handler विफल होता है, तो वह update उसी process में retryable रहता है और restart dedupe के लिए completed के रूप में नहीं लिखा जाता।
local listener 127.0.0.1:8787 से bind होता है। public ingress के लिए, या तो local port के सामने reverse proxy लगाएं या जानबूझकर webhookHost: "0.0.0.0" सेट करें।
Webhook मोड Telegram को 200 लौटाने से पहले request guards, Telegram secret token, और JSON body को validate करता है।
फिर OpenClaw update को long polling द्वारा उपयोग की जाने वाली उसी per-chat/per-topic bot lanes के माध्यम से asynchronously प्रोसेस करता है, इसलिए धीमे agent turns Telegram के delivery ACK को रोकते नहीं हैं।
सीमाएं, पुनः प्रयास, और CLI लक्ष्य
channels.telegram.textChunkLimitका डिफ़ॉल्ट 4000 है.channels.telegram.chunkMode="newline"लंबाई के आधार पर विभाजन से पहले अनुच्छेद सीमाओं (खाली पंक्तियों) को प्राथमिकता देता है.channels.telegram.mediaMaxMb(डिफ़ॉल्ट 100) आने वाले और जाने वाले Telegram मीडिया आकार को सीमित करता है.channels.telegram.mediaGroupFlushMs(डिफ़ॉल्ट 500) नियंत्रित करता है कि OpenClaw द्वारा Telegram एल्बम/मीडिया समूहों को एक इनबाउंड संदेश के रूप में भेजने से पहले उन्हें कितनी देर बफ़र किया जाता है. यदि एल्बम के हिस्से देर से आते हैं तो इसे बढ़ाएं; एल्बम जवाब विलंबता घटाने के लिए इसे घटाएं.channels.telegram.timeoutSecondsTelegram API क्लाइंट टाइमआउट को ओवरराइड करता है (यदि सेट नहीं है, तो grammY डिफ़ॉल्ट लागू होता है). Bot क्लाइंट कॉन्फ़िगर किए गए मानों को 60-सेकंड आउटबाउंड टेक्स्ट/टाइपिंग अनुरोध गार्ड से नीचे सीमित करते हैं ताकि grammY, OpenClaw के ट्रांसपोर्ट गार्ड और fallback के चलने से पहले दृश्य जवाब डिलीवरी को रोक न दे. Long polling अब भी 45-सेकंडgetUpdatesअनुरोध गार्ड का उपयोग करता है ताकि निष्क्रिय polls को अनिश्चितकाल तक छोड़ा न जाए.channels.telegram.pollingStallThresholdMsका डिफ़ॉल्ट120000है; केवल false-positive polling-stall restart के लिए30000और600000के बीच ट्यून करें.- समूह संदर्भ इतिहास
channels.telegram.historyLimitयाmessages.groupChat.historyLimit(डिफ़ॉल्ट 50) का उपयोग करता है;0अक्षम करता है. - reply/quote/forward पूरक संदर्भ को एक चुनी हुई बातचीत संदर्भ विंडो में सामान्यीकृत किया जाता है जब Gateway ने parent संदेश देखे हों; observed-message cache OpenClaw SQLite plugin state में रहता है, और
openclaw doctor --fixlegacy sidecars को आयात करता है. Telegram updates में केवल एक shallowreply_to_messageशामिल करता है, इसलिए cache से पुरानी chains Telegram के मौजूदा update payload तक सीमित होती हैं. - Telegram allowlists मुख्य रूप से यह नियंत्रित करती हैं कि agent को कौन trigger कर सकता है, वे पूर्ण supplemental-context redaction boundary नहीं हैं.
- DM इतिहास नियंत्रण:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
channels.telegram.retryconfig recoverable outbound API errors के लिए Telegram send helpers (CLI/tools/actions) पर लागू होता है. Inbound final-reply delivery भी Telegram pre-connect failures के लिए bounded safe-send retry का उपयोग करती है, लेकिन यह ambiguous post-send network envelopes पर retry नहीं करती, जिनसे visible messages duplicate हो सकते हैं.
CLI और message-tool send targets numeric chat ID, username, या forum topic target हो सकते हैं:
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 polls openclaw message poll का उपयोग करते हैं और forum topics को support करते हैं:
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 flags:
--poll-duration-seconds(5-600)--poll-anonymous--poll-public--thread-idforum topics के लिए (या:topic:target का उपयोग करें)
Telegram send यह भी support करता है:
--presentationके साथbuttonsblocks inline keyboards के लिए, जबchannels.telegram.capabilities.inlineButtonsइसकी अनुमति देता है--pinया--delivery '{"pin":true}'pinned delivery का अनुरोध करने के लिए, जब bot उस chat में pin कर सकता है--force-documentआउटबाउंड images, GIFs, और videos को compressed photo, animated-media, या video uploads के बजाय documents के रूप में भेजने के लिए
Action gating:
channels.telegram.actions.sendMessage=falsepolls सहित outbound Telegram messages को अक्षम करता हैchannels.telegram.actions.poll=falseregular sends को enabled रखते हुए Telegram poll creation को अक्षम करता है
Telegram में निष्पादन अनुमोदन
Telegram approver DMs में exec approvals को support करता है और वैकल्पिक रूप से originating chat या topic में prompts post कर सकता है. Approvers numeric Telegram user IDs होने चाहिए.
Config path:
channels.telegram.execApprovals.enabled(जब कम से कम एक approver resolvable हो तो auto-enable होता है)channels.telegram.execApprovals.approvers(commands.ownerAllowFromसे numeric owner IDs पर fallback करता है)channels.telegram.execApprovals.target:dm(डिफ़ॉल्ट) |channel|bothagentFilter,sessionFilter
channels.telegram.allowFrom, groupAllowFrom, और defaultTo नियंत्रित करते हैं कि bot से कौन बात कर सकता है और वह सामान्य replies कहां भेजता है. वे किसी को exec approver नहीं बनाते. पहला approved DM pairing commands.ownerAllowFrom को bootstrap करता है जब अभी तक कोई command owner मौजूद नहीं होता, इसलिए one-owner setup अब भी execApprovals.approvers के तहत IDs duplicate किए बिना काम करता है.
Channel delivery chat में command text दिखाती है; channel या both को केवल trusted groups/topics में enable करें. जब prompt किसी forum topic में आता है, OpenClaw approval prompt और follow-up के लिए topic को सुरक्षित रखता है. Exec approvals डिफ़ॉल्ट रूप से 30 मिनट बाद expire हो जाते हैं.
Inline approval buttons के लिए भी channels.telegram.capabilities.inlineButtons का target surface (dm, group, या all) allow करना आवश्यक है. plugin: prefix वाले Approval IDs plugin approvals के माध्यम से resolve होते हैं; अन्य पहले exec approvals के माध्यम से resolve होते हैं.
देखें निष्पादन अनुमोदन.
Error reply controls
जब agent को delivery या provider error मिलता है, तो error policy नियंत्रित करती है कि error messages Telegram chat में भेजे जाएं या नहीं:
| कुंजी | मान | डिफ़ॉल्ट | विवरण |
|---|---|---|---|
channels.telegram.errorPolicy |
always, once, silent |
always |
always — हर error message chat में भेजें. once — प्रत्येक unique error message को cooldown window में एक बार भेजें (बार-बार आने वाली identical errors को suppress करें). silent — error messages कभी chat में न भेजें. |
channels.telegram.errorCooldownMs |
संख्या (ms) | 14400000 (4h) |
once policy के लिए cooldown window. Error भेजे जाने के बाद, वही error message इस interval के बीतने तक suppress रहता है. Outages के दौरान error spam रोकता है. |
Per-account, per-group, और per-topic overrides supported हैं (अन्य Telegram config keys जैसी inheritance).
{ channels: { telegram: { errorPolicy: "always", errorCooldownMs: 120000, groups: { "-1001234567890": { errorPolicy: "silent", // suppress errors in this group }, }, }, },}समस्या निवारण
Bot non mention group messages का जवाब नहीं देता
- यदि
requireMention=false, तो Telegram privacy mode को full visibility allow करनी चाहिए.- BotFather:
/setprivacy-> Disable - फिर bot को group से हटाकर दोबारा जोड़ें
- BotFather:
- जब config unmentioned group messages की अपेक्षा करता है, तो
openclaw channels statusचेतावनी देता है. openclaw channels status --probeexplicit numeric group IDs जांच सकता है; wildcard"*"को membership-probe नहीं किया जा सकता.- quick session test:
/activation always.
Bot group messages बिल्कुल नहीं देख रहा
- जब
channels.telegram.groupsमौजूद हो, group listed होना चाहिए (या"*"शामिल करें) - group में bot membership verify करें
- skip reasons के लिए logs देखें:
openclaw logs --follow
Commands आंशिक रूप से काम करते हैं या बिल्कुल नहीं
- अपनी sender identity authorize करें (pairing और/या numeric
allowFrom) - command authorization अब भी लागू होता है, भले ही group policy
openहो setMyCommands failedके साथBOT_COMMANDS_TOO_MUCHका मतलब है कि native menu में बहुत अधिक entries हैं; plugin/skill/custom commands घटाएं या native menus disable करेंdeleteMyCommands/setMyCommandsstartup calls औरsendChatActiontyping calls bounded हैं और request timeout पर Telegram के transport fallback के माध्यम से एक बार retry करते हैं. Persistent network/fetch errors आमतौर परapi.telegram.orgतक DNS/HTTPS reachability issues दिखाते हैं
Startup unauthorized token report करता है
getMe returned 401configured bot token के लिए Telegram authentication failure है.- BotFather में bot token दोबारा copy या regenerate करें, फिर default account के लिए
channels.telegram.botToken,channels.telegram.tokenFile,channels.telegram.accounts.<id>.botToken, याTELEGRAM_BOT_TOKENupdate करें. - Startup के दौरान
deleteWebhook 401 Unauthorizedभी auth failure है; इसे "no webhook exists" मानना उसी bad-token failure को बाद के API calls तक टाल देगा.
Polling या network instability
- Node 22+ + custom fetch/proxy immediate abort behavior trigger कर सकता है यदि AbortSignal types mismatch हों.
- कुछ hosts
api.telegram.orgको पहले IPv6 में resolve करते हैं; broken IPv6 egress intermittent Telegram API failures पैदा कर सकता है. - यदि logs में
TypeError: fetch failedयाNetwork request for 'getUpdates' failed!शामिल हो, तो OpenClaw अब इन्हें recoverable network errors के रूप में retry करता है. - Polling startup के दौरान, OpenClaw grammY के लिए successful startup
getMeprobe reuse करता है ताकि runner को पहलेgetUpdatesसे पहले दूसरेgetMeकी जरूरत न पड़े. - यदि polling startup के दौरान
deleteWebhooktransient network error के साथ fail होता है, तो OpenClaw दूसरा pre-poll control-plane call करने के बजाय long polling में continue करता है. अब भी active webhookgetUpdatesconflict के रूप में सामने आता है; फिर OpenClaw Telegram transport rebuild करता है और webhook cleanup retry करता है. - यदि Telegram sockets छोटे fixed cadence पर recycle होते हैं, तो low
channels.telegram.timeoutSecondsजांचें; bot clients configured values को outbound औरgetUpdatesrequest guards से नीचे clamp करते हैं, लेकिन पुराने releases हर poll या reply abort कर सकते थे जब इसे उन guards से नीचे set किया गया था. - यदि logs में
Polling stall detectedशामिल हो, तो OpenClaw डिफ़ॉल्ट रूप से completed long-poll liveness के बिना 120 seconds के बाद polling restart करता है और Telegram transport rebuild करता है. openclaw channels status --probeऔरopenclaw doctorचेतावनी देते हैं जब कोई running polling account startup grace के बादgetUpdatescomplete नहीं कर पाया हो, जब कोई running webhook account startup grace के बादsetWebhookcomplete नहीं कर पाया हो, या जब last successful polling transport activity stale हो.channels.telegram.pollingStallThresholdMsकेवल तब बढ़ाएं जब long-runninggetUpdatescalls healthy हों लेकिन आपका host फिर भी false polling-stall restarts report करता हो. Persistent stalls आमतौर पर host औरapi.telegram.orgके बीच proxy, DNS, IPv6, या TLS egress issues की ओर इशारा करते हैं.- Telegram Bot API transport के लिए process proxy env का भी सम्मान करता है, जिसमें
HTTP_PROXY,HTTPS_PROXY,ALL_PROXY, और उनके lowercase variants शामिल हैं.NO_PROXY/no_proxyअब भीapi.telegram.orgको bypass कर सकते हैं. - यदि OpenClaw managed proxy service environment के लिए
OPENCLAW_PROXY_URLके माध्यम से configured है और कोई standard proxy env मौजूद नहीं है, तो Telegram भी Bot API transport के लिए उस URL का उपयोग करता है. - unstable direct egress/TLS वाले VPS hosts पर, Telegram API calls को
channels.telegram.proxyके माध्यम से route करें:
channels:telegram:proxy: socks5://<user>:<password>@proxy-host:1080- Node 22+ में
autoSelectFamily=trueडिफ़ॉल्ट होता है (WSL2 को छोड़कर)। Telegram DNS परिणाम क्रम पहलेOPENCLAW_TELEGRAM_DNS_RESULT_ORDER, फिरchannels.telegram.network.dnsResultOrder, फिर प्रक्रिया डिफ़ॉल्ट जैसेNODE_OPTIONS=--dns-result-order=ipv4firstका पालन करता है; यदि कोई लागू नहीं होता, तो Node 22+ipv4firstपर वापस जाता है। - यदि आपका होस्ट WSL2 है या स्पष्ट रूप से केवल-IPv4 व्यवहार के साथ बेहतर काम करता है, तो family चयन बाध्य करें:
channels:telegram:network: autoSelectFamily: false- RFC 2544 benchmark-range उत्तर (
198.18.0.0/15) Telegram मीडिया डाउनलोड के लिए डिफ़ॉल्ट रूप से पहले से अनुमत हैं। यदि कोई भरोसेमंद fake-IP या पारदर्शी proxy मीडिया डाउनलोड के दौरानapi.telegram.orgको किसी अन्य निजी/आंतरिक/special-use पते में फिर से लिखता है, तो आप केवल-Telegram बायपास के लिए opt in कर सकते हैं:
channels:telegram:network: dangerouslyAllowPrivateNetwork: true- यही opt-in प्रति खाते पर
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetworkमें उपलब्ध है। - यदि आपका proxy Telegram मीडिया hosts को
198.18.x.xमें resolve करता है, तो पहले dangerous flag बंद रखें। Telegram मीडिया पहले से ही RFC 2544 benchmark range को डिफ़ॉल्ट रूप से अनुमति देता है।
- Environment overrides (अस्थायी):
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first
- DNS उत्तर validate करें:
dig +short api.telegram.org Adig +short api.telegram.org AAAAअधिक सहायता: Channel troubleshooting.
Configuration reference
प्राथमिक reference: Configuration reference - Telegram.
High-signal Telegram fields
- startup/auth:
enabled,botToken,tokenFile,accounts.*(tokenFileको नियमित file की ओर point करना चाहिए; symlinks अस्वीकार किए जाते हैं) - access control:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*, top-levelbindings[](type: "acp") - topic defaults:
groups.<chatId>.topics."*"unmatched forum topics पर लागू होता है; exact topic IDs इसे override करते हैं - exec approvals:
execApprovals,accounts.*.execApprovals - command/menu:
commands.native,commands.nativeSkills,customCommands - threading/replies:
replyToMode - streaming:
streaming(preview),streaming.preview.toolProgress,blockStreaming - formatting/delivery:
textChunkLimit,chunkMode,richMessages,linkPreview,responsePrefix - media/network:
mediaMaxMb,mediaGroupFlushMs,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - custom API root:
apiRoot(केवल Bot API root;/bot<TOKEN>शामिल न करें) - webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost - actions/capabilities:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker - reactions:
reactionNotifications,reactionLevel - errors:
errorPolicy,errorCooldownMs - writes/history:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit