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 channel
Diagnostik lintas-channel dan panduan perbaikan.
Konfigurasi gateway
Pola dan contoh konfigurasi channel lengkap.
Penyiapan cepat
Buat token bot di BotFather
Buka Telegram dan chat dengan @BotFather (pastikan handle-nya persis
@BotFather).Jalankan /newbot, ikuti petunjuknya, lalu 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 mulai gateway.Urutan resolusi token memperhitungkan akun. Dalam praktiknya, nilai config lebih diutamakan daripada 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 dari berikut ini:
- nonaktifkan privacy mode melalui
/setprivacy, atau - jadikan bot sebagai admin grup.
Izin grup
Izin grup
Status admin dikendalikan dalam pengaturan grup Telegram.Bot admin menerima semua pesan grup, yang berguna untuk perilaku grup yang selalu aktif.
Toggle BotFather yang berguna
Toggle BotFather yang berguna
/setjoingroupsuntuk mengizinkan/menolak penambahan ke grup/setprivacyuntuk perilaku visibilitas grup
Kontrol akses dan aktivasi
- Kebijakan DM
- Kebijakan grup dan allowlist
- Perilaku mention
channels.telegram.dmPolicy mengontrol akses pesan langsung:pairing(default)allowlist(memerlukan setidaknya satu ID pengirim diallowFrom)open(mengharuskanallowFrommenyertakan"*")disabled
channels.telegram.allowFrom menerima ID pengguna Telegram numerik. Prefiks telegram: / tg: diterima dan dinormalisasi.
dmPolicy: "allowlist" dengan allowFrom kosong memblokir semua DM dan ditolak oleh validasi config.
Onboarding menerima input @username dan meresolusikannya ke ID numerik.
Jika Anda melakukan upgrade dan config Anda berisi entri allowlist @username, jalankan openclaw doctor --fix untuk meresolusikannya (best-effort; memerlukan token bot Telegram).
Jika sebelumnya Anda mengandalkan 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 umum: persetujuan pairing DM tidak berarti “pengirim ini diotorisasi di mana saja”.
Pairing hanya memberikan akses DM. Otorisasi pengirim grup tetap berasal dari allowlist config yang eksplisit.
Jika Anda ingin “saya diotorisasi sekali lalu 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.
- Routing bersifat deterministik: balasan inbound Telegram kembali ke Telegram (model tidak memilih channel).
- Pesan inbound dinormalisasi ke envelope channel 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 pengurutan per-chat/per-thread. Sink runner secara keseluruhan menggunakan konkurensi
agents.defaults.maxConcurrent. - Telegram Bot API tidak memiliki dukungan tanda terima baca (
sendReadReceiptstidak berlaku).
Referensi fitur
Pratinjau live stream (edit pesan)
Pratinjau live stream (edit pesan)
OpenClaw dapat melakukan streaming balasan parsial secara real time:
- chat langsung: pesan pratinjau +
editMessageText - grup/topik: pesan pratinjau +
editMessageText
channels.telegram.streamingadalahoff | partial | block | progress(default:partial)progressdipetakan kepartialdi Telegram (kompatibel dengan penamaan lintas-channel)- nilai lama
channels.telegram.streamModedan nilai booleanstreamingdipetakan otomatis
- DM: OpenClaw mempertahankan pesan pratinjau yang sama dan melakukan edit final di tempatnya (tanpa pesan kedua)
- grup/topik: OpenClaw mempertahankan pesan pratinjau yang sama dan melakukan edit final di tempatnya (tanpa pesan kedua)
sendMessage + editMessageText.Streaming reasoning khusus Telegram:/reasoning streammengirim reasoning ke pratinjau live saat sedang menghasilkan- jawaban final dikirim tanpa teks reasoning
Pemformatan dan fallback HTML
Pemformatan dan fallback HTML
Teks outbound menggunakan Telegram
parse_mode: "HTML".- Teks bergaya Markdown dirender menjadi HTML aman untuk Telegram.
- HTML model mentah di-escape untuk mengurangi kegagalan parse Telegram.
- Jika Telegram menolak HTML yang telah diparse, OpenClaw mencoba ulang sebagai teks biasa.
channels.telegram.linkPreview: false.Perintah native dan perintah kustom
Perintah native dan perintah kustom
Registrasi menu perintah Telegram ditangani saat startup dengan Aturan:Perintah pairing perangkat (plugin
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/duplikasi dilewati dan dicatat di log
- perintah kustom hanya entri menu; tidak otomatis mengimplementasikan perilaku
- perintah plugin/skill 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/skill/kustom atau nonaktifkanchannels.telegram.commands.native.setMyCommands faileddengan kesalahan jaringan/fetch biasanya berarti DNS/HTTPS outbound keapi.telegram.orgdiblokir.
Perintah pairing perangkat (plugin device-pair)
Saat plugin device-pair terpasang:/pairmenghasilkan kode penyiapan- tempelkan kode di aplikasi iOS
/pair pendingmencantumkan permintaan yang tertunda (termasuk role/scopes)- setujui permintaannya:
/pair approve <requestId>untuk persetujuan eksplisit/pair approvesaat hanya ada satu permintaan tertunda/pair approve latestuntuk yang paling baru
scopes: []; token operator apa pun yang diserahkan tetap dibatasi pada operator.approvals, operator.read, operator.talk.secrets, dan operator.write. Pemeriksaan scope bootstrap berawalan role, sehingga allowlist operator tersebut hanya memenuhi permintaan operator; role non-operator tetap memerlukan scope di bawah prefiks role mereka sendiri.Jika perangkat mencoba lagi dengan detail auth yang berubah (misalnya role/scopes/public key), permintaan tertunda sebelumnya akan digantikan dan permintaan baru menggunakan requestId yang berbeda. Jalankan kembali /pair pending sebelum menyetujui.Detail selengkapnya: Pairing.Tombol inline
Tombol inline
Konfigurasikan cakupan keyboard inline:Override per akun:Cakupan:Klik callback diteruskan ke agent sebagai teks:
offdmgroupallallowlist(default)
capabilities: ["inlineButtons"] lama dipetakan ke inlineButtons: "all".Contoh aksi pesan:callback_data: <value>Aksi pesan Telegram untuk agent dan otomatisasi
Aksi pesan Telegram untuk agent dan otomatisasi
Aksi tool Telegram meliputi:
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 config/secret yang aktif (startup/reload), sehingga jalur aksi tidak melakukan resolusi ulang SecretRef ad-hoc untuk setiap pengiriman.Semantik penghapusan reaction: /tools/reactionsTag reply threading
Tag reply threading
Telegram mendukung tag reply threading eksplisit dalam output yang dihasilkan:
[[reply_to_current]]membalas pesan yang memicu[[reply_to:<id>]]membalas ID pesan Telegram tertentu
channels.telegram.replyToMode mengontrol penanganannya:off(default)firstall
off menonaktifkan reply threading 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 untuk topik forum di grup dan supergroup.Spawn ACP terikat thread dari chat:
- kunci sesi topik menambahkan
:topic:<threadId> - balasan dan typing menargetkan thread topik
- jalur config topik:
channels.telegram.groups.<chatId>.topics.<threadId>
threadId=1):- 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 dari default grup.Routing agent per-topik: Setiap topik dapat dirutekan ke agent yang berbeda dengan menetapkan 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 membinding 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 menggunakan routing DM tetapi memakai kunci sesi/target balasan yang sadar thread.
Audio, video, dan stiker
Audio, video, dan stiker
Pesan audio
Telegram membedakan voice note dan file audio.- default: perilaku file audio
- tag
[[audio_as_voice]]di balasan agent untuk memaksa pengiriman sebagai voice note
Pesan video
Telegram membedakan file video dan video note.Contoh aksi pesan:Stiker
Penanganan stiker inbound:- 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 reaction
Notifikasi reaction
Reaction Telegram datang sebagai update
message_reaction (terpisah dari payload pesan).Saat diaktifkan, OpenClaw mengantrikan 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 reaction pengguna terhadap pesan yang dikirim bot (best-effort melalui cache pesan terkirim).- Event reaction tetap mematuhi kontrol akses Telegram (
dmPolicy,allowFrom,groupPolicy,groupAllowFrom); pengirim yang tidak diotorisasi dibuang. - Telegram tidak menyediakan ID thread dalam update reaction.
- grup non-forum dirutekan ke sesi chat grup
- grup forum dirutekan ke sesi topik umum grup (
:topic:1), bukan ke topik asal yang tepat
allowed_updates untuk polling/webhook otomatis menyertakan message_reaction.Reaction ack
Reaction ack
ackReaction mengirim emoji pengakuan saat OpenClaw sedang memproses pesan inbound.Urutan resolusi:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- fallback emoji identitas agent (
agents.list[].identity.emoji, jika tidak ”👀”)
- Telegram mengharapkan emoji unicode (misalnya ”👀”).
- Gunakan
""untuk menonaktifkan reaction bagi suatu channel atau akun.
Penulisan config dari event dan perintah Telegram
Penulisan config dari event dan perintah Telegram
Penulisan config channel diaktifkan secara default (
configWrites !== false).Penulisan yang dipicu Telegram meliputi:- event migrasi grup (
migrate_to_chat_id) untuk memperbaruichannels.telegram.groups /config setdan/config unset(memerlukan enablement perintah)
Long polling vs webhook
Long polling vs webhook
Default: long polling.Mode webhook:
- atur
channels.telegram.webhookUrl - atur
channels.telegram.webhookSecret(wajib saat webhook URL diatur) - 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, tempatkan reverse proxy di depan dan arahkan webhookUrl ke URL publik.
Atur 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"lebih memilih batas paragraf (baris kosong) sebelum pemisahan berdasarkan panjang.channels.telegram.mediaMaxMb(default 100) membatasi ukuran media Telegram inbound dan outbound.channels.telegram.timeoutSecondsmenimpa timeout klien API Telegram (jika tidak diatur, default grammY berlaku).- riwayat konteks grup menggunakan
channels.telegram.historyLimitataumessages.groupChat.historyLimit(default 50);0menonaktifkan. - konteks tambahan reply/quote/forward saat ini diteruskan sebagaimana diterima.
- allowlist Telegram terutama membatasi siapa yang dapat memicu agent, 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) pada kesalahan API outbound 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:)
--buttonsuntuk keyboard inline saatchannels.telegram.capabilities.inlineButtonsmengizinkannya--force-documentuntuk mengirim gambar dan GIF outbound sebagai dokumen alih-alih unggahan foto terkompresi atau media animasi
channels.telegram.actions.sendMessage=falsemenonaktifkan pesan Telegram outbound, termasuk pollchannels.telegram.actions.poll=falsemenonaktifkan pembuatan poll Telegram sambil tetap membiarkan pengiriman reguler aktif
Persetujuan exec di Telegram
Persetujuan exec di Telegram
Telegram mendukung persetujuan exec di DM approver dan secara opsional dapat memposting prompt persetujuan di chat atau topik asal.Jalur config:
channels.telegram.execApprovals.enabledchannels.telegram.execApprovals.approvers(opsional; fallback ke ID pemilik numerik yang diinferensikan dariallowFromdandefaultTolangsung jika memungkinkan)channels.telegram.execApprovals.target(dm|channel|both, default:dm)agentFilter,sessionFilter
enabled tidak diatur atau "auto" dan setidaknya satu approver dapat diresolusikan, baik dari execApprovals.approvers maupun dari config pemilik numerik akun (allowFrom dan defaultTo direct-message). Atur enabled: false untuk menonaktifkan Telegram sebagai klien persetujuan native secara eksplisit. Jika tidak, permintaan persetujuan akan fallback ke rute persetujuan terkonfigurasi lainnya atau kebijakan fallback persetujuan exec.Telegram juga merender tombol persetujuan bersama yang digunakan oleh channel chat lain. Adapter Telegram native terutama menambahkan routing DM approver, fanout channel/topik, dan petunjuk mengetik sebelum pengiriman.
Saat tombol tersebut ada, itulah UX persetujuan utama; OpenClaw
seharusnya hanya menyertakan perintah /approve manual ketika hasil tool menyatakan
persetujuan chat tidak tersedia atau persetujuan manual adalah satu-satunya jalur.Aturan pengiriman:target: "dm"hanya mengirim prompt persetujuan ke DM approver yang teresolusikantarget: "channel"mengirim prompt kembali ke chat/topik Telegram asaltarget: "both"mengirim ke DM approver dan chat/topik asal
/approve dan tidak dapat menggunakan tombol persetujuan Telegram.Perilaku resolusi persetujuan:- ID berprefiks
plugin:selalu diresolusikan melalui persetujuan plugin. - ID persetujuan lainnya mencoba
exec.approval.resolveterlebih dahulu. - Jika Telegram juga diotorisasi untuk persetujuan plugin dan gateway mengatakan
persetujuan exec tidak dikenal/kedaluwarsa, Telegram mencoba ulang satu kali melalui
plugin.approval.resolve. - Penolakan/kesalahan persetujuan exec yang nyata tidak diam-diam diteruskan ke resolusi persetujuan plugin.
channel atau both hanya di grup/topik tepercaya. Saat prompt mendarat di topik forum, OpenClaw mempertahankan topik tersebut baik untuk prompt persetujuan maupun tindak lanjut pasca-persetujuan. Persetujuan exec kedaluwarsa setelah 30 menit secara default.Tombol persetujuan inline juga bergantung pada channels.telegram.capabilities.inlineButtons yang mengizinkan permukaan target (dm, group, atau all).Dokumentasi terkait: Persetujuan execKontrol balasan error
Saat agent mengalami error pengiriman atau provider, Telegram dapat membalas dengan teks error tersebut atau menekannya. Dua kunci config mengontrol perilaku ini:| Key | Values | Default | Description |
|---|---|---|---|
channels.telegram.errorPolicy | reply, silent | reply | reply mengirim pesan error yang ramah ke chat. silent sepenuhnya menekan balasan error. |
channels.telegram.errorCooldownMs | number (ms) | 60000 | Waktu minimum antar balasan error ke chat yang sama. Mencegah spam error selama gangguan. |
Pemecahan masalah
Bot tidak merespons pesan grup tanpa mention
Bot tidak merespons pesan grup tanpa mention
- Jika
requireMention=false, mode privasi Telegram harus mengizinkan visibilitas penuh.- BotFather:
/setprivacy-> Disable - lalu keluarkan + tambahkan kembali bot ke grup
- BotFather:
openclaw channels statusmemberi peringatan saat config mengharapkan pesan grup tanpa mention.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 tercantum (atau menyertakan"*") - verifikasi keanggotaan bot di grup
- tinjau log:
openclaw logs --followuntuk alasan dilewati
Perintah hanya sebagian berfungsi atau tidak berfungsi sama sekali
Perintah hanya sebagian berfungsi atau tidak berfungsi sama sekali
- otorisasi identitas pengirim Anda (pairing dan/atau
allowFromnumerik) - otorisasi perintah tetap berlaku meskipun kebijakan grup adalah
open setMyCommands faileddenganBOT_COMMANDS_TOO_MUCHberarti menu native memiliki terlalu banyak entri; kurangi perintah plugin/skill/kustom atau nonaktifkan menu nativesetMyCommands faileddengan kesalahan jaringan/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 AbortSignal tidak cocok.
- Beberapa host meresolusikan
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. - Pada host VPS dengan egress/TLS langsung yang tidak stabil, rute panggilan API Telegram melalui
channels.telegram.proxy:
- Default Node 22+ adalah
autoSelectFamily=true(kecuali WSL2) dandnsResultOrder=ipv4first. - Jika host Anda adalah WSL2 atau memang 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 proxy IP palsu atau transparan tepercaya menulis ulangapi.telegram.orgke alamat private/internal/special-use lain saat unduhan media, Anda dapat memilih bypass khusus Telegram berikut:
- Opsi ikut serta yang sama juga tersedia per akun di
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - Jika proxy Anda meresolusikan host media Telegram ke
198.18.x.x, biarkan flag berbahaya itu nonaktif terlebih dahulu. Media Telegram sudah mengizinkan rentang benchmark RFC 2544 secara default.
- Override environment (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 channel. -
channels.telegram.botToken: token bot (BotFather). -
channels.telegram.tokenFile: baca token dari path file reguler. 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.openmengharuskan"*".openclaw doctor --fixdapat meresolusikan entri@usernamelama ke 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 CLI--deliverketika 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 meresolusikan entri@usernamelama ke 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, atur
channels.telegram.defaultAccount(atau sertakanchannels.telegram.accounts.default) untuk membuat routing default menjadi eksplisit. - Jika keduanya tidak diatur, OpenClaw fallback ke ID akun pertama yang dinormalisasi dan
openclaw doctormemberi 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 diatur. - Akun bernama tidak mewarisi
channels.telegram.accounts.default.allowFrom/groupAllowFrom.
- Saat dua atau lebih ID akun dikonfigurasi, atur
-
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 gating mention.channels.telegram.groups.<id>.skills: filter skill (hilangkan = semua skill, 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: rute topik ini ke agent tertentu (menimpa routing 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 gating mention 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: rute topik DM ke agent 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 saatchannels.telegram.allowFromatauchannels.telegram.defaultTolangsung sudah mengidentifikasi pemilik. -
channels.telegram.execApprovals.target:dm | channel | both(default:dm).channeldanbothmempertahankan topik Telegram asal jika ada. -
channels.telegram.execApprovals.agentFilter: filter ID agent 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 routing persetujuan exec Telegram dan otorisasi approver. -
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 native skills Telegram. -
channels.telegram.replyToMode:off | first | all(default:off). -
channels.telegram.textChunkLimit: ukuran potongan outbound (karakter). -
channels.telegram.chunkMode:length(default) ataunewlineuntuk memisah pada baris kosong (batas paragraf) sebelum pemotongan berdasarkan panjang. -
channels.telegram.linkPreview: toggle pratinjau tautan untuk pesan outbound (default: true). -
channels.telegram.streaming:off | partial | block | progress(pratinjau live stream; default:partial;progressdipetakan kepartial;blockadalah kompatibilitas mode pratinjau lama). Preview streaming Telegram menggunakan satu pesan pratinjau yang diedit di tempat. -
channels.telegram.mediaMaxMb: batas media Telegram inbound/outbound (MB, default: 100). -
channels.telegram.retry: kebijakan retry untuk helper pengiriman Telegram (CLI/tools/actions) pada kesalahan API outbound yang dapat dipulihkan (attempts, minDelayMs, maxDelayMs, jitter). -
channels.telegram.network.autoSelectFamily: timpa autoSelectFamily Node (true=aktifkan, false=nonaktifkan). Default aktif di Node 22+, dengan WSL2 default nonaktif. -
channels.telegram.network.dnsResultOrder: timpa urutan hasil DNS (ipv4firstatauverbatim). Defaultipv4firstdi Node 22+. -
channels.telegram.network.dangerouslyAllowPrivateNetwork: opsi berbahaya untuk lingkungan fake-IP atau proxy transparan tepercaya di mana unduhan media Telegram meresolusikanapi.telegram.orgke alamat private/internal/special-use di luar izin rentang benchmark 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 diatur). -
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: gate reaction tool Telegram. -
channels.telegram.actions.sendMessage: gate pengiriman pesan tool Telegram. -
channels.telegram.actions.deleteMessage: gate penghapusan pesan tool Telegram. -
channels.telegram.actions.sticker: gate aksi stiker Telegram — kirim dan cari (default: false). -
channels.telegram.reactionNotifications:off | own | all— kontrol reaction mana yang memicu event sistem (default:ownsaat tidak diatur). -
channels.telegram.reactionLevel:off | ack | minimal | extensive— kontrol kemampuan reaction agent (default:minimalsaat tidak diatur). -
channels.telegram.errorPolicy:reply | silent— kontrol perilaku balasan error (default:reply). Override per-akun/grup/topik didukung. -
channels.telegram.errorCooldownMs: minimum ms antar balasan error ke chat yang sama (default:60000). Mencegah spam error selama gangguan. - Referensi konfigurasi - Telegram
- 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 - streaming:
streaming(pratinjau),blockStreaming - pemformatan/pengiriman:
textChunkLimit,chunkMode,linkPreview,responsePrefix - media/jaringan:
mediaMaxMb,timeoutSeconds,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost - aksi/kapabilitas:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker - reaction:
reactionNotifications,reactionLevel - error:
errorPolicy,errorCooldownMs - penulisan/riwayat:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit