Siap produksi untuk DM bot dan grup melalui grammY. Long polling adalah mode default; mode Webhook bersifat opsional.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Pairing
Channel troubleshooting
Gateway configuration
Penyiapan cepat
Create the bot token in BotFather
@BotFather).Jalankan /newbot, ikuti prompt, dan simpan token.Configure token and DM policy
TELEGRAM_BOT_TOKEN=... (hanya akun default).
Telegram tidak menggunakan openclaw channels login telegram; konfigurasikan token di config/env, lalu mulai Gateway.Add the bot to a group
- ID pengguna Telegram Anda, digunakan di
allowFrom/groupAllowFrom - ID chat grup Telegram, digunakan sebagai kunci di bawah
channels.telegram.groups
openclaw logs --follow, bot ID-terusan, atau Bot API getUpdates. Setelah grup diizinkan, /whoami@<bot_username> dapat mengonfirmasi ID pengguna dan grup.ID supergrup Telegram negatif yang diawali dengan -100 adalah ID chat grup. Letakkan di bawah channels.telegram.groups, bukan di bawah groupAllowFrom.TELEGRAM_BOT_TOKEN hanya berlaku untuk akun default.Pengaturan sisi Telegram
Privacy mode and group visibility
Privacy mode and group visibility
- nonaktifkan mode privasi melalui
/setprivacy, atau - jadikan bot admin grup.
Group permissions
Group permissions
Helpful BotFather toggles
Helpful BotFather toggles
/setjoingroupsuntuk mengizinkan/menolak penambahan ke grup/setprivacyuntuk perilaku visibilitas grup
Kontrol akses dan aktivasi
- DM policy
- Group policy and allowlists
- Mention behavior
channels.telegram.dmPolicy mengontrol akses pesan langsung:pairing(default)allowlist(memerlukan setidaknya satu ID pengirim diallowFrom)open(memerlukanallowFrommenyertakan"*")disabled
dmPolicy: "open" dengan allowFrom: ["*"] memungkinkan akun Telegram mana pun yang menemukan atau menebak nama pengguna bot untuk memberi perintah ke bot. Gunakan hanya untuk bot publik yang memang disengaja dengan alat yang dibatasi ketat; bot satu pemilik sebaiknya menggunakan allowlist dengan ID pengguna numerik.channels.telegram.allowFrom menerima ID pengguna Telegram numerik. Prefiks telegram: / tg: diterima dan dinormalisasi.
Dalam config multi-akun, channels.telegram.allowFrom tingkat atas yang restriktif diperlakukan sebagai batas keamanan: entri allowFrom: ["*"] tingkat akun tidak membuat akun tersebut publik kecuali allowlist akun efektif masih berisi wildcard eksplisit setelah penggabungan.
dmPolicy: "allowlist" dengan allowFrom kosong memblokir semua DM dan ditolak oleh validasi config.
Penyiapan hanya meminta ID pengguna numerik.
Jika Anda memutakhirkan dan config Anda berisi entri allowlist @username, jalankan openclaw doctor --fix untuk menyelesaikannya (upaya terbaik; memerlukan token bot Telegram).
Jika sebelumnya Anda bergantung pada file allowlist pairing-store, openclaw doctor --fix dapat memulihkan entri ke channels.telegram.allowFrom dalam alur allowlist (misalnya ketika dmPolicy: "allowlist" belum memiliki ID eksplisit).Untuk bot satu pemilik, pilih dmPolicy: "allowlist" dengan ID numerik allowFrom eksplisit agar kebijakan akses tahan lama di config (alih-alih bergantung pada persetujuan pairing sebelumnya).Kebingungan umum: persetujuan pairing DM tidak berarti “pengirim ini diotorisasi di semua tempat”.
Pairing memberikan akses DM. Jika belum ada pemilik perintah, pairing pertama yang disetujui juga menetapkan commands.ownerAllowFrom sehingga perintah khusus pemilik dan persetujuan exec memiliki akun operator eksplisit.
Otorisasi pengirim grup tetap berasal dari allowlist config eksplisit.
Jika Anda ingin “Saya diotorisasi sekali dan DM serta perintah grup berfungsi”, letakkan ID pengguna Telegram numerik Anda di channels.telegram.allowFrom; untuk perintah khusus pemilik, pastikan commands.ownerAllowFrom berisi telegram:<your user id>.Menemukan ID pengguna Telegram Anda
Lebih aman (tanpa bot pihak ketiga):- DM bot Anda.
- Jalankan
openclaw logs --follow. - Baca
from.id.
@userinfobot atau @getidsbot.Perilaku runtime
- Telegram dimiliki oleh proses Gateway.
- Routing deterministik: inbound Telegram dibalas kembali ke Telegram (model tidak memilih channel).
- Pesan inbound dinormalisasi ke dalam envelope channel bersama dengan metadata balasan, placeholder media, dan konteks rantai balasan yang dipersistenkan untuk balasan Telegram yang telah diamati Gateway.
- Sesi grup diisolasi berdasarkan ID grup. Topik forum menambahkan
:topic:<threadId>agar topik tetap terisolasi. - Pesan DM dapat membawa
message_thread_id; OpenClaw mempertahankan ID thread untuk balasan tetapi menjaga DM pada sesi datar secara default. Konfigurasikanchannels.telegram.dm.threadReplies: "inbound",channels.telegram.direct.<chatId>.threadReplies: "inbound",requireTopic: true, atau config topik yang cocok ketika Anda memang menginginkan isolasi sesi topik DM. - Long polling menggunakan grammY runner dengan pengurutan per-chat/per-thread. Konkurensi sink runner keseluruhan menggunakan
agents.defaults.maxConcurrent. - Long polling dijaga di dalam setiap proses Gateway sehingga hanya satu poller aktif yang dapat menggunakan token bot pada satu waktu. Jika Anda masih melihat konflik
getUpdates409, kemungkinan Gateway OpenClaw lain, skrip, atau poller eksternal menggunakan token yang sama. - Mulai ulang watchdog long-polling dipicu setelah 120 detik tanpa liveness
getUpdatesyang selesai secara default. Tingkatkanchannels.telegram.pollingStallThresholdMshanya jika deployment Anda masih melihat mulai ulang polling-stall palsu selama pekerjaan berjalan lama. Nilainya dalam milidetik dan diizinkan dari30000hingga600000; override per-akun didukung. - Telegram Bot API tidak memiliki dukungan tanda-terima-baca (
sendReadReceiptstidak berlaku).
Referensi fitur
Live stream preview (message edits)
Live stream preview (message edits)
- chat langsung: pesan pratinjau +
editMessageText - grup/topik: pesan pratinjau +
editMessageText
channels.telegram.streamingadalahoff | partial | block | progress(default:partial)progressmempertahankan satu draf status yang dapat diedit untuk progres alat, menghapusnya saat selesai, dan mengirim jawaban akhir sebagai pesan normalstreaming.preview.toolProgressmengontrol apakah pembaruan alat/progres menggunakan kembali pesan pratinjau yang diedit yang sama (default:truesaat streaming pratinjau aktif)streaming.preview.commandTextmengontrol detail perintah/eksekusi di dalam baris progres alat tersebut:raw(default, mempertahankan perilaku rilis) ataustatus(hanya label alat)- nilai lama
channels.telegram.streamModedan booleanstreamingterdeteksi; jalankanopenclaw doctor --fixuntuk memigrasikannya kechannels.telegram.streaming.mode
v2026.4.22 dan yang lebih baru. Untuk mempertahankan pratinjau yang diedit untuk teks jawaban tetapi menyembunyikan baris progres alat, atur:progress saat Anda menginginkan progres alat yang terlihat tanpa mengedit jawaban akhir ke dalam pesan yang sama. Letakkan kebijakan teks perintah di bawah streaming.progress:streaming.mode: "off" hanya saat Anda menginginkan pengiriman akhir saja: edit pratinjau Telegram dinonaktifkan dan obrolan alat/progres generik ditekan alih-alih dikirim sebagai pesan status mandiri. Prompt persetujuan, payload media, dan galat tetap dirutekan melalui pengiriman akhir normal. Gunakan streaming.preview.toolProgress: false saat Anda hanya ingin mempertahankan edit pratinjau jawaban sambil menyembunyikan baris status progres alat.replyToMode adalah "first", "all", atau "batched" dan pesan masuk menyertakan teks kutipan terpilih, OpenClaw mengirim jawaban akhir melalui jalur balasan kutipan native Telegram alih-alih mengedit pratinjau jawaban, sehingga streaming.preview.toolProgress tidak dapat menampilkan baris status singkat untuk giliran tersebut. Balasan pesan saat ini tanpa teks kutipan terpilih tetap mempertahankan streaming pratinjau. Atur replyToMode: "off" saat visibilitas progres alat lebih penting daripada balasan kutipan native, atau atur streaming.preview.toolProgress: false untuk mengakui trade-off tersebut.- pratinjau singkat DM/grup/topik: OpenClaw mempertahankan pesan pratinjau yang sama dan melakukan edit akhir di tempat
- final teks panjang yang dipecah menjadi beberapa pesan Telegram menggunakan kembali pratinjau yang ada sebagai potongan final pertama jika memungkinkan, lalu hanya mengirim potongan yang tersisa
- final mode progres menghapus draf status dan menggunakan pengiriman akhir normal alih-alih mengedit draf menjadi jawaban
- jika edit akhir gagal sebelum teks lengkap dikonfirmasi, OpenClaw menggunakan pengiriman akhir normal dan membersihkan pratinjau usang
/reasoning streammengirim penalaran ke pratinjau langsung saat menghasilkan- pratinjau penalaran dihapus setelah pengiriman akhir; gunakan
/reasoning onsaat penalaran harus tetap terlihat - jawaban akhir dikirim tanpa teks penalaran
Pemformatan dan fallback HTML
Pemformatan dan fallback HTML
parse_mode: "HTML".- Teks mirip Markdown dirender menjadi HTML yang aman untuk Telegram.
- Tag HTML Telegram yang didukung dipertahankan; HTML yang tidak didukung di-escape.
- Jika Telegram menolak HTML yang diparsing, OpenClaw mencoba ulang sebagai teks polos.
channels.telegram.linkPreview: false.Perintah native dan perintah kustom
Perintah native dan perintah kustom
setMyCommands.Default perintah native:commands.native: "auto"mengaktifkan perintah native untuk Telegram
- nama dinormalisasi (hapus
/di awal, huruf kecil) - pola valid:
a-z,0-9,_, panjang1..32 - perintah kustom tidak dapat menimpa perintah native
- konflik/duplikat dilewati dan dicatat
- perintah kustom hanya berupa entri menu; perintah tersebut tidak mengimplementasikan perilaku secara otomatis
- perintah Plugin/skill tetap dapat berfungsi saat diketik meskipun tidak ditampilkan di menu Telegram
setMyCommands faileddenganBOT_COMMANDS_TOO_MUCHberarti menu Telegram masih melampaui batas setelah dipangkas; kurangi perintah Plugin/skill/kustom atau nonaktifkanchannels.telegram.commands.native.deleteWebhook,deleteMyCommands, atausetMyCommandsgagal dengan404: Not Foundsementara perintah curl Bot API langsung berfungsi dapat berartichannels.telegram.apiRootdisetel ke endpoint lengkap/bot<TOKEN>.apiRootharus hanya root Bot API, danopenclaw doctor --fixmenghapus akhiran/bot<TOKEN>yang tidak disengaja.getMe returned 401berarti Telegram menolak token bot yang dikonfigurasi. PerbaruibotToken,tokenFile, atauTELEGRAM_BOT_TOKENdengan token BotFather saat ini; OpenClaw berhenti sebelum polling sehingga ini tidak dilaporkan sebagai kegagalan pembersihan Webhook.setMyCommands faileddengan galat jaringan/fetch biasanya berarti DNS/HTTPS keluar keapi.telegram.orgdiblokir.
Perintah pemasangan perangkat (Plugin device-pair)
Saat Plugin device-pair diinstal:/pairmenghasilkan kode penyiapan- tempel kode di aplikasi iOS
/pair pendingmencantumkan permintaan tertunda (termasuk peran/cakupan)- setujui permintaan:
/pair approve <requestId>untuk persetujuan eksplisit/pair approvesaat hanya ada satu permintaan tertunda/pair approve latestuntuk yang terbaru
scopes: []; token operator yang diserahkan tetap dibatasi ke operator.approvals, operator.read, operator.talk.secrets, dan operator.write. Pemeriksaan cakupan bootstrap diberi prefiks peran, sehingga allowlist operator tersebut hanya memenuhi permintaan operator; peran non-operator tetap memerlukan cakupan di bawah prefiks perannya sendiri.Jika perangkat mencoba ulang dengan detail autentikasi yang berubah (misalnya peran/cakupan/kunci publik), permintaan tertunda sebelumnya digantikan dan permintaan baru menggunakan requestId yang berbeda. Jalankan ulang /pair pending sebelum menyetujui.Detail lebih lanjut: Pemasangan.Tombol inline
Tombol inline
offdmgroupallallowlist(default)
capabilities: ["inlineButtons"] lama dipetakan ke inlineButtons: "all".Contoh aksi pesan:callback_data: <value>Aksi pesan Telegram untuk agen dan otomatisasi
Aksi pesan Telegram untuk agen dan otomatisasi
sendMessage(to,content, opsionalmediaUrl,replyToMessageId,messageThreadId)react(chatId,messageId,emoji)deleteMessage(chatId,messageId)editMessage(chatId,messageId,content)createForumTopic(chatId,name, opsionaliconColor,iconCustomEmojiId)
send, react, delete, edit, sticker, sticker-search, topic-create).Kontrol gating:channels.telegram.actions.sendMessagechannels.telegram.actions.deleteMessagechannels.telegram.actions.reactionschannels.telegram.actions.sticker(default: dinonaktifkan)
edit dan topic-create saat ini diaktifkan secara default dan tidak memiliki toggle channels.telegram.actions.* terpisah.
Pengiriman runtime menggunakan snapshot konfigurasi/rahasia aktif (startup/muat ulang), sehingga jalur aksi tidak melakukan resolusi ulang SecretRef ad hoc per pengiriman.Semantik penghapusan reaksi: /tools/reactionsTag threading balasan
Tag threading balasan
[[reply_to_current]]membalas pesan pemicu[[reply_to:<id>]]membalas ID pesan Telegram tertentu
channels.telegram.replyToMode mengontrol penanganan:off(default)firstall
off menonaktifkan threading balasan implisit. Tag [[reply_to_*]] eksplisit tetap dihormati.Topik forum dan perilaku thread
Topik forum dan perilaku thread
- kunci sesi topik menambahkan
:topic:<threadId> - balasan dan pengetikan menargetkan thread topik
- jalur konfigurasi topik:
channels.telegram.groups.<chatId>.topics.<threadId>
threadId=1):- pengiriman pesan menghilangkan
message_thread_id(Telegram menolaksendMessage(...thread_id=1)) - aksi pengetikan tetap menyertakan
message_thread_id
requireMention, allowFrom, skills, systemPrompt, enabled, groupPolicy).
agentId hanya untuk topik dan tidak mewarisi dari default grup.Perutean agen per topik: Setiap topik dapat dirutekan ke agen yang berbeda dengan menetapkan agentId dalam konfigurasi topik. Ini memberi setiap topik workspace, memori, dan sesi terisolasinya sendiri. Contoh:agent:zu:telegram:group:-1001234567890:topic:3Pengikatan topik ACP persisten: Topik forum dapat menyematkan sesi harness ACP melalui pengikatan ACP bertipe tingkat atas (bindings[] dengan type: "acp" dan match.channel: "telegram", peer.kind: "group", serta id berkualifikasi topik seperti -1001234567890:topic:42). Saat ini dicakup untuk topik forum dalam grup/supergrup. Lihat Agen ACP.Spawn ACP terikat utas dari chat: /acp spawn <agent> --thread here|auto mengikat topik saat ini ke sesi ACP baru; tindak lanjut dirutekan langsung ke sana. OpenClaw menyematkan konfirmasi spawn di dalam topik. Mengharuskan channels.telegram.threadBindings.spawnSessions tetap diaktifkan (default: true).Konteks templat mengekspos MessageThreadId dan IsForum. Chat DM dengan message_thread_id mempertahankan perutean DM dan metadata balasan pada sesi datar secara default; chat tersebut hanya menggunakan kunci sesi sadar-utas ketika dikonfigurasi dengan threadReplies: "inbound", threadReplies: "always", requireTopic: true, atau konfigurasi topik yang cocok. Gunakan channels.telegram.dm.threadReplies tingkat atas untuk default akun, atau direct.<chatId>.threadReplies untuk satu DM.Audio, video, dan stiker
Audio, video, dan stiker
Pesan audio
Telegram membedakan catatan suara dan file audio.- default: perilaku file audio
- tag
[[audio_as_voice]]dalam balasan agen untuk memaksa pengiriman catatan suara - transkrip catatan suara masuk dibingkai sebagai teks buatan mesin yang tidak tepercaya dalam konteks agen; deteksi mention tetap menggunakan transkrip mentah sehingga pesan suara yang dibatasi mention tetap berfungsi.
Pesan video
Telegram membedakan file video dan catatan video.Contoh tindakan pesan:Stiker
Penanganan stiker masuk:- WEBP statis: diunduh dan diproses (placeholder
<media:sticker>) - TGS animasi: dilewati
- WEBM video: dilewati
Sticker.emojiSticker.setNameSticker.fileIdSticker.fileUniqueIdSticker.cachedDescription
~/.openclaw/telegram/sticker-cache.json
Notifikasi reaksi
Notifikasi reaksi
message_reaction (terpisah dari payload pesan).Saat diaktifkan, OpenClaw mengantrekan event sistem seperti:Telegram reaction added: 👍 by Alice (@alice) on msg 42
channels.telegram.reactionNotifications:off | own | all(default:own)channels.telegram.reactionLevel:off | ack | minimal | extensive(default:minimal)
ownberarti hanya reaksi pengguna pada pesan yang dikirim bot (upaya terbaik melalui cache pesan terkirim).- Event reaksi tetap menghormati kontrol akses Telegram (
dmPolicy,allowFrom,groupPolicy,groupAllowFrom); pengirim tidak sah akan dibuang. - Telegram tidak menyediakan ID utas dalam pembaruan reaksi.
- grup non-forum dirutekan ke sesi chat grup
- grup forum dirutekan ke sesi topik umum grup (
:topic:1), bukan topik asal yang persis
allowed_updates untuk polling/Webhook mencakup message_reaction secara otomatis.Reaksi ACK
Reaksi ACK
ackReaction mengirim emoji pengakuan saat OpenClaw sedang memproses pesan masuk.Urutan resolusi:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- fallback emoji identitas agen (
agents.list[].identity.emoji, jika tidak ada ”👀”)
- Telegram mengharapkan emoji unicode (misalnya ”👀”).
- Gunakan
""untuk menonaktifkan reaksi bagi channel atau akun.
Penulisan konfigurasi dari event dan perintah Telegram
Penulisan konfigurasi dari event dan perintah Telegram
configWrites !== false).Penulisan yang dipicu Telegram mencakup:- event migrasi grup (
migrate_to_chat_id) untuk memperbaruichannels.telegram.groups /config setdan/config unset(memerlukan pengaktifan perintah)
Long polling vs Webhook
Long polling vs Webhook
channels.telegram.webhookUrl dan channels.telegram.webhookSecret; opsional webhookPath, webhookHost, webhookPort (default /telegram-webhook, 127.0.0.1, 8787).Dalam mode long-polling, OpenClaw mempertahankan watermark restart-nya hanya setelah sebuah pembaruan berhasil didispatch. Jika handler gagal, pembaruan tersebut tetap dapat dicoba ulang dalam proses yang sama dan tidak ditulis sebagai selesai untuk deduplikasi restart.Listener lokal mengikat ke 127.0.0.1:8787. Untuk ingress publik, letakkan reverse proxy di depan port lokal atau tetapkan webhookHost: "0.0.0.0" secara sengaja.Mode Webhook memvalidasi guard permintaan, token rahasia Telegram, dan body JSON sebelum mengembalikan 200 ke Telegram.
OpenClaw kemudian memproses pembaruan secara asinkron melalui lane bot per-chat/per-topik yang sama seperti long polling, sehingga giliran agen yang lambat tidak menahan ACK pengiriman Telegram.Batas, coba ulang, dan target CLI
Batas, coba ulang, dan target CLI
- Default
channels.telegram.textChunkLimitadalah 4000. channels.telegram.chunkMode="newline"lebih memilih batas paragraf (baris kosong) sebelum pemisahan berdasarkan panjang.channels.telegram.mediaMaxMb(default 100) membatasi ukuran media Telegram masuk dan keluar.channels.telegram.mediaGroupFlushMs(default 500) mengontrol berapa lama album/grup media Telegram di-buffer sebelum OpenClaw mendispatch-nya sebagai satu pesan masuk. Naikkan jika bagian album datang terlambat; turunkan untuk mengurangi latensi balasan album.channels.telegram.timeoutSecondsmenimpa timeout klien API Telegram (jika tidak disetel, default grammY berlaku). Klien bot menjepit nilai yang dikonfigurasi di bawah guard permintaan teks/typing keluar 60 detik sehingga grammY tidak membatalkan pengiriman balasan yang terlihat sebelum guard transport dan fallback OpenClaw dapat berjalan. Long polling tetap menggunakan guard permintaangetUpdates45 detik sehingga poll idle tidak ditinggalkan tanpa batas.- Default
channels.telegram.pollingStallThresholdMsadalah120000; sesuaikan antara30000dan600000hanya untuk restart polling-stall positif palsu. - riwayat konteks grup menggunakan
channels.telegram.historyLimitataumessages.groupChat.historyLimit(default 50);0menonaktifkan. - konteks tambahan balasan/kutipan/forward dinormalisasi menjadi satu jendela konteks percakapan yang dipilih ketika Gateway telah mengamati pesan induk; cache pesan yang diamati dipertahankan di samping penyimpanan sesi. Telegram hanya menyertakan satu
reply_to_messagedangkal dalam pembaruan, sehingga rantai yang lebih lama dari cache terbatas pada payload pembaruan Telegram saat ini. - allowlist Telegram terutama membatasi siapa yang dapat memicu agen, bukan batas redaksi konteks tambahan penuh.
- Kontrol riwayat DM:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
- Konfigurasi
channels.telegram.retryberlaku untuk helper pengiriman Telegram (CLI/tools/actions) untuk error API keluar yang dapat dipulihkan. Pengiriman balasan akhir masuk juga menggunakan retry safe-send terbatas untuk kegagalan pra-koneksi Telegram, tetapi tidak mencoba ulang envelope jaringan pasca-kirim yang ambigu yang dapat menduplikasi pesan yang terlihat.
openclaw message poll dan mendukung topik forum:--poll-duration-seconds(5-600)--poll-anonymous--poll-public--thread-iduntuk topik forum (atau gunakan target:topic:)
--presentationdengan blokbuttonsuntuk keyboard inline ketikachannels.telegram.capabilities.inlineButtonsmengizinkannya--pinatau--delivery '{"pin":true}'untuk meminta pengiriman yang disematkan ketika bot dapat menyematkan di chat tersebut--force-documentuntuk mengirim gambar, GIF, dan video keluar sebagai dokumen alih-alih unggahan foto terkompresi, media animasi, atau video
channels.telegram.actions.sendMessage=falsemenonaktifkan pesan Telegram keluar, termasuk pollchannels.telegram.actions.poll=falsemenonaktifkan pembuatan poll Telegram sementara pengiriman reguler tetap diaktifkan
Persetujuan exec di Telegram
Persetujuan exec di Telegram
channels.telegram.execApprovals.enabled(otomatis aktif ketika setidaknya satu pemberi persetujuan dapat di-resolve)channels.telegram.execApprovals.approvers(fallback ke ID owner numerik daricommands.ownerAllowFrom)channels.telegram.execApprovals.target:dm(default) |channel|bothagentFilter,sessionFilter
channels.telegram.allowFrom, groupAllowFrom, dan defaultTo mengontrol siapa yang dapat berbicara dengan bot dan ke mana bot mengirim balasan normal. Itu tidak menjadikan seseorang pemberi persetujuan exec. Pemasangan DM pertama yang disetujui melakukan bootstrap commands.ownerAllowFrom ketika belum ada owner perintah, sehingga penyiapan satu owner tetap berfungsi tanpa menduplikasi ID di bawah execApprovals.approvers.Pengiriman channel menampilkan teks perintah dalam chat; aktifkan channel atau both hanya di grup/topik tepercaya. Ketika prompt masuk ke topik forum, OpenClaw mempertahankan topik untuk prompt persetujuan dan tindak lanjutnya. Persetujuan exec kedaluwarsa setelah 30 menit secara default.Tombol persetujuan inline juga mengharuskan channels.telegram.capabilities.inlineButtons mengizinkan permukaan target (dm, group, atau all). ID persetujuan yang diawali plugin: di-resolve melalui persetujuan plugin; yang lain di-resolve melalui persetujuan exec terlebih dahulu.Lihat Persetujuan exec.Kontrol balasan kesalahan
Saat agen mengalami kesalahan pengiriman atau penyedia, Telegram dapat membalas dengan teks kesalahan atau menekannya. Dua kunci konfigurasi mengontrol perilaku ini:| Kunci | Nilai | Default | Deskripsi |
|---|---|---|---|
channels.telegram.errorPolicy | reply, silent | reply | reply mengirim pesan kesalahan yang ramah ke chat. silent menekan balasan kesalahan sepenuhnya. |
channels.telegram.errorCooldownMs | number (ms) | 60000 | Waktu minimum antarbalasan kesalahan ke chat yang sama. Mencegah spam kesalahan selama gangguan layanan. |
Pemecahan masalah
Bot does not respond to non mention group messages
Bot does not respond to non mention group messages
- Jika
requireMention=false, mode privasi Telegram harus mengizinkan visibilitas penuh.- BotFather:
/setprivacy-> Disable - lalu hapus + tambahkan ulang bot ke grup
- BotFather:
openclaw channels statusmemperingatkan saat konfigurasi mengharapkan pesan grup tanpa mention.openclaw channels status --probedapat memeriksa ID grup numerik eksplisit; wildcard"*"tidak dapat diperiksa keanggotaannya.- uji sesi cepat:
/activation always.
Bot not seeing group messages at all
Bot not seeing group messages at all
- saat
channels.telegram.groupsada, grup harus dicantumkan (atau sertakan"*") - verifikasi keanggotaan bot di grup
- tinjau log:
openclaw logs --followuntuk alasan skip
Commands work partially or not at all
Commands work partially or not at all
- otorisasi identitas pengirim Anda (pairing dan/atau
allowFromnumerik) - otorisasi perintah tetap berlaku bahkan saat kebijakan grup adalah
open setMyCommands faileddenganBOT_COMMANDS_TOO_MUCHberarti menu native memiliki terlalu banyak entri; kurangi perintah Plugin/Skills/kustom atau nonaktifkan menu native- panggilan startup
deleteMyCommands/setMyCommandsdan panggilan pengetikansendChatActiondibatasi dan dicoba ulang sekali melalui fallback transport Telegram saat waktu permintaan habis. Kesalahan jaringan/fetch yang persisten biasanya menunjukkan masalah keterjangkauan DNS/HTTPS keapi.telegram.org
Startup reports unauthorized token
Startup reports unauthorized token
Polling or network instability
Polling or network instability
- Node 22+ + fetch/proxy kustom dapat memicu perilaku abort langsung jika tipe AbortSignal tidak cocok.
- Beberapa host me-resolve
api.telegram.orgke IPv6 terlebih dahulu; egress IPv6 yang rusak dapat menyebabkan kegagalan API Telegram intermiten. - Jika log menyertakan
TypeError: fetch failedatauNetwork request for 'getUpdates' failed!, OpenClaw sekarang mencoba ulang ini sebagai kesalahan jaringan yang dapat dipulihkan. - Selama startup polling, OpenClaw menggunakan ulang probe startup
getMeyang berhasil untuk grammY sehingga runner tidak memerlukangetMekedua sebelumgetUpdatespertama. - Jika
deleteWebhookgagal dengan kesalahan jaringan sementara selama startup polling, OpenClaw melanjutkan ke long polling alih-alih membuat panggilan control-plane pra-polling lain. Webhook yang masih aktif muncul sebagai konflikgetUpdates; OpenClaw kemudian membangun ulang transport Telegram dan mencoba ulang pembersihan webhook. - Jika soket Telegram didaur ulang dalam cadence tetap yang singkat, periksa
channels.telegram.timeoutSecondsyang rendah; klien bot menjepit nilai yang dikonfigurasi di bawah penjaga permintaan outbound dangetUpdates, tetapi rilis lama dapat membatalkan setiap polling atau balasan saat ini disetel di bawah penjaga tersebut. - Jika log menyertakan
Polling stall detected, OpenClaw memulai ulang polling dan membangun ulang transport Telegram setelah 120 detik tanpa liveness long-poll yang selesai secara default. openclaw channels status --probedanopenclaw doctormemperingatkan saat akun polling yang berjalan belum menyelesaikangetUpdatessetelah masa tenggang startup, saat akun webhook yang berjalan belum menyelesaikansetWebhooksetelah masa tenggang startup, atau saat aktivitas transport polling terakhir yang berhasil sudah usang.- Tingkatkan
channels.telegram.pollingStallThresholdMshanya saat panggilangetUpdatesberdurasi panjang sehat tetapi host Anda masih melaporkan restart polling-stall palsu. Stall persisten biasanya menunjuk ke masalah proxy, DNS, IPv6, atau egress TLS antara host danapi.telegram.org. - Telegram juga menghormati env proxy proses untuk transport Bot API, termasuk
HTTP_PROXY,HTTPS_PROXY,ALL_PROXY, dan varian huruf kecilnya.NO_PROXY/no_proxymasih dapat melewatiapi.telegram.org. - Jika proxy terkelola OpenClaw dikonfigurasi melalui
OPENCLAW_PROXY_URLuntuk lingkungan layanan dan tidak ada env proxy standar, Telegram juga menggunakan URL tersebut untuk transport Bot API. - Pada host VPS dengan egress/TLS langsung yang tidak stabil, rutekan panggilan API Telegram melalui
channels.telegram.proxy:
- Node 22+ menggunakan default
autoSelectFamily=true(kecuali WSL2). Urutan hasil DNS Telegram menghormatiOPENCLAW_TELEGRAM_DNS_RESULT_ORDER, laluchannels.telegram.network.dnsResultOrder, lalu default proses sepertiNODE_OPTIONS=--dns-result-order=ipv4first; jika tidak ada yang berlaku, Node 22+ fallback keipv4first. - Jika host Anda adalah WSL2 atau secara eksplisit bekerja lebih baik dengan perilaku hanya IPv4, paksa pemilihan family:
- Jawaban rentang benchmark RFC 2544 (
198.18.0.0/15) sudah diizinkan untuk unduhan media Telegram secara default. Jika fake-IP tepercaya atau proxy transparan menulis ulangapi.telegram.orgke alamat privat/internal/special-use lain selama unduhan media, Anda dapat ikut serta ke bypass khusus Telegram:
- Opt-in yang sama tersedia per akun di
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - Jika proxy Anda me-resolve host media Telegram ke
198.18.x.x, biarkan flag berbahaya tetap nonaktif terlebih dahulu. Media Telegram sudah mengizinkan rentang benchmark RFC 2544 secara default.
- Override lingkungan (sementara):
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first
- Validasi jawaban DNS:
Referensi konfigurasi
Referensi utama: Referensi konfigurasi - Telegram.High-signal Telegram fields
High-signal Telegram fields
- startup/auth:
enabled,botToken,tokenFile,accounts.*(tokenFileharus menunjuk ke file reguler; symlink ditolak) - kontrol akses:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*,bindings[]tingkat atas (type: "acp") - persetujuan exec:
execApprovals,accounts.*.execApprovals - perintah/menu:
commands.native,commands.nativeSkills,customCommands - threading/balasan:
replyToMode,dm.threadReplies,direct.*.threadReplies - streaming:
streaming(pratinjau),streaming.preview.toolProgress,blockStreaming - pemformatan/pengiriman:
textChunkLimit,chunkMode,linkPreview,responsePrefix - media/jaringan:
mediaMaxMb,mediaGroupFlushMs,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - root API kustom:
apiRoot(hanya root Bot API; jangan sertakan/bot<TOKEN>) - webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost - tindakan/kapabilitas:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker - reaksi:
reactionNotifications,reactionLevel - kesalahan:
errorPolicy,errorCooldownMs - penulisan/riwayat:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit
channels.telegram.defaultAccount (atau sertakan channels.telegram.accounts.default) untuk membuat routing default eksplisit. Jika tidak, OpenClaw fallback ke ID akun ternormalisasi pertama dan openclaw doctor memperingatkan. Akun bernama mewarisi channels.telegram.allowFrom / groupAllowFrom, tetapi bukan nilai accounts.default.*.