Telegram (Bot API)
Status: siap produksi untuk DM bot + grup melalui grammY. Long polling adalah mode default; mode Webhook bersifat opsional.Pairing
Kebijakan DM default untuk Telegram adalah pairing.
Pemecahan masalah kanal
Diagnostik lintas kanal dan playbook perbaikan.
Konfigurasi Gateway
Pola dan contoh konfigurasi kanal lengkap.
Penyiapan cepat
Buat token bot di BotFather
Buka Telegram dan mulai chat dengan @BotFather (pastikan handle-nya tepat
@BotFather).Jalankan /newbot, ikuti petunjuk, dan simpan token-nya.Konfigurasikan token dan kebijakan DM
TELEGRAM_BOT_TOKEN=... (hanya akun default).
Telegram tidak menggunakan openclaw channels login telegram; konfigurasikan token di config/env, lalu jalankan gateway.Urutan resolusi token memperhatikan akun. Dalam praktiknya, nilai config menang atas fallback env, dan
TELEGRAM_BOT_TOKEN hanya berlaku untuk akun default.Pengaturan di sisi Telegram
Mode privasi dan visibilitas grup
Mode privasi dan visibilitas grup
Bot Telegram secara default menggunakan Privacy Mode, yang membatasi pesan grup yang mereka terima.Jika bot harus dapat melihat semua pesan grup, lakukan salah satu hal berikut:
- nonaktifkan privacy mode melalui
/setprivacy, atau - jadikan bot sebagai admin grup.
Izin grup
Izin grup
Status admin dikendalikan di pengaturan grup Telegram.Bot admin menerima semua pesan grup, yang berguna untuk perilaku grup yang selalu aktif.
Tombol BotFather yang berguna
Tombol BotFather yang berguna
/setjoingroupsuntuk mengizinkan/menolak penambahan ke grup/setprivacyuntuk perilaku visibilitas grup
Kontrol akses dan aktivasi
- Kebijakan DM
- Kebijakan grup dan allowlist
- Perilaku penyebutan
channels.telegram.dmPolicy mengendalikan akses pesan langsung:pairing(default)allowlist(memerlukan setidaknya satu ID pengirim diallowFrom)open(memerlukanallowFrommenyertakan"*")disabled
channels.telegram.allowFrom menerima ID pengguna Telegram numerik. Prefix telegram: / tg: diterima dan dinormalisasi.
dmPolicy: "allowlist" dengan allowFrom kosong memblokir semua DM dan ditolak oleh validasi config.
Penyiapan hanya meminta ID pengguna numerik.
Jika Anda melakukan upgrade dan config Anda berisi entri allowlist @username, jalankan openclaw doctor --fix untuk menyelesaikannya (best-effort; 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 saat dmPolicy: "allowlist" belum memiliki ID eksplisit).Untuk bot dengan satu pemilik, gunakan dmPolicy: "allowlist" dengan ID allowFrom numerik yang eksplisit agar kebijakan akses tetap tahan lama di config (alih-alih bergantung pada persetujuan pairing sebelumnya).Kebingungan yang umum: persetujuan pairing DM tidak berarti “pengirim ini berwenang di mana-mana”.
Pairing hanya memberikan akses DM. Otorisasi pengirim grup tetap berasal dari allowlist config yang eksplisit.
Jika Anda ingin “saya diotorisasi sekali dan baik DM maupun perintah grup berfungsi”, masukkan ID pengguna Telegram numerik Anda ke channels.telegram.allowFrom.Menemukan ID pengguna Telegram Anda
Lebih aman (tanpa bot pihak ketiga):- Kirim DM ke bot Anda.
- Jalankan
openclaw logs --follow. - Baca
from.id.
@userinfobot atau @getidsbot.Perilaku runtime
- Telegram dimiliki oleh proses gateway.
- Perutean bersifat deterministik: balasan masuk Telegram kembali ke Telegram (model tidak memilih kanal).
- Pesan masuk dinormalisasi ke envelope kanal bersama dengan metadata balasan dan placeholder media.
- Sesi grup diisolasi berdasarkan ID grup. Topik forum menambahkan
:topic:<threadId>agar topik tetap terisolasi. - Pesan DM dapat membawa
message_thread_id; OpenClaw merutekannya dengan kunci sesi yang sadar thread dan mempertahankan ID thread untuk balasan. - Long polling menggunakan grammY runner dengan sequencing per-chat/per-thread. Sink concurrency runner secara keseluruhan menggunakan
agents.defaults.maxConcurrent. - Pemicu restart watchdog long polling terjadi setelah 120 detik tanpa liveness
getUpdatesyang selesai secara default. Tingkatkanchannels.telegram.pollingStallThresholdMshanya jika deployment Anda masih mengalami restart polling-stall palsu selama pekerjaan yang berjalan lama. Nilainya dalam milidetik dan diizinkan dari30000hingga600000; override per-akun didukung. - Telegram Bot API tidak memiliki dukungan tanda telah dibaca (
sendReadReceiptstidak berlaku).
Referensi fitur
Pratinjau stream langsung (pengeditan pesan)
Pratinjau stream langsung (pengeditan pesan)
OpenClaw dapat melakukan streaming balasan parsial secara real time:
- obrolan langsung: pesan pratinjau +
editMessageText - grup/topik: pesan pratinjau +
editMessageText
channels.telegram.streamingadalahoff | partial | block | progress(default:partial)progressdipetakan kepartialdi Telegram (kompatibilitas dengan penamaan lintas kanal)streaming.preview.toolProgressmengendalikan apakah pembaruan alat/progres menggunakan kembali pesan pratinjau yang sama yang diedit (default:true). Setelfalseuntuk mempertahankan pesan alat/progres yang terpisah.- nilai boolean
channels.telegram.streamModedanstreaminglama dipetakan otomatis
- DM: OpenClaw mempertahankan pesan pratinjau yang sama dan melakukan edit final di tempat (tanpa pesan kedua)
- grup/topik: OpenClaw mempertahankan pesan pratinjau yang sama dan melakukan edit final di tempat (tanpa pesan kedua)
sendMessage + editMessageText.Stream reasoning khusus Telegram:/reasoning streammengirim reasoning ke pratinjau langsung saat menghasilkan- jawaban akhir dikirim tanpa teks reasoning
Pemformatan dan fallback HTML
Pemformatan dan fallback HTML
Teks keluar menggunakan Telegram
parse_mode: "HTML".- Teks bergaya Markdown dirender menjadi HTML yang aman untuk Telegram.
- HTML mentah dari model di-escape untuk mengurangi kegagalan parsing Telegram.
- Jika Telegram menolak HTML yang sudah diparse, OpenClaw mencoba ulang sebagai teks biasa.
channels.telegram.linkPreview: false.Perintah native dan perintah kustom
Perintah native dan perintah kustom
Pendaftaran menu perintah Telegram ditangani saat startup dengan Aturan:Perintah pairing perangkat (
Saat Plugin
setMyCommands.Default perintah native:commands.native: "auto"mengaktifkan perintah native untuk Telegram
- nama dinormalisasi (hapus
/di depan, huruf kecil) - pola valid:
a-z,0-9,_, panjang1..32 - perintah kustom tidak dapat menimpa perintah native
- konflik/duplikat dilewati dan dicatat ke log
- perintah kustom hanyalah entri menu; mereka tidak otomatis mengimplementasikan perilaku
- perintah plugin/Skills tetap dapat berfungsi saat diketik meskipun tidak ditampilkan di menu Telegram
setMyCommands faileddenganBOT_COMMANDS_TOO_MUCHberarti menu Telegram masih meluap setelah dipangkas; kurangi perintah plugin/Skills/kustom atau nonaktifkanchannels.telegram.commands.native.setMyCommands faileddengan kesalahan network/fetch biasanya berarti DNS/HTTPS keluar keapi.telegram.orgdiblokir.
Perintah pairing perangkat (device-pair Plugin)
Saat Plugin device-pair terpasang:/pairmenghasilkan kode penyiapan- tempel kode di aplikasi iOS
/pair pendingmenampilkan daftar permintaan yang tertunda (termasuk peran/scope)- setujui permintaan:
/pair approve <requestId>untuk persetujuan eksplisit/pair approvejika hanya ada satu permintaan tertunda/pair approve latestuntuk yang paling baru
scopes: []; token operator yang diserahkan tetap dibatasi ke operator.approvals, operator.read, operator.talk.secrets, dan operator.write. Pemeriksaan scope bootstrap menggunakan prefix peran, sehingga allowlist operator itu hanya memenuhi permintaan operator; peran non-operator tetap memerlukan scope di bawah prefix perannya sendiri.Jika sebuah perangkat mencoba ulang dengan detail auth yang berubah (misalnya peran/scope/public key), permintaan tertunda sebelumnya akan digantikan dan permintaan baru menggunakan requestId yang berbeda. Jalankan kembali /pair pending sebelum menyetujui.Detail lebih lanjut: Pairing.Tombol inline
Tombol inline
Konfigurasikan cakupan keyboard inline:Override per akun:Cakupan:Klik callback diteruskan ke agen sebagai teks:
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
Aksi alat Telegram mencakup:
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 pemfilteran:channels.telegram.actions.sendMessagechannels.telegram.actions.deleteMessagechannels.telegram.actions.reactionschannels.telegram.actions.sticker(default: disabled)
edit dan topic-create saat ini diaktifkan secara default dan tidak memiliki toggle channels.telegram.actions.* terpisah.
Pengiriman runtime menggunakan snapshot config/secrets aktif (startup/reload), sehingga jalur aksi tidak melakukan re-resolve SecretRef ad hoc untuk setiap pengiriman.Semantik penghapusan reaksi: /tools/reactionsTag threading balasan
Tag threading balasan
Telegram mendukung tag threading balasan eksplisit dalam output yang dihasilkan:
[[reply_to_current]]membalas pesan pemicu[[reply_to:<id>]]membalas ID pesan Telegram tertentu
channels.telegram.replyToMode mengendalikan penanganannya:off(default)firstall
off menonaktifkan threading balasan implisit. Tag [[reply_to_*]] eksplisit tetap dihormati.Topik forum dan perilaku thread
Topik forum dan perilaku thread
Supergroup forum:Setiap topik kemudian memiliki kunci sesi sendiri: Ini saat ini dibatasi pada topik forum di grup dan supergroup.Spawn ACP yang terikat ke thread dari chat:
- kunci sesi topik menambahkan
:topic:<threadId> - balasan dan indikator mengetik menargetkan thread topik
- path config topik:
channels.telegram.groups.<chatId>.topics.<threadId>
threadId=1) kasus khusus:- pengiriman pesan menghilangkan
message_thread_id(Telegram menolaksendMessage(...thread_id=1)) - aksi mengetik tetap menyertakan
message_thread_id
requireMention, allowFrom, skills, systemPrompt, enabled, groupPolicy).
agentId hanya untuk topik dan tidak mewarisi default grup.Perutean agen per topik: Setiap topik dapat dirutekan ke agen yang berbeda dengan menyetel agentId di config topik. Ini memberi setiap topik workspace, memori, dan sesi terisolasi sendiri. Contoh:agent:zu:telegram:group:-1001234567890:topic:3Binding topik ACP persisten: Topik forum dapat menyematkan sesi harness ACP melalui binding ACP bertipe tingkat atas:bindings[]dengantype: "acp"danmatch.channel: "telegram"
/acp spawn <agent> --thread here|autodapat mengikat topik Telegram saat ini ke sesi ACP baru.- Pesan topik lanjutan dirutekan langsung ke sesi ACP yang terikat (tidak perlu
/acp steer). - OpenClaw menyematkan pesan konfirmasi spawn di dalam topik setelah binding berhasil.
- Memerlukan
channels.telegram.threadBindings.spawnAcpSessions=true.
MessageThreadIdIsForum
- chat privat dengan
message_thread_idtetap mempertahankan perutean DM tetapi menggunakan kunci sesi/target balasan yang sadar thread.
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 sebagai catatan suara
Pesan video
Telegram membedakan file video dan catatan video.Contoh aksi 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
Reaksi Telegram datang sebagai pembaruan
message_reaction (terpisah dari payload pesan).Saat diaktifkan, OpenClaw mengantrekan peristiwa 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 (best-effort melalui cache pesan terkirim).- Peristiwa reaksi tetap mematuhi kontrol akses Telegram (
dmPolicy,allowFrom,groupPolicy,groupAllowFrom); pengirim yang tidak berwenang dibuang. - Telegram tidak menyediakan ID thread 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 tepat
allowed_updates untuk polling/Webhook otomatis menyertakan message_reaction.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, atau ”👀”)
- Telegram mengharapkan emoji unicode (misalnya ”👀”).
- Gunakan
""untuk menonaktifkan reaksi pada kanal atau akun.
Penulisan config dari peristiwa dan perintah Telegram
Penulisan config dari peristiwa dan perintah Telegram
Penulisan config kanal diaktifkan secara default (
configWrites !== false).Penulisan yang dipicu Telegram mencakup:- peristiwa 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
Default: long polling.Mode Webhook:
- setel
channels.telegram.webhookUrl - setel
channels.telegram.webhookSecret(wajib saat URL Webhook disetel) - opsional
channels.telegram.webhookPath(default/telegram-webhook) - opsional
channels.telegram.webhookHost(default127.0.0.1) - opsional
channels.telegram.webhookPort(default8787)
127.0.0.1:8787.Jika endpoint publik Anda berbeda, letakkan reverse proxy di depan dan arahkan webhookUrl ke URL publik tersebut.
Setel webhookHost (misalnya 0.0.0.0) saat Anda memang membutuhkan ingress eksternal.Batas, retry, dan target CLI
Batas, retry, dan target CLI
- default
channels.telegram.textChunkLimitadalah 4000. channels.telegram.chunkMode="newline"mengutamakan batas paragraf (baris kosong) sebelum pemisahan berdasarkan panjang.channels.telegram.mediaMaxMb(default 100) membatasi ukuran media Telegram masuk dan keluar.channels.telegram.timeoutSecondsmenimpa timeout klien API Telegram (jika tidak disetel, default grammY berlaku).channels.telegram.pollingStallThresholdMsdefault ke120000; setel antara30000dan600000hanya untuk restart polling-stall false-positive.- riwayat konteks grup menggunakan
channels.telegram.historyLimitataumessages.groupChat.historyLimit(default 50);0menonaktifkan. - konteks tambahan balasan/kutipan/terusan saat ini diteruskan sebagaimana diterima.
- allowlist Telegram terutama memfilter siapa yang dapat memicu agen, bukan batas penyuntingan penuh untuk konteks tambahan.
- kontrol riwayat DM:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
- config
channels.telegram.retryberlaku untuk helper pengiriman Telegram (CLI/tools/actions) untuk kesalahan API keluar yang dapat dipulihkan.
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 saatchannels.telegram.capabilities.inlineButtonsmengizinkannya--pinatau--delivery '{"pin":true}'untuk meminta pengiriman yang disematkan saat bot dapat menyematkan di chat tersebut--force-documentuntuk mengirim gambar dan GIF keluar sebagai dokumen alih-alih unggahan foto terkompresi atau media animasi
channels.telegram.actions.sendMessage=falsemenonaktifkan pesan Telegram keluar, termasuk pollchannels.telegram.actions.poll=falsemenonaktifkan pembuatan poll Telegram sambil tetap mengaktifkan pengiriman biasa
Persetujuan exec di Telegram
Persetujuan exec di Telegram
Telegram mendukung persetujuan exec di DM penyetuju dan secara opsional dapat memposting prompt persetujuan di chat atau topik asal.Path config:
channels.telegram.execApprovals.enabledchannels.telegram.execApprovals.approvers(opsional; fallback ke ID pemilik numerik yang disimpulkan dariallowFromdandefaultTolangsung bila memungkinkan)channels.telegram.execApprovals.target(dm|channel|both, default:dm)agentFilter,sessionFilter
enabled tidak disetel atau "auto" dan setidaknya satu penyetuju dapat di-resolve, baik dari execApprovals.approvers maupun dari config pemilik numerik akun (allowFrom dan defaultTo pesan langsung). Setel enabled: false untuk menonaktifkan Telegram sebagai klien persetujuan native secara eksplisit. Jika tidak, permintaan persetujuan menggunakan fallback ke rute persetujuan lain yang dikonfigurasi atau ke kebijakan fallback persetujuan exec.Telegram juga merender tombol persetujuan bersama yang digunakan oleh kanal chat lain. Adaptor Telegram native terutama menambahkan perutean DM penyetuju, fanout channel/topik, dan petunjuk mengetik sebelum pengiriman.
Saat tombol-tombol itu ada, tombol tersebut menjadi UX persetujuan utama; OpenClaw
hanya boleh menyertakan perintah /approve manual ketika hasil alat menyatakan
persetujuan chat tidak tersedia atau persetujuan manual adalah satu-satunya jalur.Aturan pengiriman:target: "dm"mengirim prompt persetujuan hanya ke DM penyetuju yang berhasil di-resolvetarget: "channel"mengirim prompt kembali ke chat/topik Telegram asaltarget: "both"mengirim ke DM penyetuju dan chat/topik asal
/approve dan tidak dapat menggunakan tombol persetujuan Telegram.Perilaku resolusi persetujuan:- ID yang diawali
plugin:selalu di-resolve melalui persetujuan plugin. - ID persetujuan lainnya mencoba
exec.approval.resolveterlebih dahulu. - Jika Telegram juga diotorisasi untuk persetujuan plugin dan gateway menyatakan
persetujuan exec tidak dikenal/kedaluwarsa, Telegram mencoba ulang sekali melalui
plugin.approval.resolve. - Penolakan/kesalahan persetujuan exec yang nyata tidak diam-diam dialihkan ke resolusi persetujuan plugin.
channel atau both hanya di grup/topik tepercaya. Saat prompt masuk ke topik forum, OpenClaw mempertahankan topik tersebut baik untuk prompt persetujuan maupun tindak lanjut pasca-persetujuan. Persetujuan exec default kedaluwarsa setelah 30 menit.Tombol persetujuan inline juga bergantung pada channels.telegram.capabilities.inlineButtons yang mengizinkan permukaan target (dm, group, atau all).Dokumen terkait: Persetujuan execKontrol balasan kesalahan
Saat agen mengalami kesalahan pengiriman atau penyedia, Telegram dapat membalas dengan teks kesalahan atau menekannya. Dua kunci config mengendalikan perilaku ini:| Kunci | Nilai | Default | Deskripsi |
|---|---|---|---|
channels.telegram.errorPolicy | reply, silent | reply | reply mengirim pesan kesalahan yang ramah ke chat. silent menekan seluruh balasan kesalahan. |
channels.telegram.errorCooldownMs | number (ms) | 60000 | Waktu minimum antar balasan kesalahan ke chat yang sama. Mencegah spam kesalahan saat outage. |
Pemecahan masalah
Bot tidak merespons pesan grup tanpa penyebutan
Bot tidak merespons pesan grup tanpa penyebutan
- Jika
requireMention=false, mode privasi Telegram harus mengizinkan visibilitas penuh.- BotFather:
/setprivacy-> Disable - lalu hapus + tambahkan kembali bot ke grup
- BotFather:
openclaw channels statusmemberi peringatan saat config mengharapkan pesan grup tanpa penyebutan.openclaw channels status --probedapat memeriksa ID grup numerik eksplisit; wildcard"*"tidak dapat diperiksa keanggotaannya.- tes sesi cepat:
/activation always.
Bot sama sekali tidak melihat pesan grup
Bot sama sekali tidak melihat pesan grup
- saat
channels.telegram.groupsada, grup harus terdaftar (atau menyertakan"*") - verifikasi keanggotaan bot di grup
- tinjau log:
openclaw logs --followuntuk alasan pengabaian
Perintah bekerja sebagian atau tidak sama sekali
Perintah bekerja sebagian atau tidak sama sekali
- otorisasi identitas pengirim Anda (pairing dan/atau
allowFromnumerik) - otorisasi perintah tetap berlaku walaupun kebijakan grup adalah
open setMyCommands faileddenganBOT_COMMANDS_TOO_MUCHberarti menu native memiliki terlalu banyak entri; kurangi perintah plugin/Skills/kustom atau nonaktifkan menu nativesetMyCommands faileddengan kesalahan network/fetch biasanya menunjukkan masalah keterjangkauan DNS/HTTPS keapi.telegram.org
Polling atau ketidakstabilan jaringan
Polling atau ketidakstabilan jaringan
- Node 22+ + fetch/proxy kustom dapat memicu perilaku abort langsung jika tipe
AbortSignaltidak cocok. - Beberapa host me-resolve
api.telegram.orgke IPv6 terlebih dahulu; egress IPv6 yang rusak dapat menyebabkan kegagalan API Telegram yang intermiten. - Jika log menyertakan
TypeError: fetch failedatauNetwork request for 'getUpdates' failed!, OpenClaw kini mencoba ulang ini sebagai kesalahan jaringan yang dapat dipulihkan. - 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. - Tingkatkan
channels.telegram.pollingStallThresholdMshanya ketika panggilangetUpdatesyang berjalan lama sehat tetapi host Anda tetap melaporkan restart polling-stall palsu. Stall yang persisten biasanya menunjukkan masalah proxy, DNS, IPv6, atau TLS egress antara host danapi.telegram.org. - Pada host VPS dengan egress/TLS langsung yang tidak stabil, rute panggilan API Telegram melalui
channels.telegram.proxy:
- Node 22+ default ke
autoSelectFamily=true(kecuali WSL2) dandnsResultOrder=ipv4first. - Jika host Anda adalah WSL2 atau secara eksplisit bekerja lebih baik dengan perilaku khusus IPv4, paksa pemilihan family:
- Jawaban benchmark-range RFC 2544 (
198.18.0.0/15) sudah diizinkan untuk unduhan media Telegram secara default. Jika fake-IP atau proxy transparan tepercaya menulis ulangapi.telegram.orgke alamat privat/internal/special-use lain selama unduhan media, Anda dapat ikut serta pada bypass khusus Telegram ini:
- Opt-in yang sama juga 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 benchmark range RFC 2544 secara default.
- Override env (sementara):
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first
- Validasi jawaban DNS:
Penunjuk referensi config Telegram
Referensi utama:-
channels.telegram.enabled: aktifkan/nonaktifkan startup kanal. -
channels.telegram.botToken: token bot (BotFather). -
channels.telegram.tokenFile: baca token dari path file biasa. Symlink ditolak. -
channels.telegram.dmPolicy:pairing | allowlist | open | disabled(default: pairing). -
channels.telegram.allowFrom: allowlist DM (ID pengguna Telegram numerik).allowlistmemerlukan setidaknya satu ID pengirim.openmemerlukan"*".openclaw doctor --fixdapat me-resolve entri@usernamelama menjadi ID dan dapat memulihkan entri allowlist dari file pairing-store dalam alur migrasi allowlist. -
channels.telegram.actions.poll: aktifkan atau nonaktifkan pembuatan poll Telegram (default: aktif; tetap memerlukansendMessage). -
channels.telegram.defaultTo: target Telegram default yang digunakan oleh CLI--deliversaat tidak ada--reply-toeksplisit. -
channels.telegram.groupPolicy:open | allowlist | disabled(default: allowlist). -
channels.telegram.groupAllowFrom: allowlist pengirim grup (ID pengguna Telegram numerik).openclaw doctor --fixdapat me-resolve entri@usernamelama menjadi ID. Entri non-numerik diabaikan saat auth. Auth grup tidak menggunakan fallback pairing-store DM (2026.2.25+). -
Prioritas multi-akun:
- Saat dua atau lebih ID akun dikonfigurasi, setel
channels.telegram.defaultAccount(atau sertakanchannels.telegram.accounts.default) untuk membuat perutean default menjadi eksplisit. - Jika keduanya tidak disetel, OpenClaw menggunakan fallback ke ID akun ternormalisasi pertama dan
openclaw doctorakan memberi peringatan. channels.telegram.accounts.default.allowFromdanchannels.telegram.accounts.default.groupAllowFromhanya berlaku untuk akundefault.- Akun bernama mewarisi
channels.telegram.allowFromdanchannels.telegram.groupAllowFromsaat nilai tingkat akun tidak disetel. - Akun bernama tidak mewarisi
channels.telegram.accounts.default.allowFrom/groupAllowFrom.
- Saat dua atau lebih ID akun dikonfigurasi, setel
-
channels.telegram.groups: default per-grup + allowlist (gunakan"*"untuk default global).channels.telegram.groups.<id>.groupPolicy: override per-grup untuk groupPolicy (open | allowlist | disabled).channels.telegram.groups.<id>.requireMention: default pemfilteran penyebutan.channels.telegram.groups.<id>.skills: filter Skills (kosongkan = semua Skills, kosong[]= tidak ada).channels.telegram.groups.<id>.allowFrom: override allowlist pengirim per-grup.channels.telegram.groups.<id>.systemPrompt: system prompt tambahan untuk grup.channels.telegram.groups.<id>.enabled: nonaktifkan grup saatfalse.channels.telegram.groups.<id>.topics.<threadId>.*: override per-topik (field grup +agentIdkhusus topik).channels.telegram.groups.<id>.topics.<threadId>.agentId: rutekan topik ini ke agen tertentu (menimpa perutean tingkat grup dan binding).
-
channels.telegram.groups.<id>.topics.<threadId>.groupPolicy: override per-topik untuk groupPolicy (open | allowlist | disabled). -
channels.telegram.groups.<id>.topics.<threadId>.requireMention: override pemfilteran penyebutan per-topik. -
bindings[]tingkat atas dengantype: "acp"dan ID topik kanonischatId:topic:topicIddimatch.peer.id: field binding topik ACP persisten (lihat ACP Agents). -
channels.telegram.direct.<id>.topics.<threadId>.agentId: rutekan topik DM ke agen tertentu (perilaku sama seperti topik forum). -
channels.telegram.execApprovals.enabled: aktifkan Telegram sebagai klien persetujuan exec berbasis chat untuk akun ini. -
channels.telegram.execApprovals.approvers: ID pengguna Telegram yang diizinkan untuk menyetujui atau menolak permintaan exec. Opsional ketikachannels.telegram.allowFromatauchannels.telegram.defaultTolangsung sudah mengidentifikasi pemilik. -
channels.telegram.execApprovals.target:dm | channel | both(default:dm).channeldanbothmempertahankan topik Telegram asal bila ada. -
channels.telegram.execApprovals.agentFilter: filter ID agen opsional untuk prompt persetujuan yang diteruskan. -
channels.telegram.execApprovals.sessionFilter: filter kunci sesi opsional (substring atau regex) untuk prompt persetujuan yang diteruskan. -
channels.telegram.accounts.<account>.execApprovals: override per-akun untuk perutean persetujuan exec Telegram dan otorisasi penyetuju. -
channels.telegram.capabilities.inlineButtons:off | dm | group | all | allowlist(default: allowlist). -
channels.telegram.accounts.<account>.capabilities.inlineButtons: override per-akun. -
channels.telegram.commands.nativeSkills: aktifkan/nonaktifkan perintah Skills native Telegram. -
channels.telegram.replyToMode:off | first | all(default:off). -
channels.telegram.textChunkLimit: ukuran chunk keluar (karakter). -
channels.telegram.chunkMode:length(default) ataunewlineuntuk memisah pada baris kosong (batas paragraf) sebelum chunking berdasarkan panjang. -
channels.telegram.linkPreview: toggle pratinjau tautan untuk pesan keluar (default: true). -
channels.telegram.streaming:off | partial | block | progress(pratinjau stream langsung; default:partial;progressdipetakan kepartial;blockadalah kompatibilitas mode pratinjau lama). Streaming pratinjau Telegram menggunakan satu pesan pratinjau yang diedit di tempat. -
channels.telegram.streaming.preview.toolProgress: gunakan kembali pesan pratinjau langsung untuk pembaruan alat/progres saat streaming pratinjau aktif (default:true). Setelfalseuntuk mempertahankan pesan alat/progres yang terpisah. -
channels.telegram.mediaMaxMb: batas media Telegram masuk/keluar (MB, default: 100). -
channels.telegram.retry: kebijakan retry untuk helper pengiriman Telegram (CLI/tools/actions) pada kesalahan API keluar yang dapat dipulihkan (attempts, minDelayMs, maxDelayMs, jitter). -
channels.telegram.network.autoSelectFamily: override Node autoSelectFamily (true=aktifkan, false=nonaktifkan). Default aktif pada Node 22+, dengan WSL2 default nonaktif. -
channels.telegram.network.dnsResultOrder: override urutan hasil DNS (ipv4firstatauverbatim). Defaultipv4firstpada Node 22+. -
channels.telegram.network.dangerouslyAllowPrivateNetwork: opt-in berbahaya untuk lingkungan fake-IP atau proxy transparan tepercaya ketika unduhan media Telegram me-resolveapi.telegram.orgke alamat privat/internal/special-use di luar allowance benchmark-range RFC 2544 default. -
channels.telegram.proxy: URL proxy untuk panggilan Bot API (SOCKS/HTTP). -
channels.telegram.webhookUrl: aktifkan mode Webhook (memerlukanchannels.telegram.webhookSecret). -
channels.telegram.webhookSecret: secret Webhook (wajib saat webhookUrl disetel). -
channels.telegram.webhookPath: path Webhook lokal (default/telegram-webhook). -
channels.telegram.webhookHost: host bind Webhook lokal (default127.0.0.1). -
channels.telegram.webhookPort: port bind Webhook lokal (default8787). -
channels.telegram.actions.reactions: filter reaksi alat Telegram. -
channels.telegram.actions.sendMessage: filter pengiriman pesan alat Telegram. -
channels.telegram.actions.deleteMessage: filter penghapusan pesan alat Telegram. -
channels.telegram.actions.sticker: filter aksi stiker Telegram — kirim dan cari (default: false). -
channels.telegram.reactionNotifications:off | own | all— kendalikan reaksi mana yang memicu peristiwa sistem (default:ownbila tidak disetel). -
channels.telegram.reactionLevel:off | ack | minimal | extensive— kendalikan kapabilitas reaksi agen (default:minimalbila tidak disetel). -
channels.telegram.errorPolicy:reply | silent— kendalikan perilaku balasan kesalahan (default:reply). Override per-akun/grup/topik didukung. -
channels.telegram.errorCooldownMs: ms minimum antar balasan kesalahan ke chat yang sama (default:60000). Mencegah spam kesalahan saat outage. - Referensi konfigurasi - Telegram
- startup/auth:
enabled,botToken,tokenFile,accounts.*(tokenFileharus menunjuk ke file biasa; 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 - streaming:
streaming(pratinjau),streaming.preview.toolProgress,blockStreaming - pemformatan/pengiriman:
textChunkLimit,chunkMode,linkPreview,responsePrefix - media/jaringan:
mediaMaxMb,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - Webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost - actions/capabilities:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker - reaksi:
reactionNotifications,reactionLevel - kesalahan:
errorPolicy,errorCooldownMs - penulisan/riwayat:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit